Skip to content
This repository has been archived by the owner on Jun 20, 2018. It is now read-only.

Commit

Permalink
parse timestamp strings for sqlite db adapter (#135)
Browse files Browse the repository at this point in the history
* parse timestamp strings for sqlite db adapter

A quick simple fix to handle create_at/updated_at when using sqlite database adapter, however the values must be populated (which should be the case if the timestamps settings value has been enabled)

* enable the timestamp fields for sqlite adapter specs

* fix commas
  • Loading branch information
damianham authored and drujensen committed Mar 28, 2018
1 parent 48b7da4 commit 6d160a2
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
23 changes: 12 additions & 11 deletions spec/spec_models.cr
Expand Up @@ -10,21 +10,21 @@ end
if adapter == "pg"
primary_key_sql = "BIGSERIAL PRIMARY KEY".id
foreign_key_sql = "BIGINT".id
created_at_sql = "created_at TIMESTAMP,".id
updated_at_sql = "updated_at TIMESTAMP,".id
created_at_sql = "created_at TIMESTAMP".id
updated_at_sql = "updated_at TIMESTAMP".id
timestamp_fields = "timestamps".id
elsif adapter == "mysql"
primary_key_sql = "BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY".id
foreign_key_sql = "BIGINT".id
created_at_sql = "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,".id
updated_at_sql = "updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,".id
created_at_sql = "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP".id
updated_at_sql = "updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP".id
timestamp_fields = "timestamps".id
elsif adapter == "sqlite"
primary_key_sql = "INTEGER NOT NULL PRIMARY KEY".id
foreign_key_sql = "INTEGER".id
created_at_sql = "".id
updated_at_sql = "".id
timestamp_fields = "".id
created_at_sql = "created_at VARCHAR".id
updated_at_sql = "updated_at VARCHAR".id
timestamp_fields = "timestamps".id
end
%}

Expand All @@ -41,17 +41,17 @@ end

has_many :students

validate :name, "Name cannot be blank" do |parent|
validate :name, "Name cannot be blank" do |parent|
!parent.name.to_s.blank?
end

def self.drop_and_create
exec("DROP TABLE IF EXISTS #{ quoted_table_name };")
exec("CREATE TABLE #{ quoted_table_name } (
id {{ primary_key_sql }},
{{ created_at_sql }}
name VARCHAR(100),
{{ created_at_sql }},
{{ updated_at_sql }}
name VARCHAR(100)
);
")
end
Expand Down Expand Up @@ -198,7 +198,8 @@ end
sentiment FLOAT,
interest REAL,
published BOOL,
created_at TIMESTAMP
{{ created_at_sql }},
{{ updated_at_sql }}
)
SQL
end
Expand Down
11 changes: 9 additions & 2 deletions src/granite_orm/querying.cr
Expand Up @@ -24,8 +24,15 @@ module Granite::ORM::Querying
\{% end %}

\{% if SETTINGS[:timestamps] %}
self.created_at = result.read(Union(Time | Nil))
self.updated_at = result.read(Union(Time | Nil))
if @@adapter.class.name == "Granite::Adapter::Sqlite"
# sqlite3 does not have timestamp type - timestamps are stored as strings
# will break for null timestamps
self.created_at = Time.parse(result.read(String), "%F %X" )
self.updated_at = Time.parse(result.read(String), "%F %X" )
else
self.created_at = result.read(Union(Time | Nil))
self.updated_at = result.read(Union(Time | Nil))
end
\{% end %}
return self
end
Expand Down

0 comments on commit 6d160a2

Please sign in to comment.