From 6eb1002c2407a575f4be250da56d7e535bb04467 Mon Sep 17 00:00:00 2001 From: Kaia Leahy Date: Sat, 21 Nov 2020 18:40:46 -0500 Subject: [PATCH] Fix timestamp reading issue Also adds a couple of basic tests for ResultSet Should fix #63 --- spec/result_set_spec.cr | 53 ++++++++++++++++++++++++++++++++++++++++ src/sqlite3.cr | 2 +- src/sqlite3/statement.cr | 2 +- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 spec/result_set_spec.cr diff --git a/spec/result_set_spec.cr b/spec/result_set_spec.cr new file mode 100644 index 0000000..f03f62a --- /dev/null +++ b/spec/result_set_spec.cr @@ -0,0 +1,53 @@ +require "./spec_helper" + +describe SQLite3::ResultSet do + it "reads integer data types" do + with_db do |db| + db.exec "CREATE TABLE test_table(test_int integer);" + db.exec "INSERT INTO test_table(test_int) values(?);", 42 + db.query("SELECT test_int FROM test_table") do |rs| + rs.each do + rs.read.should be_a(Int64) + end + end + end + end + + it "reads string data types" do + with_db do |db| + db.exec "CREATE TABLE test_table(test_text text);" + db.exec "INSERT INTO test_table(test_text) VALUES (?), (?)", "abc", "123" + db.query("SELECT test_text FROM test_table") do |rs| + rs.each do + r = rs.read + r.should be_a(String) + r.should match(/abc|123/) + end + end + end + end + + it "reads time data types" do + with_db do |db| + db.exec "CREATE TABLE test_table(test_date datetime);" + db.exec "INSERT INTO test_table(test_date) values(current_timestamp);" + db.query("SELECT test_date FROM test_table") do |rs| + rs.each do + rs.read(Time).should be_a(Time) + end + end + end + end + + it "reads time stored in text fields, too" do + with_db do |db| + db.exec "CREATE TABLE test_table(test_date text);" + db.exec "INSERT INTO test_table(test_date) values(current_timestamp);" + db.query("SELECT test_date FROM test_table") do |rs| + rs.each do + rs.read(Time).should be_a(Time) + end + end + end + end +end diff --git a/src/sqlite3.cr b/src/sqlite3.cr index d1c973b..cbf53db 100644 --- a/src/sqlite3.cr +++ b/src/sqlite3.cr @@ -2,7 +2,7 @@ require "db" require "./sqlite3/**" module SQLite3 - DATE_FORMAT = "%F %H:%M:%S.%L" + DATE_FORMAT = "%F %H:%M:%S" # :nodoc: TIME_ZONE = Time::Location::UTC diff --git a/src/sqlite3/statement.cr b/src/sqlite3/statement.cr index 06289fb..ec7c751 100644 --- a/src/sqlite3/statement.cr +++ b/src/sqlite3/statement.cr @@ -70,7 +70,7 @@ class SQLite3::Statement < DB::Statement end private def bind_arg(index, value : Time) - bind_arg(index, value.in(SQLite3::TIME_ZONE).to_s(SQLite3::DATE_FORMAT)) + bind_arg(index, value.in(SQLite3::TIME_ZONE).to_s(SQLite3::DATE_FORMAT + ".%L")) end private def bind_arg(index, value)