# 2007 October 23
#
# 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 implements regression tests for SQLite library.  The
# focus of this script is measuring executing speed. More specifically,
# the focus is on the speed of:
#
#   * joins
#   * views
#   * sub-selects
#   * triggers
#
# $Id: speed4p.explain,v 1.1 2008/04/16 12:57:48 drh Exp $
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl
speed_trial_init speed1

# Set a uniform random seed
expr srand(0)

set sqlout [open speed1.txt w]
proc tracesql {sql} {
  puts $::sqlout $sql\;
}
#db trace tracesql

# The number_name procedure below converts its argment (an integer)
# into a string which is the English-language name for that number.
#
# Example:
#
#     puts [number_name 123]   ->  "one hundred twenty three"
#
set ones {zero one two three four five six seven eight nine
          ten eleven twelve thirteen fourteen fifteen sixteen seventeen
          eighteen nineteen}
set tens {{} ten twenty thirty forty fifty sixty seventy eighty ninety}
proc number_name {n} {
  if {$n>=1000} {
    set txt "[number_name [expr {$n/1000}]] thousand"
    set n [expr {$n%1000}]
  } else {
    set txt {}
  }
  if {$n>=100} {
    append txt " [lindex $::ones [expr {$n/100}]] hundred"
    set n [expr {$n%100}]
  }
  if {$n>=20} {
    append txt " [lindex $::tens [expr {$n/10}]]"
    set n [expr {$n%10}]
  }
  if {$n>0} {
    append txt " [lindex $::ones $n]"
  }
  set txt [string trim $txt]
  if {$txt==""} {set txt zero}
  return $txt
}

# Summary of tests:
#
#   speed4p-join1: Join three tables using IPK index.
#   speed4p-join2: Join three tables using an index.
#   speed4p-join3: Join two tables without an index.
#
#   speed4p-view1:  Querying a view.
#   speed4p-table1: Same queries as in speed4p-view1, but run directly against
#                  the tables for comparison purposes.
#
#   speed4p-subselect1: A SELECT statement that uses many sub-queries..
#
#   speed4p-trigger1: An INSERT statement that fires a trigger.
#   speed4p-trigger2: An UPDATE statement that fires a trigger.
#   speed4p-trigger3: A DELETE statement that fires a trigger.
#   speed4p-notrigger1: Same operation as trigger1, but without the trigger.
#   speed4p-notrigger2:        "          trigger2           "
#   speed4p-notrigger3:        "          trigger3           "
#

# Set up the schema. Each of the tables t1, t2 and t3 contain 50,000 rows.
# This creates a database of around 16MB.
execsql {
  PRAGMA page_size=1024;
  PRAGMA cache_size=8192;
  PRAGMA locking_mode=EXCLUSIVE;
  BEGIN;
  CREATE TABLE t1(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);
  CREATE TABLE t2(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);
  CREATE TABLE t3(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);

  CREATE VIEW v1 AS SELECT rowid, i, t FROM t1;
  CREATE VIEW v2 AS SELECT rowid, i, t FROM t2;
  CREATE VIEW v3 AS SELECT rowid, i, t FROM t3;
}
for {set jj 1} {$jj <= 3} {incr jj} {
  set stmt [string map "%T% t$jj" {INSERT INTO %T% VALUES(NULL, $i, $t)}]
  for {set ii 0} {$ii < 50000} {incr ii} {
    set i [expr {int(rand()*50000)}]
    set t [number_name $i]
    execsql $stmt
  }
}
execsql {
  CREATE INDEX i1 ON t1(t);
  CREATE INDEX i2 ON t2(t);
  CREATE INDEX i3 ON t3(t);
  COMMIT;
}

# Before running these tests, disable the compiled statement cache built into
# the Tcl interface. This is because we want to test the speed of SQL
# compilation as well as execution.
#
db cache size 0

# Join t1, t2, t3 on IPK.
set sql "SELECT * FROM t1, t2, t3 WHERE t1.oid = t2.oid AND t2.oid = t3.oid"
explain $sql
speed_trial speed4p-join1 50000 row $sql

# Join t1, t2, t3 on the non-IPK index.
set sql "SELECT * FROM t1, t2, t3 WHERE t1.t = t2.t AND t2.t = t3.t"
explain $sql
speed_trial speed4p-join2 50000 row $sql

# Run 10000 simple queries against the views.
set script {
  for {set ii 1} {$ii < 10000} {incr ii} {
    set v [expr {$ii*3}]
    set t [expr {$ii%3+1}]
    db eval "SELECT * FROM v$t WHERE rowid = \$v"
  }
}
explain {SELECT * FROm v1 WHERE rowid=$v}
speed_trial_tcl speed4p-view1 10000 stmt $script

