やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3拡張 ICUを動的ロードする

 前回は静的ビルド。今回は.loadコマンドで動的ロードする。コンパイルオプションが付与されていなくともOK。

前提

pragma compile_options;

 コンパイルオプションENABLE_ICUがないSQLite3環境で実行する。そこにICUを動的ロードさせるのが今回の目的。

pragma compile_options;
COMPILER=gcc-6.3.0 20170516
ENABLE_DBSTAT_VTAB
ENABLE_FTS4
ENABLE_FTS5
ENABLE_JSON1
ENABLE_RTREE
ENABLE_STMTVTAB
THREADSAFE=1

手順

sqlite-enhanced-icuコード入手&コンパイル

git clone https://github.com/seblucas/sqlite-enhanced-icu
cd sqlite-enhanced-icu
gcc -shared icu.c `icu-config  --cppflags --ldflags` -o libSqliteIcu.so

 libSqliteIcu.soライブラリ作成完了。

動的ロードせず使ってみる

select regexp('[\d]+[\w]+[\d]+', '12abc34');

 関数が存在しないためエラー。

Error: no such function: regexp

 コンパイルオプションにENABLE_ICUがある環境ならば動的ロードせずとも成功する。

動的ロードする

sqlite3
.load ./libSqliteIcu.so

 これでSQL関数が追加された。

使ってみる

regexp()

select regexp('[\d]+[\w]+[\d]+', '12abc34');
1

 エラーなし。ICU拡張を動的ロードできた!

所感

 細かい検証は次回

情報源

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで