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

Не очень красиво, но у клиента претензий не возникло :)
Может у кого есть решения лучше?
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

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. 21st, 2017 06:36 pm
Powered by Dreamwidth Studios