###############################################################################
#
# tkt-01f20ea55a.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

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

set rawValue(0) "2016-10-01 12:34:56.8765401"

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

set ticksValue(0) [getDateTimeTicks $rawValue(0)]
set ticksValue(1) [getDateTimeTicks $rawValue(0) false]

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

set instanceValue(0) [object create -alias DateTime $ticksValue(0)]
set instanceValue(1) [object create -alias DateTime $ticksValue(1) Utc]

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

runTest {test tkt-01f20ea55a-1.1 {DateTimeKind with DataTable} -setup {
  proc dateTimeValueCallback { dataTable dataRow index value } {
    if {[object isoftype $value DateTime]} then {
      return [list [$value Kind] [$value ToString [getDateTimeFormat]]]
    } else {
      continue
    }
  }

  setupDb [set fileName tkt-01f20ea55a-1.1.db] "" ISO8601 Utc
} -body {
  set connection [getDbConnection]

  sql execute $db [subst {
    CREATE TABLE t1 (x, y DATETIME);
    INSERT INTO t1 (x, y) VALUES(1, NULL);
  }]

  sql execute $db "INSERT INTO t1 (x, y) VALUES(2, ?);" \
      [list param1 DateTime $instanceValue(0)]

  sql execute $db "INSERT INTO t1 (x, y) VALUES(3, ?);" \
      [list param1 DateTime $instanceValue(1)]

  set command [$connection -alias CreateCommand]
  $command CommandText {SELECT x, y FROM t1 ORDER BY x;}

  set dataAdapter [object create -alias \
      System.Data.SQLite.SQLiteDataAdapter $command]

  set dataTable [object create -alias System.Data.DataTable]

  set dataColumn(x) [object create -alias System.Data.DataColumn x]
  set dataColumn(y) [object create -alias System.Data.DataColumn y]

  $dataColumn(y) DataType DateTime; $dataColumn(y) DateTimeMode Utc

  $dataTable Columns.Add $dataColumn(x)
  $dataTable Columns.Add $dataColumn(y)

  $dataAdapter Fill $dataTable
  getRowsFromDataTable $dataTable dateTimeValueCallback
} -cleanup {
  unset -nocomplain dataColumn dataTable dataAdapter command

  freeDbConnection

  cleanupDb $fileName

  unset -nocomplain connection db fileName

  rename dateTimeValueCallback ""
} -constraints {eagle command.object monoBug28 monoBug211 command.sql\
compile.DATA SQLite System.Data.SQLite} -result {{{x 1} y} {{x 2} {y\
{Utc {2016-10-01 12:34:56.8765401Z}}}} {{x 3} {y {Utc {2016-10-01\
12:34:56.8765401Z}}}}}}

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

unset -nocomplain instanceValue ticksValue rawValue

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

runSQLiteTestEpilogue
runTestEpilogue
