# 2014-03-31
#
# 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.
#
#***********************************************************************
# The focus of this file is testing the OR optimization on WITHOUT ROWID 
# tables.
#

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

do_execsql_test 1.0 {
  CREATE TABLE t1(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID;
  INSERT INTO t1 VALUES(1, 'a', 'z');
  INSERT INTO t1 VALUES(2, 'b', 'y');
  INSERT INTO t1 VALUES(3, 'c', 'x');
  INSERT INTO t1 VALUES(4, 'd', 'w');
  CREATE INDEX i1 ON t1(b);
  CREATE INDEX i2 ON t1(c);
}

do_eqp_test 1.1 {
  SELECT a FROM t1 WHERE b='b' OR c='x'
} {
  QUERY PLAN
  `--MULTI-INDEX OR
     |--SEARCH TABLE t1 USING INDEX i1 (b=?)
     `--SEARCH TABLE t1 USING INDEX i2 (c=?)
}

do_execsql_test 1.2 {
  SELECT a FROM t1 WHERE b='b' OR c='x'
} {2 3}

do_execsql_test 1.3 {
  SELECT a FROM t1 WHERE b='a' OR c='z'
} {1}

#----------------------------------------------------------------------
# Try that again, this time with non integer PRIMARY KEY values.
#
do_execsql_test 2.0 {
  CREATE TABLE t2(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID;
  INSERT INTO t2 VALUES('i', 'a', 'z');
  INSERT INTO t2 VALUES('ii', 'b', 'y');
  INSERT INTO t2 VALUES('iii', 'c', 'x');
  INSERT INTO t2 VALUES('iv', 'd', 'w');
  CREATE INDEX i3 ON t2(b);
  CREATE INDEX i4 ON t2(c);
}

do_eqp_test 2.1 {
  SELECT a FROM t2 WHERE b='b' OR c='x'
} {
  QUERY PLAN
  `--MULTI-INDEX OR
     |--SEARCH TABLE t2 USING INDEX i3 (b=?)
     `--SEARCH TABLE t2 USING INDEX i4 (c=?)
}

do_execsql_test 2.2 {
  SELECT a FROM t2 WHERE b='b' OR c='x'
} {ii iii}

do_execsql_test 2.3 {
  SELECT a FROM t2 WHERE b='a' OR c='z'
} {i}

#----------------------------------------------------------------------
# On a table with a multi-column PK.
#
do_execsql_test 3.0 {
  CREATE TABLE t3(a, b, c, d, PRIMARY KEY(c, b)) WITHOUT ROWID;

  INSERT INTO t3 VALUES('f', 1, 1, 'o');
  INSERT INTO t3 VALUES('o', 2, 1, 't');
  INSERT INTO t3 VALUES('t', 1, 2, 't');
  INSERT INTO t3 VALUES('t', 2, 2, 'f');

  CREATE INDEX t3i1 ON t3(d);
  CREATE INDEX t3i2 ON t3(a);

  SELECT c||'.'||b FROM t3 WHERE a='t' OR d='t'
} {
  2.1 2.2 1.2
}

finish_test
