DDL(create table 文)からデータを作成するライブラリを作成したので、その紹介です。
動機
単体テストとかでテーブルデータを作るときは
- テーブルのデータ型に合っていて
- NULLではなくて
- 行に対しても列に対してもできるだけ値に被りがなくて
- MAX桁数が入っている
ようなデータが欲しいことが結構あって、そういうデータを生成する手間を省きたかったからです。
機能について
どんなものかはデモページを見て頂いた方が早いのですが、
こんな定義があったとして、
create table a (
c1 char(5),
c2 integer,
c3 float,
c4 binary(8)
);
生成されるデータはこんな感じです。
c1 c2 c3 c4
L1 "a0001","1","0.1","b0000001"
L2 "a0002","2","0.2","b0000002"
L3 "a0003","3","0.3","b0000003"
L4 "a0004","4","0.4","b0000004"
生成されるデータはオプションとカラムのデータ型の定義によって変わります。
オプションとか
オプションとかサポートしているデータ型とかはAPIに書いてあります。
オプションには行ごとに実行されるコールバック関数もあるので、データは割と自由に加工できるようになっています。
SQL パーサー
SQLはDBMS製品によって構文が変わったりするので、パーサーエラーになる可能性は割と高いと思います。
ただ、パーサー部分は、sqlparser-rsという Rust のライブラリをTypeScriptに移植して作っていて、元のライブラリが ANSI standards に準拠する形で作られているため、このライブラリも基本的にはSQL標準に準拠する形になっているので、データ生成に使用するカラム定義部分はパーサーで読み込めることが期待されます。
類似品
リアリティのあるデータが欲しい場合は http://filldb.info/ みたいなサイトが結構あります。
探せばこのライブラリと同じようなものもあるかもしれません。