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