Changeset: 3a804d88df46 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3a804d88df46 Added Files: sql/test/bugs/Tests/default-error.test Modified Files: sql/server/rel_schema.c sql/storage/store.c sql/test/bugs/Tests/All Branch: Dec2023 Log Message:
check during alter and column creation the default value. diffs (107 lines): 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 @@ -4464,9 +4464,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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org