Skip to content

Commit 63b6854

Browse files
authored
Fix queries with date and date-time placeholder conditions (#1247)
1 parent 7fcf20d commit 63b6854

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#### Fixed
44

55
- [#1244](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1244) Allow INSERT statements with SELECT notation
6+
- [#1247](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1247) Fix queries with date and date-time placeholder conditions
67

78
## v7.2.1
89

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ def sp_executesql_sql_type(attr)
339339
end
340340
end
341341

342-
value = basic_attribute_type?(attr) ? attr : attr.value_for_database
342+
value = active_model_attribute?(attr) ? attr.value_for_database : attr
343343

344344
if value.is_a?(Numeric)
345345
value > 2_147_483_647 ? "bigint".freeze : "int".freeze
@@ -349,7 +349,7 @@ def sp_executesql_sql_type(attr)
349349
end
350350

351351
def sp_executesql_sql_param(attr)
352-
return quote(attr) if basic_attribute_type?(attr)
352+
return quote(attr) unless active_model_attribute?(attr)
353353

354354
case value = attr.value_for_database
355355
when Type::Binary::Data, ActiveRecord::Type::SQLServer::Data
@@ -359,14 +359,8 @@ def sp_executesql_sql_param(attr)
359359
end
360360
end
361361

362-
def basic_attribute_type?(type)
363-
type.is_a?(Symbol) ||
364-
type.is_a?(String) ||
365-
type.is_a?(Numeric) ||
366-
type.is_a?(Time) ||
367-
type.is_a?(TrueClass) ||
368-
type.is_a?(FalseClass) ||
369-
type.is_a?(NilClass)
362+
def active_model_attribute?(type)
363+
type.is_a?(::ActiveModel::Attribute)
370364
end
371365

372366
def sp_executesql_sql(sql, types, params, name)

test/cases/adapter_test_sqlserver.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,4 +580,18 @@ def test_doesnt_error_when_a_select_query_is_called_while_preventing_writes
580580
end
581581
end
582582
end
583+
584+
describe "placeholder conditions" do
585+
it 'using time placeholder' do
586+
assert_equal Task.where("starting < ?", Time.now).count, 1
587+
end
588+
589+
it 'using date placeholder' do
590+
assert_equal Task.where("starting < ?", Date.today).count, 1
591+
end
592+
593+
it 'using date-time placeholder' do
594+
assert_equal Task.where("starting < ?", DateTime.current).count, 1
595+
end
596+
end
583597
end

0 commit comments

Comments
 (0)