Changeset: d9c0306a548f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d9c0306a548f
Branch: default
Log Message:

Merge with mangled.


diffs (truncated from 202958 to 300 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2587,7 +2587,7 @@ doFile(Mapi mid, stream *fp, bool useins
                                                        continue;
                                                }
 
-                                               /*
+                                               /* get all object names in 
current schema
                                                 * | LINE            | SCHEMA 
FILTER | NAME FILTER                   |
                                                 * 
|-----------------+---------------+-------------------------------|
                                                 * | ""              | yes      
     | -                             |
diff --git a/sql/backends/monet5/UDF/capi/capi.c 
b/sql/backends/monet5/UDF/capi/capi.c
--- a/sql/backends/monet5/UDF/capi/capi.c
+++ b/sql/backends/monet5/UDF/capi/capi.c
@@ -539,7 +539,7 @@ static str CUDFeval(Client cntxt, MalBlk
                sqlfun = *(sql_func **)getArgReference_ptr(stk, pci, pci->retc);
        }
 
-       funcname = sqlfun ? sqlfun->base.name : "yet_another_c_function";
+       funcname = sqlfun ? sqlfun->sql_name : "yet_another_c_function";
 
        args = (str *)GDKzalloc(sizeof(str) * pci->argc);
        output_names = (str *)GDKzalloc(sizeof(str) * pci->argc);
diff --git a/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.test 
b/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.test
--- a/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.test
+++ b/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.test
@@ -86,7 +86,7 @@ DROP LOADER myfunc2
 statement ok
 DROP LOADER myfunc3
 
-query ITTTIIIIIIII rowsort
+query ITTTIIIIIIIIT rowsort
 SELECT * FROM functions WHERE name='myfunc'
 ----
 
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
@@ -1256,13 +1256,13 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                }
                assert(!e->r);
                if (strcmp(mod, "") == 0 && strcmp(fimp, "") == 0) {
-                       if (strcmp(f->func->base.name, "star") == 0)
+                       if (strcmp(f->func->sql_name, "star") == 0)
                                return left->op4.lval->h->data;
-                       if (strcmp(f->func->base.name, "case") == 0)
+                       if (strcmp(f->func->sql_name, "case") == 0)
                                return exp2bin_case(be, e, left, right, sel, 
depth);
-                       if (strcmp(f->func->base.name, "casewhen") == 0)
+                       if (strcmp(f->func->sql_name, "casewhen") == 0)
                                return exp2bin_casewhen(be, e, left, right, 
sel, depth);
-                       if (strcmp(f->func->base.name, "coalesce") == 0)
+                       if (strcmp(f->func->sql_name, "coalesce") == 0)
                                return exp2bin_coalesce(be, e, left, right, 
sel, depth);
                }
                if (!list_empty(exps)) {
@@ -1281,7 +1281,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                                else if (f->func->type == F_ANALYTIC && 
es->nrcols == 0) {
                                        if (en == exps->h && left->nrcols)
                                                es = stmt_const(be, 
bin_find_smallest_column(be, left), es); /* ensure the first argument is a 
column */
-                                       if (!f->func->s && 
!strcmp(f->func->base.name, "window_bound")
+                                       if (!f->func->s && 
!strcmp(f->func->sql_name, "window_bound")
                                                && exps->h->next && 
list_length(f->func->ops) == 6 && en == exps->h->next && left->nrcols)
                                                es = stmt_const(be, 
bin_find_smallest_column(be, left), es);
                                }
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -930,7 +930,7 @@ drop_func(mvc *sql, char *sname, char *n
                        sql_func *func = (sql_func*)b;
 
                        if (!action && mvc_check_dependency(sql, func->base.id, 
!IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL))
-                               throw(SQL,"sql.drop_func", SQLSTATE(42000) 
"DROP %s: there are database objects dependent on %s %s;", F, fn, 
func->base.name);
+                               throw(SQL,"sql.drop_func", SQLSTATE(42000) 
"DROP %s: there are database objects dependent on %s %s;", F, fn, 
func->sql_name);
                        res = mvc_drop_func(sql, s, func, action);
                }
        } else if (fid == -2) { /* if exists option */
@@ -944,7 +944,7 @@ drop_func(mvc *sql, char *sname, char *n
 
                                if (!action && mvc_check_dependency(sql, 
func->base.id, !IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, list_func)) {
                                        list_destroy(list_func);
-                                       throw(SQL,"sql.drop_func", 
SQLSTATE(42000) "DROP %s: there are database objects dependent on %s %s;", F, 
fn, func->base.name);
+                                       throw(SQL,"sql.drop_func", 
SQLSTATE(42000) "DROP %s: there are database objects dependent on %s %s;", F, 
fn, func->sql_name);
                                }
                        }
                res = mvc_drop_all_func(sql, s, list_func, action);
@@ -1003,7 +1003,7 @@ create_func(mvc *sql, char *sname, char 
                        sql_func *sff = sf->func;
 
                        if (!sff->s || sff->system)
-                               throw(SQL,"sql.create_func", SQLSTATE(42000) 
"%s %s: not allowed to replace system %s %s;", base, F, fn, sff->base.name);
+                               throw(SQL,"sql.create_func", SQLSTATE(42000) 
"%s %s: not allowed to replace system %s %s;", base, F, fn, sff->sql_name);
 
                        /* if all function parameters are the same, return */
                        if (sff->lang == f->lang && sff->type == f->type &&
@@ -1014,7 +1014,7 @@ create_func(mvc *sql, char *sname, char 
                                return MAL_SUCCEED;
 
                        if (mvc_check_dependency(sql, sff->base.id, 
!IS_PROC(sff) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL))
-                               throw(SQL,"sql.create_func", SQLSTATE(42000) 
"%s %s: there are database objects dependent on %s %s;", base, F, fn, 
sff->base.name);
+                               throw(SQL,"sql.create_func", SQLSTATE(42000) 
"%s %s: there are database objects dependent on %s %s;", base, F, fn, 
sff->sql_name);
                        switch (mvc_drop_func(sql, s, sff, 0)) {
                                case -1:
                                        throw(SQL,"sql.create_func", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -1029,7 +1029,7 @@ create_func(mvc *sql, char *sname, char 
                        sql->errstr[0] = '\0';
                }
        }
-       switch (mvc_create_func(&nf, sql, NULL, s, f->base.name, f->ops, 
f->res, f->type, f->lang, f->mod, f->imp, f->query, f->varres, f->vararg, 
f->system, f->side_effect)) {
+       switch (mvc_create_func(&nf, sql, NULL, s, f->sql_name, f->ops, f->res, 
f->type, f->lang, f->mod, f->imp, f->query, f->varres, f->vararg, f->system, 
f->side_effect)) {
                case -1:
                        throw(SQL,"sql.create_func", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                case -2:
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1160,12 +1160,12 @@ backend_create_mal_func(mvc *m, sql_func
        if (!(fimp = mal_function_find_implementation_address(m, f)))
                return -1;
        if (!backend_resolve_function(&clientid, f, fimp, &new_side_effect)) {
-               (void) sql_error(m, 10, SQLSTATE(3F000) "MAL external name 
%s.%s not bound (%s.%s)", f->mod, fimp, f->s->base.name, f->base.name);
+               (void) sql_error(m, 10, SQLSTATE(3F000) "MAL external name 
%s.%s not bound (%s.%s)", f->mod, fimp, f->s->base.name, f->sql_name);
                return -1;
        }
        if (old_side_effect != new_side_effect) {
                (void) sql_error(m, 10, SQLSTATE(42000) "Side-effect value from 
the SQL %s %s.%s doesn't match the MAL definition %s.%s\n"
-                                                "Either re-create the %s, or 
fix the MAL definition and restart the database", fn, f->s->base.name, 
f->base.name, f->mod, fimp, fn);
+                                                "Either re-create the %s, or 
fix the MAL definition and restart the database", fn, f->s->base.name, 
f->sql_name, f->mod, fimp, fn);
                return -1;
        }
        MT_lock_set(&sql_gencodeLock);
@@ -1212,11 +1212,11 @@ backend_create_sql_func(backend *be, sql
 
 #ifndef NDEBUG
        /* for debug builds we keep the SQL function name in the MAL function 
name to make it easy to debug */
-       if (strlen(f->base.name) + 21 >= IDLENGTH) { /* 20 bits for u64 number 
+ '%' */
-               (void) sql_error(m, 10, SQLSTATE(42000) "MAL function name '%s' 
too large for the backend", f->base.name);
+       if (strlen(f->sql_name) + 21 >= IDLENGTH) { /* 20 bits for u64 number + 
'%' */
+               (void) sql_error(m, 10, SQLSTATE(42000) "MAL function name '%s' 
too large for the backend", f->sql_name);
                return -1;
        }
-       (void) snprintf(befname, IDLENGTH, "%%" LLFMT "%s", 
store_function_counter(m->store), f->base.name);
+       (void) snprintf(befname, IDLENGTH, "%%" LLFMT "%s", 
store_function_counter(m->store), f->sql_name);
 #else
        (void) snprintf(befname, IDLENGTH, "f_" LLFMT, 
store_function_counter(m->store));
 #endif
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1627,7 +1627,7 @@ range_join_convertable(stmt *s, stmt **b
                h = s->op3->op1->op4.lval->t->data;
        }
 
-       if (((ls = (l && strcmp(s->op2->op4.funcval->func->base.name, 
"sql_sub") == 0 && l->nrcols == 0)) || (hs = (h && 
strcmp(s->op3->op4.funcval->func->base.name, "sql_add") == 0 && h->nrcols == 
0))) && (ls || hs) && bl == bh) {
+       if (((ls = (l && strcmp(s->op2->op4.funcval->func->sql_name, "sql_sub") 
== 0 && l->nrcols == 0)) || (hs = (h && 
strcmp(s->op3->op4.funcval->func->sql_name, "sql_add") == 0 && h->nrcols == 
0))) && (ls || hs) && bl == bh) {
                *base = bl;
                *L = l;
                *H = h;
@@ -3360,7 +3360,7 @@ stmt_Nop(backend *be, stmt *ops, stmt *s
 
                nrcols = e1->nrcols>e2->nrcols ? e1->nrcols:e2->nrcols;
                /* nullif(e1,e2) -> ifthenelse(e1==e2),NULL,e1) */
-               if (strcmp(f->func->base.name, "nullif") == 0) {
+               if (strcmp(f->func->sql_name, "nullif") == 0) {
                        const char *mod = (!nrcols)?calcRef:batcalcRef;
                        sql_subtype *t = tail_type(e1);
                        int tt = t->type->localtype;
@@ -3936,7 +3936,7 @@ const char *
        case st_aggr:
        {
                const char *cn = column_name(sa, st->op1);
-               return func_name(sa, st->op4.funcval->func->base.name, cn);
+               return func_name(sa, st->op4.funcval->func->sql_name, cn);
        }
        case st_alias:
                if (st->op3)
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -77,8 +77,8 @@ sql_fix_system_tables(Client c, mvc *sql
                pos += snprintf(buf + pos, bufsize - pos,
                                "insert into sys.functions values"
                                " (%d, '%s', '%s', '%s',"
-                               " %d, %d, %s, %s, %s, %d, %s, %s);\n",
-                               func->base.id, func->base.name,
+                               " %d, %d, %s, %s, %s, %d, %s, %s, '%s');\n",
+                               func->base.id, func->sql_name,
                                sql_func_imp(func), sql_func_mod(func), (int) 
FUNC_LANG_INT,
                                (int) func->type,
                                boolnames[func->side_effect],
@@ -86,7 +86,8 @@ sql_fix_system_tables(Client c, mvc *sql
                                boolnames[func->vararg],
                                func->s ? func->s->base.id : s->base.id,
                                boolnames[func->system],
-                               boolnames[func->semantics]);
+                               boolnames[func->semantics],
+                               func->base.name);
                if (func->res) {
                        for (m = func->res->h; m; m = m->next, number++) {
                                arg = m->data;
@@ -4649,6 +4650,230 @@ sql_update_jan2022(Client c, mvc *sql, c
        return err;             /* usually MAL_SUCCEED */
 }
 
+static str
+sql_update_default(Client c, mvc *sql, const char *prev_schema, bool 
*systabfixed)
+{
+       size_t bufsize = 65536, pos = 0;
+       char *buf = NULL, *err = NULL;
+       res_table *output;
+
+       if ((buf = GDKmalloc(bufsize)) == NULL)
+               throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+       pos += snprintf(buf + pos, bufsize - pos,
+                       "select c.id from schemas s, tables t, columns c, 
functions f, dependencies d \n"
+                       "where s.id = t.schema_id and t.id = c.table_id and 
d.id = c.id and d.depend_id = f.id and f.name = 'describe_function' and s.name 
= 'sys' and t.name = 'functions' and c.name = 'mangled_name';\n");
+       err = SQLstatementIntern(c, buf, "update", 1, 0, &output);
+       if (err) {
+               GDKfree(buf);
+               return err;
+       }
+       BAT* b = BATdescriptor(output->cols[0].b);
+       if (b) {
+               if (BATcount(b)) {
+                       assert(BATcount(b) == 1);
+                       BBPunfix(b->batCacheid);
+                       /* nothing to do */
+                       GDKfree(buf);
+                       res_table_destroy(output);
+                       return NULL;
+               }
+               BBPunfix(b->batCacheid);
+       }
+       else {
+               res_table_destroy(output);
+               throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+       }
+
+       res_table_destroy(output);
+
+       if (!*systabfixed && (err = sql_fix_system_tables(c, sql, prev_schema)) 
!= NULL)
+               return err;
+       *systabfixed = true;
+
+       pos = snprintf(buf, bufsize, "SET SCHEMA \"sys\";\n");
+
+       sql_schema *s = mvc_bind_schema(sql, "sys");
+       sql_table* t = NULL;
+
+       t = mvc_bind_table(sql, s, "describe_privileges");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "dump_comments");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "describe_comments");
+       t->system = 0;
+       t = mvc_bind_table(sql, s, "fully_qualified_functions");
+       t->system = 0;
+
+       pos += snprintf(buf + pos, bufsize - pos,
+                               "UPDATE sys.functions SET system = false WHERE 
schema_id = 2000 AND name in ('dump_database', 'describe_function');"
+                               "UPDATE sys._tables SET system = false WHERE 
schema_id = 2000 AND name in ('describe_privileges', 'dump_comments', 
'describe_comments', 'fully_qualified_functions');"
+                               "DROP VIEW sys.describe_privileges;\n"
+                               "DROP FUNCTION sys.dump_database(BOOLEAN);\n"
+                               "DROP VIEW sys.dump_comments;\n"
+                               "DROP VIEW sys.describe_comments;\n"
+                               "DROP VIEW sys.fully_qualified_functions;\n"
+                               "DROP FUNCTION sys.describe_function(STRING, 
STRING);\n"
+                               "CREATE FUNCTION 
sys.describe_function(schemaName string, functionName string)\n"
+                               "       RETURNS TABLE(id integer, name string, 
type string, language string, remark string)\n"
+                               "BEGIN\n"
+                               "       RETURN SELECT f.id, f.name, 
ft.function_type_keyword, fl.language_keyword, c.remark\n"
+                               "               FROM sys.functions f\n"
+                               "               JOIN sys.schemas s ON 
f.schema_id = s.id\n"
+                               "               JOIN sys.function_types ft ON 
f.type = ft.function_type_id\n"
+                               "               LEFT OUTER JOIN 
sys.function_languages fl ON f.language = fl.language_id\n"
+                               "               LEFT OUTER JOIN sys.comments c 
ON f.id = c.id\n"
+                               "               WHERE f.name=functionName AND 
s.name = schemaName;\n"
+                               "END;\n"
+                               "CREATE VIEW sys.fully_qualified_functions AS\n"
+                               "       WITH fqn(id, tpe, sig, num) AS\n"
+                               "       (\n"
+                               "               SELECT\n"
+                               "                       f.id,\n"
+                               "                       
ft.function_type_keyword,\n"
+                               "                       CASE WHEN a.type IS 
NULL THEN\n"
+                               "                               sys.fqn(s.name, 
f.name) || '()'\n"
+                               "                       ELSE\n"
+                               "                               sys.fqn(s.name, 
f.name) || '(' || group_concat(sys.describe_type(a.type, a.type_digits, 
a.type_scale), ',') OVER (PARTITION BY f.id ORDER BY a.number)  || ')'\n"
+                               "                       END,\n"
+                               "                       a.number\n"
+                               "               FROM sys.schemas s, 
sys.function_types ft, sys.functions f LEFT JOIN sys.args a ON f.id = 
a.func_id\n"
+                               "               WHERE s.id= f.schema_id AND 
f.type = ft.function_type_id\n"
+                               "       )\n"
+                               "       SELECT\n"
+                               "               fqn1.id id,\n"
+                               "               fqn1.tpe tpe,\n"
+                               "               fqn1.sig nme\n"
+                               "       FROM\n"
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to