# Run the same 10000 simple queries as in the previous test case against
# the underlying tables. The compiled vdbe programs should be identical, so
# the only difference in running time is the extra time taken to compile
# the view definitions.
#
set script {
  for {set ii 1} {$ii < 10000} {incr ii} {
    set v [expr {$ii*3}]
    set t [expr {$ii%3+1}]
    db eval "SELECT t FROM t$t WHERE rowid = \$v"
  }
}
explain {SELECT * FROM t1 WHERE rowid=$v}
speed_trial_tcl speed4p-table1 10000 stmt $script

# Run a SELECT that uses sub-queries 10000 times. A total of 30000 sub-selects.
#
set script {
  for {set ii 1} {$ii < 10000} {incr ii} {
    set v [expr {$ii*3}]
    db eval {
      SELECT (SELECT t FROM t1 WHERE rowid = $v), 
             (SELECT t FROM t2 WHERE rowid = $v), 
             (SELECT t FROM t3 WHERE rowid = $v)
    }
  }
}
explain {
      SELECT (SELECT t FROM t1 WHERE rowid = $v), 
             (SELECT t FROM t2 WHERE rowid = $v), 
             (SELECT t FROM t3 WHERE rowid = $v)
}
speed_trial_tcl speed4p-subselect1 10000 stmt $script

# The following block tests the speed of some DML statements that cause
# triggers to fire.
#
execsql {
  CREATE TABLE log(op TEXT, r INTEGER, i INTEGER, t TEXT);
  CREATE TABLE t4(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);
  CREATE TRIGGER t4_trigger1 AFTER INSERT ON t4 BEGIN
    INSERT INTO log VALUES('INSERT INTO t4', new.rowid, new.i, new.t);
  END;
  CREATE TRIGGER t4_trigger2 AFTER UPDATE ON t4 BEGIN
    INSERT INTO log VALUES('UPDATE OF t4', new.rowid, new.i, new.t);
  END;
  CREATE TRIGGER t4_trigger3 AFTER DELETE ON t4 BEGIN
    INSERT INTO log VALUES('DELETE OF t4', old.rowid, old.i, old.t);
  END;
  BEGIN;
}
set list {}
for {set ii 1} {$ii < 10000} {incr ii} {
  lappend list $ii [number_name $ii]
}
set script {
  foreach {ii name} $::list {
    db eval {INSERT INTO t4 VALUES(NULL, $ii, $name)}
  }
}
explain {INSERT INTO t4 VALUES(NULL, $ii, $name)}
speed_trial_tcl speed4p-trigger1 10000 stmt $script

set list {}
for {set ii 1} {$ii < 20000} {incr ii 2} {
  set ii2 [expr {$ii*2}]
  lappend list $ii $ii2 [number_name $ii2]
}
set script {
  foreach {ii ii2 name} $::list {
    db eval {
      UPDATE t4 SET i = $ii2, t = $name WHERE rowid = $ii;
    }
  }
}
explain {UPDATE t4 SET i = $ii2, t = $name WHERE rowid = $ii}
speed_trial_tcl speed4p-trigger2 10000 stmt $script

set script {
  for {set ii 1} {$ii < 20000} {incr ii 2} {
    db eval {DELETE FROM t4 WHERE rowid = $ii}
  }
}
explain {DELETE FROM t4 WHERE rowid = $ii}
speed_trial_tcl speed4p-trigger3 10000 stmt $script
execsql {COMMIT}

# The following block contains the same tests as the above block that
# tests triggers, with one crucial difference: no triggers are defined.
# So the difference in speed between these tests and the preceding ones
# is the amount of time taken to compile and execute the trigger programs.
#
execsql {
  DROP TABLE t4;
  DROP TABLE log;
  VACUUM;
  CREATE TABLE t4(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);
  BEGIN;
}
set list {}
for {set ii 1} {$ii < 10000} {incr ii} {
  lappend list $ii [number_name $ii]
}
set script {
  foreach {ii name} $::list {
    db eval {INSERT INTO t4 VALUES(NULL, $ii, $name);}
  }
}
explain {INSERT INTO t4 VALUES(NULL, $ii, $name)}
speed_trial_tcl speed4p-notrigger1 10000 stmt $script

set list {}
for {set ii 1} {$ii < 20000} {incr ii 2} {
  set ii2 [expr {$ii*2}]
  lappend list $ii $ii2 [number_name $ii2]
}
set script {
  foreach {ii ii2 name} $::list {
    db eval {
      UPDATE t4 SET i = $ii2, t = $name WHERE rowid = $ii;
    }
  }
}
explain {UPDATE t4 SET i = $ii2, t = $name WHERE rowid = $ii}
speed_trial_tcl speed4p-notrigger2 10000 stmt $script

set script {
  for {set ii 1} {$ii < 20000} {incr ii 2} {
    db eval {DELETE FROM t4 WHERE rowid = $ii}
  }
}
explain {DELETE FROM t4 WHERE rowid = $ii}
speed_trial_tcl speed4p-notrigger3 10000 stmt $script
execsql {COMMIT}

speed_trial_summary speed4
finish_test
