# 2011 September 20
#
# 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.
#
#***********************************************************************
#
# Tests for the sqlite4_stmt_status() function
#

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

set ::testprefix dbstatus2

do_execsql_test 1.0 {
  PRAGMA page_size = 1024;
  PRAGMA auto_vacuum = 0;

  CREATE TABLE t1(a PRIMARY KEY, b);
  INSERT INTO t1 VALUES(1, randomblob(600));
  INSERT INTO t1 VALUES(2, randomblob(600));
  INSERT INTO t1 VALUES(3, randomblob(600));
}

proc db_hit_miss {db {reset 0}} {
  set nHit  [sqlite4_db_status $db CACHE_HIT $reset]
  set nMiss [sqlite4_db_status $db CACHE_MISS $reset]
  list $nHit $nMiss
}

do_test 1.1 {
  db close
  sqlite4 db test.db
  expr {[file size test.db] / 1024}
} 6

do_test 1.2 {
  execsql { SELECT b FROM t1 WHERE a=2 }
  db_hit_miss db
} {{0 2 0} {0 4 0}}

do_test 1.3 { 
  execsql { SELECT b FROM t1 WHERE a=2 }
  db_hit_miss db
} {{0 6 0} {0 4 0}}

do_test 1.4 { 
  execsql { SELECT b FROM t1 WHERE a=2 }
  db_hit_miss db
} {{0 10 0} {0 4 0}}

do_test 1.5 { 
  db_hit_miss db 1
} {{0 10 0} {0 4 0}}

do_test 1.6 { 
  db_hit_miss db 0
} {{0 0 0} {0 0 0}}

do_test 1.7 {
  set fd [db incrblob main t1 b 1]
  fconfigure $fd -translation binary
  set len [string length [read $fd]]
  close $fd
  set len
} 600
do_test 1.8 { sqlite4_db_status db CACHE_HIT  0 } {0 2 0}
do_test 1.9 { sqlite4_db_status db CACHE_MISS 0 } {0 1 0}

 
finish_test
