ClientCharset. Параметр подключения
Параметр ClientCharset определяет кодировку, в которой необходимо общаться с SQL-сервером. Если параметр не указан, Parser считает, что общение с SQL-сервером идет в кодировке $request:charset.
Список допустимых кодировок определяется в Конфигурационном файле.
Для MySQL
mysql://user:password@host:port/database?
ClientCharset=кодировка& [3.1.2]
timeout=3&
compress=1&
named_pipe=1&
autocommit=1
Необязательные параметры:
Port - номер порта сервера баз данных. Можно использовать выражение:
user:password@имя_хоста:номер_порта/database,
А можно вместо имени_хоста и номера_порта передать путь к UNIX сокету в квадратных скобках (UNIX socket - это некий магический набор символов (путь), который вам расскажет администратор MySQL, если он - это не вы. Через этот сокет может идти общение с сервером):
user:password@[/unix/socket]/database
ClientCharset - задает кодировку, в которой необходимо общаться с SQL-сервером; [3.1.2]
Timeout - задает значение параметра Connect timeout в секундах;
Compress - режим сжатия трафика между сервером и клиентом;
Named_pipe - использование именованых каналов для соединения с сервером MySQL, работающим под управлением Windows NT.
Для ODBC
odbc://DSN=dsn;UID=user;PWD=password;ClientCharset=кодировка
ClientCharset - задает кодировку, в которой необходимо общаться с SQL-сервером. [3.1.2]
Замечание: В коде Parser символ ";" в строке подключения к БД необходимо предварять символом "^".
Для Oracle
oracle://user:password@service?
ClientCharset=кодировка& [3.1.2]
LowerCaseColumnNames=0& [3.1.1]
NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&
NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS&
NLS_LANGUAGE=language-dependent conventions&
NLS_TERRITORY=territory-dependent conventions&
NLS_DATE_LANGUAGE=language for day and month names&
NLS_NUMERIC_CHARACTERS=decimal character and group separator&
NLS_CURRENCY=local currency symbol&
NLS_ISO_CURRENCY=ISO currency symbol&
NLS_SORT=sort sequence&
ORA_ENCRYPT_LOGIN=TRUE
Если имена колонок в запросе select не взять в кавычки, Oracle преобразует их к ВЕРХНЕМУ регистру. По-умолчанию, Parser преобразует их к нижнему регистру. Указав параметр LowerCaseColumnNames=0 можно отключить преобразование в нижний регистр.
ClientCharset - задает кодировку, в которой необходимо общаться с SQL-сервером. [3.1.2]
Информацию по остальным параметрам можно найти в документации по «Environment variables» для Oracle. Однако, мы рекомендуем всегда задавать параметры NLS_LANG и NLS_DATE_FORMAT такими, какие указаны выше.
Для PostgreSQL
pgsql://user:password@host[:port]|[local]/database?
ClientCharset=кодировка& [3.1.2]
datestyle=ISO,SQL,Postgres,European,NonEuropean,US,German
NonEuropean то же, что US
по умолчанию ISO
Необязательные параметры:
port - номер порта.
Можно задать:
user:password@host:port/database,
а можно:
user:password@local/database
В этом случае произойдет соединение с сервером, расположенным на локальной машине.
ClientCharset - задает кодировку, в которой необходимо общаться с SQL-сервером; [3.1.2]
Datestyle - если задан этот параметр, то при соединении с сервером драйвер выполнит команду:
set DATESTYLE=значение.
Переменная CLASS_PATH
В конфигурационном методе может быть задана переменная или таблица CLASS_PATH, в которой задается путь (пути) к каталогу с файлами классов. Если имя подключаемого модуля - относительно, то файл ищется по CLASS_PATH, (если CLASS_PATH таблица, то каталоги в ней перебираются снизу вверх).
Пример таблицы CLASS_PATH:
$CLASS_PATH[^table::create{path
/classes/common
/classes/specific
}]
Теперь по относительному пути my/class.p поиск файла будет проходит в таком порядке:
/classes/specific/my/class.p
/classes/common/my/class.p
Пути к файлам и
Для доступа к файлам и каталогам в Parser можно использовать абсолютный или относительный путь.
Абсолютный путь начинается слешем, а файл ищется от корня веб-пространства. Файл по относительному пути ищется от каталога, в котором находится запрошенный документ.
Пример абсолютного пути:
/news/archive/20020127/sport.html
Пример относительного пути:
относительно каталога /news/archive…
20020127/sport.html
При записи файлов необходимые каталоги создаются автоматически.
Внимание: корень веб-пространства, переданный веб-сервером, можно изменить: см. «Корень веб-пространства».
Внимание: Parser преобразует пути к языку file-spec (см. «Внешние и внутренние данные»).
Также ряд методов…
· | file::load
|
· | table::load
|
· | xdoc::load
|
…может работать с внешними HTTP-серверами, если имя загружаемого документа содержит префикс
http://
Этим методам также можно задать дополнительные опции загрузки документа по HTTP, это хеш, ключами которого могут быть:
Опция |
По-умолчанию |
Значение |
$.charset[кодировка] |
берется из заголовка HTTP-ответа |
Кодировка документов на удаленном сервере. В эту кодировку перекодируется строка запроса, и из этой кодировки перекодируется ответ. [3.1.0] |
$.timeout(секунд) |
2 секунды |
Время ожидания ответа HTTP сервера в секундах. Операция загрузки должна быть завершена за это время, иначе возникнет ошибка. |
$.method[HTTP-МЕТОД] |
GET | |
$.form[ $.поле[значение] $.поле[$таблица_значений] … ] |
отсутствует |
Параметры запроса. Для GET запроса они будут переданы в ?строке_запроса. Для запросов с другим method, параметры будут переданы с Content-type: application/x-www-form-urlencoded Значением может являться строка или таблица строк из одного столбца. Нельзя передавать файлы. [3.1.2] Предпочтительно задавать параметры запросам именно при помощи $.forms, а не передавать их в ?параметрах самостоятельно. |
$.headers[ $.HTTP-ЗАГОЛОВОК[значение] … ] |
$.User-Agent[parser3] |
Хеш, содержащий дополнительные HTTP-заголовки, которые необходимо передать на HTTP-сервер Значение HTTP-заголовка может быть дата, строка или хеш с обязательным ключом value. Дата может использоваться и в качестве значения поля и в качестве значения атрибута поля, при этом она будет стандартно отформатирована. |
$.any-status(1) |
0 |
Логическое: допустим ли статус ответа, не равный 200. Если ЛОЖЬ, и будет получен статус, не равный 200, возникнет системная ошибка http.status. [3.0.8] |
$.user[пользователь] |
отсутствует |
Задает параметры запроса к серверу, |
$.password[пароль] |
отсутствует |
использующему стандартную HTTP авторизацию. [3.1.2] |
Опция |
По-умолчанию |
Значение |
$.offset(смещение) |
0 |
Загрузить данные начиная с этого смещения (в байтах). |
$.limit(ограничение) |
-1 |
Загрузить не более данного количества байт. |
Форматные строки
Форматная строка определяет форму представления значения числа. В общем случае она имеет следующий вид:
%Длина.ТочностьТип
Тип - определяет способ преобразования числа в строку.
Существуют следующие типы:
Длина - количество знаков, отводимое для значения. Может получиться так, что для отображения полученного значения требуется меньше символов, чем указано в блоке Длина. Например, указана длина 10, а получено значение 123. В этом случае слева к значению будет приписано семь пробелов. Если нужно, чтобы слева приписывались не пробелы, а нули, следует в начале блока Длина поместить 0, например, написать не 10, а 010. Блок Длина может отсутствовать, тогда для значения будет отведено ровно столько символов, сколько требуется для его отображения.
Формат строки подключения оператора connect
Строка подключения обрабатывается драйвером базы данных для Parser3.
Perl-совместимые регулярные выражения
Подробную информацию по Perl-совместимым регулярные выражениям (Perl Compatible Regular Expressions, PCRE) можно найти в документации к Perl (см. http://www.perldoc.com/perl5.6.1/pod/perlre.html), в документации к использованной в Parser библиотеке PCRE 2.09 (см. http://www.pcre.org/man.txt), а также в большом количестве специальной литературы, содержащей помимо всего остального много практических примеров. Особенно детально использование регулярных выражений описано в книге Дж. Фридла «Регулярные выражения» издательства «O'Reilly» (ISBN 1-56592-257-3), перевод книги на русский язык: издательство «Питер» (ISBN: 5-272-00331-4, второе издание; ISBN: 5-318-00056-8 первое издание).
Краткое описание, которое приводится тут, имеет справочный характер.
Регулярное выражение - это шаблон для поиска подстроки, который должен совпасть с подстрокой слева направо в строке поиска. Большинство символов в этом шаблоне представлены сами собою, и при поиске просто проверяется наличие этих символов в строке поиска в заданной последовательности. В качестве простейшего примера можно привести шаблон для поиска «шустрая лиса», который должен совпасть с аналогичным набором символов в строке поиска. Мощь регулярных выражений состоит в том, что помимо обычных символов, они позволяют включать в шаблоны альтернативные варианты выбора и повторяющиеся фрагменты с помощью метасимволов. Эти метасимволы ничего не значат сами по себе, но при использовании их в регулярных выражениях, они обрабатываются особым образом.
Существует два различных набора метасимволов:
1. Распознаваемые в любой части шаблона, не заключенной в квадратные скобки
2. Распознаваемые в частях шаблона, заключенных в квадратные скобки
К метасимволам, распознаваемым вне квадратных скобок относятся следующие:
\ |
общее обозначение для escape-последовательностей. Имеют различное использование, рассмотрены ниже |
^ |
совпадает с началом фрагмента для поиска или перед началом строки в многострочном режиме |
$ |
совпадает с концом фрагмента для поиска или перед концом строки в многострочном режиме |
. |
символьный класс, содержащий все символы. Этот метасимвол, совпадает с любым символом кроме символа новой строки по умолчанию. |
[...] |
символьный класс. Совпадение происходит с любым элементом из заданного в квадратных скобках списка |
| |
метасимвол означающий «или». Позволяет объединить несколько регулярных выражений в одно, совпадающее с любым из выражений-компонентов |
(...) |
ограничение подстроки поиска в общем шаблоне поиска |
? |
совпадает с одним необязательным символом |
* |
совпадает с неограниченным количеством любых необязательных символов |
+ |
совпадает с неограниченным количеством символов. Для совпадения требуется хотя бы один произвольный символ |
{мин, макс} |
интервальный квантификатор - требуется минимум экземпляров, допускается максимум экземпляров. |
Часть шаблона, заключенная в квадратные скобки называется символьным классом. В описании символьного класса можно использовать только следующие метасимволы:
\ |
Escape - символ |
^ |
Инвертированный символьный класс, мета-символ обязательно должен быть первым символом в описании класса. Совпадение будет происходить с любыми символами, не входящими в символьный класс |
- |
Используется для обозначения интервала символов |
[...] |
Ограничитель символьного класса |
Использование метасимвола «\».
Обратный слеш имеет несколько вариантов использования. В случае если вслед за ним следует символ, не обозначающий букву алфавита, обратный слеш выполняет функцию экранирования и отменяет специальное значение, которое может иметь этот символ. Такое использование этого метасимвола возможно как внутри символьного класса, так и вне его. В качестве примера, если необходимо найти символ «*», то используется следующая запись в шаблоне «\*». В случае необходимости экранировать сам символ «\» используется запись «\\».
Второй вариант использования этого мета-символа - для описания управляющих символов в шаблоне. Можно использовать следующие escape-последовательности:
\а сигнал
\cx «control-x», где х - любой символ
\е ASCII-символ escape
\f подача бумаги
\n новая строка
\r возврат курсора
\t табуляция
\xhh шестнадцатиричный код символа hh
\ddd восьмиричный код символа ddd
Третий вариант - для определения специфических символьных классов
\d любое десятичное число [0-9]
\s пропуск, обычно [ \f\n\r\t] Первый символ квадратных скобках - пробел
\w символ слова, обычно [a-zA-Z0-9_]
\D \S \W отрицание \d \s \w
Четвертый вариант - для обозначения мнимых символов. В PCRE существуют символы, которые соответствуют не какой-либо литере или литерам, а означают выполнение определенного условия, поэтому в английском языке они называются утверждениями (assertion). Их можно рассматривать как мнимые символы нулевого размера, расположенные на границе между реальными символами в точке, соответствующей определенному условию. Эти утверждения не могут использоваться в символьных классах (\b имеет дополнительное значение и обозначает возврат каретки внутри символьного класса)
\b граница слова
\B отсутствие границы слова
\A «истинное» начало строки
\Z «истинный» конец строки или позиция перед символом начала новой строки,
расположенного в «истинном» конце строки
\z «истинный» конец строки
Как правильно назначить
Имя должно быть понятно как минимум вам самим, а как идеал - любому человеку, читающему ваш код. Имя может быть набрано русскими или латинскими буквами, главное - единообразие. Рекомендуем все же пользоваться английским (а вдруг вас ждет мировое признание?). Слова в именах лучше использовать в единственном числе. Если есть необходимость - пользуйтесь составными именами вида column_color. Глядя на такое имя можно сразу понять, что оно означает.
Parser чувствителен к регистру!
$Parser и $parser - разные переменные!
Есть определенные ограничения на использование в именах символов. Для Parser имя всегда заканчивается перед:
пробелом
табуляцией
переводом строки
; ] } ) " < > # + * / % & | = ! ' , ?
в выражениях заканчивается и перед "-"
Код:
$var[значение_из_переменной]
$var>text
выдаст на экран:
значение_из_переменной>text
т.е. символ '>' Parser считает окончанием имени переменной $var и подставляет ее значение, поэтому вышеуказанные символы не следует использовать при составлении имен.
Если есть необходимость сразу после значения переменной (т.е. без пробела, который является концом имени) вывести символ, который не указан выше (например, нам нужно поставить точку сразу после значения переменной) используется следующий синтаксис:
${var}.text
даст:
значение_из_переменной.text
Нельзя (!) пользоваться в именах символами ".", ":", "^" поскольку они будут расцениваться как часть кода Parser, что приведет к ошибкам при обработке вашего кода.
Все остальные символы использовать в именах, в принципе, можно, но лучше всего отказаться от использования в именах каких-либо служебных и специальных символов кроме случаев крайней необходимости (в практике не встречаются), за исключением знака подчеркивания, который не используется Parser и достаточно нагляден при использовании в именах.
Как бороться с ошибками
Для начала вдумчиво прочитайте сообщение об ошибке. В нем содержится имя файла, вызвавшего ошибку и номер строки в нем. Здесь требуется внимательность при написании кода и справочник. Всегда помните о том, что Parser оперирует объектной моделью, поэтому внимательно следите за тем, с объектом какого класса вы работаете. Некоторые методы возвращают объекты других классов!
Так, например, некоторые методы класса date возвращают объект класса table. Попытка вызвать для этого объекта методы класса date приведет к ошибке. Нельзя вызывать методы классов для объектов, которые к этим классам не принадлежат. Впрочем, этот этап вам удастся преодолеть довольно быстро. Еще одна категория ошибок - ошибки в логике работы самого кода. Это уже сложнее, и придется запастись терпением. Обязательно давайте грамотные имена переменным, методам, классам и комментируйте код.
Если и в этом случае не удастся понять причины неверной работы - попробуйте обратиться к справочнику. «Если ничего не помогает - прочтите, наконец, инструкцию…» Последняя стадия в поиске ошибок - вы близки к сумасшествию, пляшете вокруг компьютера с бубном, а код все равно не работает. Здесь остается только обратиться за помощью к тем, кто пока разбирается в Parser чуть лучше, чем вы. Задайте свой вопрос на форуме, посвященном работе на этом языке и вам постараются ответить. Вы не одиноки! Удачи вам!
в вашей базе хранятся
Допустим данные в вашей базе хранятся в кодировке windows-1251, строку подключения стоит написать так:
odbc://DSN=dsn^;UID=user^;PWD=password^;ClientCharset=windows-1251
в вашей базе хранятся
Допустим данные в вашей базе хранятся в кодировке windows-1251, строку подключения стоит написать так:
oracle://user:password@service?ClientCharset=windows-1251&NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS