Annotation of embedaddon/sqlite3/test/trace.test, revision 1.1

1.1     ! misho       1: # 2004 Jun 29
        !             2: #
        !             3: # The author disclaims copyright to this source code.  In place of
        !             4: # a legal notice, here is a blessing:
        !             5: #
        !             6: #    May you do good and not evil.
        !             7: #    May you find forgiveness for yourself and forgive others.
        !             8: #    May you share freely, never taking more than you give.
        !             9: #
        !            10: #***********************************************************************
        !            11: # This file implements regression tests for SQLite library.
        !            12: #
        !            13: # This file implements tests for the "sqlite3_trace()" API.
        !            14: #
        !            15: # $Id: trace.test,v 1.8 2009/04/07 14:14:23 danielk1977 Exp $
        !            16: 
        !            17: set testdir [file dirname $argv0]
        !            18: source $testdir/tester.tcl
        !            19: 
        !            20: ifcapable !trace {
        !            21:   finish_test
        !            22:   return
        !            23: }
        !            24: 
        !            25: set ::stmtlist {}
        !            26: do_test trace-1.1 {
        !            27:   set rc [catch {db trace 1 2 3} msg]
        !            28:   lappend rc $msg
        !            29: } {1 {wrong # args: should be "db trace ?CALLBACK?"}}
        !            30: proc trace_proc cmd {
        !            31:   lappend ::stmtlist [string trim $cmd]
        !            32: }
        !            33: do_test trace-1.2 {
        !            34:   db trace trace_proc
        !            35:   db trace
        !            36: } {trace_proc}
        !            37: do_test trace-1.3 {
        !            38:   execsql {
        !            39:     CREATE TABLE t1(a,b);
        !            40:     INSERT INTO t1 VALUES(1,2);
        !            41:     SELECT * FROM t1;
        !            42:   }
        !            43: } {1 2}
        !            44: do_test trace-1.4 {
        !            45:   set ::stmtlist
        !            46: } {{CREATE TABLE t1(a,b);} {INSERT INTO t1 VALUES(1,2);} {SELECT * FROM t1;}}
        !            47: do_test trace-1.5 {
        !            48:   db trace {}
        !            49:   db trace
        !            50: } {}
        !            51: 
        !            52: # If we prepare a statement and execute it multiple times, the trace
        !            53: # happens on each execution.
        !            54: #
        !            55: db close
        !            56: sqlite3 db test.db; set DB [sqlite3_connection_pointer db]
        !            57: do_test trace-2.1 {
        !            58:   set STMT [sqlite3_prepare $DB {INSERT INTO t1 VALUES(2,3)} -1 TAIL]
        !            59:   db trace trace_proc
        !            60:   proc trace_proc sql {
        !            61:     global TRACE_OUT
        !            62:     lappend TRACE_OUT [string trim $sql]
        !            63:   }
        !            64:   set TRACE_OUT {}
        !            65:   sqlite3_step $STMT
        !            66:   set TRACE_OUT
        !            67: } {{INSERT INTO t1 VALUES(2,3)}}
        !            68: do_test trace-2.2 {
        !            69:   set TRACE_OUT {}
        !            70:   sqlite3_reset $STMT
        !            71:   set TRACE_OUT 
        !            72: } {}
        !            73: do_test trace-2.3 {
        !            74:   sqlite3_step $STMT
        !            75:   set TRACE_OUT
        !            76: } {{INSERT INTO t1 VALUES(2,3)}}
        !            77: do_test trace-2.4 {
        !            78:   set TRACE_OUT {}
        !            79:   execsql {SELECT * FROM t1}
        !            80: } {1 2 2 3 2 3}
        !            81: do_test trace-2.5 {
        !            82:   set TRACE_OUT
        !            83: } {{SELECT * FROM t1}}
        !            84: catch {sqlite3_finalize $STMT}
        !            85: 
        !            86: do_test trace-2.6 {
        !            87:   set TRACE_OUT {}
        !            88:   db eval VACUUM
        !            89:   set TRACE_OUT
        !            90: } {VACUUM}
        !            91: 
        !            92: # Similar tests, but this time for profiling.
        !            93: # 
        !            94: do_test trace-3.1 {
        !            95:   set rc [catch {db profile 1 2 3} msg]
        !            96:   lappend rc $msg
        !            97: } {1 {wrong # args: should be "db profile ?CALLBACK?"}}
        !            98: set ::stmtlist {}
        !            99: proc profile_proc {cmd tm} {
        !           100:   lappend ::stmtlist [string trim $cmd]
        !           101: }
        !           102: do_test trace-3.2 {
        !           103:   db trace {}
        !           104:   db profile profile_proc
        !           105:   db profile
        !           106: } {profile_proc}
        !           107: do_test trace-3.3 {
        !           108:   execsql {
        !           109:     CREATE TABLE t2(a,b);
        !           110:     INSERT INTO t2 VALUES(1,2);
        !           111:     SELECT * FROM t2;
        !           112:   }
        !           113: } {1 2}
        !           114: do_test trace-3.4 {
        !           115:   set ::stmtlist
        !           116: } {{CREATE TABLE t2(a,b);} {INSERT INTO t2 VALUES(1,2);} {SELECT * FROM t2;}}
        !           117: do_test trace-3.5 {
        !           118:   db profile {}
        !           119:   db profile
        !           120: } {}
        !           121: 
        !           122: # If we prepare a statement and execute it multiple times, the profile
        !           123: # happens on each execution.
        !           124: #
        !           125: db close
        !           126: sqlite3 db test.db; set DB [sqlite3_connection_pointer db]
        !           127: do_test trace-4.1 {
        !           128:   set STMT [sqlite3_prepare $DB {INSERT INTO t2 VALUES(2,3)} -1 TAIL]
        !           129:   db trace trace_proc
        !           130:   proc profile_proc {sql tm} {
        !           131:     global TRACE_OUT
        !           132:     lappend TRACE_OUT [string trim $sql]
        !           133:   }
        !           134:   set TRACE_OUT {}
        !           135:   sqlite3_step $STMT
        !           136:   set TRACE_OUT
        !           137: } {{INSERT INTO t2 VALUES(2,3)}}
        !           138: do_test trace-4.2 {
        !           139:   set TRACE_OUT {}
        !           140:   sqlite3_reset $STMT
        !           141:   set TRACE_OUT 
        !           142: } {}
        !           143: do_test trace-4.3 {
        !           144:   sqlite3_step $STMT
        !           145:   set TRACE_OUT
        !           146: } {{INSERT INTO t2 VALUES(2,3)}}
        !           147: do_test trace-4.4 {
        !           148:   set TRACE_OUT {}
        !           149:   execsql {SELECT * FROM t1}
        !           150: } {1 2 2 3 2 3}
        !           151: do_test trace-4.5 {
        !           152:   set TRACE_OUT
        !           153: } {{SELECT * FROM t1}}
        !           154: catch {sqlite3_finalize $STMT}
        !           155: 
        !           156: # Trigger tracing.
        !           157: #
        !           158: ifcapable trigger {
        !           159:   do_test trace-5.1 {
        !           160:     db eval {
        !           161:       CREATE TRIGGER r1t1 AFTER UPDATE ON t1 BEGIN
        !           162:         UPDATE t2 SET a=new.a WHERE rowid=new.rowid;
        !           163:       END;
        !           164:       CREATE TRIGGER r1t2 AFTER UPDATE ON t2 BEGIN
        !           165:         SELECT 'hello';
        !           166:       END;
        !           167:     }
        !           168:     set TRACE_OUT {}
        !           169:     proc trace_proc cmd {
        !           170:       lappend ::TRACE_OUT [string trim $cmd]
        !           171:     }
        !           172:     db eval {
        !           173:       UPDATE t1 SET a=a+1;
        !           174:     }
        !           175:     set TRACE_OUT
        !           176:   } {{UPDATE t1 SET a=a+1;} {-- TRIGGER r1t1} {-- TRIGGER r1t2} {-- TRIGGER r1t1} {-- TRIGGER r1t2} {-- TRIGGER r1t1} {-- TRIGGER r1t2}}
        !           177: }
        !           178: 
        !           179: # With 3.6.21, we add the ability to expand host parameters in the trace
        !           180: # output.  Test this feature.
        !           181: #
        !           182: do_test trace-6.1 {
        !           183:   set ::t6int [expr {3+3}]
        !           184:   set ::t6real [expr {1.5*4.0}]
        !           185:   set ::t6str {test-six y'all}
        !           186:   db eval {SELECT x'3031323334' AS x} {set ::t6blob $x}
        !           187:   unset -nocomplain t6null
        !           188:   set TRACE_OUT {}
        !           189:   execsql {SELECT $::t6int, $::t6real, $t6str, $t6blob, $t6null}
        !           190: } {6 6.0 {test-six y'all} 01234 {}}
        !           191: do_test trace-6.2 {
        !           192:   set TRACE_OUT
        !           193: } {{SELECT 6, 6.0, 'test-six y''all', x'3031323334', NULL}}
        !           194: do_test trace-6.3 {
        !           195:   set TRACE_OUT {}
        !           196:   execsql {SELECT $::t6int, ?1, $::t6int}
        !           197: } {6 6 6}
        !           198: do_test trace-6.4 {
        !           199:   set TRACE_OUT
        !           200: } {{SELECT 6, 6, 6}}
        !           201: do_test trace-6.5 {
        !           202:   execsql {CREATE TABLE t6([$::t6int],"?1"); INSERT INTO t6 VALUES(1,2)}
        !           203:   set TRACE_OUT {}
        !           204:   execsql {SELECT '$::t6int', [$::t6int], $::t6int, ?1, "?1", $::t6int FROM t6}
        !           205: } {{$::t6int} 1 6 6 2 6}
        !           206: do_test trace-6.6 {
        !           207:   set TRACE_OUT
        !           208: } {{SELECT '$::t6int', [$::t6int], 6, 6, "?1", 6 FROM t6}}
        !           209: 
        !           210: # Do these same tests with a UTF16 database.
        !           211: #
        !           212: do_test trace-6.100 {
        !           213:   db close
        !           214:   sqlite3 db :memory:
        !           215:   db eval {
        !           216:      PRAGMA encoding=UTF16be;
        !           217:      CREATE TABLE t6([$::t6str],"?1");
        !           218:      INSERT INTO t6 VALUES(1,2);
        !           219:   }
        !           220:   db trace trace_proc
        !           221:   set TRACE_OUT {}
        !           222:   execsql {SELECT '$::t6str', [$::t6str], $::t6str, ?1, "?1", $::t6str FROM t6}
        !           223: } {{$::t6str} 1 {test-six y'all} {test-six y'all} 2 {test-six y'all}}
        !           224: do_test trace-6.101 {
        !           225:   set TRACE_OUT
        !           226: } {{SELECT '$::t6str', [$::t6str], 'test-six y''all', 'test-six y''all', "?1", 'test-six y''all' FROM t6}}
        !           227: 
        !           228: do_test trace-6.200 {
        !           229:   db close
        !           230:   sqlite3 db :memory:
        !           231:   db eval {
        !           232:      PRAGMA encoding=UTF16le;
        !           233:      CREATE TABLE t6([$::t6str],"?1");
        !           234:      INSERT INTO t6 VALUES(1,2);
        !           235:   }
        !           236:   db trace trace_proc
        !           237:   set TRACE_OUT {}
        !           238:   execsql {SELECT '$::t6str', [$::t6str], $::t6str, ?1, "?1", $::t6str FROM t6}
        !           239: } {{$::t6str} 1 {test-six y'all} {test-six y'all} 2 {test-six y'all}}
        !           240: do_test trace-6.201 {
        !           241:   set TRACE_OUT
        !           242: } {{SELECT '$::t6str', [$::t6str], 'test-six y''all', 'test-six y''all', "?1", 'test-six y''all' FROM t6}}
        !           243: 
        !           244: 
        !           245: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>