Many thanks to Tristan Morris for creating a beautiful illustrated hardcover print edition of the site

tcc-case-title

Монахиня Хвайда была вызвана в офис учителя Банзена. Он со своим учеником Джишином ожидал её.

Банзен сказал: “Счастливый день для Вас, юная монахиня! Так как Вы получаете удовольствие от поиска скрытых истин и наблюдения за наказанием виновных, у меня для Вас есть развлекательная задача”.

“Я служу ради Храма, а не ради себя”, - ответила Хвайда с обязательным поклоном. Но её живот уже напрягся: без сомнения это было началом её наказания за незаконное проникновение на запретные земли Храма.

“Редкая, но надоедливая ошибка мучает клан Следа Слона уже в течении некоторого времени”, - сказал учитель, передавая монахине распечатку. - “Наши журналы базы данных показывают, что приходит неправильный SQL-запрос, но тщательный поиск по нашему коду нигде не находит такой запрос. Найдите исходник. Я даю Вам неделю”.

Хвайда изучила бумаги: “Нескольких минут должно быть достаточно. Могу ли я взять терминал учителя?”

Брови Банзена взлетели вверх. Они с учеником переглянулись, и он подвинул ноутбук к монахине.

Хвайда изучила распечатку, набрала что-то, посмотрела на экран, снова взглянула на распечатку и так несколько раз. “Здесь”, - сказала она, наконец, повернув экран к учителю. Курсор находился над SQL фрагментом с пропущенной правой скобкой. “Если я вернусь на своё рабочее место, то я смогу проследить использование этого кода и воспроизвести ошибку, которую видели в журналах. Затем мы сможем исправить дефект”.

“Иди”, - сказал Банзен Хвайде. Своему ученику он сказал: “Проследи”.

- - -

Когда они оба подошли к келье Хвайды, Джишин прошептал: “Скорость Вашей диагностики удивительна”.

“Это простая задача”, - сказала Хвайда, передавая распечатку монаху. - “Неправильный запрос начинается с WHERE 1=1. Это пахнет динамической генерацией SQL: и хотя начальное условие тривиально, его значение TRUE позволяет разработчику добавлять любое количество реальных условий в виде простых AND-условий. Я сама использовала этот приём при реализации поисковых форм с дополнительными полями. Когда я узнала его, я стала искать в нашем коде отдельные AND-условия”.

“Не поймите меня неправильно”, - сказал Джишин. - “Я не удивился, что Вы смогли сразу решить задачу. Я удивился, что Вы сделали это, несмотря на предложенную неделю. Это пахнет амбициями: и хотя начальная задача тривиальна, Ваша правдивость позволяет моему учителю доверить Вам любое количество реальных задач”.

Хвайда вздохнула: “Это тоже верно. Если бы я делала вид, что эта проблема достаточно сложна, чтобы потратить на неё дни усилий, то Банзен мог бы подумать, что я либо лгу, либо некомпетентна. Либо мог просто сесть рядом со мной. Это именно то, что он на самом деле хотел обнаружить”.

Джишин кивнул: “Иногда тест служит цели, потому что ответ настолько очевиден.”