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 -- [email protected]
To unsubscribe send an email to [email protected]