os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/main.test
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/main.test	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,487 @@
     1.4 +# 2001 September 15
     1.5 +#
     1.6 +# The author disclaims copyright to this source code.  In place of
     1.7 +# a legal notice, here is a blessing:
     1.8 +#
     1.9 +#    May you do good and not evil.
    1.10 +#    May you find forgiveness for yourself and forgive others.
    1.11 +#    May you share freely, never taking more than you give.
    1.12 +#
    1.13 +#***********************************************************************
    1.14 +# This file implements regression tests for SQLite library.  The
    1.15 +# focus of this file is exercising the code in main.c.
    1.16 +#
    1.17 +# $Id: main.test,v 1.29 2008/07/12 14:52:20 drh Exp $
    1.18 +
    1.19 +set testdir [file dirname $argv0]
    1.20 +source $testdir/tester.tcl
    1.21 +
    1.22 +# Only do the next group of tests if the sqlite3_complete API is available
    1.23 +#
    1.24 +ifcapable {complete} {
    1.25 +
    1.26 +# Tests of the sqlite_complete() function.
    1.27 +#
    1.28 +do_test main-1.1 {
    1.29 +  db complete {This is a test}
    1.30 +} {0}
    1.31 +do_test main-1.2 {
    1.32 +  db complete {
    1.33 +  }
    1.34 +} {1}
    1.35 +do_test main-1.3 {
    1.36 +  db complete {
    1.37 +     -- a comment ;
    1.38 +  }
    1.39 +} {1}
    1.40 +do_test main-1.4 {
    1.41 +  db complete {
    1.42 +     -- a comment ;
    1.43 +     ;
    1.44 +  }
    1.45 +} {1}
    1.46 +do_test main-1.5 {
    1.47 +  db complete {DROP TABLE 'xyz;}
    1.48 +} {0}
    1.49 +do_test main-1.6 {
    1.50 +  db complete {DROP TABLE 'xyz';}
    1.51 +} {1}
    1.52 +do_test main-1.7 {
    1.53 +  db complete {DROP TABLE "xyz;}
    1.54 +} {0}
    1.55 +do_test main-1.8 {
    1.56 +  db complete {DROP TABLE "xyz';}
    1.57 +} {0}
    1.58 +do_test main-1.9 {
    1.59 +  db complete {DROP TABLE "xyz";}
    1.60 +} {1}
    1.61 +do_test main-1.10 {
    1.62 +  db complete {DROP TABLE xyz; hi}
    1.63 +} {0}
    1.64 +do_test main-1.11 {
    1.65 +  db complete {DROP TABLE xyz; }
    1.66 +} {1}
    1.67 +do_test main-1.12 {
    1.68 +  db complete {DROP TABLE xyz; -- hi }
    1.69 +} {1}
    1.70 +do_test main-1.13 {
    1.71 +  db complete {DROP TABLE xyz; -- hi
    1.72 +  }
    1.73 +} {1}
    1.74 +do_test main-1.14 {
    1.75 +  db complete {SELECT a-b FROM t1; }
    1.76 +} {1}
    1.77 +do_test main-1.15 {
    1.78 +  db complete {SELECT a/e FROM t1 }
    1.79 +} {0}
    1.80 +do_test main-1.16 {
    1.81 +  db complete {
    1.82 +    CREATE TABLE abc(x,y);
    1.83 +  }
    1.84 +} {1}
    1.85 +ifcapable {trigger} {
    1.86 +  do_test main-1.17 {
    1.87 +    db complete {
    1.88 +      CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
    1.89 +    }
    1.90 +  } {0}
    1.91 +  do_test main-1.18 {
    1.92 +    db complete {
    1.93 +      CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
    1.94 +    }
    1.95 +  } {1}
    1.96 +  do_test main-1.19 {
    1.97 +    db complete {
    1.98 +      CREATE TRIGGER xyz AFTER DELETE abc BEGIN
    1.99 +         UPDATE pqr;
   1.100 +         unknown command;
   1.101 +    }
   1.102 +  } {0}
   1.103 +  do_test main-1.20 {
   1.104 +    db complete {
   1.105 +      CREATE TRIGGER xyz AFTER DELETE backend BEGIN
   1.106 +         UPDATE pqr;
   1.107 +    }
   1.108 +  } {0}
   1.109 +  do_test main-1.21 {
   1.110 +    db complete {
   1.111 +      CREATE TRIGGER xyz AFTER DELETE end BEGIN
   1.112 +         SELECT a, b FROM end;
   1.113 +    }
   1.114 +  } {0}
   1.115 +  do_test main-1.22 {
   1.116 +    db complete {
   1.117 +      CREATE TRIGGER xyz AFTER DELETE end BEGIN
   1.118 +         SELECT a, b FROM end;
   1.119 +      END;
   1.120 +    }
   1.121 +  } {1}
   1.122 +  do_test main-1.23 {
   1.123 +    db complete {
   1.124 +      CREATE TRIGGER xyz AFTER DELETE end BEGIN
   1.125 +         SELECT a, b FROM end;
   1.126 +      END;
   1.127 +      SELECT a, b FROM end;
   1.128 +    }
   1.129 +  } {1}
   1.130 +  do_test main-1.24 {
   1.131 +    db complete {
   1.132 +      CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
   1.133 +         UPDATE pqr;
   1.134 +    }
   1.135 +  } {0}
   1.136 +  do_test main-1.25 {
   1.137 +    db complete {
   1.138 +      CREATE TRIGGER xyz AFTER DELETE backend BEGIN
   1.139 +         UPDATE cantor SET a=[;end;];;;
   1.140 +    }
   1.141 +  } {0}
   1.142 +  do_test main-1.26 {
   1.143 +    db complete {
   1.144 +      CREATE -- a comment
   1.145 +      TRIGGER exy AFTER DELETE backend BEGIN
   1.146 +         UPDATE pqr SET a=5;
   1.147 +    }
   1.148 +  } {0}
   1.149 +  do_test main-1.27.1 {
   1.150 +    db complete {
   1.151 +      CREATE -- a comment
   1.152 +      TRIGGERX tangentxx AFTER DELETE backend BEGIN
   1.153 +         UPDATE pqr SET a=5;
   1.154 +    }
   1.155 +  } {1}
   1.156 +  do_test main-1.27.2 {
   1.157 +    db complete {
   1.158 +      CREATE/**/TRIGGER tiger00 AFTER DELETE backend BEGIN
   1.159 +         UPDATE pqr SET a=5;
   1.160 +    }
   1.161 +  } {0}
   1.162 +  ifcapable {explain} {
   1.163 +    do_test main-1.27.3 {
   1.164 +      db complete {
   1.165 +        /* */ EXPLAIN -- A comment
   1.166 +        CREATE/**/TRIGGER ezxyz12 AFTER DELETE backend BEGIN
   1.167 +           UPDATE pqr SET a=5;
   1.168 +      }
   1.169 +    } {0}
   1.170 +  }
   1.171 +  do_test main-1.27.4 {
   1.172 +    db complete {
   1.173 +      BOGUS token
   1.174 +      CREATE  TRIGGER xyz AFTER DELETE backend BEGIN
   1.175 +         UPDATE pqr SET a=5;
   1.176 +    }
   1.177 +  } {1}
   1.178 +  ifcapable {explain} {
   1.179 +    do_test main-1.27.5 {
   1.180 +      db complete {
   1.181 +        EXPLAIN 
   1.182 +        CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
   1.183 +           UPDATE pqr SET a=5;
   1.184 +      }
   1.185 +    } {0}
   1.186 +  }
   1.187 +  do_test main-1.28 {
   1.188 +    db complete {
   1.189 +      CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
   1.190 +         UPDATE pqr SET a=5;
   1.191 +    }
   1.192 +  } {0}
   1.193 +  do_test main-1.29 {
   1.194 +    db complete {
   1.195 +      CREATE TRIGGER xyz AFTER DELETE backend BEGIN
   1.196 +         UPDATE pqr SET a=5;
   1.197 +         EXPLAIN select * from xyz;
   1.198 +    }
   1.199 +  } {0}
   1.200 +
   1.201 +} ;# end ifcapable {complete}
   1.202 +
   1.203 +}
   1.204 +do_test main-1.30 {
   1.205 +  db complete {
   1.206 +     CREATE TABLE /* In comment ; */
   1.207 +  }
   1.208 +} {0}
   1.209 +do_test main-1.31 {
   1.210 +  db complete {
   1.211 +     CREATE TABLE /* In comment ; */ hi;
   1.212 +  }
   1.213 +} {1}
   1.214 +do_test main-1.31 {
   1.215 +  db complete {
   1.216 +     CREATE TABLE /* In comment ; */;
   1.217 +  }
   1.218 +} {1}
   1.219 +do_test main-1.32 {
   1.220 +  db complete {
   1.221 +     stuff;
   1.222 +     /*
   1.223 +       CREATE TABLE
   1.224 +       multiple lines
   1.225 +       of text
   1.226 +     */
   1.227 +  }
   1.228 +} {1}
   1.229 +do_test main-1.33 {
   1.230 +  db complete {
   1.231 +     /*
   1.232 +       CREATE TABLE
   1.233 +       multiple lines
   1.234 +       of text;
   1.235 +  }
   1.236 +} {0}
   1.237 +do_test main-1.34 {
   1.238 +  db complete {
   1.239 +     /*
   1.240 +       CREATE TABLE
   1.241 +       multiple lines "*/
   1.242 +       of text;
   1.243 +  }
   1.244 +} {1}
   1.245 +do_test main-1.35 {
   1.246 +  db complete {hi /**/ there;}
   1.247 +} {1}
   1.248 +do_test main-1.36 {
   1.249 +  db complete {hi there/***/;}
   1.250 +} {1}
   1.251 +do_test main-1.37 {
   1.252 +  db complete {hi there/**}
   1.253 +} {0}
   1.254 +do_test main-1.38 {
   1.255 +  db complete {hi [there}
   1.256 +} {0}
   1.257 +
   1.258 +ifcapable {trigger} {
   1.259 +  # Characters less than \040 can never be part of an identifier.
   1.260 +  # Characters greater than \u177 are always identifier characters.
   1.261 +  do_test main-1.100 {
   1.262 +    db complete "create \037\036\035\034trigger\001\002;"
   1.263 +  } {1}
   1.264 +  do_test main-1.101 {
   1.265 +    db complete "create trigger\200;"
   1.266 +  } {1}
   1.267 +  do_test main-1.102 {
   1.268 +    db complete "create \200trigger;"
   1.269 +  } {1}
   1.270 +}
   1.271 +
   1.272 +
   1.273 +# Try to open a database with a corrupt database file.
   1.274 +#
   1.275 +do_test main-2.0 {
   1.276 +  catch {db close}
   1.277 +  file delete -force test.db
   1.278 +  set fd [open test.db w]
   1.279 +  puts $fd hi!
   1.280 +  close $fd
   1.281 +  set v [catch {sqlite3 db test.db} msg]
   1.282 +  if {$v} {lappend v $msg} {lappend v {}}
   1.283 +} {0 {}}
   1.284 +
   1.285 +# Here are some tests for tokenize.c.  
   1.286 +#
   1.287 +do_test main-3.1 {
   1.288 +  catch {db close}
   1.289 +  foreach f [glob -nocomplain testdb/*] {file delete -force $f}
   1.290 +  file delete -force testdb
   1.291 +  sqlite3 db testdb
   1.292 +  set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
   1.293 +  lappend v $msg
   1.294 +} {1 {unrecognized token: "!!"}}
   1.295 +do_test main-3.2 {
   1.296 +  catch {db close}
   1.297 +  foreach f [glob -nocomplain testdb/*] {file delete -force $f}
   1.298 +  file delete -force testdb
   1.299 +  sqlite3 db testdb
   1.300 +  set v [catch {execsql {SELECT * from T1 where ^x}} msg]
   1.301 +  lappend v $msg
   1.302 +} {1 {unrecognized token: "^"}}
   1.303 +do_test main-3.2.2 {
   1.304 +  catchsql {select 'abc}
   1.305 +} {1 {unrecognized token: "'abc"}}
   1.306 +do_test main-3.2.3 {
   1.307 +  catchsql {select "abc}
   1.308 +} {1 {unrecognized token: ""abc"}}
   1.309 +do_test main-3.2.4 {
   1.310 +  catchsql {select [abc}
   1.311 +} {1 {unrecognized token: "[abc"}}
   1.312 +do_test main-3.2.5 {
   1.313 +  catchsql {select x'4869}
   1.314 +} {1 {unrecognized token: "x'4869"}}
   1.315 +do_test main-3.2.6 {
   1.316 +  catchsql {select x'4869'}
   1.317 +} {0 Hi}
   1.318 +do_test main-3.2.7 {
   1.319 +  catchsql {select x'48695'}
   1.320 +} {1 {unrecognized token: "x'48695'"}}
   1.321 +do_test main-3.2.8 {
   1.322 +  catchsql {select x'486x'}
   1.323 +} {1 {unrecognized token: "x'486x'"}}
   1.324 +do_test main-3.2.9 {
   1.325 +  catchsql {select $abc(}
   1.326 +} {1 {unrecognized token: "$abc("}}
   1.327 +do_test main-3.2.10 {
   1.328 +  catchsql {select $abc(x}
   1.329 +} {1 {unrecognized token: "$abc(x"}}
   1.330 +set xyz 123
   1.331 +do_test main-3.2.11 {
   1.332 +  catchsql {select $::xyz}
   1.333 +} {0 123}
   1.334 +namespace eval ::testnamespace {
   1.335 +  variable xyz 321
   1.336 +}
   1.337 +do_test main-3.2.12 {
   1.338 +  catchsql {select $testnamespace::xyz}
   1.339 +} {0 321}
   1.340 +do_test main-3.2.13 {
   1.341 +  catchsql {select $(abc)}
   1.342 +} {1 {unrecognized token: "$"}}
   1.343 +do_test main-3.2.14 {
   1.344 +  set hi\u1234x 987
   1.345 +  db eval "select \$hi\u1234x"
   1.346 +} {987}
   1.347 +do_test main-3.2.15 {
   1.348 +  catchsql "select 456\u1234"
   1.349 +} [list 1 "unrecognized token: \"456\u1234\""]
   1.350 +do_test main-3.2.16 {
   1.351 +  catchsql {select cast(3.14e+4 AS integer)}
   1.352 +} {0 31400}
   1.353 +do_test main-3.2.17 {
   1.354 +  catchsql {select cast(3.14e+04 AS integer)}
   1.355 +} {0 31400}
   1.356 +do_test main-3.2.18 {
   1.357 +  catchsql {select cast(3.14e+004 AS integer)}
   1.358 +} {0 31400}
   1.359 +do_test main-3.2.19 {
   1.360 +  catchsql {select cast(3.14e4 AS integer)}
   1.361 +} {0 31400}
   1.362 +do_test main-3.2.20 {
   1.363 +  catchsql {select cast(3.14e04 AS integer)}
   1.364 +} {0 31400}
   1.365 +do_test main-3.2.21 {
   1.366 +  catchsql {select cast(3.14e004 AS integer)}
   1.367 +} {0 31400}
   1.368 +do_test main-3.2.16 {
   1.369 +  catchsql {select cast(3.14E+4 AS integer)}
   1.370 +} {0 31400}
   1.371 +do_test main-3.2.17 {
   1.372 +  catchsql {select cast(3.14E+04 AS integer)}
   1.373 +} {0 31400}
   1.374 +do_test main-3.2.18 {
   1.375 +  catchsql {select cast(3.14E+004 AS integer)}
   1.376 +} {0 31400}
   1.377 +do_test main-3.2.19 {
   1.378 +  catchsql {select cast(3.14E4 AS integer)}
   1.379 +} {0 31400}
   1.380 +do_test main-3.2.20 {
   1.381 +  catchsql {select cast(3.14E04 AS integer)}
   1.382 +} {0 31400}
   1.383 +do_test main-3.2.21 {
   1.384 +  catchsql {select cast(3.14E004 AS integer)}
   1.385 +} {0 31400}
   1.386 +do_test main-3.2.22 {
   1.387 +  catchsql {select cast(3.14e-4 * 1e8 AS integer)}
   1.388 +} {0 31400}
   1.389 +do_test main-3.2.23 {
   1.390 +  catchsql {select cast(3.14E-04 * 1E08 AS integer)}
   1.391 +} {0 31400}
   1.392 +do_test main-3.2.24 {
   1.393 +  catchsql {select cast(3.14e-004 * 01.0E+8 AS integer)}
   1.394 +} {0 31400}
   1.395 +do_test main-3.2.25 {
   1.396 +  catchsql {select 123/*abc}
   1.397 +} {0 123}
   1.398 +do_test main-3.2.26 {
   1.399 +  catchsql {select 123/***abc}
   1.400 +} {0 123}
   1.401 +do_test main-3.2.27 {
   1.402 +  catchsql {select 123/*/*2}
   1.403 +} {0 123}
   1.404 +do_test main-3.2.28 {
   1.405 +  catchsql {select 123/**/*2}
   1.406 +} {0 246}
   1.407 +do_test main-3.2.29 {
   1.408 +  catchsql {select 123/}
   1.409 +} {1 {near "/": syntax error}}
   1.410 +do_test main-3.2.30 {
   1.411 +  catchsql {select 123--5}
   1.412 +} {0 123}
   1.413 +
   1.414 +
   1.415 +do_test main-3.3 {
   1.416 +  catch {db close}
   1.417 +  foreach f [glob -nocomplain testdb/*] {file delete -force $f}
   1.418 +  file delete -force testdb
   1.419 +  sqlite3 db testdb
   1.420 +  execsql {
   1.421 +    create table T1(X REAL);  /* C-style comments allowed */
   1.422 +    insert into T1 values(0.5);
   1.423 +    insert into T1 values(0.5e2);
   1.424 +    insert into T1 values(0.5e-002);
   1.425 +    insert into T1 values(5e-002);
   1.426 +    insert into T1 values(-5.0e-2);
   1.427 +    insert into T1 values(-5.1e-2);
   1.428 +    insert into T1 values(0.5e2);
   1.429 +    insert into T1 values(0.5E+02);
   1.430 +    insert into T1 values(5E+02);
   1.431 +    insert into T1 values(5.0E+03);
   1.432 +    select x*10 from T1 order by x*5;
   1.433 +  }
   1.434 +} {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
   1.435 +do_test main-3.4 {
   1.436 +  set v [catch {execsql {create bogus}} msg]
   1.437 +  lappend v $msg
   1.438 +} {1 {near "bogus": syntax error}}
   1.439 +do_test main-3.5 {
   1.440 +  set v [catch {execsql {create}} msg]
   1.441 +  lappend v $msg
   1.442 +} {1 {near "create": syntax error}}
   1.443 +do_test main-3.6 {
   1.444 +  catchsql {SELECT 'abc' + #9}
   1.445 +} {1 {near "#9": syntax error}}
   1.446 +
   1.447 +# The following test-case tests the linked list code used to manage
   1.448 +# sqlite3_vfs structures.
   1.449 +if {$::tcl_platform(platform)=="unix"} {
   1.450 +  ifcapable threadsafe {
   1.451 +    do_test main-4.1 {
   1.452 +
   1.453 +      sqlite3_crash_enable 1
   1.454 +      sqlite3_crash_enable 0
   1.455 +    
   1.456 +      sqlite3async_enable 1
   1.457 +      sqlite3async_enable 0
   1.458 +    
   1.459 +      sqlite3_crash_enable 1
   1.460 +      sqlite3async_enable 1
   1.461 +      sqlite3_crash_enable 0
   1.462 +      sqlite3async_enable 0
   1.463 +    
   1.464 +      sqlite3_crash_enable 1
   1.465 +      sqlite3async_enable 1
   1.466 +      sqlite3async_enable 0
   1.467 +      sqlite3_crash_enable 0
   1.468 +    
   1.469 +      sqlite3async_enable 1
   1.470 +      sqlite3_crash_enable 1
   1.471 +      sqlite3_crash_enable 0
   1.472 +      sqlite3async_enable 0
   1.473 +    
   1.474 +      sqlite3async_enable 1
   1.475 +      sqlite3_crash_enable 1
   1.476 +      sqlite3async_enable 0
   1.477 +      sqlite3_crash_enable 0
   1.478 +    } {}
   1.479 +    do_test main-4.2 {
   1.480 +      set rc [catch {sqlite3 db test.db -vfs crash} msg]
   1.481 +      list $rc $msg
   1.482 +    } {1 {no such vfs: crash}}
   1.483 +    do_test main-4.3 {
   1.484 +      set rc [catch {sqlite3 db test.db -vfs async} msg]
   1.485 +      list $rc $msg
   1.486 +    } {1 {no such vfs: async}}
   1.487 +  }
   1.488 +}
   1.489 +
   1.490 +finish_test