Changeset: 8792b17f2ce5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8792b17f2ce5
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        sql/storage/bat/bat_logger.c
        sql/storage/store.c
Branch: mangled
Log Message:

More fixes to upgrade and move sqlname to end of functions table.


diffs (157 lines):

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
@@ -76,9 +76,9 @@ sql_fix_system_tables(Client c, mvc *sql
 
                pos += snprintf(buf + pos, bufsize - pos,
                                "insert into sys.functions values"
-                               " (%d, '%s', '%s', '%s', '%s',"
-                               " %d, %d, %s, %s, %s, %d, %s, %s);\n",
-                               func->base.id, func->base.name, func->sql_name,
+                               " (%d, '%s', '%s', '%s',"
+                               " %d, %d, %s, %s, %s, %d, %s, %s, '%s');\n",
+                               func->base.id, func->base.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->sql_name);
                if (func->res) {
                        for (m = func->res->h; m; m = m->next, number++) {
                                arg = m->data;
@@ -4627,11 +4628,36 @@ sql_update_default(Client c, mvc *sql, c
 
        (void) sql;
        (void) prev_schema;
-       (void) systabfixed;
 
        if ((buf = GDKmalloc(bufsize)) == NULL)
                throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
+       pos += snprintf(buf + pos, bufsize - pos,
+                       "select id from tables where name = 
'fully_qualified_functions' and query like '%%sqlname%%' and schema_id = 
(select s.id from sys.schemas s where name = 'sys');\n");
+       res_table *output;
+       err = SQLstatementIntern(c, buf, "update", 1, 0, &output);
+       if (err) {
+               GDKfree(buf);
+               return err;
+       }
+
+       BAT* b;
+       if ((b = BATdescriptor(output->cols[0].b)) == NULL) {
+               res_table_destroy(output);
+               throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+       }
+
+       BUN rowcnt = BATcount(b);
+
+       BBPunfix(b->batCacheid);
+       res_table_destroy(output);
+
+       if (rowcnt > 0) {
+               GDKfree(buf);
+               /* nothing to do */
+               return NULL;
+       }
+
        if (!*systabfixed && (err = sql_fix_system_tables(c, sql, prev_schema)) 
!= NULL)
                return err;
        *systabfixed = true;
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -138,6 +138,7 @@ tabins(logger *lg, old_logger *old_lg, b
                        }
                        else {
                                BAT *bn = COLcopy(b, b->ttype, true, 
PERSISTENT);
+                               bn = BATsetaccess(bn, BAT_READ);
                                BBPretain(bn->batCacheid);
                                bat_destroy(b);
                                if ((rc = BUNappend(lg->catalog_id, &cid, 
false)) == GDK_SUCCEED &&
@@ -3182,7 +3183,6 @@ bl_postversion(void *Store, void *Lg)
                BAT* funcs_name_mangled_rid = COLnew(funcs_name->hseqbase, 
TYPE_oid, funcs_name->batCapacity, TRANSIENT);
                // TODO errors
 
-               BATiter _bi_funcs_name = bat_iterator(funcs_name);
                for (size_t i = 0; i < BATcount(funcs_cands); i ++ ) {
                        oid frid = *(oid*) BUNtail(bi_funcs, i);
 
@@ -3200,8 +3200,6 @@ bl_postversion(void *Store, void *Lg)
                                        if (BUNappend(funcs_name_mangled_rid, 
&func_rid, false) != GDK_SUCCEED) {
                                                // TODO ERROR
                                        }
-                                       printf("check name: %s\n", (str) 
BUNtvar(_bi_funcs_name, func_rid));
-                                       printf("%s\n", mangled);
                                }
 
                                func_rid = frid;
@@ -3245,7 +3243,6 @@ bl_postversion(void *Store, void *Lg)
                // flush the last name
                size_t pos = snprintf(mangled, 2*4098, "%s(%d,%d)%s", prefix, 
retc, argc, postfix);
                assert (pos < 2*4098);
-               printf("and last one:\n");
 
                if (BUNappend(funcs_name_mangled, mangled, false) != 
GDK_SUCCEED) {
                        // TODO ERROR
@@ -3253,8 +3250,6 @@ bl_postversion(void *Store, void *Lg)
                if (BUNappend(funcs_name_mangled_rid, &func_rid, false) != 
GDK_SUCCEED) {
                        // TODO ERROR
                }
-               printf("check name: %s\n", (str) BUNtvar(_bi_funcs_name, 
func_rid));
-               printf("%s\n", mangled);
 
                // bat_iterator_end(&bi_args);
                bat_iterator_end(&bi_funcs);
@@ -3313,9 +3308,6 @@ bl_postversion(void *Store, void *Lg)
                        if (BUNappend(funcs_name_mangled_rid, &frid, false) != 
GDK_SUCCEED) {
                                // TODO ERROR
                        }
-
-                       printf("check name: %s\n", (str) 
BUNtvar(_bi_funcs_name, frid));
-                       printf("%s\n", mangled);
                }
                bat_iterator_end(&bi_argless_tid);
                bat_iterator_end(&bi_name_argless);
@@ -3329,10 +3321,13 @@ bl_postversion(void *Store, void *Lg)
                if ((funcs_sqlname = BATsetaccess(funcs_sqlname, BAT_READ)) == 
NULL ||
                        /* 2165 is sys.functions.sqlname */
                        BUNappend(lg->catalog_id, &(int) {2165}, false) != 
GDK_SUCCEED ||
-                       BUNappend(lg->catalog_bid, &funcs_sqlname->batCacheid, 
false) != GDK_SUCCEED) {
+                       BUNappend(lg->catalog_bid, &funcs_sqlname->batCacheid, 
false) != GDK_SUCCEED ||
+                       BUNappend(lg->catalog_lid, &lng_nil, false) != 
GDK_SUCCEED ||
+                       BUNappend(lg->catalog_cnt, 
&(lng){BATcount(funcs_sqlname)}, false) != GDK_SUCCEED) {
                        bat_destroy(funcs_sqlname);
                        return GDK_FAIL;
                }
+
                BBPretain(funcs_sqlname->batCacheid);
                BBPretain(funcs_sqlname->batCacheid); /* yep, twice */
                bat_destroy(funcs_sqlname);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1457,7 +1457,7 @@ insert_functions(sql_trans *tr, sql_tabl
                int number = 0, ftype = (int) f->type, flang = (int) 
FUNC_LANG_INT;
                sqlid next_schema = f->s ? f->s->base.id : 0;
 
-               if ((res = store->table_api.table_insert(tr, sysfunc, 
&f->base.id, &f->base.name, &f->sql_name, &f->imp, &f->mod, &flang, &ftype, 
&f->side_effect, &f->varres, &f->vararg, &next_schema, &f->system, 
&f->semantics)))
+               if ((res = store->table_api.table_insert(tr, sysfunc, 
&f->base.id, &f->base.name, &f->imp, &f->mod, &flang, &ftype, &f->side_effect, 
&f->varres, &f->vararg, &next_schema, &f->system, &f->semantics, &f->sql_name)))
                        return res;
                if (f->res && (res = insert_args(tr, sysarg, f->res, 
f->base.id, "res_%d", &number)))
                        return res;
@@ -4870,8 +4870,8 @@ sql_trans_create_func(sql_func **fres, s
 
        if ((res = os_add(s->funcs, tr, t->base.name, &t->base)))
                return res;
-       if ((res = store->table_api.table_insert(tr, sysfunc, &t->base.id, 
&t->base.name, &t->sql_name, query?(char**)&query:&t->imp, &t->mod, &flang, 
&ftype, &t->side_effect,
-                       &t->varres, &t->vararg, &s->base.id, &t->system, 
&t->semantics)))
+       if ((res = store->table_api.table_insert(tr, sysfunc, &t->base.id, 
&t->base.name, query?(char**)&query:&t->imp, &t->mod, &flang, &ftype, 
&t->side_effect,
+                       &t->varres, &t->vararg, &s->base.id, &t->system, 
&t->semantics, &t->sql_name)))
                return res;
        if (t->res) for (n = t->res->h; n; n = n->next, number++) {
                sql_arg *a = n->data;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to