diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c index 2ca76090298bce8a45ac1d482c09a839b81dcfb6..a1f5f38b10c76d44c11deca583ad4b1005a6e6b0 100644 --- a/src/box/sql/pragma.c +++ b/src/box/sql/pragma.c @@ -238,10 +238,10 @@ sql_pragma_table_info(struct Parse *parse, const char *tbl_name) struct Vdbe *v = sqlGetVdbe(parse); struct field_def *field = space->def->fields; for (uint32_t i = 0, k; i < space->def->field_count; ++i, ++field) { - if (!sql_space_column_is_in_pk(space, i)) { - k = 0; - } else if (pk == NULL) { + if (pk == NULL) { k = 1; + } else if (!sql_space_column_is_in_pk(space, i)) { + k = 0; } else { struct key_def *kdef = pk->def->key_def; k = key_def_find_by_fieldno(kdef, i) - kdef->parts + 1; diff --git a/test/sql/gh-4745-table-info-assertion.result b/test/sql/gh-4745-table-info-assertion.result new file mode 100644 index 0000000000000000000000000000000000000000..1c5197fd1201fbe255be72ba8f964b0579f891a8 --- /dev/null +++ b/test/sql/gh-4745-table-info-assertion.result @@ -0,0 +1,23 @@ +-- test-run result file version 2 +test_run = require('test_run').new() + | --- + | ... +engine = test_run:get_cfg('engine') + | --- + | ... +-- +-- Make sure that 'pragma table_info()' correctly handles tables +-- without primary key. +-- +T = box.schema.create_space('T', { \ + engine = engine, \ + format = {{'i', 'integer'}} \ +}) + | --- + | ... +_ = box.execute('pragma table_info(T)') + | --- + | ... +T:drop() + | --- + | ... diff --git a/test/sql/gh-4745-table-info-assertion.test.lua b/test/sql/gh-4745-table-info-assertion.test.lua new file mode 100644 index 0000000000000000000000000000000000000000..0e8ef384903ff2b8dea393783f5ad48bb87b276e --- /dev/null +++ b/test/sql/gh-4745-table-info-assertion.test.lua @@ -0,0 +1,12 @@ +test_run = require('test_run').new() +engine = test_run:get_cfg('engine') +-- +-- Make sure that 'pragma table_info()' correctly handles tables +-- without primary key. +-- +T = box.schema.create_space('T', { \ + engine = engine, \ + format = {{'i', 'integer'}} \ +}) +_ = box.execute('pragma table_info(T)') +T:drop()