############################################################################### # # speed.eagle -- # # Written by Joe Mistachkin. # Released to the public domain, use at your own risk! # ############################################################################### package require Eagle package require Eagle.Library package require Eagle.Test runTestPrologue ############################################################################### package require System.Data.SQLite.Test runSQLiteTestPrologue ############################################################################### set times [list] ############################################################################### # # NOTE: Report before test, before shutdown. # checkForSQLiteDirectories $test_channel getSQLiteHandleCounts $test_channel reportSQLiteResources $test_channel ############################################################################### # # NOTE: Make sure that SQLite core library is completely shutdown prior to # starting any of the tests in this file. # shutdownSQLite $test_channel ############################################################################### # # NOTE: Report before test, after shutdown. # checkForSQLiteDirectories $test_channel getSQLiteHandleCounts $test_channel reportSQLiteResources $test_channel ############################################################################### runTest {test speed-1.1 {SQLiteDataReader speed testing} -setup { setupDb [set fileName [appendArgs speed-1.1- [pid] .db]] sql execute $db "CREATE TABLE t1(w INTEGER);" sql execute $db "CREATE TABLE t2(x REAL);" sql execute $db "CREATE TABLE t3(y TEXT);" sql execute $db "CREATE TABLE t4(z BLOB);" sql execute $db "INSERT INTO t1 (w) VALUES(NULL);" sql execute $db "INSERT INTO t1 (w) VALUES(-9223372036854775808);" sql execute $db "INSERT INTO t1 (w) VALUES(0);" sql execute $db "INSERT INTO t1 (w) VALUES(9223372036854775807);" sql execute $db "INSERT INTO t2 (x) VALUES(NULL);" sql execute $db "INSERT INTO t2 (x) VALUES(-1.7976931348623157e+308);" sql execute $db "INSERT INTO t2 (x) VALUES(0.0);" sql execute $db "INSERT INTO t2 (x) VALUES(1.7976931348623157e+308);" sql execute $db "INSERT INTO t3 (y) VALUES(NULL);" sql execute $db "INSERT INTO t3 (y) VALUES('1');" sql execute $db "INSERT INTO t3 (y) VALUES('1.1');" set char [expr {int(rand() * 0x7F) + 1}]; # NOTE: Skip NUL. tputs $test_channel [appendArgs \ "---- using random character 0x" [format %X $char] ...\n] sql execute $db [appendArgs \ "INSERT INTO t3 (y) VALUES('" [string map [list ' ''] [string \ repeat [format %c $char] 1048576]] "');"] sql execute $db "INSERT INTO t4 (z) VALUES(NULL);" sql execute $db "INSERT INTO t4 (z) VALUES(X'01');" sql execute $db "INSERT INTO t4 (z) VALUES(X'0123456789');" sql execute $db "INSERT INTO t4 (z) VALUES(randomblob(1048576));" } -body { set result [list] foreach sql [list \ {SELECT CASE length(w) = 1048576 WHEN 1 THEN length(w) ELSE w END FROM t1;} \ {SELECT CASE length(x) = 1048576 WHEN 1 THEN length(x) ELSE x END FROM t2;} \ {SELECT CASE length(y) = 1048576 WHEN 1 THEN length(y) ELSE y END FROM t3;} \ {SELECT CASE length(z) = 1048576 WHEN 1 THEN length(z) ELSE z END FROM t4;}] { set time [time { lappend result [sql execute -execute reader -format list $db $sql] }] tputs $test_channel [appendArgs \ "---- executed query \"" [string map [list "\n " " "] \ $sql] "\" in " $time \n] lappend times [lindex $time 0] } set result } -cleanup { cleanupDb $fileName unset -nocomplain time sql result char db fileName } -time true -constraints {eagle monoBug28 command.sql compile.DATA SQLite\ System.Data.SQLite} -match regexp -result "^\\\{-9223372036854775808 0\ 9223372036854775807\\\}\ \\\{-(?:Infinity|\u221E|1\\.7976931348623157(?:E|e)\\+308) 0\ (?:Infinity|\u221E|1\\.7976931348623157(?:E|e)\\+308)\\\} \\\{1 1\\.1\ 1048576\\\} \\\{1 \\\{1 35 69 103 137\\\} 1048576\\\}$"} ############################################################################### runTest {test speed-1.2 {SQLiteDataReader speed testing} -setup { setupDb [set fileName [appendArgs speed-1.2- [pid] .db]] sql execute $db "CREATE TABLE t1(w INTEGER);" sql execute $db "CREATE TABLE t2(x REAL);" sql execute $db "CREATE TABLE t3(y TEXT);" sql execute $db "CREATE TABLE t4(z BLOB);" sql execute $db "INSERT INTO t1 (w) VALUES(NULL);" sql execute $db "INSERT INTO t1 (w) VALUES(-9223372036854775808);" sql execute $db "INSERT INTO t1 (w) VALUES(0);" sql execute $db "INSERT INTO t1 (w) VALUES(9223372036854775807);" sql execute $db "INSERT INTO t2 (x) VALUES(NULL);" sql execute $db "INSERT INTO t2 (x) VALUES(-1.7976931348623157e+308);" sql execute $db "INSERT INTO t2 (x) VALUES(0.0);" sql execute $db "INSERT INTO t2 (x) VALUES(1.7976931348623157e+308);" sql execute $db "INSERT INTO t3 (y) VALUES(NULL);" sql execute $db "INSERT INTO t3 (y) VALUES('1');" sql execute $db "INSERT INTO t3 (y) VALUES('1.1');" set char [expr {int(rand() * 0x7F) + 1}]; # NOTE: Skip NUL. tputs $test_channel [appendArgs \ "---- using random character 0x" [format %X $char] ...\n] sql execute $db [appendArgs \ "INSERT INTO t3 (y) VALUES('" [string map [list ' ''] [string \ repeat [format %c $char] 1048576]] "');"] sql execute $db "INSERT INTO t4 (z) VALUES(NULL);" sql execute $db "INSERT INTO t4 (z) VALUES(X'01');" sql execute $db "INSERT INTO t4 (z) VALUES(X'0123456789');" sql execute $db "INSERT INTO t4 (z) VALUES(randomblob(1048576));" } -body { set result [list] foreach {column table} [list w t1 x t2 y t3 z t4] { set sql [appendArgs "SELECT " $column " FROM " $table \;] set time [time { lappend result [llength \ [sql execute -execute reader -format list $db $sql]] }] tputs $test_channel [appendArgs \ "---- executed query \"" $sql "\" in " $time \n] lappend times [lindex $time 0] } set result } -cleanup { cleanupDb $fileName unset -nocomplain time sql table column result char db fileName } -time true -constraints {eagle monoBug40 command.sql compile.DATA SQLite\ System.Data.SQLite} -result {3 3 3 3}} ############################################################################### # # NOTE: Report after test. # checkForSQLiteDirectories $test_channel getSQLiteHandleCounts $test_channel reportSQLiteResources $test_channel ############################################################################### tputs $test_channel [appendArgs \ "---- overall performance results " $times \n] ############################################################################### unset -nocomplain times ############################################################################### runSQLiteTestEpilogue runTestEpilogue