Spec-Zone.ru › MariaDB

CONNECT — Добавление REST-функциональности как библиотеки, вызываемой таблицей OEM

Если вы используете версию MariaDB, не поддерживающую REST, вот как можно добавить REST-функциональность в виде библиотеки, вызываемой таблицей OEM.

Перед созданием REST-модуля OEM необходимо установить пакет Microsoft Casablanca, как и при компиляции MariaDB из исходных кодов.

Даже если этот модуль будет использоваться с бинарным дистрибутивом, вам потребуются некоторые исходные файлы CONNECT для успешной сборки. Он создается с четырьмя файлами, присутствующими в версии 1.06.0010 CONNECT: tabrest.cpp, restget.cpp, tabrest.h и mini-global.h. Он также нуждается в заголовочных файлах CONNECT, которые включены в tabrest.cpp, и тех, которые они могут включать. Это можно получить, перейдя на веб-сайт последней загрузки версии MariaDB, включающей REST-функциональность, загрузив файл исходных кодов MariaDB в формате tar.gz и извлекая из него файлы исходных кодов CONNECT в директорию, которая будет добавлена в дополнительные каталоги исходных кодов, если это не каталог, содержащий указанные файлы.

В Windows используйте последнюю версию Visual Studio. Создайте новый пустой проект DLL и добавьте исходные файлы tabrest.cpp и restget.cpp. Visual Studio автоматически сгенерирует все необходимые подключения к SDK cpprest. Просто измените свойства проекта, чтобы добавить дополнительный каталог включения (каталог, куда был загружен исходный код CONNECT) и ссылку на ha_connect.lib бинарной версии MariaDB (в том же каталоге, что и ha_connect.dll в вашем бинарном дистрибутиве). Добавьте определение препроцессора XML_SUPPORT. Также в разделе «Ввод» страницы свойств проекта установите «Файл определения модуля» на файл rest.def (с полным путем), также присутствующий в исходных файлах CONNECT. Если вы создаёте конфигурацию отладки, убедитесь, что в разделе «Генерация кода C/C++» строка «Библиотека времени выполнения» указывает «Многопоточная библиотека DLL отладки (/MDd)», иначе ваш сервер может аварийно завершить работу при использовании этой функции.

Это не совсем просто, но это ничто по сравнению с Linux! Кто-то, создавший модуль OEM для собственного приложения, написал:

По какой-то причине g++ / ld в Linux чрезвычайно требовательны к тому, что они будут и не будут рассматривать как «библиотеку» для целей линковки. Для того, чтобы они распознали и, следовательно, нашли `ha_connect.so` как «действительную» связуемую библиотеку, `ha_connect.so` должна находиться в каталоге, путь к которому есть в `/etc/ld.so.conf` или `/etc/ld.so.conf.d/ha_connect.conf`, *И* его имя файла должно начинаться с «lib».

В Fedora вы можете создать ссылку на ha_connect.so следующим образом:

$ sudo ln -s /..path to../ha_connect.so /usr/lib64/libconnect.so

Это создаёт библиотеку, имя которой начинается с «lib». Она создана в /usr/lib64/, потому что это каталог библиотеки libcpprest.so Casablanca. Это решило необходимость файла в /etc/ld.so.conf.d, так как это уже сделано для библиотеки cpprest. Обратите внимание, что параметр -s обязателен, без него возникают различные ошибки при использовании функции.

Затем скомпилируйте и установите модуль OEM с помощью:

$ makdir oem
$ cd oem
$ makedir Release
$ make -f oemrest.mak
$ sudo cp rest.so /usr/local/mysql/lib/plugin

Файл oemrest.mak:

#LINUX
CPP = g++
LD = g++
OD = ./Release/
SD = /home/olivier/MariaDB/server/storage/connect/
CD =/usr/lib64
# flags to compile object files that can be used in a dynamic library
CFLAGS= -Wall -c -O3 -std=c++11 -fPIC -fno-rtti -I$(SD) -DXML_SUPPORT
# Replace -03 by -g for debug
LDFLAGS = -L$(CD) -lcpprest -lconnect

# Flags to create a dynamic library.
DYNLINKFLAGS = -shared
# on some platforms, use '-G' instead.

# REST library's archive file
OEMREST = rest.so

SRCS_CPP = $(SD)tabrest.cpp $(SD)restget.cpp
OBJS_CPP = $(OD)tabrest.o $(OD)restget.o

# top-level rule
all: $(OEMREST)

$(OEMREST): $(OBJS_CPP)
  $(LD) $(OBJS_CPP) $(LDFLAGS) $(DYNLINKFLAGS) -o $@

#CPP Source files
$(OD)tabrest.o:   $(SD)tabrest.cpp   $(SD)mini-global.h $(SD)global.h $(SD)plgdbsem.h $(SD)xtable.h $(SD)filamtxt.h $(SD)plgxml.h $(SD)tabdos.h  $(SD)tabfmt.h $(SD)tabjson.h $(SD)tabrest.h $(SD)tabxml.h
  $(CPP) $(CFLAGS) -o $@ $(SD)$(*F).cpp
$(OD)restget.o:   $(SD)restget.cpp   $(SD)mini-global.h $(SD)global.h
  $(CPP) $(CFLAGS) -o $@ $(SD)$(*F).cpp

# clean everything
clean:
  $(RM) $(OBJS_CPP) $(OEMREST)

Переменные SD и CD — это каталоги исходных файлов CONNECT и каталог, содержащий libcpprest.so библиотеку. Их можно изменить, чтобы они соответствовали каталогам на вашем компьютере. OD — это каталог, созданный для хранения объектных файлов.

Очень важный флаг — -fno-rtti. Без него у вас возникнут серьёзные проблемы.

Полученный модуль, например rest.so или rest.dll, должен быть помещён в каталог плагинов сервера MariaDB. Затем вы сможете использовать таблицы NoSQL, просто заменив в инструкции CREATE TABLE параметр TABLE_TYPE = JSON или XML на TABLE_TYPE=OEM SUBTYPE=REST MODULE=’rest.(so|dll)’. На самом деле имя модуля, здесь предположительно ‘rest’, может быть любым.

Тип файла по умолчанию — JSON. Если нет, он должен быть указан так:

OPTION_LIST=’Ftype=XML’

Для добавления в инструкцию создания таблицы. Например:

CREATE  TABLE webw
ENGINE=CONNECT TABLE_TYPE=OEM MODULE='Rest.dll' SUBTYPE=REST
FILE_NAME='weatherdata.xml'
HTTP='https://samples.openweathermap.org/data/2.5/forecast?q=London,us&mode=xml&appid=b6907d289e10d714a6e88b30761fae22'
OPTION_LIST='Ftype=XML,Depth=3,Rownode=weatherdata';

Примечание: этот последний пример возвращает XML-файл, формат которого не распознавался старыми версиями CONNECT. Именно поэтому существует опция ‘Rownode=weatherdata’.

Если у вас возникнут проблемы со сборкой модуля, вы можете создать проблему на JIRA.

Содержание, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точки зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-adding-the-rest-feature-as-a-library-called-by-an-oem-table/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API