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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list