From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 0133C46970E for ; Mon, 30 Dec 2019 13:19:28 +0300 (MSK) From: imeevma@tarantool.org Date: Mon, 30 Dec 2019 13:19:28 +0300 Message-Id: <14108624a5d45f6acbbe2e4543be2ed0d9c82bbd.1577701113.git.imeevma@gmail.com> In-Reply-To: References: Subject: [Tarantool-patches] [PATCH v5 1/5] sql: remove PRAGMA "count_changes" List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: korablev@tarantool.org Cc: tarantool-patches@dev.tarantool.org Pragma "count_changes" forces the INSERT, REPLACE, DELETE, and UPDATE statements to return the number of changed rows as a result set. This is not necessary, as these statements return the number of changed rows as metadata. Part of #4511 --- src/box/sql/delete.c | 24 ---------- src/box/sql/insert.c | 34 +------------ src/box/sql/pragma.h | 110 ++++++++++++++++++++----------------------- src/box/sql/sqlInt.h | 3 -- src/box/sql/update.c | 25 ---------- src/box/sql/vdbe.c | 29 +----------- test/sql-tap/update.test.lua | 49 ++++++++++--------- test/sql/iproto.result | 31 ------------ test/sql/iproto.test.lua | 8 ---- test/sql/sql-debug.result | 1 - 10 files changed, 77 insertions(+), 237 deletions(-) diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c index 169814a..8d9ae4f 100644 --- a/src/box/sql/delete.c +++ b/src/box/sql/delete.c @@ -191,15 +191,6 @@ sql_table_delete_from(struct Parse *parse, struct SrcList *tab_list, tab_cursor); } - /* Initialize the counter of the number of rows deleted, - * if we are counting rows. - */ - int reg_count = -1; - uint32_t sql_flags = parse->sql_flags; - if ((sql_flags & SQL_CountRows) != 0) { - reg_count = ++parse->nMem; - sqlVdbeAddOp2(v, OP_Integer, 0, reg_count); - } /* Special case: A DELETE without a WHERE clause deletes * everything. It is easier just to erase the whole table. */ @@ -284,12 +275,6 @@ sql_table_delete_from(struct Parse *parse, struct SrcList *tab_list, */ /* assert(is_complex || one_pass != ONEPASS_OFF); */ - /* Keep track of the number of rows to be - * deleted. - */ - if ((sql_flags & SQL_CountRows) != 0) - sqlVdbeAddOp2(v, OP_AddImm, reg_count, 1); - /* Extract the primary key for the current row */ if (!is_view) { struct key_part_def *part = pk_info->parts; @@ -413,15 +398,6 @@ sql_table_delete_from(struct Parse *parse, struct SrcList *tab_list, } } - /* Return the number of rows that were deleted. */ - if ((sql_flags & SQL_CountRows) != 0 && - parse->triggered_space != NULL) { - sqlVdbeAddOp2(v, OP_ResultRow, reg_count, 1); - sqlVdbeSetNumCols(v, 1); - vdbe_metadata_set_col_name(v, 0, "rows deleted"); - vdbe_metadata_set_col_type(v, 0, "integer"); - } - delete_from_cleanup: sqlSrcListDelete(db, tab_list); sql_expr_delete(db, where, false); diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c index f1290e0..43a0de5 100644 --- a/src/box/sql/insert.c +++ b/src/box/sql/insert.c @@ -251,7 +251,6 @@ sqlInsert(Parse * pParse, /* Parser context */ /* Register allocations */ int regFromSelect = 0; /* Base register for data coming from SELECT */ - int regRowCount = 0; /* Memory cell used for the row counter */ int regIns; /* Block of regs holding data being inserted */ int regTupleid; /* registers holding insert tupleid */ int regData; /* register holding first column to insert */ @@ -334,7 +333,7 @@ sqlInsert(Parse * pParse, /* Parser context */ xferOptimization(pParse, space, pSelect, on_error)) { assert(trigger == NULL); assert(pList == 0); - goto insert_end; + goto insert_cleanup; } /* @@ -512,12 +511,6 @@ sqlInsert(Parse * pParse, /* Parser context */ goto insert_cleanup; } - /* Initialize the count of rows to be inserted - */ - if ((pParse->sql_flags & SQL_CountRows) != 0) { - regRowCount = ++pParse->nMem; - sqlVdbeAddOp2(v, OP_Integer, 0, regRowCount); - } /* This is the top of the main insertion loop */ if (useTempTable) { /* This block codes the top of loop only. The complete loop is the @@ -745,12 +738,6 @@ sqlInsert(Parse * pParse, /* Parser context */ on_error, autoinc_reg); } - /* Update the count of rows that are inserted - */ - if ((pParse->sql_flags & SQL_CountRows) != 0) { - sqlVdbeAddOp2(v, OP_AddImm, regRowCount, 1); - } - if (trigger != NULL) { /* Code AFTER triggers */ vdbe_code_row_trigger(pParse, trigger, TK_INSERT, 0, @@ -773,22 +760,6 @@ sqlInsert(Parse * pParse, /* Parser context */ sqlVdbeJumpHere(v, addrInsTop); } - insert_end: - - /* Return the number of rows inserted. */ - if ((pParse->sql_flags & SQL_CountRows) != 0 && - pParse->triggered_space == NULL) { - sqlVdbeAddOp2(v, OP_ResultRow, regRowCount, 1); - sqlVdbeSetNumCols(v, 1); - const char *column_name; - if (on_error == ON_CONFLICT_ACTION_REPLACE) - column_name = "rows replaced"; - else - column_name = "rows inserted"; - vdbe_metadata_set_col_name(v, 0, column_name); - vdbe_metadata_set_col_type(v, 0, "integer"); - } - insert_cleanup: sqlSrcListDelete(db, pTabList); sql_expr_list_delete(db, pList); @@ -1181,9 +1152,6 @@ xferOptimization(Parse * pParse, /* Parser context */ */ if (!rlist_empty(&dest->child_fk_constraint)) return 0; - if ((pParse->sql_flags & SQL_CountRows) != 0) { - return 0; /* xfer opt does not play well with PRAGMA count_changes */ - } /* If we get this far, it means that the xfer optimization is at * least a possibility, though it might only work if the destination diff --git a/src/box/sql/pragma.h b/src/box/sql/pragma.h index aa9377a..d122a13 100644 --- a/src/box/sql/pragma.h +++ b/src/box/sql/pragma.h @@ -93,60 +93,57 @@ static const char *const pragCName[] = { /* 55 */ "text", /* 56 */ "match", /* 57 */ "text", - /* Used by: count_changes */ - /* 58 */ "count_changes", - /* 59 */ "integer", /* Used by: defer_foreign_keys */ - /* 60 */ "defer_foreign_keys", - /* 61 */ "integer", + /* 58 */ "defer_foreign_keys", + /* 59 */ "integer", /* Used by: full_column_names */ - /* 62 */ "full_column_names", - /* 63 */ "integer", + /* 60 */ "full_column_names", + /* 61 */ "integer", /* Used by: parser_trace */ - /* 64 */ "parser_trace", - /* 65 */ "integer", + /* 62 */ "parser_trace", + /* 63 */ "integer", /* Used by: recursive_triggers */ - /* 66 */ "recursive_triggers", - /* 67 */ "integer", + /* 64 */ "recursive_triggers", + /* 65 */ "integer", /* Used by: reverse_unordered_selects */ - /* 68 */ "reverse_unordered_selects", - /* 69 */ "integer", + /* 66 */ "reverse_unordered_selects", + /* 67 */ "integer", /* Used by: select_trace */ - /* 70 */ "select_trace", - /* 71 */ "integer", + /* 68 */ "select_trace", + /* 69 */ "integer", /* Used by: short_column_names */ - /* 72 */ "short_column_names", - /* 73 */ "integer", + /* 70 */ "short_column_names", + /* 71 */ "integer", /* Used by: sql_compound_select_limit */ - /* 74 */ "sql_compound_select_limit", - /* 75 */ "integer", + /* 72 */ "sql_compound_select_limit", + /* 73 */ "integer", /* Used by: sql_default_engine */ - /* 76 */ "sql_default_engine", - /* 77 */ "text", + /* 74 */ "sql_default_engine", + /* 75 */ "text", /* Used by: sql_trace */ - /* 78 */ "sql_trace", - /* 79 */ "integer", + /* 76 */ "sql_trace", + /* 77 */ "integer", /* Used by: vdbe_addoptrace */ - /* 80 */ "vdbe_addoptrace", - /* 81 */ "integer", + /* 78 */ "vdbe_addoptrace", + /* 79 */ "integer", /* Used by: vdbe_debug */ - /* 82 */ "vdbe_debug", - /* 83 */ "integer", + /* 80 */ "vdbe_debug", + /* 81 */ "integer", /* Used by: vdbe_eqp */ - /* 84 */ "vdbe_eqp", - /* 85 */ "integer", + /* 82 */ "vdbe_eqp", + /* 83 */ "integer", /* Used by: vdbe_listing */ - /* 86 */ "vdbe_listing", - /* 87 */ "integer", + /* 84 */ "vdbe_listing", + /* 85 */ "integer", /* Used by: vdbe_trace */ - /* 88 */ "vdbe_trace", - /* 89 */ "integer", + /* 86 */ "vdbe_trace", + /* 87 */ "integer", /* Used by: where_trace */ - /* 90 */ "where_trace", - /* 91 */ "integer", + /* 88 */ "where_trace", + /* 89 */ "integer", /* Used by: full_metadata */ - /* 92 */ "full_metadata", - /* 93 */ "integer", + /* 90 */ "full_metadata", + /* 91 */ "integer", }; /* Definitions of all built-in pragmas */ @@ -168,15 +165,10 @@ static const PragmaName aPragmaName[] = { /* ePragFlg: */ PragFlg_Result0, /* ColNames: */ 38, 2, /* iArg: */ 0}, - { /* zName: */ "count_changes", - /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 60, 1, - /* iArg: */ SQL_CountRows}, { /* zName: */ "defer_foreign_keys", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 62, 1, + /* ColNames: */ 58, 1, /* iArg: */ SQL_DeferFKs}, { /* zName: */ "foreign_key_list", /* ePragTyp: */ PragTyp_FOREIGN_KEY_LIST, @@ -187,12 +179,12 @@ static const PragmaName aPragmaName[] = { { /* zName: */ "full_column_names", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 64, 1, + /* ColNames: */ 60, 1, /* iArg: */ SQL_FullColNames}, { /* zName: */ "full_metadata", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 92, 1, + /* ColNames: */ 90, 1, /* iArg: */ SQL_FullMetadata}, { /* zName: */ "index_info", /* ePragTyp: */ PragTyp_INDEX_INFO, @@ -210,46 +202,46 @@ static const PragmaName aPragmaName[] = { { /* zName: */ "parser_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 64, 1, + /* ColNames: */ 62, 1, /* iArg: */ PARSER_TRACE_FLAG}, #endif { /* zName: */ "recursive_triggers", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 66, 1, + /* ColNames: */ 64, 1, /* iArg: */ SQL_RecTriggers}, { /* zName: */ "reverse_unordered_selects", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 68, 1, + /* ColNames: */ 66, 1, /* iArg: */ SQL_ReverseOrder}, #if defined(SQL_DEBUG) { /* zName: */ "select_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 70, 1, + /* ColNames: */ 68, 1, /* iArg: */ SQL_SelectTrace}, #endif { /* zName: */ "short_column_names", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 72, 1, + /* ColNames: */ 70, 1, /* iArg: */ SQL_ShortColNames}, { /* zName: */ "sql_compound_select_limit", /* ePragTyp: */ PragTyp_COMPOUND_SELECT_LIMIT, /* ePragFlg: */ PragFlg_Result0, - /* ColNames: */ 74, 1, + /* ColNames: */ 72, 1, /* iArg: */ 0}, { /* zName: */ "sql_default_engine", /* ePragTyp: */ PragTyp_DEFAULT_ENGINE, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 76, 1, + /* ColNames: */ 74, 1, /* iArg: */ 0}, #if defined(SQL_DEBUG) { /* zName: */ "sql_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 78, 1, + /* ColNames: */ 76, 1, /* iArg: */ SQL_SqlTrace}, #endif { /* zName: */ "stats", @@ -268,33 +260,33 @@ static const PragmaName aPragmaName[] = { { /* zName: */ "vdbe_addoptrace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 80, 1, + /* ColNames: */ 78, 1, /* iArg: */ SQL_VdbeAddopTrace}, { /* zName: */ "vdbe_debug", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 82, 1, + /* ColNames: */ 80, 1, /* iArg: */ SQL_SqlTrace | SQL_VdbeListing | SQL_VdbeTrace}, { /* zName: */ "vdbe_eqp", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 84, 1, + /* ColNames: */ 82, 1, /* iArg: */ SQL_VdbeEQP}, { /* zName: */ "vdbe_listing", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 86, 1, + /* ColNames: */ 84, 1, /* iArg: */ SQL_VdbeListing}, { /* zName: */ "vdbe_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 88, 1, + /* ColNames: */ 86, 1, /* iArg: */ SQL_VdbeTrace}, { /* zName: */ "where_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 90, 1, + /* ColNames: */ 88, 1, /* iArg: */ SQL_WhereTrace}, #endif }; diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index 2d2aee6..4678eff 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -1191,9 +1191,6 @@ struct sql { #define PARSER_TRACE_FLAG 0x00000002 #define SQL_FullColNames 0x00000004 /* Show full column names on SELECT */ #define SQL_ShortColNames 0x00000040 /* Show short columns names */ -#define SQL_CountRows 0x00000080 /* Count rows changed by INSERT, */ - /* DELETE, or UPDATE and return */ - /* the count using a callback. */ #define SQL_SqlTrace 0x00000200 /* Debug print SQL as it executes */ #define SQL_SelectTrace 0x00000800 /* Debug info about select statement */ #define SQL_WhereTrace 0x00008000 /* Debug info about optimizer's work */ diff --git a/src/box/sql/update.c b/src/box/sql/update.c index c08777a..d25262c 100644 --- a/src/box/sql/update.c +++ b/src/box/sql/update.c @@ -76,7 +76,6 @@ sqlUpdate(Parse * pParse, /* The parser context */ int aiCurOnePass[2]; /* The write cursors opened by WHERE_ONEPASS */ /* Register Allocations */ - int regRowCount = 0; /* A count of rows changed */ int regOldPk = 0; int regNewPk = 0; int regNew = 0; /* Content of the NEW.* table in triggers */ @@ -268,14 +267,6 @@ sqlUpdate(Parse * pParse, /* The parser context */ */ sqlWhereEnd(pWInfo); - - /* Initialize the count of updated rows - */ - if ((pParse->sql_flags & SQL_CountRows) != 0 && - pParse->triggered_space == NULL) { - regRowCount = ++pParse->nMem; - sqlVdbeAddOp2(v, OP_Integer, 0, regRowCount); - } labelBreak = sqlVdbeMakeLabel(v); /* Top of the update loop */ if (okOnePass) { @@ -470,13 +461,6 @@ sqlUpdate(Parse * pParse, /* The parser context */ fk_constraint_emit_actions(pParse, space, regOldPk, aXRef); } - /* Increment the row counter - */ - if ((pParse->sql_flags & SQL_CountRows) != 0 && - pParse->triggered_space == NULL) { - sqlVdbeAddOp2(v, OP_AddImm, regRowCount, 1); - } - vdbe_code_row_trigger(pParse, trigger, TK_UPDATE, pChanges, TRIGGER_AFTER, space, regOldPk, on_error, labelContinue); @@ -493,15 +477,6 @@ sqlUpdate(Parse * pParse, /* The parser context */ } sqlVdbeResolveLabel(v, labelBreak); - /* Return the number of rows that were changed. */ - if ((pParse->sql_flags & SQL_CountRows) != 0 && - pParse->triggered_space == NULL) { - sqlVdbeAddOp2(v, OP_ResultRow, regRowCount, 1); - sqlVdbeSetNumCols(v, 1); - vdbe_metadata_set_col_name(v, 0, "rows updated"); - vdbe_metadata_set_col_type(v, 0, "integer"); - } - update_cleanup: sqlSrcListDelete(db, pTabList); sql_expr_list_delete(db, pChanges); diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index ca99e8e..b821d9d 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -1418,34 +1418,7 @@ case OP_ResultRow: { assert(p->nResColumn==pOp->p2); assert(pOp->p1>0); assert(pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1); - - /* If this statement has violated immediate foreign key constraints, do - * not return the number of rows modified. And do not RELEASE the statement - * transaction. It needs to be rolled back. - */ - if (sqlVdbeCheckFk(p, 0) != 0) { - assert((p->sql_flags & SQL_CountRows) != 0); - goto abort_due_to_error; - } - - /* If the SQL_CountRows flag is set in sql.flags mask, then - * DML statements invoke this opcode to return the number of rows - * modified to the user. This is the only way that a VM that - * opens a statement transaction may invoke this opcode. - * - * In case this is such a statement, close any statement transaction - * opened by this VM before returning control to the user. This is to - * ensure that statement-transactions are always nested, not overlapping. - * If the open statement-transaction is not closed here, then the user - * may step another VM that opens its own statement transaction. This - * may lead to overlapping statement transactions. - * - * The statement transaction is never a top-level transaction. Hence - * the RELEASE call below can never fail. - */ - assert(p->iStatement == 0 || (p->sql_flags & SQL_CountRows) != 0); - rc = sqlVdbeCloseStatement(p, SAVEPOINT_RELEASE); - assert(rc==0); + assert(p->iStatement == 0 && p->anonymous_savepoint == NULL); /* Invalidate all ephemeral cursor row caches */ p->cacheCtr = (p->cacheCtr + 2)|1; diff --git a/test/sql-tap/update.test.lua b/test/sql-tap/update.test.lua index 07e4e43..ac0389a 100755 --- a/test/sql-tap/update.test.lua +++ b/test/sql-tap/update.test.lua @@ -21,6 +21,11 @@ test:plan(111) -- ["source",[["testdir"],"\/tester.tcl"]] -- Try to update an non-existent table -- + +local function update_row_count(sql) + return box.execute(sql).row_count +end + test:do_catchsql_test("update-1.1", [[ UPDATE test1 SET f2=5 WHERE f1<1 ]], { @@ -124,13 +129,12 @@ test:do_execsql_test("update-3.6", [[ }) test:do_test("update-3.7", function() - test:execsql "PRAGMA count_changes=on" - return test:execsql "UPDATE test1 SET f2=f2/3 WHERE f1<=5" -end, { + return update_row_count("UPDATE test1 SET f2 = f2 / 3 WHERE f1 <= 5") + end, -- 5 -- -}) +) test:do_execsql_test("update-3.8", [[ SELECT f1,f2 FROM test1 ORDER BY f1 @@ -140,13 +144,13 @@ test:do_execsql_test("update-3.8", [[ -- }) -test:do_execsql_test("update-3.9", [[ - UPDATE test1 SET f2=f2/3 WHERE f1>5 -]], { +test:do_test("update-3.9", function() + return update_row_count("UPDATE test1 SET f2 = f2 / 3 WHERE f1 > 5") + end, -- 5 -- -}) +) test:do_execsql_test("update-3.10", [[ SELECT f1,f2 FROM test1 ORDER BY f1 @@ -158,13 +162,13 @@ test:do_execsql_test("update-3.10", [[ -- Swap the values of f1 and f2 for all elements -- -test:do_execsql_test("update-3.11", [[ - UPDATE test1 SET F2=f1, F1=f2 -]], { +test:do_test("update-3.11", function() + return update_row_count("UPDATE test1 SET F2 = f1, F1 = f2") + end, -- 10 -- -}) +) test:do_execsql_test("update-3.12", [[ SELECT f1,f2 FROM test1 ORDER BY F1 @@ -175,7 +179,6 @@ test:do_execsql_test("update-3.12", [[ }) test:do_test("update-3.13", function() - test:execsql "PRAGMA count_changes=off" return test:execsql "UPDATE test1 SET F2=f1, F1=f2" end, { -- @@ -254,17 +257,15 @@ end, { -- }) -test:do_execsql_test("update-4.6", [[ - PRAGMA count_changes=on; - UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128; -]], { +test:do_test("update-4.6", function() + return update_row_count("UPDATE test1 SET f1 = f1 - 1 WHERE f1 <= 100 and f2 == 128;") + end, -- 2 -- -}) +) test:do_execsql_test("update-4.7", [[ - PRAGMA count_changes=off; SELECT f1,f2 FROM test1 ORDER BY f1,f2 ]], { -- @@ -391,17 +392,15 @@ test:do_execsql_test("update-5.5.5", [[ -- }) -test:do_execsql_test("update-5.6", [[ - PRAGMA count_changes=on; - UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128; -]], { +test:do_test("update-5.6", function() + return update_row_count("UPDATE test1 SET f1 = f1 - 1 WHERE f1 <= 100 and f2 == 128;") + end, -- 2 -- -}) +) test:do_execsql_test("update-5.6.1", [[ - PRAGMA count_changes=off; SELECT f1,f2 FROM test1 ORDER BY f1,f2 ]], { -- diff --git a/test/sql/iproto.result b/test/sql/iproto.result index 99dc58b..3240c2b 100644 --- a/test/sql/iproto.result +++ b/test/sql/iproto.result @@ -732,37 +732,6 @@ res.metadata - name: detail type: text ... --- When pragma count_changes is on, statements INSERT, REPLACE and --- UPDATE returns number of changed columns. Make sure that this --- result has a column type. -cn:execute("PRAGMA count_changes = 1;") ---- -- row_count: 0 -... -cn:execute("INSERT INTO t1 VALUES (1), (2), (3);") ---- -- metadata: - - name: rows inserted - type: integer - rows: - - [3] -... -cn:execute("REPLACE INTO t1 VALUES (2), (3), (4), (5);") ---- -- metadata: - - name: rows replaced - type: integer - rows: - - [4] -... -cn:execute("UPDATE t1 SET id = id + 100 WHERE id > 10;") ---- -- metadata: - - name: rows updated - type: integer - rows: - - [0] -... -- Make sure that built-in functions have a right returning type. -- cn:execute("SELECT zeroblob(1);") diff --git a/test/sql/iproto.test.lua b/test/sql/iproto.test.lua index 5dfe95c..b5ec2c0 100644 --- a/test/sql/iproto.test.lua +++ b/test/sql/iproto.test.lua @@ -220,14 +220,6 @@ res.metadata res = cn:execute("EXPLAIN QUERY PLAN SELECT COUNT(*) FROM t1") res.metadata --- When pragma count_changes is on, statements INSERT, REPLACE and --- UPDATE returns number of changed columns. Make sure that this --- result has a column type. -cn:execute("PRAGMA count_changes = 1;") -cn:execute("INSERT INTO t1 VALUES (1), (2), (3);") -cn:execute("REPLACE INTO t1 VALUES (2), (3), (4), (5);") -cn:execute("UPDATE t1 SET id = id + 100 WHERE id > 10;") - -- Make sure that built-in functions have a right returning type. -- cn:execute("SELECT zeroblob(1);") diff --git a/test/sql/sql-debug.result b/test/sql/sql-debug.result index a1b9766..cb59768 100644 --- a/test/sql/sql-debug.result +++ b/test/sql/sql-debug.result @@ -38,7 +38,6 @@ box.execute('PRAGMA') - name: pragma_value type: integer rows: - - ['count_changes', 0] - ['defer_foreign_keys', 0] - ['full_column_names', 0] - ['full_metadata', 0] -- 2.7.4