DDLからテストデータ生成するやつを作りました


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/ みたいなサイトが結構あります。
探せばこのライブラリと同じようなものもあるかもしれません。