Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem in fts3 causing it to report corruption if a doclist contains consectutive rowid entries that differ by more than 2^63. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
0b0a3048f9df88bbc8979f2ac5247bee |
User & Date: | dan 2019-10-28 13:54:59.510 |
Context
2019-10-29
| ||
01:26 | Disallow tables that have only virtual columns. (check-in: 591973217f user: drh tags: trunk) | |
2019-10-28
| ||
13:54 | Fix a problem in fts3 causing it to report corruption if a doclist contains consectutive rowid entries that differ by more than 2^63. (check-in: 0b0a3048f9 user: dan tags: trunk) | |
13:07 | Remove a NEVER() comparison from sqlite3ExprCompare(). (check-in: f4285297e1 user: drh tags: trunk) | |
Changes
Changes to ext/fts3/fts3_write.c.
︙ | ︙ | |||
2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 | if( !isIgnoreEmpty || nList>0 ){ /* Calculate the 'docid' delta value to write into the merged ** doclist. */ sqlite3_int64 iDelta; if( p->bDescIdx && nDoclist>0 ){ iDelta = iPrev - iDocid; }else{ iDelta = iDocid - iPrev; } | > > < < < < | 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 | if( !isIgnoreEmpty || nList>0 ){ /* Calculate the 'docid' delta value to write into the merged ** doclist. */ sqlite3_int64 iDelta; if( p->bDescIdx && nDoclist>0 ){ if( iPrev<=iDocid ) return FTS_CORRUPT_VTAB; iDelta = iPrev - iDocid; }else{ if( nDoclist>0 && iPrev>=iDocid ) return FTS_CORRUPT_VTAB; iDelta = iDocid - iPrev; } nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0); if( nDoclist+nByte>pCsr->nBuffer ){ char *aNew; pCsr->nBuffer = (nDoclist+nByte)*2; aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer); if( !aNew ){ |
︙ | ︙ |
Changes to ext/fts5/test/fts5misc.test.
︙ | ︙ | |||
222 223 224 225 226 227 228 | # reset_db do_execsql_test 8.0 { CREATE VIRTUAL TABLE vt0 USING fts5(c0, tokenize = "ascii", prefix = 1); INSERT INTO vt0(c0) VALUES (x'd1'); } | < > > > > > > > > > > > > > > > > > > > > | 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | # reset_db do_execsql_test 8.0 { CREATE VIRTUAL TABLE vt0 USING fts5(c0, tokenize = "ascii", prefix = 1); INSERT INTO vt0(c0) VALUES (x'd1'); } do_execsql_test 8.1 { INSERT INTO vt0(vt0) VALUES('integrity-check'); } #------------------------------------------------------------------------- # reset_db do_execsql_test 9.0 { CREATE VIRTUAL TABLE t1 using FTS5(mailcontent); insert into t1(rowid, mailcontent) values (-4764623217061966105, 'we are going to upgrade'), (8324454597464624651, 'we are going to upgrade'); } do_execsql_test 9.1 { INSERT INTO t1(t1) VALUES('integrity-check'); } do_execsql_test 9.2 { SELECT rowid FROM t1('upgrade'); } { -4764623217061966105 8324454597464624651 } finish_test |
Changes to test/altertab3.test.
︙ | ︙ | |||
16 17 18 19 20 21 22 | # If SQLITE_OMIT_ALTERTABLE is defined, omit this file. ifcapable !altertable { finish_test return } | < | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # If SQLITE_OMIT_ALTERTABLE is defined, omit this file. ifcapable !altertable { finish_test return } ifcapable windowfunc { do_execsql_test 1.0 { CREATE TABLE t1(a, b); CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN SELECT sum(b) OVER w FROM t1 WINDOW w AS (ORDER BY a); END; } |
︙ | ︙ | |||
377 378 379 380 381 382 383 | SELECT sql FROM sqlite_master WHERE type='trigger'; } { {CREATE TRIGGER AFTER INSERT ON "t1x" WHEN new.aaa NOT NULL BEGIN SELECT a () FILTER (WHERE aaa>0) FROM "t1x"; END} } | > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | SELECT sql FROM sqlite_master WHERE type='trigger'; } { {CREATE TRIGGER AFTER INSERT ON "t1x" WHEN new.aaa NOT NULL BEGIN SELECT a () FILTER (WHERE aaa>0) FROM "t1x"; END} } #------------------------------------------------------------------------- reset_db do_execsql_test 18.1 { CREATE TABLE t1(a,b); CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN SELECT a, b FROM t1 INTERSECT SELECT b,a FROM t1 ORDER BY b IN ( SELECT a UNION SELECT b FROM t1 ORDER BY b COLLATE nocase ) ; END; } do_catchsql_test 18.2 { SELECT a, b FROM t1 INTERSECT SELECT b,a FROM t1 ORDER BY b IN ( SELECT a UNION SELECT b FROM t1 ORDER BY b COLLATE nocase ); } {1 {1st ORDER BY term does not match any column in the result set}} do_catchsql_test 18.3 { ALTER TABLE t1 RENAME TO t1x; } {1 {error in trigger r1: 1st ORDER BY term does not match any column in the result set}} finish_test |
Changes to test/fts3misc.test.
︙ | ︙ | |||
278 279 280 281 282 283 284 285 286 | INSERT INTO vt0 VALUES (0); INSERT INTO vt0(vt0) VALUES('optimize'); COMMIT; } do_execsql_test 8.3 { INSERT INTO vt0(vt0) VALUES('integrity-check'); } finish_test | > > > > > > > > > > > > > > > > > > > > | 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | INSERT INTO vt0 VALUES (0); INSERT INTO vt0(vt0) VALUES('optimize'); COMMIT; } do_execsql_test 8.3 { INSERT INTO vt0(vt0) VALUES('integrity-check'); } #------------------------------------------------------------------------- # reset_db do_execsql_test 9.0 { CREATE VIRTUAL TABLE t1 using fts4(mailcontent); insert into t1(rowid, mailcontent) values (-4764623217061966105, 'we are going to upgrade'), (8324454597464624651, 'we are going to upgrade'); } do_execsql_test 9.1 { INSERT INTO t1(t1) VALUES('integrity-check'); } do_execsql_test 9.2 { SELECT rowid FROM t1 WHERE t1 MATCH 'upgrade'; } { -4764623217061966105 8324454597464624651 } finish_test |