From 18db1b0ea6d51e7cd45cac6309e0ea9b42f39755 Mon Sep 17 00:00:00 2001 From: James Brown Date: Thu, 16 Sep 2021 18:14:52 -0700 Subject: [PATCH] fix query_builder to encode timestamps correctly --- lib/query_builder/cql/operators/cql_literal.rb | 10 ++++++++++ spec/integration/insert_spec.rb | 1 - spec/unit/cql/operators/cql_literal_spec.rb | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/query_builder/cql/operators/cql_literal.rb b/lib/query_builder/cql/operators/cql_literal.rb index 67b170a..792f53a 100644 --- a/lib/query_builder/cql/operators/cql_literal.rb +++ b/lib/query_builder/cql/operators/cql_literal.rb @@ -20,6 +20,7 @@ def cql_literal(value) return "NaN" if nan?(value) return "Infinity" if infinity?(value) return value.to_s if unchanged?(value) + return cql_literal_time(value) if time?(value) return cql_literal_array(value) if array?(value) return cql_literal_hash(value) if hash?(value) return cql_literal_set(value) if set?(value) @@ -44,6 +45,11 @@ def cql_literal_set(value) "{ #{value.to_a.map{ |v| "\'{v}\'" }.join(', ')} }" end + def cql_literal_time(value) + str = value.strftime("%Y-%m-%dT%H:%M:%S.%L%z") + "'#{str}'" + end + def quote(value) "'#{value.to_s.gsub("\'", "\'\'")}'" end @@ -88,6 +94,10 @@ def set?(value) value.is_a? Set end + def time?(value) + value.is_a? Time + end + end end # module QueryBuilder::CQL::Operators diff --git a/spec/integration/insert_spec.rb b/spec/integration/insert_spec.rb index 368000e..f6c55c9 100644 --- a/spec/integration/insert_spec.rb +++ b/spec/integration/insert_spec.rb @@ -19,5 +19,4 @@ let(:cql) { "INSERT INTO wildlife.species (names, sizes) VALUES (['tiger', 'pantera tigra'], {'length': 3}) USING TIMESTAMP 100 AND TTL 500 IF NOT EXISTS;" } end - end # describe INSERT diff --git a/spec/unit/cql/operators/cql_literal_spec.rb b/spec/unit/cql/operators/cql_literal_spec.rb index 42accc9..d4635a8 100644 --- a/spec/unit/cql/operators/cql_literal_spec.rb +++ b/spec/unit/cql/operators/cql_literal_spec.rb @@ -80,4 +80,9 @@ let(:output) { "['foo', 'bar', {'baz': 0x03}]" } end + it_behaves_like :transforming_immutable_data do + let(:input) { Time.at(1631841161.2, in: "-07:00") } + let(:output) { "'2021-09-16T18:12:41.200-0700'" } + end + end # describe QueryBuilder::CQL::Operators.cql_literal