对SQLite的CREATE TABLE语句偷懒分析

最近要做一个基于gears的SQLite数据库设计器,本来SQLite支持

PRAGMA table_info(tablename)
 

这样的语法,来获得表结构的信息,可以方便的 提取 表结构.

可是gears为了安全起见,禁用了 PRAGMA 语法.这造成要写代码分析SQLite的CREATE TABLE语句,提取tableinfo.

可是要写一个SQL语法分析器,对我目前的水平来说还达不到.怎么办?

我用了一个偷懒的方法,就是简化字段设计.

我把字段设计简化成下面的结构

  1. name:字段名
  2. type:类型,比如INTEGER,VARCHAR,DATE等
  3. length:长度,如果有长度的话直接写成(10)或者(8,2)这样带括号的形式
  4. constraint:约束,也就是常用的 column-constraint 的组合,比如
    ""
    NOT NULL
    UNIQUE NOT NULL
    PRIMARY KEY AUTOINCREMENT NOT NULL
    PRIMARY KEY UNIQUE NOT NULL
  5. 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语法分析器的时候还是可以抵挡一下的.

 

你可能感兴趣的:(零碎儿)