From fa024f59c9c1434666d58de39148e8c482381931 Mon Sep 17 00:00:00 2001 From: ygrek Date: Sat, 9 May 2009 21:38:47 +0300 Subject: [PATCH] more types --- sql.ml | 2 +- sql_lexer.mll | 25 ++++++++++++++++++------- sql_parser.mly | 4 +++- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/sql.ml b/sql.ml index fdfecd6..3e520d0 100644 --- a/sql.ml +++ b/sql.ml @@ -4,7 +4,7 @@ open Printf module Type = struct - type t = | Int | Text | Blob + type t = | Int | Text | Blob | Float | Bool deriving (Show) let to_string = Show.show diff --git a/sql_lexer.mll b/sql_lexer.mll index 683f645..4b40981 100644 --- a/sql_lexer.mll +++ b/sql_lexer.mll @@ -42,13 +42,23 @@ let keywords = "key",KEY; "autoincrement",AUTOINCREMENT; "default",DEFAULT; - "text",T_TEXT; - "integer",T_INTEGER; - "int",T_INTEGER; - "blob",T_BLOB; -(* CHARACTER, CHARACTER VARYING, BIT, BIT VARYING, NUMERIC, DECIMAL, - INTEGER, SMALLINT, FLOAT, REAL, DOUBLE PRECISION, DATE, TIME, - TIMESTAMP, and INTERVAL.*) + "text",T_TEXT; (* sqlite specific? *) + "blob",T_BLOB; (* same *) +(* standard built-in types + CHARACTER, CHARACTER VARYING, CHARACTER LARGE OBJECT, + BINARY, BINARY VARYING, BINARY LARGE OBJECT, + NUMERIC, DECIMAL, INTEGER, SMALLINT, BIGINT, + FLOAT, REAL, DOUBLE PRECISION, + BOOLEAN, + DATE, TIME, TIMESTAMP, INTERVAL + *) + "character",T_TEXT; + "char",T_TEXT; + "varchar",T_TEXT; + "binary",T_BLOB; + "float",T_FLOAT; + "real",T_FLOAT; + "boolean",T_BOOLEAN; "distinct",DISTINCT; "all",ALL; "order",ORDER; @@ -85,6 +95,7 @@ let keywords = all JOIN_TYPE1 ["left";"right";"full"]; all JOIN_TYPE2 ["inner";"outer";"cross"]; all LIKE_OP ["like";"glob";"regexp";"match"]; + all T_INTEGER ["integer";"int";"smallint";"bigint";"numeric";"decimal";]; !k let keywords = List.map (fun (k,v) -> (String.lowercase k, v)) keywords diff --git a/sql_parser.mly b/sql_parser.mly index 0155027..9accb55 100644 --- a/sql_parser.mly +++ b/sql_parser.mly @@ -34,7 +34,7 @@ CONCAT_OP JOIN_TYPE1 JOIN_TYPE2 NATURAL REPLACE IN GROUP HAVING %token UNIQUE PRIMARY KEY AUTOINCREMENT ON CONFLICT %token NUM_BINARY_OP PLUS MINUS -%token T_INTEGER T_BLOB T_TEXT +%token T_INTEGER T_BLOB T_TEXT T_FLOAT T_BOOLEAN %left TEST_NULL %left AND OR @@ -225,6 +225,8 @@ unary_op: EXCL { } sql_type_flavor: T_INTEGER { Type.Int } | T_BLOB { Type.Blob } | T_TEXT { Type.Text } + | T_FLOAT { Type.Float } + | T_BOOLEAN { Type.Bool } sql_type: t=sql_type_flavor | t=sql_type_flavor LPAREN INTEGER RPAREN -- 2.11.4.GIT