Changeset: d381ac8a594e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d381ac8a594e Modified Files: sql/backends/monet5/rel_bin.c sql/common/sql_types.c sql/common/sql_types.h sql/include/sql_keyword.h sql/server/rel_exp.c sql/server/rel_select.c sql/server/sql_parser.y sql/server/sql_scan.c sql/test/BugTracker-2022/Tests/incomplete-sql-script.Bug-7298.SQL.py Branch: default Log Message:
removal of alias types (only BOOL was still handled that way) allow for prefix-filter functions (ie contains(a, b), where a contains b). diffs (truncated from 333 to 300 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -1710,7 +1710,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l } if (!s) return s; - if (s->nrcols == 0 && first) + if (s->nrcols == 0 && first && left) s = stmt_const(be, bin_find_smallest_column(be, swapped?right:left), s); list_append(ops, s); first = 0; diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -25,7 +25,6 @@ #include "sql_types.h" #include "sql_keyword.h" /* for keyword_exists(), keywords_insert(), init_keywords(), exit_keywords() */ -list *aliases = NULL; list *types = NULL; list *funcs = NULL; @@ -719,35 +718,6 @@ sql_dup_subfunc(sql_allocator *sa, sql_f } -static void -sql_create_alias(sql_allocator *sa, const char *name, const char *alias) -{ - sql_alias *a = SA_ZNEW(sa, sql_alias); - - if(a) { - a->name = sa_strdup(sa, name); - a->alias = sa_strdup(sa, alias); - list_append(aliases, a); - if (!keyword_exists(a->alias) ) - (void) keywords_insert(a->alias, KW_ALIAS); - } -} - -char * -sql_bind_alias(const char *alias) -{ - node *n; - - for (n = aliases->h; n; n = n->next) { - sql_alias *a = n->data; - - if (strcmp(a->alias, alias) == 0) { - return a->name; - } - } - return NULL; -} - static sqlid local_id = 1; static sql_type * @@ -948,7 +918,6 @@ sqltypeinit( sql_allocator *sa) PTR = *t++ = sql_create_type(sa, "PTR", 0, 0, 0, EC_TABLE, "ptr"); BIT = *t++ = sql_create_type(sa, "BOOLEAN", 1, 0, 2, EC_BIT, "bit"); - sql_create_alias(sa, BIT->base.name, "BOOL"); STR = *t++ = sql_create_type(sa, "VARCHAR", 0, 0, 0, EC_STRING, "str"); *t++ = sql_create_type(sa, "CHAR", 0, 0, 0, EC_CHAR, "str"); @@ -1715,7 +1684,6 @@ void types_init(sql_allocator *sa) { local_id = 1; - aliases = sa_list(sa); types = sa_list(sa); localtypes = sa_list(sa); funcs = sa_list(sa); diff --git a/sql/common/sql_types.h b/sql/common/sql_types.h --- a/sql/common/sql_types.h +++ b/sql/common/sql_types.h @@ -21,7 +21,6 @@ #include "sql_backend.h" #include "stream.h" -extern list *aliases; extern list *types; extern list *funcs; @@ -33,8 +32,6 @@ extern int sql_type_convert(int form, in extern int sql_type_convert_preference(int form, int to); extern bool is_commutative(const char *sname, const char *fnm); /* return true if commutative */ -extern char *sql_bind_alias(const char *alias); - extern sql_subtype *arg_type( sql_arg *a); sql_export int sql_find_subtype(sql_subtype *res, const char *name, unsigned int digits, unsigned int scale); diff --git a/sql/include/sql_keyword.h b/sql/include/sql_keyword.h --- a/sql/include/sql_keyword.h +++ b/sql/include/sql_keyword.h @@ -16,7 +16,6 @@ /* we need to define these here as the parser header file is generated to late. * The numbers get remapped in the scanner. */ -#define KW_ALIAS 4000 #define KW_TYPE 4001 typedef struct keyword { diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -196,6 +196,15 @@ exp_filter(sql_allocator *sa, list *l, l if (e == NULL) return NULL; e->card = MAX(exps_card(l),exps_card(r)); + if (!r) { /* split l */ + list *nl = sa_list(sa), *nr = sa_list(sa); + node *n = l->h; + append(nl, n->data); /* sofar only first is left */ + for(n = n->next; n; n = n->next) + append(nr, n->data); + l = nl; + r = nr; + } e->l = l; e->r = r; e->f = f; @@ -370,6 +379,8 @@ exp_convert(sql_allocator *sa, sql_exp * sql_exp * exp_op( sql_allocator *sa, list *l, sql_subfunc *f ) { + if (f->func->type == F_FILT) + return exp_filter(sa, l, NULL, f, false); sql_exp *e = exp_create(sa, e_func); if (e == NULL) return NULL; diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2920,7 +2920,7 @@ rel_binop_(mvc *sql, sql_rel *rel, sql_e } sql_subfunc *f = bind_func(sql, sname, fname, t1, t2, 2, type, false, &found, exact); - if(f && check_card(card,f)) { + if (f && check_card(card,f)) { t1 = exp_subtype(l); t2 = exp_subtype(r); list *args = list_append(list_append(sa_list(sql->sa), l), r); diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -432,7 +432,6 @@ int yydebug=1; restricted_ident sstring string - type_alias user_schema opt_schema_path ustring @@ -641,14 +640,14 @@ int yydebug=1; /* sql prefixes to avoid name clashes on various architectures */ %token <sval> - IDENT UIDENT aTYPE ALIAS RANK MARGFUNC sqlINT OIDNUM HEXADECIMALNUM OCTALNUM BINARYNUM INTNUM APPROXNUM + IDENT UIDENT aTYPE RANK MARGFUNC sqlINT OIDNUM HEXADECIMALNUM OCTALNUM BINARYNUM INTNUM APPROXNUM USING GLOBAL CAST CONVERT CHARACTER VARYING LARGE OBJECT VARCHAR CLOB sqlTEXT BINARY sqlBLOB sqlDECIMAL sqlFLOAT TINYINT SMALLINT BIGINT HUGEINT sqlINTEGER sqlDOUBLE sqlREAL PRECISION PARTIAL SIMPLE ACTION CASCADE RESTRICT - BOOL_FALSE BOOL_TRUE + BOOL BOOL_FALSE BOOL_TRUE CURRENT_DATE CURRENT_TIMESTAMP CURRENT_TIME LOCALTIMESTAMP LOCALTIME BIG LITTLE NATIVE ENDIAN LEX_ERROR @@ -4649,8 +4648,7 @@ column_exp: opt_alias_name: /* empty */ { $$ = NULL; } - | AS ident { $$ = $2; } - | ident { $$ = $1; } + | opt_as ident { $$ = $2; } ; atom: @@ -5332,12 +5330,12 @@ literal: } $$ = _newAtomNode(a); } - | type_alias string + | BOOL string { sql_subtype t; atom *a = NULL; int r; - if (!(r = sql_find_subtype(&t, $1, 0, 0))) { + if (!(r = sql_find_subtype(&t, "boolean", 0, 0))) { sqlformaterror(m, SQLSTATE(22000) "Type (%s) unknown", $1); YYABORT; } @@ -5423,17 +5421,14 @@ interval_expression: qname: ident { $$ = append_string(L(), $1); } - | ident '.' ident { - m->scanner.schema = $1; + | ident '.' ident { m->scanner.schema = $1; $$ = append_string( append_string(L(), $1), $3);} - | ident '.' ident '.' ident { - m->scanner.schema = $1; + | ident '.' ident '.' ident { m->scanner.schema = $1; $$ = append_string( append_string( append_string(L(), $1), $3), - $5) - ;} + $5);} ; column_ref: @@ -5684,18 +5679,7 @@ data_type: | aTYPE { sql_find_subtype(&$$, $1, 0, 0); } | aTYPE '(' nonzero ')' { sql_find_subtype(&$$, $1, $3, 0); } - | type_alias { sql_find_subtype(&$$, $1, 0, 0); } - | type_alias '(' nonzero ')' - { sql_find_subtype(&$$, $1, $3, 0); } - | type_alias '(' intval ',' intval ')' - { if ($5 >= $3) { - sqlformaterror(m, SQLSTATE(22003) "Precision(%d) should be less than number of digits(%d)", $5, $3); - $$.type = NULL; - YYABORT; - } else { - sql_find_subtype(&$$, $1, $3, $5); - } - } + | BOOL { sql_find_subtype(&$$, "boolean", 0, 0); } | ident_or_uident { sql_type *t = mvc_bind_type(m, $1); if (!t) { @@ -5805,18 +5789,6 @@ subgeometry_type: } ; -type_alias: - ALIAS - { char *t = sql_bind_alias($1); - if (!t) { - sqlformaterror(m, SQLSTATE(22000) "Type (%s) unknown", $1); - $$ = NULL; - YYABORT; - } - $$ = t; - } - ; - varchar: VARCHAR { $$ = $1; } | CHARACTER VARYING { $$ = $1; } @@ -5841,7 +5813,6 @@ calc_restricted_ident: | UIDENT opt_uescape { $$ = uescape_xform($1, $2); } | aTYPE { $$ = $1; } - | ALIAS { $$ = $1; } | RANK { $$ = $1; } /* without '(' */ ; @@ -5861,7 +5832,6 @@ calc_ident: | UIDENT opt_uescape { $$ = uescape_xform($1, $2); } | aTYPE { $$ = $1; } - | ALIAS { $$ = $1; } | RANK { $$ = $1; } /* without '(' */ | MARGFUNC { $$ = $1; } /* without '(' */ | non_reserved_word @@ -5911,6 +5881,7 @@ non_reserved_word: | ASC { $$ = sa_strdup(SA, "asc"); } | AUTO_COMMIT { $$ = sa_strdup(SA, "auto_commit"); } | BIG { $$ = sa_strdup(SA, "big"); } +| BOOL { $$ = sa_strdup(SA, "bool"); } | CACHE { $$ = sa_strdup(SA, "cache"); } | CENTURY { $$ = sa_strdup(SA, "century"); } | CLIENT { $$ = sa_strdup(SA, "client"); } diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -121,6 +121,7 @@ scanner_init_keywords(void) failed += keywords_insert("false", BOOL_FALSE); failed += keywords_insert("true", BOOL_TRUE); + failed += keywords_insert("bool", BOOL); failed += keywords_insert("ALTER", ALTER); failed += keywords_insert("ADD", ADD); @@ -1476,16 +1477,11 @@ sql_get_next_token(YYSTYPE *yylval, void yylval->sval = (lc->rs->buf + lc->rs->pos + lc->yysval); - /* This is needed as ALIAS and aTYPE get defined too late, see - sql_keyword.h */ _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org