Changeset: bb6527fa7586 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bb6527fa7586
Modified Files:
sql/server/rel_exp.c
sql/server/rel_schema.c
sql/storage/store.c
Branch: default
Log Message:
merged with dec2023
diffs (119 lines):
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1849,7 +1849,7 @@ exp_two_sided_bound_cmp_exp_is_false(sql
sql_exp* h = e->f;
assert (v && l && h);
- return is_anti(e) ? exp_is_null(v) || (exp_is_null(l) && exp_is_null(h)) :
exp_is_null(l) || exp_is_null(v) || exp_is_null(h);
+ return is_anti(e) ? exp_is_null(v) || (exp_is_null(l) && exp_is_null(h)) :
false;
}
static inline bool
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -612,10 +612,12 @@ column_options(sql_query *query, dlist *
}
used |= (1<<COL_DEFAULT);
- if (sym->token == SQL_COLUMN ||
sym->token == SQL_IDENT) {
+ if (sym->token == SQL_COLUMN ||
sym->token == SQL_IDENT || sym->token == SQL_NEXT) {
exp_kind ek = {type_value,
card_value, FALSE};
sql_exp *e =
rel_logical_value_exp(query, NULL, sym, sql_sel, ek);
+ if (!e)
+ return SQL_ERR;
if (e && is_atom(e->type)) {
atom *a =
exp_value(sql, e);
@@ -1087,6 +1089,34 @@ table_element(sql_query *query, symbol *
sql_error(sql, ERR_NOTFOUND, SQLSTATE(42S22) "%s: no
such column '%s'\n", action, cname);
return SQL_ERR;
}
+ if (sym->token == SQL_COLUMN || sym->token == SQL_IDENT ||
sym->token == SQL_NEXT) {
+ exp_kind ek = {type_value, card_value, FALSE};
+ sql_exp *e = rel_logical_value_exp(query, NULL,
sym, sql_sel, ek);
+
+ if (!e)
+ return SQL_ERR;
+ if (e && is_atom(e->type)) {
+ atom *a = exp_value(sql, e);
+
+ if (a && atom_null(a)) {
+ switch (mvc_default(sql, c,
NULL)) {
+ case -1:
+ (void) sql_error(sql,
02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ return SQL_ERR;
+ case -2:
+ case -3:
+ (void) sql_error(sql,
02, SQLSTATE(42000) "DEFAULT: transaction conflict detected while setting
default value");
+ return SQL_ERR;
+ default:
+ break;
+ }
+ break;
+ }
+ }
+ /* reset error */
+ sql->session->status = 0;
+ sql->errstr[0] = '\0';
+ }
r = symbol2string(sql, sym, 0, &err);
if (!r) {
(void) sql_error(sql, 02, SQLSTATE(42000) "%s:
incorrect default value '%s'\n", action, err?err:"");
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4488,9 +4488,10 @@ sys_drop_default_object(sql_trans *tr, s
extract_schema_and_sequence_name(NULL, col->def +
strlen(next_value_for), &schema, &seq_name);
if (!schema || !seq_name || !(s = find_sql_schema(tr, schema)))
{
+ /* didn't find the schema so no generated sequence */
_DELETE(schema);
_DELETE(seq_name);
- return -1;
+ return res;
}
seq = find_sql_sequence(tr, s, seq_name);
diff --git a/sql/test/bugs/Tests/All b/sql/test/bugs/Tests/All
--- a/sql/test/bugs/Tests/All
+++ b/sql/test/bugs/Tests/All
@@ -116,3 +116,4 @@ savepoint-release
procedure-recompile
rse_bug
delete-or-not-in-bug
+default-error
diff --git a/sql/test/bugs/Tests/default-error.test
b/sql/test/bugs/Tests/default-error.test
new file mode 100644
--- /dev/null
+++ b/sql/test/bugs/Tests/default-error.test
@@ -0,0 +1,27 @@
+statement ok
+CREATE TABLE "experiments" (
+ "id" BIGINT NOT NULL,
+ "host_id" INTEGER,
+ "software_id" INTEGER,
+ "name" CHARACTER LARGE OBJECT,
+ "policy" CHARACTER LARGE OBJECT,
+ "dbname" CHARACTER LARGE OBJECT,
+ "tags" VARCHAR(256),
+ "comment" CHARACTER LARGE OBJECT,
+ "start_time" TIMESTAMP,
+ "end_time" TIMESTAMP,
+ "inserted_at" TIMESTAMP,
+ "description" CHARACTER LARGE OBJECT,
+ "sf" CHARACTER LARGE OBJECT,
+ "benchmark_id" INTEGER NOT NULL,
+ "tload" DECIMAL(18,3),
+ "cpu_log" UUID,
+ "memory_log" UUID,
+ "disk_log" UUID,
+ "proc_log" UUID,
+ CONSTRAINT "experiments_id_pkey" PRIMARY KEY ("id"),
+ CONSTRAINT "experiments__uc" UNIQUE ("host_id", "software_id", "name",
"sf", "policy")
+)
+
+statement error
+ALTER TABLE "experiments" ALTER COLUMN "id" SET DEFAULT next value for
"results"."seq_8059"
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]