Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Reenable fuzz testing for all.test. Make sure the query flattener copies over aggregate information from expressions on outer query terms while flattening. (CVS 6112) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e02323b3629545a3e7e7db0d4edc7680 |
User & Date: | drh 2009-01-05 19:36:30.000 |
Context
2009-01-05
| ||
22:30 | The fix in (6111) was not quite right. This version works better. (CVS 6113) (check-in: 5f80140a2d user: drh tags: trunk) | |
19:36 | Reenable fuzz testing for all.test. Make sure the query flattener copies over aggregate information from expressions on outer query terms while flattening. (CVS 6112) (check-in: e02323b362 user: drh tags: trunk) | |
18:02 | Make sure the MEM_Zero flags is cleared whenever removing MEM_Blob. (CVS 6111) (check-in: b2131e868a user: drh tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** ** $Id: select.c,v 1.496 2009/01/05 19:36:30 drh Exp $ */ #include "sqliteInt.h" /* ** Delete all the content of a Select structure but do not deallocate ** the select structure itself. |
︙ | ︙ | |||
2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 | pExpr->pTab = pNew->pTab; pExpr->iColumn = pNew->iColumn; pExpr->iAgg = pNew->iAgg; sqlite3TokenCopy(db, &pExpr->token, &pNew->token); sqlite3TokenCopy(db, &pExpr->span, &pNew->span); pExpr->pSelect = sqlite3SelectDup(db, pNew->pSelect); pExpr->flags = pNew->flags; } }else{ substExpr(db, pExpr->pLeft, iTable, pEList); substExpr(db, pExpr->pRight, iTable, pEList); substSelect(db, pExpr->pSelect, iTable, pEList); substExprList(db, pExpr->pList, iTable, pEList); } | > > | 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 | pExpr->pTab = pNew->pTab; pExpr->iColumn = pNew->iColumn; pExpr->iAgg = pNew->iAgg; sqlite3TokenCopy(db, &pExpr->token, &pNew->token); sqlite3TokenCopy(db, &pExpr->span, &pNew->span); pExpr->pSelect = sqlite3SelectDup(db, pNew->pSelect); pExpr->flags = pNew->flags; pExpr->pAggInfo = pNew->pAggInfo; pNew->pAggInfo = 0; } }else{ substExpr(db, pExpr->pLeft, iTable, pEList); substExpr(db, pExpr->pRight, iTable, pEList); substSelect(db, pExpr->pSelect, iTable, pEList); substExprList(db, pExpr->pList, iTable, pEList); } |
︙ | ︙ |
Changes to test/all.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file runs all tests. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file runs all tests. # # $Id: all.test,v 1.61 2009/01/05 19:36:30 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl rename finish_test really_finish_test proc finish_test {} { catch {db close} show_memstats |
︙ | ︙ | |||
60 61 62 63 64 65 66 | lappend EXCLUDE crash2.test ;# Run seperately later. lappend EXCLUDE quick.test ;# Alternate test driver script lappend EXCLUDE veryquick.test ;# Alternate test driver script lappend EXCLUDE malloc.test ;# Run seperately later. lappend EXCLUDE misuse.test ;# Run seperately later. lappend EXCLUDE memleak.test ;# Alternate test driver script lappend EXCLUDE permutations.test ;# Run seperately later. | < | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | lappend EXCLUDE crash2.test ;# Run seperately later. lappend EXCLUDE quick.test ;# Alternate test driver script lappend EXCLUDE veryquick.test ;# Alternate test driver script lappend EXCLUDE malloc.test ;# Run seperately later. lappend EXCLUDE misuse.test ;# Run seperately later. lappend EXCLUDE memleak.test ;# Alternate test driver script lappend EXCLUDE permutations.test ;# Run seperately later. lappend EXCLUDE soak.test ;# Takes a very long time (default 1 hr) lappend EXCLUDE fts3.test ;# Wrapper for muliple fts3*.tests lappend EXCLUDE mallocAll.test ;# Wrapper for running all malloc tests # Files to include in the test. If this list is empty then everything # that is not in the EXCLUDE list is run. # |
︙ | ︙ |
Changes to test/fuzz.test.
︙ | ︙ | |||
15 16 17 18 19 20 21 | # # The tests in this file are really about testing fuzzily generated # SQL parse-trees. The majority of the fuzzily generated SQL is # valid as far as the parser is concerned. # # The most complicated trees are for SELECT statements. # | | > | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # # The tests in this file are really about testing fuzzily generated # SQL parse-trees. The majority of the fuzzily generated SQL is # valid as far as the parser is concerned. # # The most complicated trees are for SELECT statements. # # $Id: fuzz.test,v 1.15 2009/01/05 19:36:30 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl set ::REPEATS 5000 # If running quick.test, don't do so many iterations. if {[info exists ::ISQUICK]} { if {$::ISQUICK} { set ::REPEATS 20 } } source $testdir/fuzz_common.tcl expr srand(0) #---------------------------------------------------------------- # These tests caused errors that were first caught by the tests # in this file. They are still here. do_test fuzz-1.1 { execsql { SELECT 'abc' LIKE X'ABCD'; |
︙ | ︙ | |||
168 169 170 171 172 173 174 175 176 177 178 179 180 181 | } } {1} do_test fuzz-1.14.2 { execsql { DROP TABLE abc; } } {} #---------------------------------------------------------------- # Test some fuzzily generated expressions. # do_fuzzy_test fuzz-2 -template { SELECT [Expr] } do_test fuzz-3.1 { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 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 256 | } } {1} do_test fuzz-1.14.2 { execsql { DROP TABLE abc; } } {} # Making sure previously discovered errors have been fixed. # do_test fuzz-1.15 { execsql { SELECT hex(CAST(zeroblob(1000) AS integer)) } } {30} do_test fuzz-1.16.1 { execsql { CREATE TABLE abc(a, b, c); CREATE TABLE def(a, b, c); CREATE TABLE ghi(a, b, c); } } {} do_test fuzz-1.16.2 { breakpoint catchsql { SELECT DISTINCT EXISTS( SELECT 1 FROM ( SELECT C FROM (SELECT 1) ) WHERE (SELECT c) ) FROM abc } } {0 {}} do_test fuzz-1.16.3 { catchsql { SELECT DISTINCT substr(-456 ISNULL,zeroblob(1000), EXISTS( SELECT DISTINCT EXISTS( SELECT DISTINCT b FROM abc ORDER BY EXISTS ( SELECT DISTINCT 2147483647 UNION ALL SELECT -2147483648 ) ASC ) FROM ( SELECT c, c FROM ( SELECT 456, 'injection' ORDER BY 56.1 ASC, -56.1 DESC ) ) GROUP BY (SELECT ALL (SELECT DISTINCT 'hardware')) HAVING ( SELECT DISTINCT c FROM ( SELECT ALL -2147483648, 'experiments' ORDER BY -56.1 ASC, -56.1 DESC ) GROUP BY (SELECT DISTINCT 456) IN (SELECT DISTINCT 'injection') NOT IN (SELECT ALL -456) HAVING EXISTS ( SELECT ALL 'injection' ) ) UNION ALL SELECT a IN ( SELECT -2147483647 UNION ALL SELECT ALL 'injection' ) FROM sqlite_master ) -- end EXISTS ) /* end SUBSTR() */, c NOTNULL ISNULL FROM abc ORDER BY CAST(-56.1 AS blob) ASC } } {0 {}} do_test fuzz-1.16.4 { execsql { DROP TABLE abc; DROP TABLE def; DROP TABLE ghi; } } {} #---------------------------------------------------------------- # Test some fuzzily generated expressions. # do_fuzzy_test fuzz-2 -template { SELECT [Expr] } do_test fuzz-3.1 { |
︙ | ︙ |
Changes to test/fuzz_common.tcl.
1 2 3 4 5 6 7 8 9 10 11 | # 2007 May 10 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 2007 May 10 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # $Id: fuzz_common.tcl,v 1.2 2009/01/05 19:36:30 drh Exp $ proc fuzz {TemplateList} { set n [llength $TemplateList] set i [expr {int(rand()*$n)}] set r [uplevel 1 subst -novar [list [lindex $TemplateList $i]]] string map {"\n" " "} $r |
︙ | ︙ | |||
370 371 372 373 374 375 376 | puts $::log $::sql flush $::log set rc [catch {execsql $::sql} msg] set e 1 if {$rc} { set e 0 foreach error $::fuzzyopts(-errorlist) { | | < | 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 | puts $::log $::sql flush $::log set rc [catch {execsql $::sql} msg] set e 1 if {$rc} { set e 0 foreach error $::fuzzyopts(-errorlist) { if {[string first $error $msg]>=0} { set e 1 break } } } if {$e == 0} { puts "" puts $::sql puts $msg } set e } {1} } } |