やってみる

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

SQLite3拡張関数ソースコード一覧

 48ファイル。

情報源

 拡張関数のソースコードは以下ファイルを解凍した後./ext/misc/配下にもある。

 非公式ソースコードは以下。

一覧をつくる

wget https://www.sqlite.org/2019/sqlite-src-3290000.zip
unzip sqlite-src-3290000.zip
cd ./sqlite-src-3290000/ext/misc

 49ファイルある。

ls -1 | sort | wc -l
49

 一覧を出す。

ls -1 | sort

一覧

README.md
amatch.c
anycollseq.c
appendvfs.c
blobio.c
btreeinfo.c
carray.c
closure.c
completion.c
compress.c
csv.c
dbdata.c
dbdump.c
eval.c
explain.c
fileio.c
fossildelta.c
fuzzer.c
ieee754.c
json1.c
memstat.c
memtrace.c
memvfs.c
mmapwarm.c
nextchar.c
normalize.c
percentile.c
prefixes.c
regexp.c
remember.c
rot13.c
scrub.c
series.c
sha1.c
shathree.c
showauth.c
spellfix.c
sqlar.c
stmt.c
templatevtab.c
totype.c
unionvtab.c
vfslog.c
vfsstat.c
vtablog.c
vtshim.c
wholenumber.c
zipfile.c
zorder.c

 以下は拡張関数ではない。

  • README.md

 たぶんすでに導入されているものがいくつかある。

  • compress.c
  • explain.c
  • fileio.c
  • json1.c
  • regexp.c
  • sqlar.c
  • zipfile.c

 もしかしたら他にもあるかも?

 これで41ファイルに減った。

ソース|概要 ------|---- amatch.c|FTS曖昧一致。create virtual table T using approximate_match(v,w,l,e); anycollseq.c|実装例。照合シーケンス。偽物。BINARY照合シーケンスのように動く。 appendvfs.c|VFSシム。ファイル末尾に追加する。 blobio.c|デバッグ用。blobの一部を読書する。 btreeinfo.c|sqlite_btreeinfo仮想テーブル。読取専用。 carray.c|C言語の配列からテーブル値関数を作成する。 closure.c|仮想テーブルtransitive_closure推移閉包木構造で使える。指定した要素をもつ親を得る。 completion.c|単語補完。completion($prefix,$wholeline) compress.c|zlib圧縮関数を呼び出す。 csv.c|仮想テーブルcsvdbdata.c|仮想テーブルsqlite_dbdata,sqlite_dbptr,sqlite_dbpage。Bツリーから直接データを抽出する。ページの親子関係。 dbdump.c|コンテンツを変換するC言語のサブルーチン。sqlite3_db_dump eval.c|eval()SQL関数を実装する。第1引数にSQL文を渡すとその結果を返す。 explain.c|explain()SQL関数を実装する。第1引数にSQL文を渡すとそのクエリプランを返す。 fileio.c|readfile(),writefile(),fsdir()SQL関数を実装する。 fossildelta.c|RBUで使うSQL関数を実装する。delta_apply,delta_create,delta_output_size,delta_parse fuzzer.c|仮想テーブルfuzzer。バリエーションを生成するデモ用。読取専用。スペル修正などに役立つ。 ieee754.c|SQL関数を実装する。正確な表示のための。IEEE754 Binary64浮動小数点数ieee754,(X),(Y,Z)X==Y*pow(2,Z) memstat.c|仮想テーブルsqlite3_status64,sqlite3_db_status。使用例SELECT * FROM memstat;memtrace.c|SQLITE_CONFIG_MALLOCを使用する拡張機能を実装する。 memvfs.c|インメモリVFS実装。 mmapwarm.c|sqlite3_mmap_warmC言語関数は、メモリのマッピングの各ページに触れるために使用される。 nextchar.c|SQL関数next_char(A,T,F,W,C)を実装する。 normalize.c|C言語関数sqlite3_normalize()を実装する。SQL文字列を正規化して返す。 percentile.c|SQL関数percentile(Y,P)を実装する。統計学。パーセンタイルとは、データを小さい順に並べたとき、初めから数えて全体の%に位置する値のこと。最小値から数えて10%に位置するなら10パーセンタイル。 prefixes.c|テーブル値関数prefixes('abcdefg')prefix_length('abcdxxx', 'abcyy') regexp.c|正規表現POSIXレギュラー拡張) remember.c|デモ用。パススルーであるSQL関数を作成する方法。 rot13.c|rot13()関数とrot13照合シーケンスを実装する。ASCIIアルファベット文字を13文字分回転させる。 scrub.c|PRAGMA secure_deletesqlite3_scrub_backup() series.c|テーブル値関数generate_series(開始,終了,step) sha1.c|SQL関数sha1(X),sha1_query(Y)を実装する。 shathree.c|SQL関数sha3(X,SIZE),sha3_query(Y,SIZE)を実装する。 showauth.c|C言語関数authorizerコールバック。。デバッグ用。 spellfix.c|仮想テーブルspellfix1。大規模語彙検索。スペルミス提案&検索。 sqlar.c|SQL関数sqlar_compress(X),sqlar_uncompress(X,SZ)stmt.c|仮想テーブルstmtステートメントの情報を返す。使用例SELECT * FROM stmt; **データベース接続用に準備されたすべてのステートメントについて。 templatevtab.c|C言語実装用テンプレート。開発者はこのファイルのコピーをベースとして作成できる。 totype.c|SQL関数tointeger(X),toreal(X)それぞれ整数,実数に変換する。 unionvtab.c|仮想テーブルunionvtab,swarmvtabvfslog.c|ログの原因となるラッパーVFSのコードが含まれる。 vfsstat.c|VFSシム。I/Oを追跡する。SELECT * FROM vfsstat; vtablog.c|仮想テーブルvtablog。診断情報を出力する。仮想テーブルインターフェイスインタラクティブな分析とデバッグvtshim.c|SQLite仮想テーブルインターフェイスとガベージコレクターベースのメモリ管理を備えたランタイム。 wholenumber.c|仮想テーブルwholenumber。整数を返す(1〜4294967295)。CREATE VIRTUAL TABLE nums USING wholenumber; SELECT value FROM nums WHERE value<10; zipfile.c|仮想テーブルzipfile。ZIPアーカイブを読書する zorder.c|zオーダー(モートンコード)変換用のSQL関数。zorder(X0,X0,..,xN):N + 1次元モートンコードを生成。unzorder(Z,N,I):N次元からI番目の次元を抽出。

 非公式で使いそうなのは1つだけ。

すでにやったもの

どれを使うか?

 以下だけ気になる。次回やってみる。

 それ以外は使わなそう。以下の理由で。

  • すでに実装済
  • デモ用(C言語実装例)
  • 低レベルすぎ(C言語連携、RDBMSの仕組み)
  • 既存の別の関数やドットコマンド等で代用できる

 他に気になるのは以下だが、少しマニアック。RDBMSでやる仕事なのか疑問。ビジネスロジックごとプログラミング言語で実装したほうが使い勝手がいいのでは?

対象環境

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

前回まで