Tarantool development patches archive
 help / color / mirror / Atom feed
From: Kirill Shcherbatov <kshcherbatov@tarantool.org>
To: tarantool-patches@freelists.org
Cc: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH v1 1/1] sql: fix assertion on invalid PK column name
Date: Thu, 12 Jul 2018 13:03:41 +0300	[thread overview]
Message-ID: <40d06911-2dbc-69e0-24b3-fb1a70cc33af@tarantool.org> (raw)
In-Reply-To: <c067d812-a5bb-ae89-012b-887d21ba5383@tarantool.org>

> I know, that removal of assertion always 'fixes' it, but please,
> either fix it without removal (and for me it is not obvious why it
> should be removed), or explain, why it is invalid.
I've included this assertion during refactoring and there is no root causes to
keep it, but as we verbally discuss, let's make it working correctly appending
additional pCol == NULL OR condition that code below correctly deal with.

========================================

If specified PK column modifier refers nonexistent column,
lookup by name keeps NULL column pointer unchanged that should
be accounted in assert.

Close #3522.
---
https://github.com/tarantool/tarantool/compare/kshch/gh-3522-invalid-primary-key-column-name
https://github.com/tarantool/tarantool/issues/3522

 src/box/sql/build.c                   | 2 +-
 test/sql/gh-2929-primary-key.result   | 7 +++++++
 test/sql/gh-2929-primary-key.test.lua | 5 +++++
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index e1d896e..5d04e3e 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -964,7 +964,7 @@ sqlite3AddPrimaryKey(Parse * pParse,	/* Parsing context */
 			}
 		}
 	}
-	assert(pCol == &pTab->aCol[iCol]);
+	assert(pCol == NULL || pCol == &pTab->aCol[iCol]);
 	if (nTerm == 1 && pCol != NULL &&
 	    (pTab->def->fields[iCol].type == FIELD_TYPE_INTEGER) &&
 	    sortOrder != SORT_ORDER_DESC) {
diff --git a/test/sql/gh-2929-primary-key.result b/test/sql/gh-2929-primary-key.result
index c238ed7..66a9b96 100644
--- a/test/sql/gh-2929-primary-key.result
+++ b/test/sql/gh-2929-primary-key.result
@@ -35,3 +35,10 @@ box.sql.execute("CREATE TABLE t5(a, b UNIQUE)")
 box.sql.execute("DROP TABLE t1")
 ---
 ...
+--
+-- gh-3522: invalid primary key name
+--
+box.sql.execute("CREATE TABLE tx (a INT, PRIMARY KEY (b));")
+---
+- error: 'no such column: B'
+...
diff --git a/test/sql/gh-2929-primary-key.test.lua b/test/sql/gh-2929-primary-key.test.lua
index 0a9395c..0e05354 100644
--- a/test/sql/gh-2929-primary-key.test.lua
+++ b/test/sql/gh-2929-primary-key.test.lua
@@ -16,3 +16,8 @@ box.sql.execute("CREATE TABLE t4(a, b)")
 box.sql.execute("CREATE TABLE t5(a, b UNIQUE)")
 
 box.sql.execute("DROP TABLE t1")
+
+--
+-- gh-3522: invalid primary key name
+--
+box.sql.execute("CREATE TABLE tx (a INT, PRIMARY KEY (b));")
-- 
2.7.4

  reply	other threads:[~2018-07-12 10:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-12  6:30 [tarantool-patches] " Kirill Shcherbatov
2018-07-12  8:54 ` [tarantool-patches] " Vladislav Shpilevoy
2018-07-12 10:03   ` Kirill Shcherbatov [this message]
2018-07-12 10:28     ` Vladislav Shpilevoy
2018-07-13  6:54 ` Kirill Yukhin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40d06911-2dbc-69e0-24b3-fb1a70cc33af@tarantool.org \
    --to=kshcherbatov@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --cc=v.shpilevoy@tarantool.org \
    --subject='[tarantool-patches] Re: [PATCH v1 1/1] sql: fix assertion on invalid PK column name' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox