Трудо выебудни

Apr 10, 2014 08:00

Предупреждаю, не-айтишникам скорее всего не будет интересно.
Один австралийский клиент столкнулся с заменой старых сим-карточек новыми и попросил создать простенький портал для своих сотрудников с формой, куда сотрудник вводит номера новой и старой сим-карты. Задача плевая, нарисовал на коленке, клиенту понравилось.
Правда у клиента есть списки номеров новых карточек, сгруппированных по филиалам, теперь портал должен опознавать сотрудника и позволять ему ввести номер карточки только из списка его филиала.
Нет проблем, добавил функционал. Интересуюсь, в каком формате клиент передаст списки.
Клиент передавать списки не будет, будет импортировать самостоятельно, через ODBC при помощи клиента FileMaker в базу данных под MySQL.
Клиент просит, чтобы данные проверялись на стороне MySQL сервера. Список проверок и сообщений об ошибках прилагается.
ОК, думаю, не нужно парсить данные, добавлю в MySQL хранимую процедуру - триггер на добавление записи. Пишу:

CREATE TRIGGER db_name.before_insert_lookup_data_tbl
BEFORE INSERT ON db_name.lookup_data_tbl FOR EACH ROW
BEGIN
IF NEW.sim_card_old AND !(NEW.sim_card_old REGEXP "^[0-9]{9}[a-zA-Z]?$")
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Wrong format of the old SIM card number';
ELSEIF ... и так далее
Оказывается, что у клиента MySQL-сервер версии 5.1, никаких SIGNAL'ов он не понимает.
Обновлять сервер никто не будет, крупные компании консервативны до безумия.
Сижу, размышляю.
Создать ошибку я могу. Например, могу подменить добавляемые данные и вызвать событие "Повторяющаяся запись" (Duplicate entry).
Этот вариант не подходит, клиент хочет знать что именно не так с его данными.
Собираюсь писать ответ, вроде "задача в полном объеме невыполнима", но решаю сначала перекурить.
После третей затяжки складывается цепочка рассуждений:
Как я еще вызвать ошибку в хранимой процедуре? Делением на ноль? Тоже ничего не дает.
Вызов несуществующей процедуры? А что это может дать? Название процедуры может быть любым?
Это уже интересно, надо проверить.
Заменяю в триггере все сигналы на вызовы процедур с именами, содержащими сообщение об ошибке,
вроде 'Wrong format of the old SIM card number', тестирую добавление неправильной записи и получаю результат:

"#1305 - PROCEDURE db_name.'Wrong format of the old SIM card number' does not exist"
Не очень красиво, но у клиента претензий не возникло :)
Может у кого есть решения лучше?

забавное, Ай-Ти

Previous post Next post
Up