Категория: Расширение MySQL (18)
| Расширение MySQL » Процедура Analyse |
9.3.1 Процедура Analyse
analyse([max elements,[max memory]])
Эта процедура определена в `sql/sql_analyse.cc'. Она исследует результат запроса и возвращает анализ результатов:
max elements (по умолчанию 256) - максимальное число различных значений, которые analyse будет распознавать в столбце. Аргумент используется analyse для проверки того, является ли тип ENUM оптимальным типом столбца. |
|
теги: SELECT, WHERE |
| |
| Расширение MySQL » Добавление новой процедуры в MySQL |
9.3 Добавление новой процедуры в MySQL
В MySQL, можно определить процедуру на C++, которая обращается к данным в запросе и изменяет их до того, как они будут посланы клиенту. Изменение может быть выполнено на построчном уровне, либо на уровне GROUP BY.
Чтобы продемонстрировать то, как это можно сделать, мы создали пример процедуры в версии MySQL 3.23. |
|
теги: GROUP |
| |
| Расширение MySQL » Добавление новых родных функции |
9.2.3 Добавление новых родных функции
В этом разделе приведена процедура добавления новой ``родной'' функции. Следует учитывать, что в бинарную поставку ``родные'' функции добавить невозможно, поскольку эта процедура требует изменения исходного кода MySQL. Поэтому необходимо собственноручно компилировать MySQL из поставки исходного текста. Кроме того, при переходе на другую версию MySQL (например, при выпуске новой версии) все изменения придется повторить для этой новой версии. |
|
теги: NULL, char |
| |
| Расширение MySQL » Компиляция и установка определяемых пользователем функций |
9.2.2.5 Компиляция и установка определяемых пользователем функций
Файлы, реализующие UDFы, должны компилироваться и устанавливаться на машине, где работает сервер. Эта процедура описана ниже для файла примеров UDF `udf_example.cc', входящего в поставку исходного кода MySQL. Данный файл содержит следующие функции:
metaphon() возвращает metaphon-строку для строкового аргумента. Эта строка в общем напоминает soundex-строку, но более приспособлена для английского языка.
myfunc_double() возвращает отношение суммы ASCII-значений символов своих аргументов к суммарной длине аргументов. |
|
теги: UDF, CREATE |
| |
| Расширение MySQL » Возвращаемые значения и обработка ошибок |
9.2.2.4 Возвращаемые значения и обработка ошибок
Функция инициализации должна возвращать 0, если ошибок нет, и 1 в противном случае. Если происходит ошибка, xxx_init() должна поместить сообщение об ошибке с завершающим '\0' в параметр message. Сообщение будет возвращено клиенту. Буфер сообщения имеет длину MYSQL_ERRMSG_SIZE символов, но надо стараться, чтобы сообщение не превышало 80 символов - для соответствия ширине стандартного экрана терминала. |
|
теги: UDF, NULL |
| |
| Расширение MySQL » Обработка аргументов |
9.2.2.3 Обработка аргументов
Параметр args указывает на структуру UDF_ARGS, содержащую перечисленные ниже поля:
unsigned int arg_count
Количество аргументов. Это значение следует проверять в функции инициализации, если необходимо, чтобы функция вызывалась с определенным количеством аргументов. Например:
if (args->arg_count != 2) |
|
теги: UDF, STRING |
| |
| Расширение MySQL » Последовательность вызова UDF для агрегатных функций |
9.2.2.2 Последовательность вызова UDF для агрегатных функций
Ниже приведено описание функций, которые необходимо определить при создании агрегатной UDF-функции.
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
Эта функция вызывается, когда MySQL находит первую строку в новой группе. В функции необходимо сбросить все внутренние переменные, в которых накапливаются значения, и затем установить переданный аргумент как первый аргумент в группе. |
|
теги: UDF |
| |
| Расширение MySQL » Последовательность вызова UDF для простых функций |
9.2.2.1 Последовательность вызова UDF для простых функций
Главная функция должна быть определена, как это показано здесь. Обратите внимание на то, что тип возвращаемого значения и параметры варьируются в зависимости от того, как определена SQL-функция XXX() в команде CREATE FUNCTION - как возвращающая STRING, INTEGER или REAL:
Для STRING-функций:
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
char *result, unsigned long *length,
char *is_null, char *error); |
|
теги: char, NULL |
| |
| Расширение MySQL » Добавление новой определяемой пользователем функции |
9.2.2 Добавление новой определяемой пользователем функции
Для того чтобы работал механизм UDF, функции должны быть написаны на C или на C++, а используемая операционная система должна поддерживать динамическую загрузку. В поставку исходного кода входит файл `sql/udf_example.cc', в котором определены пять новых функций. К этому файлу следует обращаться, если нужно узнать, как работает соглашение о вызовах UDF. |
|
теги: NULL |
| |
| Расширение MySQL » Добавление новых функций в MySQL |
9.2 Добавление новых функций в MySQL
Существует два способа добавления функций в MySQL:
Можно добавить функцию посредством интерфейса определяемых пользователем функций (user-definable function - UDF). Определяемые пользователем функции добавляются и удаляются динамически с помощью команд CREATE FUNCTION и DROP FUNCTION (see section 9.2.1 Синтаксис CREATE FUNCTION/DROP FUNCTION). |
|
теги: CREATE, ABS |
| |
| Расширение MySQL » Отчет об ошибках в тестовом пакете MySQL |
9.1.2.3 Отчет об ошибках в тестовом пакете MySQL
Если используемая версия MySQL не проходит через тестовый пакет, следует поступать следующим образом:
Прежде всего, не отсылайте отчет об ошибке, пока не соберете максимального количества сведений по проблеме, с которой вы столкнулись! |
|
теги: MySQL |
| |
| Расширение MySQL » Расширение тестового пакета MySQL |
9.1.2.2 Расширение тестового пакета MySQL
Для создания собственных контрольных тестов можно использовать язык mysqltest. К сожалению, полная документация по языку пока еще не написана, но мы планируем в скором времени это сделать. Можно, однако, обратиться к имеющимся контрольным тестам и использовать их в качестве примера. В качестве отправных точек должны служить следующие моменты:
Тесты должны быть расположены в mysql-test/t/*.test |
|
теги: SELECT, SHOW |
| |
| Расширение MySQL » Выполнение тестового пакета MySQL |
9.1.2.1 Выполнение тестового пакета MySQL
Система тестирования включает в себя интерпретатор языка тестирования (mysqltest), shell-сценарий для выполнения всех тестов (mysql-test-run), сами контрольные тесты, написанные на специальном языке тестирования, и ожидаемые для них результаты. |
|
теги: mysql |
| |
| Расширение MySQL » Пакет тестирования MySQL |
9.1.2 Пакет тестирования MySQL
До последнего времени наш основной всесторонний пакет для тестирования основывался на конфиденциальных данных заказчиков и по этой причине не был общедоступным. Процесс тестирования был открытым только частично - доступными являлись тест crash-me, содержащийся в каталоге `sql-bench' код оценки производительности на Perl DBI/DBD, и различные тесты, расположенные в каталоге `tests'. |
|
теги: MySQL, Perl |
| |
| Расширение MySQL » Потоки MySQL |
9.1.1 Потоки MySQL
Сервер создает следующие потоки:
Поток TCP/IP-соединений обрабатывает все запросы подключения и создает новые выделенные потоки для проведения аутентификации и обработки SQL запросов для каждого соединения.
В Windows NT есть поток обслуживания именованного канала, который выполняет ту же работу, что и поток TCP/IP-соединений, но только по запросам на соединение именованного канала. |
|
теги: Windows, INSERT |
| |
| Расширение MySQL » Внутреннее устройство MySQL |
9.1 Внутреннее устройство MySQL
В этом разделе рассматривается многое из того, что необходимо знать при работе над кодом MySQL. Если вы намерены принять участие в разработке MySQL, желаете получить доступ к самому последнему промежуточному коду версий или просто хотите |
|
теги: MySQL |
| |
Страницы: [ 1 ]
|
|