Банзен сказал: "Счастливый день для Вас, юная монахиня! Так как Вы получаете удовольствие от поиска скрытых истин и наблюдения за наказанием виновных, у меня для Вас есть развлекательная задача".
"Я служу ради Храма, а не ради себя", - ответила Хвайда с обязательным поклоном. Но её живот уже напрягся: без сомнения это было началом её наказания за незаконное проникновение на запретные земли Храма.
"Редкая, но надоедливая ошибка мучает клан Следа Слона уже в течении некоторого времени", - сказал учитель, передавая монахине распечатку. - "Наши журналы базы данных показывают, что приходит неправильный SQL-запрос, но тщательный поиск по нашему коду нигде не находит такой запрос. Найдите исходник. Я даю Вам неделю".
Хвайда изучила бумаги: "Нескольких минут должно быть достаточно. Могу ли я взять терминал учителя?"
Брови Банзена взлетели вверх. Они с учеником переглянулись, и он подвинул ноутбук к монахине.
Хвайда изучила распечатку, набрала что-то, посмотрела на экран, снова взглянула на распечатку и так несколько раз. "Здесь", - сказала она, наконец, повернув экран к учителю. Курсор находился над SQL фрагментом с пропущенной правой скобкой. "Если я вернусь на своё рабочее место, то я смогу проследить использование этого кода и воспроизвести ошибку, которую видели в журналах. Затем мы сможем исправить дефект".
"Иди", - сказал Банзен Хвайде. Своему ученику он сказал: "Проследи".
Когда они оба подошли к келье Хвайды, Джишин прошептал: "Скорость Вашей диагностики удивительна".
"Это простая задача", - сказала Хвайда, передавая распечатку монаху. - "Неправильный запрос начинается с
WHERE 1=1
. Это пахнет динамической генерацией SQL: и хотя начальное условие тривиально, его значение TRUE
позволяет разработчику добавлять любое количество реальных условий в виде простых AND
-условий. Я сама использовала этот приём при реализации поисковых форм с дополнительными полями. Когда я узнала его, я стала искать в нашем коде отдельные AND
-условия"."Не поймите меня неправильно", - сказал Джишин. - "Я не удивился, что Вы смогли сразу решить задачу. Я удивился, что Вы сделали это, несмотря на предложенную неделю. Это пахнет амбициями: и хотя начальная задача тривиальна, Ваша правдивость позволяет моему учителю доверить Вам любое количество реальных задач".
Хвайда вздохнула: "Это тоже верно. Если бы я делала вид, что эта проблема достаточно сложна, чтобы потратить на неё дни усилий, то Банзен мог бы подумать, что я либо лгу, либо некомпетентна. Либо мог просто сесть рядом со мной. Это именно то, что он на самом деле хотел обнаружить".
Джишин кивнул: "Иногда тест служит цели, потому что ответ настолько очевиден."
Original: Initial Conditions