1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-05 15:55:57 +03:00

Allow comparison operators of a register against itself.

Ticket [188f912b51cd802a],

FossilOrigin-Name: 401c9d30e06191d938503aae024bc453d960fa64dc812ed86c661f94533247fd
This commit is contained in:
drh
2019-12-24 01:53:05 +00:00
parent 1e490c4ca6
commit 22c04f8199
4 changed files with 78 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
C Test\scase\sfor\sthe\szipfile-extension\sbug\sfix\sof\sthe\sprevious\scheck-in.
D 2019-12-23T21:11:15.463
C Allow\scomparison\soperators\sof\sa\sregister\sagainst\sitself.\nTicket\s[188f912b51cd802a],
D 2019-12-24T01:53:05.662
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -599,7 +599,7 @@ F src/upsert.c b445315c8958d8f17ec3297d06842e61dacaad0633ccaec1e4e160de7e562212
F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
F src/util.c 2c92bc706bbdb1c45a25180291e7e05a56e297aa5dd7b2bcd2b1c47e8bb05b17
F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
F src/vdbe.c 46695ae07f7b90de64bdfe099ed3c01f701dac3193d219bdb736e5eea11615b3
F src/vdbe.c 8691c41f61e27f2f36c3c6559ab5aa32a7d552c4fedf1d618f24dd7a58670a8b
F src/vdbe.h 3f068f00b23aebf392df142312ab5874588371c6d83e60d953f6d6b6453491c5
F src/vdbeInt.h 1ccaf470287e2d153b16cf7b0274d436db2c2f74cdf14afd1a0ff4cb51548ae6
F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02
@@ -728,7 +728,7 @@ F test/capi3d.test aba917805573a03deed961a21f07a5a84505ad0a616f7e3fc1508844a15bc
F test/capi3e.test 3d49c01ef2a1a55f41d73cba2b23b5059ec460fe
F test/cast.test 3619f0c58c2e4b2a94aa86e75607e497d34ef40ab74418e71aef7b4ca5155895
F test/cffault.test 9d6b20606afe712374952eec4f8fd74b1a8097ef
F test/check.test 25c6035302c846c7ff8e681cf8284473f6f01be94d327de60a688ad84ab01f8b
F test/check.test b21a76546c2115af2674280566a8eba577e72adfec330c3d9a8a466d41f8eb0d
F test/checkfault.test da6cb3d50247169efcb20bdf57863a3ccfa1d27d9e55cd324f0680096970f014
F test/chunksize.test 427d87791743486cbf0c3b8c625002f3255cb3a89c6eba655a98923b1387b760
F test/close.test eccbad8ecd611d974cbf47278c3d4e5874faf02d811338d5d348af42d56d647c
@@ -1852,7 +1852,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P cc0fb00a128fd0773db5ff7891f7aa577a3671d570166d2cbb30df922344adcf
R 01755885676b946174adbb226548e4c0
P bc8bfc7fcdf33f6855584e10e9260073430517ff3268cf0c7988dcc4cd785391
R 053d1dee3c90f1c568a1ca6324c56ed1
U drh
Z 9cbb5c3517ed7c9d1c8f71b1fd10d978
Z c118a2c355c191018c74d0b27b1f15e8

View File

@@ -1 +1 @@
bc8bfc7fcdf33f6855584e10e9260073430517ff3268cf0c7988dcc4cd785391
401c9d30e06191d938503aae024bc453d960fa64dc812ed86c661f94533247fd

View File

@@ -2052,9 +2052,11 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
sqlite3VdbeMemStringify(pIn1, encoding, 1);
testcase( (flags1&MEM_Dyn) != (pIn1->flags&MEM_Dyn) );
flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask);
assert( pIn1!=pIn3 );
}
if( (flags3 & MEM_Str)==0 && (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
if( (flags3 & MEM_Str)==0
&& (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0
&& pIn1!=pIn3
){
testcase( pIn3->flags & MEM_Int );
testcase( pIn3->flags & MEM_Real );
testcase( pIn3->flags & MEM_IntReal );

View File

@@ -11,7 +11,6 @@
# This file implements regression tests for SQLite library. The
# focus of this file is testing CHECK constraints
#
# $Id: check.test,v 1.13 2009/06/05 17:09:12 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -536,7 +535,71 @@ do_execsql_test 11.6 {
INSERT INTO t2(b, a) VALUES(2, 'abc');
}
finish_test
# 2019-12-24 ticket b383b90278186263
#
reset_db
do_execsql_test 12.10 {
CREATE TABLE t1(a TEXT, CHECK(a=+a));
INSERT INTO t1(a) VALUES(NULL),('xyz'),(5),(x'303132'),(4.75);
SELECT quote(a) FROM t1 ORDER BY rowid;
} {NULL 'xyz' '5' X'303132' '4.75'}
do_execsql_test 12.20 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(a<>+a));
INSERT INTO t1(a) VALUES(NULL);
} {}
do_catchsql_test 12.21 {
INSERT INTO t1(a) VALUES('xyz');
} {1 {CHECK constraint failed: t1}}
do_catchsql_test 12.22 {
INSERT INTO t1(a) VALUES(123);
} {1 {CHECK constraint failed: t1}}
do_execsql_test 12.30 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(NOT(a=+a)));
INSERT INTO t1(a) VALUES(NULL);
} {}
do_catchsql_test 12.31 {
INSERT INTO t1(a) VALUES('xyz');
} {1 {CHECK constraint failed: t1}}
do_catchsql_test 12.32 {
INSERT INTO t1(a) VALUES(123);
} {1 {CHECK constraint failed: t1}}
do_execsql_test 12.40 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(NOT(a<>+a)));
INSERT INTO t1(a) VALUES(NULL),('xyz'),(5),(x'303132'),(4.75);
SELECT quote(a) FROM t1 ORDER BY rowid;
} {NULL 'xyz' '5' X'303132' '4.75'}
do_execsql_test 12.50 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(a BETWEEN 0 AND +a));
INSERT INTO t1(a) VALUES(NULL),('xyz'),(5),(x'303132'),(4.75);
SELECT quote(a) FROM t1 ORDER BY rowid;
} {NULL 'xyz' '5' X'303132' '4.75'}
do_execsql_test 12.60 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(a NOT BETWEEN 0 AND +a));
INSERT INTO t1(a) VALUES(NULL);
SELECT quote(a) FROM t1 ORDER BY rowid;
} {NULL}
do_catchsql_test 12.61 {
INSERT INTO t1(a) VALUES(456);
} {1 {CHECK constraint failed: t1}}
do_execsql_test 12.70 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(a BETWEEN +a AND 999999));
INSERT INTO t1(a) VALUES(NULL),(5);
SELECT quote(a) FROM t1 ORDER BY rowid;
} {NULL '5'}
do_execsql_test 12.80 {
DROP TABLE t1;
CREATE TABLE t1(a TEXT, CHECK(a NOT BETWEEN +a AND 999999));
INSERT INTO t1(a) VALUES(NULL);
SELECT quote(a) FROM t1 ORDER BY rowid;
} {NULL}
do_catchsql_test 12.81 {
INSERT INTO t1(a) VALUES(456);
} {1 {CHECK constraint failed: t1}}
finish_test