Changeset: 36659119f7e9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=36659119f7e9
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_scenario.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: default
Log Message:
Merge with Oct2020 branch.
diffs (truncated from 376 to 300 lines):
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1611,7 +1611,7 @@ str
mvc_append_column(sql_trans *t, sql_column *c, BAT *ins)
{
int res = store_funcs.append_col(t, c, ins, TYPE_bat);
- if (res != 0)
+ if (res != LOG_OK)
throw(SQL, "sql.append", SQLSTATE(42000) "Cannot append
values");
return MAL_SUCCEED;
}
@@ -1667,7 +1667,7 @@ mvc_append_wrap(Client cntxt, MalBlkPtr
const char *tname = *getArgReference_str(stk, pci, 3);
const char *cname = *getArgReference_str(stk, pci, 4);
ptr ins = getArgReference(stk, pci, 5);
- int tpe = getArgType(mb, pci, 5);
+ int tpe = getArgType(mb, pci, 5), err = 0;
sql_schema *s;
sql_table *t;
sql_column *c;
@@ -1702,12 +1702,15 @@ mvc_append_wrap(Client cntxt, MalBlkPtr
if( b && BATcount(b) > 4096 && !b->batTransient)
BATmsync(b);
if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
- store_funcs.append_col(m->session->tr, c, ins, tpe);
+ if (store_funcs.append_col(m->session->tr, c, ins, tpe) !=
LOG_OK)
+ err = 1;
} else if (cname[0] == '%') {
sql_idx *i = mvc_bind_idx(m, s, cname + 1);
- if (i)
- store_funcs.append_idx(m->session->tr, i, ins, tpe);
- }
+ if (i && store_funcs.append_idx(m->session->tr, i, ins, tpe) !=
LOG_OK)
+ err = 1;
+ }
+ if (err)
+ throw(SQL, "sql.append", SQLSTATE(42S02) "append failed");
if (b) {
BBPunfix(b->batCacheid);
}
@@ -1727,7 +1730,7 @@ mvc_update_wrap(Client cntxt, MalBlkPtr
bat Tids = *getArgReference_bat(stk, pci, 5);
bat Upd = *getArgReference_bat(stk, pci, 6);
BAT *tids, *upd;
- int tpe = getArgType(mb, pci, 6);
+ int tpe = getArgType(mb, pci, 6), err = 0;
sql_schema *s;
sql_table *t;
sql_column *c;
@@ -1769,14 +1772,17 @@ mvc_update_wrap(Client cntxt, MalBlkPtr
if( tids && BATcount(tids) > 4096 && !tids->batTransient)
BATmsync(tids);
if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
- store_funcs.update_col(m->session->tr, c, tids, upd, TYPE_bat);
+ if (store_funcs.update_col(m->session->tr, c, tids, upd,
TYPE_bat) != LOG_OK)
+ err = 1;
} else if (cname[0] == '%') {
sql_idx *i = mvc_bind_idx(m, s, cname + 1);
- if (i)
- store_funcs.update_idx(m->session->tr, i, tids, upd,
TYPE_bat);
+ if (i && store_funcs.update_idx(m->session->tr, i, tids, upd,
TYPE_bat) != LOG_OK)
+ err = 1;
}
BBPunfix(tids->batCacheid);
BBPunfix(upd->batCacheid);
+ if (err)
+ throw(SQL, "sql.update", SQLSTATE(42S02) "update failed");
return MAL_SUCCEED;
}
@@ -1803,6 +1809,8 @@ mvc_clear_table_wrap(Client cntxt, MalBl
if (t == NULL)
throw(SQL, "sql.clear_table", SQLSTATE(42S02) "Table missing
%s.%s", sname,tname);
*res = mvc_clear_table(m, t);
+ if (*res == BUN_NONE)
+ throw(SQL, "sql.clear_table", SQLSTATE(42S02) "clear failed");
return MAL_SUCCEED;
}
@@ -1850,7 +1858,8 @@ mvc_delete_wrap(Client cntxt, MalBlkPtr
}
if( b && BATcount(b) > 4096 && !b->batTransient)
BATmsync(b);
- store_funcs.delete_tab(m->session->tr, t, b, tpe);
+ if (store_funcs.delete_tab(m->session->tr, t, b, tpe) != LOG_OK)
+ throw(SQL, "sql.delete", SQLSTATE(3F000) "delete failed");
if (b)
BBPunfix(b->batCacheid);
return MAL_SUCCEED;
@@ -4075,7 +4084,7 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt
bat bid;
BAT *b, *del;
node *o;
- int i, bids[2049];
+ int i, bids[2049], err = 0;
if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
return msg;
@@ -4140,17 +4149,21 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt
}
BBPunfix(del->batCacheid);
- mvc_clear_table(m, t);
+ if (mvc_clear_table(m, t) == BUN_NONE)
+ throw(SQL, name, SQLSTATE(42000) "vacumm: clear failed");
for (o = t->columns.set->h, i = 0; o; o = o->next, i++) {
sql_column *c = o->data;
BAT *ins = BATdescriptor(bids[i]); /* use the insert bat */
if( ins){
- store_funcs.append_col(tr, c, ins, TYPE_bat);
+ if (store_funcs.append_col(tr, c, ins, TYPE_bat) !=
LOG_OK)
+ err = 1;
BBPunfix(ins->batCacheid);
}
BBPrelease(bids[i]);
}
+ if (err)
+ throw(SQL, name, SQLSTATE(42000) "vacuum: reappend failed");
/* TODO indices */
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -701,7 +701,7 @@ SQLengineIntern(Client c, backend *be)
msg = SQLrun(c,m);
cleanup_engine:
- if (m->type == Q_SCHEMA && m->qc != NULL)
+ if (m->emode != m_prepare && m->type == Q_SCHEMA && m->qc != NULL)
qc_clean(m->qc);
if (msg) {
/* don't print exception decoration, just the message */
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -798,6 +798,8 @@ SQLreader(Client c)
go = msg == MAL_SUCCEED;
commit_done = true;
}
+ if (m->session->tr && m->session->tr->active)
+ c->idle = 0;
if (go && in->pos >= in->len) {
ssize_t rd;
diff --git
a/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.stable.out.Windows
b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.stable.out.Windows
new file mode 100755
--- /dev/null
+++ b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.stable.out.Windows
@@ -0,0 +1,45 @@
+stdout of test 'ValidateSystemCatalogTables` in directory 'sql/jdbc/tests`
itself:
+
+
+# 16:25:09 >
+# 16:25:09 > "./ValidateSystemCatalogTables.SQL.sh"
"ValidateSystemCatalogTables"
+# 16:25:09 >
+
+
+# 16:25:09 >
+# 16:25:09 > java nl.cwi.monetdb.client.JdbcClient -h localhost -p 34154 -d
mTests_sql_jdbc_tests -e -f
/home/dinther/dev/dev/MonetDB/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.sql
+# 16:25:09 >
+
+\vsci
+Checking 45 tables/keys in schema sys for Primary Key uniqueness
violations.
+Checking 45 columns in schema sys for Primary Key Not Null violations.
+Checking 30 tables/keys in schema sys for Unique Constraint violations.
+Checking 96 foreign keys in schema sys for Foreign Key referential
integrity violations.
+Checking 169 columns in schema sys for Not Null violations.
+Checking 145 columns in schema sys for Max Character Length violations.
+Checking 6 tables/keys in schema tmp for Primary Key uniqueness
violations.
+Checking 6 columns in schema tmp for Primary Key Not Null violations.
+Checking 7 tables/keys in schema tmp for Unique Constraint violations.
+Checking 13 foreign keys in schema tmp for Foreign Key referential
integrity violations.
+Checking 35 columns in schema tmp for Not Null violations.
+Checking 14 columns in schema tmp for Max Character Length violations.
+\vsi sys
+Checking 10 keys in schema sys for Primary Key uniqueness
violations.
+Checking 7 keys in schema sys for Unique Constraint violations.
+Checking 0 foreign keys in schema sys for Foreign Key referential
integrity violations.
+Checking 29 columns in schema sys for Not Null violations.
+Checking 145 columns in schema sys for Max Character Length violations.
+\vsi tmp
+Checking 0 keys in schema tmp for Primary Key uniqueness
violations.
+Checking 0 keys in schema tmp for Unique Constraint violations.
+Checking 0 foreign keys in schema tmp for Foreign Key referential
integrity violations.
+Checking 0 columns in schema tmp for Not Null violations.
+Checking 14 columns in schema tmp for Max Character Length violations.
+\vdbi
+No user schemas found in this database.
+
+
+# 16:25:12 >
+# 16:25:12 > "Done."
+# 16:25:12 >
+
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -2024,7 +2024,7 @@ static BUN
clear_col(sql_trans *tr, sql_column *c)
{
if (bind_col_data(tr, c) == LOG_ERR)
- return 0;
+ return BUN_NONE;
c->t->s->base.wtime = c->t->base.wtime = c->base.wtime = tr->wstime;
if (c->data)
return clear_delta(tr, c->data);
@@ -2037,7 +2037,7 @@ clear_idx(sql_trans *tr, sql_idx *i)
if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns)
<= 1) || !idx_has_column(i->type))
return 0;
if (bind_idx_data(tr, i) == LOG_ERR)
- return 0;
+ return BUN_NONE;
i->t->s->base.wtime = i->t->base.wtime = i->base.wtime = tr->wstime;
if (i->data)
return clear_delta(tr, i->data);
@@ -2076,7 +2076,7 @@ clear_del(sql_trans *tr, sql_table *t)
{
if (bind_del_data(tr, t) == LOG_ERR)
- return 0;
+ return BUN_NONE;
t->s->base.wtime = t->base.wtime = tr->wstime;
return clear_dbat(tr, t->data);
}
@@ -2771,9 +2771,11 @@ update_table(sql_trans *tr, sql_table *f
oc->data = timestamp_delta(o->data,
oc->base.stime);
}
assert(oc->data);
- if (tr_merge_delta(tr, oc->data, oc->unique ==
1) != LOG_OK)
- ok = LOG_ERR;
- cc->data = NULL;
+ if (cc->base.wtime) {
+ if (tr_merge_delta(tr, oc->data,
oc->unique == 1) != LOG_OK)
+ ok = LOG_ERR;
+ cc->data = NULL;
+ }
} else if (cc->data) {
tr_handle_snapshot(tr, cc->data);
oc->data = cc->data;
@@ -2852,9 +2854,11 @@ update_table(sql_trans *tr, sql_table *f
oi->data =
timestamp_delta(o->data, oi->base.stime);
}
assert(oi->data);
- if (tr_merge_delta(tr, oi->data, 0) !=
LOG_OK)
- ok = LOG_ERR;
- ci->data = NULL;
+ if (ci->base.wtime) {
+ if (tr_merge_delta(tr,
oi->data, 0) != LOG_OK)
+ ok = LOG_ERR;
+ ci->data = NULL;
+ }
} else if (ci->data) {
tr_handle_snapshot(tr, ci->data);
oi->data = ci->data;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -37,6 +37,7 @@ store_type active_store_type = store_bat
int store_readonly = 0;
int store_singleuser = 0;
int store_initialized = 0;
+int store_debug = 0;
store_functions store_funcs;
table_functions table_funcs;
@@ -2074,6 +2075,7 @@ store_init(sql_allocator *pa, int debug,
store_readonly = readonly;
store_singleuser = singleuser;
+ store_debug = debug;
MT_lock_set(&bs_lock);
@@ -6509,28 +6511,34 @@ sql_trans_clear_table(sql_trans *tr, sql
{
node *n = t->columns.set->h;
sql_column *c = n->data;
- BUN sz = 0;
+ BUN sz = 0, nsz = 0;
t->cleared = 1;
t->base.wtime = t->s->base.wtime = tr->wtime = tr->wstime;
c->base.wtime = tr->wstime;
- sz += store_funcs.clear_col(tr, c);
- sz -= store_funcs.clear_del(tr, t);
+ if ((nsz = store_funcs.clear_col(tr, c)) == BUN_NONE)
+ return BUN_NONE;
+ sz += nsz;
+ if ((nsz = store_funcs.clear_del(tr, t)) == BUN_NONE)
+ return BUN_NONE;
+ sz -= nsz;
for (n = n->next; n; n = n->next) {
c = n->data;
c->base.wtime = tr->wstime;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list