Apr. 10th, 2014

ellgree: (WestUkraine)
Предупреждаю, не-айтишникам скорее всего не будет интересно.
Один австралийский клиент столкнулся с заменой старых сим-карточек новыми и попросил создать простенький портал для своих сотрудников с формой, куда сотрудник вводит номера новой и старой сим-карты. Задача плевая, нарисовал на коленке, клиенту понравилось.
Правда у клиента есть списки номеров новых карточек, сгруппированных по филиалам, теперь портал должен опознавать сотрудника и позволять ему ввести номер карточки только из списка его филиала.
Нет проблем, добавил функционал. Интересуюсь, в каком формате клиент передаст списки.
Клиент передавать списки не будет, будет импортировать самостоятельно, через 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"

Не очень красиво, но у клиента претензий не возникло :)
Может у кого есть решения лучше?

December 2016

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 24th, 2017 06:35 pm
Powered by Dreamwidth Studios