Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Do not accidently truncate zeroblob values when doing an arithmetic operation. Fix for ticket [bb4bdb9f7f654b0bb9f34cfba]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
13f6942eb0da2d92a0830f18640ce642 |
User & Date: | drh 2019-01-25 20:09:04.290 |
Context
2019-01-26
| ||
15:40 | Add the ".eqp trace" command to the CLI when using SQLITE_DEBUG, as a convenient shorthand for "PRAGMA vdbe_debug=ON" but with automatic indentation feature for program listings provided by the CLI. (check-in: 626502faa1 user: drh tags: trunk) | |
2019-01-25
| ||
20:09 | Do not accidently truncate zeroblob values when doing an arithmetic operation. Fix for ticket [bb4bdb9f7f654b0bb9f34cfba]. (check-in: 13f6942eb0 user: drh tags: trunk) | |
19:29 | Reinitialize debugging information on registers of a trigger prior to each invocation of the trigger. This prevents false-positives from the sqlite3VdbeMemAboutToChange() test logic. (check-in: 98b3b97573 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
381 382 383 384 385 386 387 388 389 390 391 392 393 394 | ** interpret as a string if we want to). Compute its corresponding ** numeric type, if has one. Set the pMem->u.r and pMem->u.i fields ** accordingly. */ static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){ assert( (pMem->flags & (MEM_Int|MEM_Real))==0 ); assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ); if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){ return 0; } if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==0 ){ return MEM_Int; } return MEM_Real; | > | 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | ** interpret as a string if we want to). Compute its corresponding ** numeric type, if has one. Set the pMem->u.r and pMem->u.i fields ** accordingly. */ static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){ assert( (pMem->flags & (MEM_Int|MEM_Real))==0 ); assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ); ExpandBlob(pMem); if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){ return 0; } if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==0 ){ return MEM_Int; } return MEM_Real; |
︙ | ︙ |
Changes to test/zeroblob.test.
︙ | ︙ | |||
311 312 313 314 315 316 317 318 319 320 | sqlite3_step $stmt set ret [sqlite3_column_int $stmt 0] sqlite3_reset $stmt set ret } {1000} sqlite3_finalize $stmt test_restore_config_pagecache finish_test | > > > > > > > > > > > | 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | sqlite3_step $stmt set ret [sqlite3_column_int $stmt 0] sqlite3_reset $stmt set ret } {1000} sqlite3_finalize $stmt # 2019-01-25 https://sqlite.org/src/tktview/bb4bdb9f7f654b0bb9f34cfbac # Zeroblob truncated by an index on expression # do_execsql_test 13.100 { DROP TABLE IF EXISTS t1; CREATE TABLE t1(a,b,c); CREATE INDEX t1bbc ON t1(b, b+c); INSERT INTO t1(a,b,c) VALUES(1,zeroblob(8),3); SELECT a, quote(b), length(b), c FROM t1; } {1 X'0000000000000000' 8 3} test_restore_config_pagecache finish_test |