[tarantool-patches] Re: [PATCH] sql: xfer optimization issue
Nikita Tatunov
hollow653 at gmail.com
Thu Jul 19 20:26:19 MSK 2018
чт, 19 июл. 2018 г. в 3:20, n.pettik <korablev at tarantool.org>:
> When answering on review, include only chunks related to your answers.
> Otherwise, letter becomes really long..
>
>
I'm sorry.
> >
> > > @@ -1725,9 +1727,9 @@ xferOptimization(Parse * pParse, /*
> Parser context */
> > > int emptyDestTest = 0; /* Address of test for empty pDest */
> > > int emptySrcTest = 0; /* Address of test for empty pSrc */
> > > Vdbe *v; /* The VDBE we are building */
> > > - int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE
> index */
> > > int regData, regTupleid; /* Registers holding data and
> tupleid */
> > > struct session *user_session = current_session();
> > > + bool is_err_action_default = false;
> >
> > Again: why do you need this flag? Default action is just synonym for
> ABORT,
> > so why should we care about it?
> >
> >
> > It's all about conflict action priorities as I said before.
> > Consider the following example:
> > ```
> > CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE,
> b);
> > CREATE TABLE t2(a INTEGER PRIMARY KEY ON CONFLICT REPLACE,
> b);
> > INSERT INTO t1 VALUES (1, 1), (3, 3), (5, 5);
> > INSERT INTO t2 VALUES (2, 2), (3, 4);
> > BEGIN;
> > INSERT INTO t2 VALUES (4, 4);
> > INSERT INTO t2 SELECT * FROM t1;
> > INSERT INTO t2 VALUES (10, 10);
> > COMMIT;
>
> onError is an action of whole statement, not of index.
> In your example onError == ABORT == DEFAULT.
> Replace action of index is not involved in code you wrote.
>
As we discussed, was *_ABORT explicitly set or not makes sense
till we have conflict actions on indices.
>
> >+ uint32_t src_space_id = SQLITE_PAGENO_TO_SPACEID(pSrc->tnum);
> >+ struct space *src_space = space_by_id(src_space_id);
> >+ uint32_t dest_space_id = SQLITE_PAGENO_TO_SPACEID(pDest->tnum);
> >+ struct space *dest_space = space_by_id(dest_space_id);
>
> Move here also assert:
>
> assert(src_space != NULL && dest_space != NULL);
>
>
Done.
> > > diff --git a/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
> b/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
> > > new file mode 100755
> > > index 0000000..e75fabc
> > > --- /dev/null
> > > +test:do_catchsql_test(
> > > + "xfer-optimization-1.15",
> > > + [[
> > > + DROP TABLE t1;
> > > + DROP TABLE t2;
> > > + CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE);
> > > + CREATE TABLE t2(a INTEGER PRIMARY KEY, b UNIQUE);
> > > + INSERT INTO t1 VALUES (2, 2), (3, 3), (5, 5);
> > > + INSERT INTO t2 VALUES (1, 1), (4, 4);
> > > + INSERT OR ROLLBACK INTO t2 SELECT * FROM t1;
> >
> > INSERT OT ROLLBACK outside transaction works the same as ABORT and
> DEFAULT.
> > So, surround it with transaction and check that it really rollbacks.
> >
> > There are basically almost the same tests surrounded by transactions
> (1.30 - 1.35).
>
> If so, remove redundant tests pls.
>
>
Removed them. Also added tests that check if xfer
was actually used in first bunch of tests.
> > -/* Opcode: RowData P1 P2 * * *
> > +/* Opcode: RowData P1 P2 * * P5
> > * Synopsis: r[P2]=data
> > *
> > * Write into register P2 the complete row content for the row at
> > @@ -3984,6 +3994,8 @@ case OP_SorterData: {
> > * There is no interpretation of the data.
> > * It is just copied onto the P2 register exactly as
> > * it is found in the database file.
> > + * P5 can be used in debug mode to check if xferOptimization has
> > + * actually started processing.
> > *
> > * If cursor P1 is an index, then the content is the key of the row.
> > * If cursor P2 is a table, then the content extracted is the data.
> > @@ -3996,6 +4008,13 @@ case OP_RowData: {
> > BtCursor *pCrsr;
> > u32 n;
> >
> > +#ifdef SQLITE_TEST
> > + if (pOp->p5 == 1) {
>
> Use named value (i.e. OPFLAG_XFER_OPT) even if they are the same.
>
>
Thank you, forgot about this place when defined it.
> > +
> > +test:do_execsql_test(
> > + "xfer-optimization-1.37",
> > + [[
> > + INSERT INTO t2 VALUES (10, 10);
>
> Here (and in some other places) smth wrong with indentation, fix it pls.
>
>
Indentation shows if stmt is in transaction, probably it looks a little
weird,
but I'm more inclined to leave it there.
Diff that compares patch to prev. one:
diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c
index c2df1c2..3c3bf37 100644
--- a/src/box/sql/insert.c
+++ b/src/box/sql/insert.c
@@ -1733,12 +1733,8 @@ xferOptimization(Parse * pParse, /* Parser context */
if (space_trigger_list(pDest->def->id) != NULL)
return 0;
if (onError == ON_CONFLICT_ACTION_DEFAULT) {
- if (pDest->iPKey >= 0)
- onError = pDest->keyConf;
- if (onError == ON_CONFLICT_ACTION_DEFAULT) {
- onError = ON_CONFLICT_ACTION_ABORT;
- is_err_action_default = true;
- }
+ onError = ON_CONFLICT_ACTION_ABORT;
+ is_err_action_default = true;
}
assert(pSelect->pSrc); /* allocated even if there is no FROM clause */
if (pSelect->pSrc->nSrc != 1) {
@@ -1804,6 +1800,7 @@ xferOptimization(Parse * pParse, /* Parser context */
struct space *src_space = space_by_id(src_space_id);
uint32_t dest_space_id = SQLITE_PAGENO_TO_SPACEID(pDest->tnum);
struct space *dest_space = space_by_id(dest_space_id);
+ assert(src_space != NULL && dest_space != NULL);
for (i = 0; i < (int)pDest->def->field_count; i++) {
enum affinity_type dest_affinity =
pDest->def->fields[i].affinity;
@@ -1823,7 +1820,6 @@ xferOptimization(Parse * pParse, /* Parser context */
}
/* Default values for second and subsequent columns need to match. */
if (i > 0) {
- assert(src_space != NULL && dest_space != NULL);
char *src_expr_str =
src_space->def->fields[i].default_value;
char *dest_expr_str =
@@ -1885,12 +1881,11 @@ xferOptimization(Parse * pParse, /* Parser context
*/
/*
* Xfer optimization is unable to correctly insert data
- * in case there's a conflict action other than *_ABORT.
- * This is the reason we want to only run it if the
- * destination table is initially empty.
+ * in case there's a conflict action other than
+ * explicit *_ABORT. This is the reason we want to only
+ * run it if the destination table is initially empty.
* That block generates code to make that determination.
*/
-
if (!(onError == ON_CONFLICT_ACTION_ABORT &&
is_err_action_default == false)) {
addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0);
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 5f9bc13..bc169d9 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -4009,7 +4009,7 @@ case OP_RowData: {
u32 n;
#ifdef SQLITE_TEST
- if (pOp->p5 == 1) {
+ if (pOp->p5 == OPFLAG_XFER_OPT) {
pOp->p5 = 0;
sql_xfer_count++;
}
diff --git a/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
b/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
index 34f603f..29f0efe 100755
--- a/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
+++ b/test/sql-tap/gh-3307-xfer-optimization-issue.test.lua
@@ -1,9 +1,29 @@
#!/usr/bin/env tarantool
test = require("sqltester")
-test:plan(44)
+test:plan(46)
local bfr, aftr
+local function do_xfer_test(test_number, return_code)
+ test_name = string.format("xfer-optimization-1.%d", test_number)
+ test:do_test(
+ test_name,
+ function()
+ if (aftr - bfr == 1) then
+ return {1}
+ end
+ if (aftr == bfr) then
+ return {0}
+ end
+ end, {
+ -- <test_name>
+ return_code
+ -- <test_name>
+ })
+end
+
+bfr = box.sql.debug().sql_xfer_count
+
test:do_catchsql_test(
"xfer-optimization-1.1",
[[
@@ -17,6 +37,8 @@ test:do_catchsql_test(
-- <xfer-optimization-1.1>
})
+aftr = box.sql.debug().sql_xfer_count
+
test:do_execsql_test(
"xfer-optimization-1.2",
[[
@@ -27,8 +49,12 @@ test:do_execsql_test(
-- <xfer-optimization-1.2>
})
+do_xfer_test(3, 1)
+
+bfr = box.sql.debug().sql_xfer_count
+
test:do_catchsql_test(
- "xfer-optimization-1.3",
+ "xfer-optimization-1.4",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -39,23 +65,29 @@ test:do_catchsql_test(
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.3>
+ -- <xfer-optimization-1.4>
0
- -- <xfer-optimization-1.3>
+ -- <xfer-optimization-1.4>
})
+aftr = box.sql.debug().sql_xfer_count
+
test:do_execsql_test(
- "xfer-optimization-1.4",
+ "xfer-optimization-1.5",
[[
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.4>
+ -- <xfer-optimization-1.5>
1, 1, 2, 2, 3, 3
- -- <xfer-optimization-1.4>
+ -- <xfer-optimization-1.5>
})
+do_xfer_test(6, 1)
+
+bfr = box.sql.debug().sql_xfer_count
+
test:do_catchsql_test(
- "xfer-optimization-1.5",
+ "xfer-optimization-1.7",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -64,23 +96,29 @@ test:do_catchsql_test(
CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.5>
+ -- <xfer-optimization-1.7>
1, "table T2 has 2 columns but 3 values were supplied"
- -- <xfer-optimization-1.5>
+ -- <xfer-optimization-1.7>
})
+aftr = box.sql.debug().sql_xfer_count
+
test:do_execsql_test(
- "xfer-optimization-1.6",
+ "xfer-optimization-1.8",
[[
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.6>
+ -- <xfer-optimization-1.8>
- -- <xfer-optimization-1.6>
+ -- <xfer-optimization-1.8>
})
+do_xfer_test(9, 0)
+
+bfr = box.sql.debug().sql_xfer_count
+
test:do_catchsql_test(
- "xfer-optimization-1.7",
+ "xfer-optimization-1.10",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -89,23 +127,29 @@ test:do_catchsql_test(
CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.7>
+ -- <xfer-optimization-1.10>
0
- -- <xfer-optimization-1.7>
+ -- <xfer-optimization-1.10>
})
+aftr = box.sql.debug().sql_xfer_count
+
test:do_execsql_test(
- "xfer-optimization-1.8",
+ "xfer-optimization-1.11",
[[
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.6>
+ -- <xfer-optimization-1.11>
1, 1, 2, 2, 3, 3
- -- <xfer-optimization-1.6>
+ -- <xfer-optimization-1.11>
})
+do_xfer_test(12, 1);
+
+bfr = box.sql.debug().sql_xfer_count
+
test:do_catchsql_test(
- "xfer-optimization-1.9",
+ "xfer-optimization-1.13",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -114,23 +158,29 @@ test:do_catchsql_test(
CREATE TABLE t2(b INTEGER, a INTEGER PRIMARY KEY);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.9>
+ -- <xfer-optimization-1.13>
1, "Duplicate key exists in unique index 'sqlite_autoindex_T2_1' in space
'T2'"
- -- <xfer-optimization-1.9>
+ -- <xfer-optimization-1.13>
})
+aftr = box.sql.debug().sql_xfer_count
+
test:do_execsql_test(
- "xfer-optimization-1.10",
+ "xfer-optimization-1.14",
[[
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.10>
+ -- <xfer-optimization-1.14>
- -- <xfer-optimization-1.10>
+ -- <xfer-optimization-1.14>
})
+do_xfer_test(15, 0)
+
+bfr = box.sql.debug().sql_xfer_count
+
test:do_catchsql_test(
- "xfer-optimization-1.11",
+ "xfer-optimization-1.16",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -139,72 +189,24 @@ test:do_catchsql_test(
CREATE TABLE t2(b INTEGER PRIMARY KEY, a INTEGER);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.11>
+ -- <xfer-optimization-1.16>
0
- -- <xfer-optimization-1.11>
- })
-
-test:do_execsql_test(
- "xfer-optimization-1.12",
- [[
- SELECT * FROM t2;
- ]], {
- -- <xfer-optimization-1.12>
- 1, 1, 2, 2, 3, 2
- -- <xfer-optimization-1.12>
+ -- <xfer-optimization-1.16>
})
-test:do_catchsql_test(
- "xfer-optimization-1.13",
- [[
- DROP TABLE t1;
- DROP TABLE t2;
- CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
- CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
- INSERT INTO t1 VALUES (3, 3), (4, 4), (5, 5);
- INSERT INTO t2 VALUES (1, 1), (2, 2);
- INSERT INTO t2 SELECT * FROM t1;
- ]], {
- -- <xfer-optimization-1.13>
- 0
- -- <xfer-optimization-1.13>
- })
+aftr = box.sql.debug().sql_xfer_count
test:do_execsql_test(
- "xfer-optimization-1.14",
+ "xfer-optimization-1.17",
[[
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.14>
- 1, 1, 2, 2, 3, 3, 4, 4, 5, 5
- -- <xfer-optimization-1.14>
+ -- <xfer-optimization-1.17>
+ 1, 1, 2, 2, 3, 2
+ -- <xfer-optimization-1.17>
})
-test:do_catchsql_test(
- "xfer-optimization-1.15",
- [[
- DROP TABLE t1;
- DROP TABLE t2;
- CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE);
- CREATE TABLE t2(a INTEGER PRIMARY KEY, b UNIQUE);
- INSERT INTO t1 VALUES (2, 2), (3, 3), (5, 5);
- INSERT INTO t2 VALUES (1, 1), (4, 4);
- INSERT OR ROLLBACK INTO t2 SELECT * FROM t1;
- ]], {
- -- <xfer-optimization-1.15>
- 0
- -- <xfer-optimization-1.15>
- })
-
-test:do_execsql_test(
- "xfer-optimization-1.16",
- [[
- SELECT * FROM t2;
- ]], {
- -- <xfer-optimization-1.16>
- 1, 1, 2, 2, 3, 3, 4, 4, 5, 5
- -- <xfer-optimization-1.16>
- })
+do_xfer_test(18, 1)
-- The following tests are supposed to test if xfer-optimization is
actually
-- used in the given cases (if the conflict actually occurs):
@@ -220,23 +222,6 @@ test:do_execsql_test(
-- 5) insert with fail
-- 6) insert with ignore
-local function do_xfer_test(test_number, return_code)
- test_name = string.format("xfer-optimization-1.%d", test_number)
- test:do_test(
- test_name,
- function()
- if (aftr - bfr == 1) then
- return {1}
- end
- if (aftr == bfr) then
- return {0}
- end
- end, {
- -- <test_name>
- return_code
- -- <test_name>
- })
-end
-- 1.0) insert w/o explicit confl. action & w/o index replace action
------------------------------------------------------------------------------
@@ -244,7 +229,7 @@ end
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.17",
+ "xfer-optimization-1.19",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -256,26 +241,26 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.17>
+ -- <xfer-optimization-1.19>
1, "Duplicate key exists in unique index 'sqlite_autoindex_T2_1' in space
'T2'"
- -- <xfer-optimization-1.17>
+ -- <xfer-optimization-1.19>
})
test:do_execsql_test(
- "xfer-optimization-1.18",
+ "xfer-optimization-1.20",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.18>
+ -- <xfer-optimization-1.20>
2, 2, 3, 4, 4, 4, 10, 10
- -- <xfer-optimization-1.18>
+ -- <xfer-optimization-1.20>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(19, 0)
+do_xfer_test(21, 0)
-- 1.1) insert w/o explicit confl. action & w/
-- index replace action & empty dest_table
@@ -284,7 +269,7 @@ do_xfer_test(19, 0)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.20",
+ "xfer-optimization-1.22",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -296,36 +281,36 @@ test:do_catchsql_test(
INSERT INTO t3 VALUES (1);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.20>
+ -- <xfer-optimization-1.22>
0
- -- <xfer-optimization-1.20>
+ -- <xfer-optimization-1.22>
})
test:do_execsql_test(
- "xfer-optimization-1.21",
+ "xfer-optimization-1.23",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.21>
+ -- <xfer-optimization-1.23>
1, 1, 3, 3, 5, 5, 10, 10
- -- <xfer-optimization-1.21>
+ -- <xfer-optimization-1.23>
})
aftr = box.sql.debug().sql_xfer_count
test:do_execsql_test(
- "xfer-optimization-1.22",
+ "xfer-optimization-1.24",
[[
SELECT * FROM t3;
]], {
- -- <xfer-optimization-1.22>
+ -- <xfer-optimization-1.24>
1
- -- <xfer-optimization-1.22>
+ -- <xfer-optimization-1.24>
})
-do_xfer_test(23, 1)
+do_xfer_test(25, 1)
-- 1.2) insert w/o explicit confl. action & w/
-- index replace action & non-empty dest_table
@@ -334,7 +319,7 @@ do_xfer_test(23, 1)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.24",
+ "xfer-optimization-1.26",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -347,26 +332,26 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.24>
+ -- <xfer-optimization-1.26>
0
- -- <xfer-optimization-1.24>
+ -- <xfer-optimization-1.26>
})
test:do_execsql_test(
- "xfer-optimization-1.25",
+ "xfer-optimization-1.27",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.25>
+ -- <xfer-optimization-1.27>
1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 10, 10
- -- <xfer-optimization-1.25>
+ -- <xfer-optimization-1.27>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(26, 0)
+do_xfer_test(28, 0)
-- 2) insert with abort
------------------------------------------------------------------------------
@@ -374,7 +359,7 @@ do_xfer_test(26, 0)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.27",
+ "xfer-optimization-1.29",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -386,26 +371,26 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT OR ABORT INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.27>
+ -- <xfer-optimization-1.29>
1, "Duplicate key exists in unique index 'sqlite_autoindex_T2_1' in space
'T2'"
- -- <xfer-optimization-1.27>
+ -- <xfer-optimization-1.29>
})
test:do_execsql_test(
- "xfer-optimization-1.28",
+ "xfer-optimization-1.30",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.28>
+ -- <xfer-optimization-1.30>
2, 2, 3, 4, 4, 4, 10, 10
- -- <xfer-optimization-1.28>
+ -- <xfer-optimization-1.30>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(29, 1)
+do_xfer_test(31, 1)
-- 3.0) insert with rollback (into empty table)
------------------------------------------------------------------------------
@@ -413,7 +398,7 @@ do_xfer_test(29, 1)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.30",
+ "xfer-optimization-1.32",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -423,26 +408,26 @@ test:do_catchsql_test(
BEGIN;
INSERT OR ROLLBACK INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.30>
+ -- <xfer-optimization-1.32>
0
- -- <xfer-optimization-1.30>
+ -- <xfer-optimization-1.32>
})
test:do_execsql_test(
- "xfer-optimization-1.31",
+ "xfer-optimization-1.33",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.31>
+ -- <xfer-optimization-1.33>
1, 1, 3, 3, 5, 5, 10, 10
- -- <xfer-optimization-1.31>
+ -- <xfer-optimization-1.33>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(32, 1)
+do_xfer_test(34, 1)
-- 3.1) insert with rollback (into non-empty table)
------------------------------------------------------------------------------
@@ -450,7 +435,7 @@ do_xfer_test(32, 1)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.33",
+ "xfer-optimization-1.35",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -462,24 +447,24 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT OR ROLLBACK INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.33>
+ -- <xfer-optimization-1.35>
1, "UNIQUE constraint failed: T2.A"
- -- <xfer-optimization-1.33>
+ -- <xfer-optimization-1.35>
})
test:do_execsql_test(
- "xfer-optimization-1.34",
+ "xfer-optimization-1.36",
[[
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.34>
+ -- <xfer-optimization-1.36>
2, 2, 3, 4
- -- <xfer-optimization-1.34>
+ -- <xfer-optimization-1.36>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(35, 0)
+do_xfer_test(37, 0)
-- 4) insert with replace
------------------------------------------------------------------------------
@@ -487,7 +472,7 @@ do_xfer_test(35, 0)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.36",
+ "xfer-optimization-1.38",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -499,26 +484,26 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT OR REPLACE INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.36>
+ -- <xfer-optimization-1.38>
0
- -- <xfer-optimization-1.36>
+ -- <xfer-optimization-1.38>
})
test:do_execsql_test(
- "xfer-optimization-1.37",
+ "xfer-optimization-1.39",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.37>
+ -- <xfer-optimization-1.39>
1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 10, 10
- -- <xfer-optimization-1.37>
+ -- <xfer-optimization-1.39>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(38, 0)
+do_xfer_test(40, 0)
-- 5) insert with fail
------------------------------------------------------------------------------
@@ -526,7 +511,7 @@ do_xfer_test(38, 0)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.39",
+ "xfer-optimization-1.41",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -538,26 +523,26 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT OR FAIL INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.39>
+ -- <xfer-optimization-1.41>
1, "Duplicate key exists in unique index 'sqlite_autoindex_T2_1' in space
'T2'"
- -- <xfer-optimization-1.39>
+ -- <xfer-optimization-1.41>
})
test:do_execsql_test(
- "xfer-optimization-1.40",
+ "xfer-optimization-1.42",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.40>
+ -- <xfer-optimization-1.42>
1, 1, 2, 2, 3, 4, 4, 4, 10, 10
- -- <xfer-optimization-1.40>
+ -- <xfer-optimization-1.42>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(41, 0)
+do_xfer_test(43, 0)
-- 6) insert with ignore
------------------------------------------------------------------------------
@@ -565,7 +550,7 @@ do_xfer_test(41, 0)
bfr = box.sql.debug().sql_xfer_count
test:do_catchsql_test(
- "xfer-optimization-1.42",
+ "xfer-optimization-1.44",
[[
DROP TABLE t1;
DROP TABLE t2;
@@ -577,25 +562,25 @@ test:do_catchsql_test(
INSERT INTO t2 VALUES (4, 4);
INSERT OR IGNORE INTO t2 SELECT * FROM t1;
]], {
- -- <xfer-optimization-1.42>
+ -- <xfer-optimization-1.44>
0
- -- <xfer-optimization-1.42>
+ -- <xfer-optimization-1.44>
})
test:do_execsql_test(
- "xfer-optimization-1.43",
+ "xfer-optimization-1.45",
[[
INSERT INTO t2 VALUES (10, 10);
COMMIT;
SELECT * FROM t2;
]], {
- -- <xfer-optimization-1.43>
+ -- <xfer-optimization-1.45>
1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 10, 10
- -- <xfer-optimization-1.43>
+ -- <xfer-optimization-1.45>
})
aftr = box.sql.debug().sql_xfer_count
-do_xfer_test(44, 0)
+do_xfer_test(46, 0)
test:finish_test()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20180719/3095d9a4/attachment.html>
More information about the Tarantool-patches
mailing list