From aa078cb56d0b77badef58e8cd33f7e4311e288ed Mon Sep 17 00:00:00 2001 From: ygrek Date: Sat, 2 May 2009 17:16:32 +0300 Subject: [PATCH] CREATE TABLE AS --- sql_parser.mly | 6 ++++++ syntax.ml | 2 +- test.sql | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/sql_parser.mly b/sql_parser.mly index 2724ef0..2fe24cd 100644 --- a/sql_parser.mly +++ b/sql_parser.mly @@ -45,6 +45,12 @@ input: statement EOF { $1 } ; statement: CREATE TABLE name=IDENT LPAREN scheme=column_defs RPAREN { let () = Tables.add (name,scheme) in ([],[],Create name) } + | CREATE TABLE name=IDENT AS select=select_stmt + { + let (s,p) = select in + Tables.add (name,s); + ([],p,Create name) + } | select_stmt { let (s,p) = $1 in s,p,Select } | insert_cmd t=IDENT LPAREN cols=separated_nonempty_list(COMMA,IDENT) RPAREN VALUES diff --git a/syntax.ml b/syntax.ml index d27dba5..9f37a7e 100644 --- a/syntax.ml +++ b/syntax.ml @@ -32,7 +32,7 @@ let get_scheme columns tables = begin match e with | Column (name,Some t) -> RA.Scheme.find (scheme t) name | Column (name,None) -> RA.Scheme.find all name - | _ -> RA.attr "" Sql.Type.Text + | _ -> RA.attr "" Sql.Type.Text (* some expression *) end in let col = Option.map_default (fun n -> {col with RA.name = n}) col name in [ col ] diff --git a/test.sql b/test.sql index 52e40c3..c622b01 100644 --- a/test.sql +++ b/test.sql @@ -23,3 +23,4 @@ SELECT x,z FROM (SELECT name AS x, city || ' ' || descr as y, max(length(city),random(*)) as z FROM test LEFT JOIN loc) WHERE x > @xlo & z < @zhi; +CREATE TABLE zuzu AS SELECT test.id,@text || city AS city, name FROM loc JOIN test ON test_id=id; -- 2.11.4.GIT