[tarantool-patches] Re: [PATCH v2 3/4] sql: fix error message for improperly created index
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Thu Mar 28 18:11:55 MSK 2019
Thanks for the patch! See my review fix at the bottom
of the email, and on the branch. In my fixes I've accounted
Kostja's comment about a proper error code.
On 28/03/2019 15:07, Nikita Pettik wrote:
> Table can be created without any indexes (for instance, from Lua-land).
> On the other hand, bytecode generated for CREATE INDEX statement
> attempts at finding entry in _index space with given space id.
> In case it is not found error "wrong space id" is raised. On the other
> hand, it is obvious that such message is appeared when table doesn't
> have any created indexes yet. Hence, lets fix this message to indicate
> that primary key should be created before any secondary indexes.
>
> Closes #3914
> ---
> src/box/sql/build.c | 3 +--
> test/sql-tap/index1.test.lua | 19 ++++++++++++++++++-
> 2 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/src/box/sql/build.c b/src/box/sql/build.c
> index f55f6d800..20cc346a0 100644
> --- a/src/box/sql/build.c
> +++ b/src/box/sql/build.c
> @@ -1946,8 +1946,7 @@ generate_index_id(struct Parse *parse, uint32_t space_id, int cursor)
> sqlVdbeJumpHere(v, seek_adr);
> sqlVdbeJumpHere(v, seek_adr + 1);
> sqlVdbeAddOp4(v, OP_Halt, SQL_ERROR, ON_CONFLICT_ACTION_FAIL, 0,
> - sqlMPrintf(parse->db, "Invalid space id: %d", space_id),
> - P4_DYNAMIC);
> + "can not add a secondary key before primary", P4_STATIC);
>
> sqlVdbeJumpHere(v, goto_succ_addr);
> /* Fetch iid from the row and increment it. */
========================================================================
commit 50adf5f01374a4cd6741c862e23ba902ab651909
Author: Vladislav Shpilevoy <v.shpilevoy at tarantool.org>
Date: Thu Mar 28 16:03:26 2019 +0300
Review fix
diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 076f62dde..78cd3cee6 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -1943,11 +1943,16 @@ vdbe_emit_new_sec_index_id(struct Parse *parse, uint32_t space_id,
sqlVdbeAddOp4Int(v, OP_IdxLT, _index_cursor, 0, key_reg, 1);
/* Jump over Halt block. */
int goto_succ_addr = sqlVdbeAddOp0(v, OP_Goto);
- /* Invalid space id handling block starts here. */
+ /*
+ * Absence of any records in _index for that space is
+ * handled here.
+ */
sqlVdbeJumpHere(v, seek_adr);
sqlVdbeJumpHere(v, seek_adr + 1);
- sqlVdbeAddOp4(v, OP_Halt, SQL_ERROR, ON_CONFLICT_ACTION_FAIL, 0,
- "can not add a secondary key before primary", P4_STATIC);
+ sqlVdbeAddOp4(v, OP_Halt, SQL_TARANTOOL_ERROR, ON_CONFLICT_ACTION_FAIL,
+ 0, "can not add a secondary key before primary",
+ P4_STATIC);
+ sqlVdbeChangeP5(v, ER_ALTER_SPACE);
sqlVdbeJumpHere(v, goto_succ_addr);
/* Fetch iid from the row and increment it. */
More information about the Tarantool-patches
mailing list