# 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
     |--INDEX 1
     |  `--SEARCH TABLE t1 USING INDEX i1 (b=?)
     `--INDEX 2
        `--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
     |--INDEX 1
     |  `--SEARCH TABLE t2 USING INDEX i3 (b=?)
     `--INDEX 2
        `--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
