Платформы корпоративных информационных систем


Msql.pm



Msql.pm


Модуль Msql.pm является изначальным интерфейсом Perl к mSQL. Хотя его заменили модули DBI, все же осталось много сайтов, основанных на этом старом интерфейсе. Чтобы продемонстрировать использование Msql.pm, мы продолжим работу с нашим примером «помощника учителя».

Поскольку нам требуется определить школьные классы, в которых будут проводиться экзамены, рассмотрим таблицу предметов. Ее структура выглядит так:

CREATE TABLE subject (

id INT NOT NULL,

name CHAR(500),

teacher CHAR(100) )

CREATE UNIQUE INDEX idxl ON subject (

id,

name,

teacher

)

CREATE SEQUENCE ON subject

Число id является уникальным идентификатором школьного класса, а поля name и teacher являются наименованием курса и фамилией преподавателя соответственно. Все три поля проиндексированы, что ускоряет выполнение запросов. И наконец, мы определили последовательность для таблицы. Эта последовательность генерирует ID.

CGI-программа для обработки этих данных должна выполнять несколько функций:

  • Находить предмет в базе данных.
  • Выводить найденный предмет.
  • Добавлять в базу данных новый предмет.
  • Изменять параметры предмета в базе данных.

Используя мощь Perl и mSQL, можно без труда объединить все эти функции в одном файле, subject.cgi. Для каждой из операций мы создадим свою функцию. Центральной частью программы будет своего рода коммутатор, распределяющий поступающие запросы по соответствующим функциям. Сами операции мы опишем позднее.

#Выбор нужной части сценария осуществляется в зависимости

# от параметра 'action'.

# Если 'action' не задан, вызывается функция defaultQ.

&default if not param('action');

# Этот прием из Camel 2 имитирует переключатель 'switch' в языке С. foreach[A04] (param('action')) {

/view/ and do { Sview; last; };

/add$/ and do { &add; last; };

/add2/ and do { Sadd2; last; };

/add3/ and do { &add3; last; };

/add4/ and do { &add4; last; };

/schange$/ and do { &schange; last; };

/schange2/ and do { &schange2; last; };

/lchange$/ and do { &lchange; last; };

/Ichange2/ and do { &lchange2; last; };

/IchangeS/ and do { &lchange3; last; };

/delete/ and do { Sdelete; last; };

&default; }

Пункты «add», «schange» и «Ichange» должны иметь завершающий «$», чтобы не быть спутанными со сходными. Если бы не было «$», то «add» соответствовал бы также add2, add3 и add4. Альтернативный прием - поместить «add», «schange» и «Ichange» после всех остальных функций, чтобы вызываться при отсутствии совпадений с предыдущими пунктами. Однако если впоследствии добавятся другие пункты, могут возникнуть ошибки. Третий способ - полностью устранить неоднозначность, используя /^view$/, /*add$/ и т. д. При этом придется ввести несколько больше символов, но возможность ошибки будет полностью устранена.

Остается лишь проработать детали, реализовав каждую функцию.

Функция default выводит исходную форму, которую видит пользователь, позволяющую ему выбрать тип операции. Эта функция вызывается, если CGI-программа вызывается без параметров, например, как http://www.myserver.com/teach/subject.cgi, или если параметр ACTION не соответствует ни одной из существующих функций. Можно было бы также создать функцию, выводящую сообщение об ошибке, если параметр ACTION неизвестен.

sub default {

print header, start_html('title'=>'Subjects',









Начало  Назад  Вперед


Книжный магазин