对SQLite的CREATE TABLE语句偷懒分析
最近要做一个基于gears的SQLite数据库设计器,本来SQLite支持PRAGMA table_info(tablename)
这样的语法,来获得表结构的信息,可以方便的
提取
表结构.
可是gears为了安全起见,禁用了 PRAGMA 语法.这造成要写代码分析SQLite的CREATE TABLE语句,提取tableinfo.
可是要写一个SQL语法分析器,对我目前的水平来说还达不到.怎么办?
我用了一个偷懒的方法,就是简化字段设计.
我把字段设计简化成下面的结构
[*]name:字段名
[*]type:类型,比如INTEGER,VARCHAR,DATE等
[*]length:长度,如果有长度的话直接写成(10)或者(8,2)这样带括号的形式
[*]constraint:约束,也就是常用的 column-constraint 的组合,比如
""
NOT NULL
UNIQUE NOT NULL
PRIMARY KEY AUTOINCREMENT NOT NULL
PRIMARY KEY UNIQUE NOT NULL
[*]sql:附加语句,用来直接写 DEFAULT , COLLATE, CHECK 或者上面的约束语法
当然这样的设计要求使用者很了解SQL的语法,不会犯type选择了VARCHAR,constraint选择了
PRIMARY KEY AUTOINCREMENT NOT NULL这样的错误.这显然不是大
问题.然后把这些定义生成以回车为分隔符的SQL语句,让gears database API 执行.获取的时候只要
SELECT sql FROM sqlite_master WHERE type="table" and tbl_name="tablename"
获取SQL语句,在逆上面的过程(回车分隔让事情简单化了),就可以回填到设计器里面.
对于其他的语法我打算如法炮制
这个方法虽然笨拙,不过在没有水平写SQL语法分析器的时候还是可以抵挡一下的.
页:
[1]