Трудо выебудни
Apr. 10th, 2014 08:00 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Предупреждаю, не-айтишникам скорее всего не будет интересно.
Один австралийский клиент столкнулся с заменой старых сим-карточек новыми и попросил создать простенький портал для своих сотрудников с формой, куда сотрудник вводит номера новой и старой сим-карты. Задача плевая, нарисовал на коленке, клиенту понравилось.
Правда у клиента есть списки номеров новых карточек, сгруппированных по филиалам, теперь портал должен опознавать сотрудника и позволять ему ввести номер карточки только из списка его филиала.
Нет проблем, добавил функционал. Интересуюсь, в каком формате клиент передаст списки.
Клиент передавать списки не будет, будет импортировать самостоятельно, через ODBC при помощи клиента FileMaker в базу данных под MySQL.
Клиент просит, чтобы данные проверялись на стороне MySQL сервера. Список проверок и сообщений об ошибках прилагается.
ОК, думаю, не нужно парсить данные, добавлю в MySQL хранимую процедуру — триггер на добавление записи. Пишу:
Оказывается, что у клиента MySQL-сервер версии 5.1, никаких SIGNAL'ов он не понимает.
Обновлять сервер никто не будет, крупные компании консервативны до безумия.
Сижу, размышляю.
Создать ошибку я могу. Например, могу подменить добавляемые данные и вызвать событие "Повторяющаяся запись" (Duplicate entry).
Этот вариант не подходит, клиент хочет знать что именно не так с его данными.
Собираюсь писать ответ, вроде "задача в полном объеме невыполнима", но решаю сначала перекурить.
После третей затяжки складывается цепочка рассуждений:
Как я еще вызвать ошибку в хранимой процедуре? Делением на ноль? Тоже ничего не дает.
Вызов несуществующей процедуры? А что это может дать? Название процедуры может быть любым?
Это уже интересно, надо проверить.
Заменяю в триггере все сигналы на вызовы процедур с именами, содержащими сообщение об ошибке,
вроде 'Wrong format of the old SIM card number', тестирую добавление неправильной записи и получаю результат:
Не очень красиво, но у клиента претензий не возникло :)
Может у кого есть решения лучше?
Один австралийский клиент столкнулся с заменой старых сим-карточек новыми и попросил создать простенький портал для своих сотрудников с формой, куда сотрудник вводит номера новой и старой сим-карты. Задача плевая, нарисовал на коленке, клиенту понравилось.
Правда у клиента есть списки номеров новых карточек, сгруппированных по филиалам, теперь портал должен опознавать сотрудника и позволять ему ввести номер карточки только из списка его филиала.
Нет проблем, добавил функционал. Интересуюсь, в каком формате клиент передаст списки.
Клиент передавать списки не будет, будет импортировать самостоятельно, через 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"
Не очень красиво, но у клиента претензий не возникло :)
Может у кого есть решения лучше?
no subject
Date: 2014-04-10 07:05 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: