Changeset: bb0ae5e1fd53 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb0ae5e1fd53 Modified Files: sql/src/server/rel_schema.c sql/src/server/rel_semantic.c sql/src/server/sql_parser.h sql/src/server/sql_parser.y sql/src/server/sql_scan.c sql/src/test/sciql/Tests/All sql/src/test/sciql/Tests/sciql00.sql sql/src/test/sciql/Tests/sciql01.sql sql/src/test/sciql/Tests/sciql02.sql sql/src/test/sciql/Tests/sciql03.sql sql/src/test/sciql/Tests/sciql04.sql sql/src/test/sciql/Tests/sciql05.sql sql/src/test/sciql/Tests/sciql06.sql sql/src/test/sciql/Tests/sciql07.sql sql/src/test/sciql/Tests/sciql08.sql sql/src/test/sciql/Tests/sciql09.sql sql/src/test/sciql/Tests/sciql10.sql sql/src/test/sciql/Tests/sciql12.sql sql/src/test/sciql/Tests/sciql13.sql sql/src/test/sciql/Tests/sciql14.sql sql/src/test/sciql/Tests/sciql15.sql sql/src/test/sciql/Tests/sciql16.sql sql/src/test/sciql/Tests/sciql17.sql sql/src/test/sciql/Tests/sciql18.sql sql/src/test/sciql/Tests/sciql19.sql sql/src/test/sciql/Tests/sciql20.sql sql/src/test/sciql/Tests/sciql21.sql sql/src/test/sciql/Tests/sciql22.sql sql/src/test/sciql/Tests/sciql23.sql sql/src/test/sciql/Tests/sciql24.sql sql/src/test/sciql/Tests/sciql25.sql sql/src/test/sciql/Tests/sciql26.sql sql/src/test/sciql/Tests/sciql27.sql sql/src/test/sciql/Tests/sciql28.sql sql/src/test/sciql/Tests/sciql29.sql sql/src/test/sciql/Tests/sciql30.sql sql/src/test/sciql/Tests/sciql31.sql sql/src/test/sciql/Tests/texture.sql Branch: sciql Log Message:
SciQL initial commit The parser has been extended to accept the EDBT examples. No output, because that requires more. diffs (truncated from 803 to 300 lines): diff -r 663ebf32a5cd -r bb0ae5e1fd53 sql/src/server/rel_schema.c --- a/sql/src/server/rel_schema.c Wed Oct 13 15:54:53 2010 +0200 +++ b/sql/src/server/rel_schema.c Mon Oct 25 16:23:03 2010 +0200 @@ -1101,6 +1101,7 @@ NULL, l->h->next->data.i_val); /* drop_action */ } break; + case SQL_CREATE_ARRAY: case SQL_CREATE_TABLE: { dlist *l = s->data.lval; diff -r 663ebf32a5cd -r bb0ae5e1fd53 sql/src/server/rel_semantic.c --- a/sql/src/server/rel_semantic.c Wed Oct 13 15:54:53 2010 +0200 +++ b/sql/src/server/rel_semantic.c Mon Oct 25 16:23:03 2010 +0200 @@ -172,7 +172,9 @@ case SQL_CREATE_TABLE: case SQL_CREATE_VIEW: + case SQL_CREATE_ARRAY: case SQL_DROP_TABLE: + case SQL_DROP_ARRAY: case SQL_DROP_VIEW: case SQL_ALTER_TABLE: return rel_schemas(sql, s); @@ -304,6 +306,10 @@ case SQL_INTERSECT: return rel_selects(sql, s); + case SQL_ARRAY: + case SQL_INDEX: + case SQL_DIMENSION: + return sql_error(sql, 02, "Array not type checked yet"); default: return sql_error(sql, 02, "symbol type not found"); } diff -r 663ebf32a5cd -r bb0ae5e1fd53 sql/src/server/sql_parser.h --- a/sql/src/server/sql_parser.h Wed Oct 13 15:54:53 2010 +0200 +++ b/sql/src/server/sql_parser.h Mon Oct 25 16:23:03 2010 +0200 @@ -174,7 +174,14 @@ SQL_XMLQUERY, SQL_XMLTEXT, SQL_XMLVALIDATE, - SQL_XMLNAMESPACES + SQL_XMLNAMESPACES, + + SQL_CREATE_ARRAY, + SQL_DROP_ARRAY, + SQL_ARRAY, + SQL_INDEX, + SQL_DIMENSION, + SQL_DIMENSION_SPEC } tokens; typedef enum jt { diff -r 663ebf32a5cd -r bb0ae5e1fd53 sql/src/server/sql_parser.y --- a/sql/src/server/sql_parser.y Wed Oct 13 15:54:53 2010 +0200 +++ b/sql/src/server/sql_parser.y Mon Oct 25 16:23:03 2010 +0200 @@ -261,6 +261,10 @@ XML_primary opt_comma_string_value_expression + group_item + dimension + array_element + %type <type> data_type datetime_type @@ -309,6 +313,7 @@ ident_commalist opt_corresponding column_ref_commalist + group_ref_commalist name_commalist schema_name_list column_ref @@ -376,6 +381,14 @@ forest_element_list forest_element XML_value_expression_list + dim_range + dim_range_list + dim_exp + index_exp + index_exp_list + index_term + + array_element_list %type <i_val> any_all_some @@ -421,6 +434,7 @@ with_or_without_data XML_content_option XML_whitespace_option + table_or_array %type <w_val> wrdval @@ -501,11 +515,13 @@ %token NIL REF ABSENT EMPTY DOCUMENT ELEMENT CONTENT XMLNAMESPACES NAMESPACE %token XMLVALIDATE RETURNING LOCATION ID ACCORDING XMLSCHEMA URI XMLAGG +/* SciQL tokens */ +%token ARRAY DIMENSION /* operators */ %left UNION EXCEPT INTERSECT CORRESPONDING UNIONJOIN %left JOIN CROSS LEFT FULL RIGHT INNER NATURAL -%left LIKE BETWEEN sqlIN WITH DATA +%left LIKE BETWEEN sqlIN WITH DATA '[' ']' ':' %left <operation> OR %left <operation> AND %left <operation> NOT @@ -733,6 +749,11 @@ append_string(l, sa_strdup(SA, "current_timezone")); append_symbol(l, $4 ); $$ = _symbol_create_list( SQL_SET, l); } + | set array_element '=' simple_atom + { dlist *l = L(); + append_symbol(l, $2 ); + append_symbol(l, $4 ); + $$ = _symbol_create_list( SQL_SET, l); } ; schema: @@ -922,23 +943,23 @@ /* DOMAIN, ASSERTION, CHARACTER SET, TRANSLATION, TRIGGER */ alter_statement: - ALTER TABLE qname ADD opt_column add_table_element + ALTER table_or_array qname ADD opt_column add_table_element { dlist *l = L(); append_list(l, $3); append_symbol(l, $6); $$ = _symbol_create_list( SQL_ALTER_TABLE, l ); } - | ALTER TABLE qname ALTER alter_table_element + | ALTER table_or_array qname ALTER alter_table_element { dlist *l = L(); append_list(l, $3); append_symbol(l, $5); $$ = _symbol_create_list( SQL_ALTER_TABLE, l ); } - | ALTER TABLE qname DROP drop_table_element + | ALTER table_or_array qname DROP drop_table_element { dlist *l = L(); append_list(l, $3); append_symbol(l, $5); $$ = _symbol_create_list( SQL_ALTER_TABLE, l ); } - | ALTER TABLE qname SET READ ONLY + | ALTER table_or_array qname SET READ ONLY { dlist *l = L(); append_list(l, $3); append_symbol(l, NULL); @@ -1003,6 +1024,12 @@ $$ = _symbol_create_list( SQL_NOT_NULL, l); } | opt_column ident DROP DEFAULT { $$ = _symbol_create( SQL_DROP_DEFAULT, $2); } + | opt_column ident dimension + { dlist *l = L(); + l = append_string(l,$2); + l = append_symbol(l,$3); + $$= _symbol_create_list(SQL_DIMENSION, l); + } ; drop_table_element: @@ -1272,7 +1299,7 @@ ; table_def: - opt_temp TABLE qname table_content_source opt_on_commit + opt_temp table_or_array qname table_content_source opt_on_commit { int commit_action = CA_COMMIT; dlist *l = L(); append_int(l, $1); @@ -1281,8 +1308,12 @@ if ($1 != SQL_PERSIST) commit_action = $5; append_int(l, commit_action); - $$ = _symbol_create_list( SQL_CREATE_TABLE, l ); } - ; + $$ = _symbol_create_list( $2, l ); } + ; + +table_or_array: + TABLE {$$= SQL_CREATE_TABLE;} + | ARRAY {$$= SQL_CREATE_ARRAY;} opt_temp: /* empty */ { $$ = SQL_PERSIST; } @@ -1343,6 +1374,15 @@ append_list(l, $3); $$ = _symbol_create_list(SQL_COLUMN, l); } + | column data_type dimension opt_column_def_opt_list + { + dlist *l = L(); + append_string(l, $1); + append_type(l, &$2); + append_list(l, $4); + append_symbol(l, $3); + $$ = _symbol_create_list(SQL_COLUMN, l); + } | column serial_or_bigserial { /* SERIAL = INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY */ /* handle multi-statements by wrapping them in a list */ @@ -1432,7 +1472,7 @@ { $$ = append_symbol($1, $3 ); } ; -column_option: default | column_constraint | generated_column; +column_option: default | column_constraint | generated_column ; default: DEFAULT default_value { $$ = _symbol_create_symbol(SQL_DEFAULT, $2); } @@ -1527,6 +1567,70 @@ } ; +dimension: DIMENSION dim_range + { + $$= _symbol_create_list(SQL_DIMENSION,$2); + } + | DIMENSION { + $$= _symbol_create_list(SQL_DIMENSION,NULL); + } + | ARRAY dim_range_list + { + $$= _symbol_create_list(SQL_DIMENSION,$2); + } +; + +dim_range_list: + dim_range { + $$= $1; + } + | dim_range_list dim_range { + $$= append_list($1,$2); + } +; + +dim_range : + '[' dim_exp ':' dim_exp ':' dim_exp ']' + { + dlist *l = L(); + $$= l; + } + | '[' dim_exp ':' dim_exp ']' + { + dlist *l = L(); + $$= l; + } + | '[' ']' + { + dlist *l = L(); + $$= l; + } + | '[' dim_exp ']' + { + dlist *l = L(); + $$= l; + } + | '[' ident ']' /* sequence name */ + { + dlist *l = L(); + $$= l; + } +; + +dim_exp : + literal + { + $$= L(); + } + | '-' literal + { + $$= L(); + } + | '*' + { + $$= NULL; + } + serial_opt_params: /* empty: return the defaults */ { $$ = L(); @@ -1860,7 +1964,7 @@ return_value: select_no_parens_orderby | search_condition - | TABLE '(' select_no_parens_orderby ')' + | table_or_array '(' select_no_parens_orderby ')' { $$ = _symbol_create_symbol(SQL_TABLE, $3); } | sqlNULL { $$ = _newAtomNode( NULL); } ; @@ -1990,7 +2094,7 @@ ; func_data_type: _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list