###############################################################################
#
# tkt-e36e05e299.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

###############################################################################

proc hasIndexOutOfRangeException { value } {
  return [regexp -- { System\.IndexOutOfRangeException: } $value]
}

###############################################################################

runTest {test tkt-e36e05e299-1.1 {GetOrdinal, -1 for not found} -setup {
  setupDb [set fileName tkt-e36e05e299-1.1.db]
} -body {
  sql execute $db {
    CREATE TABLE t1(x);
    INSERT INTO t1 (x) VALUES(NULL);
  }

  set dataReader [sql execute \
      -execute reader -format datareader \
      -alias $db "SELECT x FROM t1 ORDER BY x;"]

  lappend result(1) [catch {$dataReader GetOrdinal x} result(2)]

  if {$result(1)} then {
    set result(2) [hasIndexOutOfRangeException $result(2)]
  }

  lappend result(3) [catch {$dataReader GetOrdinal y} result(4)]

  if {$result(3)} then {
    set result(4) [hasIndexOutOfRangeException $result(4)]
  }

  testArrayGet result
} -cleanup {
  unset -nocomplain dataReader

  cleanupDb $fileName db

  unset -nocomplain result db fileName
} -constraints \
{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite} -result \
{1 0 2 0 3 0 4 -1}}

###############################################################################

runTest {test tkt-e36e05e299-1.2 {GetOrdinal, throw on not found} -setup {
  setupDb [set fileName tkt-e36e05e299-1.2.db] "" "" "" StrictConformance
} -body {
  sql execute $db {
    CREATE TABLE t1(x);
    INSERT INTO t1 (x) VALUES(NULL);
  }

  set dataReader [sql execute \
      -execute reader -format datareader \
      -alias $db "SELECT x FROM t1 ORDER BY x;"]

  lappend result(1) [catch {$dataReader GetOrdinal x} result(2)]

  if {$result(1)} then {
    set result(2) [hasIndexOutOfRangeException $result(2)]
  }

  lappend result(3) [catch {$dataReader GetOrdinal y} result(4)]

  if {$result(3)} then {
    set result(4) [hasIndexOutOfRangeException $result(4)]
  }

  testArrayGet result
} -cleanup {
  unset -nocomplain dataReader

  cleanupDb $fileName db

  unset -nocomplain result db fileName
} -constraints \
{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite} -result \
{1 0 2 0 3 1 4 1}}

###############################################################################

rename hasIndexOutOfRangeException ""

###############################################################################

runSQLiteTestEpilogue
runTestEpilogue
