Changeset: c34fc311b813 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c34fc311b813
Modified Files:
sql/common/sql_keyword.c
sql/include/sql_keyword.h
sql/server/rel_select.c
sql/server/sql_semantic.c
sql/server/sql_semantic.h
sql/test/merge-partitions/Tests/mergepart20.test
Branch: Dec2025
Log Message:
Use GDK function to do case conversions.
Also fix a typo.
diffs (truncated from 373 to 300 lines):
diff --git a/sql/common/sql_keyword.c b/sql/common/sql_keyword.c
--- a/sql/common/sql_keyword.c
+++ b/sql/common/sql_keyword.c
@@ -39,12 +39,19 @@ keyword_key(char *k, int *l)
}
int
-keywords_insert(char *k, int token)
+keywords_insert(const char *oldk, int token)
{
keyword *kw = MNEW(keyword);
- if(kw) {
+ char *k = NULL;
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
+ if (GDKtolower(ta, &k, &(size_t){0}, oldk) != GDK_SUCCEED)
+ return -1;
+ k = GDKstrdup(k);
+ ma_close(&ta_state);
+ if (kw != NULL && k != NULL) {
int len = 0;
- int bucket = keyword_key(k = toLower(k), &len) & HASH_MASK;
+ int bucket = keyword_key(k, &len) & HASH_MASK;
#ifndef NDEBUG
/* no duplicate keywords */
keyword *kw2;
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
@@ -25,7 +25,7 @@ typedef struct keyword {
struct keyword *next;
} keyword;
-extern int keywords_insert(char *k, int token);
+extern int keywords_insert(const char *k, int token);
extern keyword *find_keyword(char *text);
extern int keyword_exists(char *text);
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
@@ -3471,33 +3471,43 @@ static sql_exp *
bool is_grouping = !strcmp(aname, "grouping"), has_args = false, found
= false, used_rel = false;
if (!all_aggr) {
+ char *uaname = NULL;
if (!groupby) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s: missing
group by", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: missing
group by", uaname);
} else if (is_sql_groupby(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate function '%s' not allowed in GROUP BY clause", toUpperCopy(uaname,
aname), aname);
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate function '%s' not allowed in GROUP BY clause", uaname, aname);
} else if (is_sql_values(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed on an unique value", toUpperCopy(uaname,
aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed on a unique value", uaname);
} else if (is_sql_join(f)) { /* the is_sql_join test must come
before is_sql_where, because the join conditions are handled with sql_where */
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in JOIN conditions", toUpperCopy(uaname,
aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in JOIN conditions", uaname);
} else if (is_sql_where(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in WHERE clause", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in WHERE clause", uaname);
} else if (is_sql_update_set(f) || is_sql_psm(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in SET, WHILE, IF, ELSE, CASE, WHEN, RETURN,
ANALYZE clauses (use subquery)", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in SET, WHILE, IF, ELSE, CASE, WHEN, RETURN,
ANALYZE clauses (use subquery)", uaname);
} else if (is_sql_aggr(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions cannot be nested", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions cannot be nested", uaname);
} else if (is_psm_call(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed inside CALL", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed inside CALL", uaname);
} else if (is_sql_from(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in functions in FROM", toUpperCopy(uaname,
aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in functions in FROM", uaname);
}
}
@@ -3518,8 +3528,10 @@ static sql_exp *
has_args = true;
if (gl && gl != ogl) {
if (gl->grouped) {
- char *uaname = SA_NEW_ARRAY(sql->ta,
char, strlen(aname) + 1);
- return sql_error(sql, 02,
SQLSTATE(42000) "%s: aggregate functions cannot be nested", toUpperCopy(uaname,
aname));
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname,
&(size_t){0}, aname) != GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02,
SQLSTATE(42000) "%s: aggregate functions cannot be nested", uaname);
}
if (!base)
groupby->l = subquery = gl;
@@ -3528,8 +3540,10 @@ static sql_exp *
}
sql_subtype *t = exp_subtype(e);
if (!t) { /* we also do not expect parameters here */
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
parameters not allowed as arguments to aggregate functions",
toUpperCopy(uaname, aname));
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0},
aname) != GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
parameters not allowed as arguments to aggregate functions", uaname);
}
if (!t->type->localtype) {
if (e->type == e_atom && !e->f) {
@@ -3550,24 +3564,31 @@ static sql_exp *
all_freevar = 0;
}
if (!all_freevar) {
+ char *uaname = NULL;
if (is_sql_groupby(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate function '%s' not allowed in GROUP BY clause", toUpperCopy(uaname,
aname), aname);
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate function '%s' not allowed in GROUP BY clause", uaname, aname);
} else if (is_sql_from(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in functions in FROM", toUpperCopy(uaname,
aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in functions in FROM", uaname);
} else if (is_sql_aggr(f) && groupby->grouped) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions cannot be nested", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions cannot be nested", uaname);
} else if (is_sql_values(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed on an unique value", toUpperCopy(uaname,
aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed on an unique value", uaname);
} else if (is_sql_join(f)) { /* the is_sql_join test must come
before is_sql_where, because the join conditions are handled with sql_where */
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in JOIN conditions", toUpperCopy(uaname,
aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in JOIN conditions", uaname);
} else if (is_sql_where(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in WHERE clause", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in WHERE clause", uaname);
} else if (!all_aggr && !list_empty(ungrouped_cols)) {
for (node *n = ungrouped_cols->h ; n ; n = n->next) {
sql_rel *outer;
@@ -3592,8 +3613,9 @@ static sql_exp *
return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: subquery uses ungrouped column from outer
query");
}
} else if (!used_rel &&
is_sql_where(of)) {
- char *uaname =
SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
- return sql_error(sql, 02,
SQLSTATE(42000) "%s: aggregate functions not allowed in WHERE clause",
toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta,
&uaname, &(size_t){0}, aname) != GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02,
SQLSTATE(42000) "%s: aggregate functions not allowed in WHERE clause", uaname);
} else if (!is_sql_aggr(of)) {
set_outer(outer);
}
@@ -3639,8 +3661,10 @@ static sql_exp *
if (is_sql_groupby(sql_state))
return sql_error(sql, 05,
SQLSTATE(42000) "SELECT: aggregate function '%s' not allowed in GROUP BY
clause", aname);
if (is_sql_aggr(sql_state) && groupby->grouped)
{
- char *uaname = SA_NEW_ARRAY(sql->ta,
char, strlen(aname) + 1);
- return sql_error(sql, 02,
SQLSTATE(42000) "%s: aggregate functions cannot be nested", toUpperCopy(uaname,
aname));
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname,
&(size_t){0}, aname) != GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02,
SQLSTATE(42000) "%s: aggregate functions cannot be nested", uaname);
}
if (is_sql_values(sql_state))
return sql_error(sql, 05,
SQLSTATE(42000) "SELECT: aggregate functions not allowed on an unique value");
@@ -3703,8 +3727,10 @@ static sql_exp *
}
if (!groupby && exps_card(exps) > CARD_ATOM) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s: missing group
by", toUpperCopy(uaname, aname));
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname) !=
GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: missing group
by", uaname);
}
if (!subquery && groupby && groupby->op != op_groupby) {
/* implicit groupby */
@@ -3757,8 +3783,10 @@ static sql_exp *
sql_exp *e;
if (strcmp(aname, "count") != 0) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s: unable
to perform '%s(*)'", toUpperCopy(uaname, aname), aname);
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname)
!= GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: unable
to perform '%s(*)'", uaname, aname);
}
a = sql_bind_func(sql, "sys", aname,
sql_fetch_localtype(TYPE_void), NULL, F_AGGR, true, true);
e = exp_aggr(sql->sa, NULL, a, distinct, 0,
groupby?groupby->card:CARD_ATOM, 0);
@@ -3866,13 +3894,15 @@ static sql_exp *
return e;
}
const char *type = "unknown";
- char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname) != GDK_SUCCEED)
+ uaname = aname;
if (!list_empty(exps)) {
sql_exp *e = exps->h->data;
type = exp_subtype(e)->type->base.name;
}
- return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "%s: %s aggregate
%s%s%s'%s'(%s)", toUpperCopy(uaname, aname), found ? "insufficient privileges
for" : "no such",
+ return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "%s: %s aggregate
%s%s%s'%s'(%s)", uaname, found ? "insufficient privileges for" : "no such",
sname ? "'":"", sname ? sname : "",
sname ? "'.":"", aname, type);
}
@@ -4880,19 +4910,23 @@ rel_rankop(sql_query *query, sql_rel **r
rank = true;
supports_frames = (!rank || is_value);
+ char *uaname = NULL;
if (is_sql_update_set(f) || is_sql_psm(f) || is_sql_values(f) ||
is_sql_join(f) || is_sql_where(f) || is_sql_groupby(f) || is_sql_having(f) ||
is_psm_call(f) || is_sql_from(f) || is_sql_check(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname) !=
GDK_SUCCEED)
+ uaname = aname;
const char *clause = is_sql_update_set(f)||is_sql_psm(f)?"in
SET, WHILE, IF, ELSE, CASE, WHEN, RETURN, ANALYZE clauses (use
subquery)":is_sql_values(f)?"on an unique value":
is_sql_join(f)?"in
JOIN conditions":is_sql_where(f)?"in WHERE clause":is_sql_groupby(f)?"in GROUP
BY clause":
is_psm_call(f)?"in
CALL":is_sql_from(f)?"in functions in FROM":
is_sql_check(f)?"in
check constraints":"in HAVING clause";
- return sql_error(sql, 02, SQLSTATE(42000) "%s: window function
'%s' not allowed %s", toUpperCopy(uaname, aname), aname, clause);
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: window function
'%s' not allowed %s", uaname, aname, clause);
} else if (is_sql_aggr(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s: window functions
not allowed inside aggregation functions", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname) !=
GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: window functions
not allowed inside aggregation functions", uaname);
} else if (is_sql_window(f)) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "%s: window functions
cannot be nested", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname) !=
GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "%s: window functions
cannot be nested", uaname);
}
if (window_function->token == SQL_AGGR) {
dn->next->next->type = type_list;
@@ -4901,8 +4935,9 @@ rel_rankop(sql_query *query, sql_rel **r
if (window_function->token == SQL_NOP)
window_function->token = SQL_AGGR;
if (window_function->token != SQL_RANK && window_function->token !=
SQL_AGGR) {
- char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
- return sql_error(sql, 02, SQLSTATE(42000) "SELECT: window
function '%s' unknown", toUpperCopy(uaname, aname));
+ if (GDKtoupper(sql->ta, &uaname, &(size_t){0}, aname) !=
GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02, SQLSTATE(42000) "SELECT: window
function '%s' unknown", uaname);
}
/* window operations are only allowed in the projection */
@@ -4951,8 +4986,10 @@ rel_rankop(sql_query *query, sql_rel **r
if (!in)
return NULL;
if (!exp_subtype(in)) { /* we also do not
expect parameters here */
- char *uaname = SA_NEW_ARRAY(sql->ta,
char, strlen(aname) + 1);
- return sql_error(sql, 02,
SQLSTATE(42000) "%s: parameters not allowed as arguments to window functions",
toUpperCopy(uaname, aname));
+ char *uaname = NULL;
+ if (GDKtoupper(sql->ta, &uaname,
&(size_t){0}, aname) != GDK_SUCCEED)
+ uaname = aname;
+ return sql_error(sql, 02,
SQLSTATE(42000) "%s: parameters not allowed as arguments to window functions",
uaname);
}
if (!exp_name(in))
exp_label(sql->sa, in, ++sql->label);
@@ -4984,8 +5021,10 @@ rel_rankop(sql_query *query, sql_rel **r
if (!in)
return NULL;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]