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

Reply via email to