diff --git a/changelogs/unreleased/gh-8793-rework-sql-defaults.md b/changelogs/unreleased/gh-8793-rework-sql-defaults.md new file mode 100644 index 0000000000000000000000000000000000000000..0059ec3b16bb164d5df8bfcd7c1cd7b821136aaf --- /dev/null +++ b/changelogs/unreleased/gh-8793-rework-sql-defaults.md @@ -0,0 +1,3 @@ +## feature/sql + +* `SHOW CREATE TABLE` no longer supports the DEFAULT clause (gh-8793). diff --git a/src/box/sql/show.c b/src/box/sql/show.c index 1047640cf50f7d9df77e380144b24210741b7ec4..aab5c73c56895015815caa4053c4f2827a85fc0e 100644 --- a/src/box/sql/show.c +++ b/src/box/sql/show.c @@ -281,8 +281,10 @@ sql_describe_field(struct sql_desc *desc, const struct field_def *field) } if (!field->is_nullable) sql_desc_append(desc, " NOT NULL"); - if (field->sql_default_value != NULL) - sql_desc_append(desc, " DEFAULT(%s)", field->sql_default_value); + if (field->default_value != NULL || field->default_func_id != 0) { + const char *err = "BOX default values are unsupported"; + sql_desc_error(desc, "field", field->name, err); + } for (uint32_t i = 0; i < field->constraint_count; ++i) { struct tuple_constraint_def *cdef = &field->constraint_def[i]; assert(cdef->type == CONSTR_FKEY || cdef->type == CONSTR_FUNC); diff --git a/test/sql-luatest/defaults_test.lua b/test/sql-luatest/defaults_test.lua index 198561314857d6ff5be0220546f0bd822f8ffc74..596c0759f616b5f28fd7c0a1177fd16da0a66fe9 100644 --- a/test/sql-luatest/defaults_test.lua +++ b/test/sql-luatest/defaults_test.lua @@ -34,3 +34,25 @@ g.test_default_after_add_column = function() func:drop() end) end + +-- Make sure default is not supported by SHOW CREATE TABLE. +g.test_default_in_show_create_table = function() + g.server:exec(function() + local body = 'function(a) return a + 123 end' + local func_def = {is_deterministic = true, body = body} + box.schema.func.create('F1', func_def) + local format = {{'I', 'integer'}, {'A', 'integer', default = 321, + default_func = 'F1'}} + local s = box.schema.space.create('A', {format = format}) + s:create_index('ii') + local func = box.func.F1 + t.assert_equals(s:format()[2].default, 321) + t.assert_equals(s:format()[2].default_func, func.id) + local rows = box.execute([[SHOW CREATE TABLE A;]]).rows + local exp = "Problem with field 'A': BOX default values are ".. + "unsupported." + t.assert_equals(rows[1][2][1], exp) + s:drop() + func:drop() + end) +end diff --git a/test/sql-luatest/show_create_table_test.lua b/test/sql-luatest/show_create_table_test.lua index 579272ead09d278c1aba19f95f3a301d2a1c9261..d263c8e7fa80e11710b64f3d7b5815a943531c2e 100644 --- a/test/sql-luatest/show_create_table_test.lua +++ b/test/sql-luatest/show_create_table_test.lua @@ -35,7 +35,7 @@ g.test_show_create_table_one = function() local sql = [[CREATE TABLE t(i INT CONSTRAINT c0 PRIMARY KEY, a STRING CONSTRAINT c1 REFERENCES t(i) CONSTRAINT c2 UNIQUE, - b UUID NOT NULL DEFAULT(uuid()), + b UUID NOT NULL, CONSTRAINT c3 CHECK(i * a < 100), CONSTRAINT c4 UNIQUE (a, b), CONSTRAINT c5 FOREIGN KEY(i, a) @@ -44,7 +44,7 @@ g.test_show_create_table_one = function() box.execute(sql) res = {'CREATE TABLE t(\ni INTEGER NOT NULL,\n'.. 'a STRING CONSTRAINT c1 REFERENCES t(i),\n'.. - 'b UUID NOT NULL DEFAULT(uuid()),\n'.. + 'b UUID NOT NULL,\n'.. 'CONSTRAINT c0 PRIMARY KEY(i),\n'.. 'CONSTRAINT c3 CHECK(i * a < 100),\n'.. 'CONSTRAINT c5 FOREIGN KEY(i, a) REFERENCES t(a, b))\n'..