Open8
sqldef実装知見
SQL (Structured Query Language)
DDL (Data Definition Language)
create table <- ここだけ対応すればいい
alter table
drop table
DML (Data Manipulation Language)
select
insert
delete
DCL (Data Control Language)
grant
revoke
処理の流れ
mysql, sqlite3, mssqlの場合
yaccでparse
方言を吸収したAST-1にする
show create table item
のところで対応したsqlを出力する
create table 文を方言を吸収したASTにする(AST-2)
diffをとって、出力
postgresqlの場合
このparserでしくじったら、yaccにフォールバック
対応したsql出力するところも、ファイル置き場が違う
実装できなかったやつ
syntax error when parsing view ddl includes select distinct on on postgresql https://github.com/sqldef/sqldef/issues/320
半分ぐらい実装したやつ
[WIP][psqldef] postgresql table constraints exclusion https://github.com/sqldef/sqldef/pull/528
実際の実装
[psqldef] support exclusion constraints https://github.com/sqldef/sqldef/pull/600
parseできるようになったsql
CREATE TABLE exclude_example (
name varchar(255),
event_start tstzrange NOT NULL,
event_end tstzrange NOT NULL,
CONSTRAINT ex1 EXCLUDE (name WITH =),
CONSTRAINT ex2 EXCLUDE (lower(name) WITH =) where (name <> ''),
CONSTRAINT ex3 EXCLUDE USING GIST (event_start WITH &&, event_end WITH &&)
);
Range types