最近要做一个基于gears的SQLite数据库设计器,本来SQLite支持
PRAGMA table_info(tablename)
这样的语法,来获得表结构的信息,可以方便的 提取 表结构.
可是gears为了安全起见,禁用了 PRAGMA 语法.这造成要写代码分析SQLite的CREATE TABLE语句,提取tableinfo.
可是要写一个SQL语法分析器,对我目前的水平来说还达不到.怎么办?
我用了一个偷懒的方法,就是简化字段设计.
我把字段设计简化成下面的结构
当然这样的设计要求使用者很了解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语法分析器的时候还是可以抵挡一下的.