Skip to content

Commit c137deb

Browse files
authored
Fix queries with date and date-time placeholder conditions (#1246)
1 parent 19de909 commit c137deb

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
@@ -16,5 +16,6 @@
1616
- [#1215](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1215) Fix mismatched foreign key errors
1717
- [#1228](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1228) Enable identity insert on view's base table
1818
- [#1238](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1238) Allow INSERT statements with SELECT notation
19+
- [#1246](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1246) Fix queries with date and date-time placeholder conditions
1920

2021
Please check [7-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/7-1-stable/CHANGELOG.md) for previous changes.

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ def sp_executesql_sql_type(attr)
334334
end
335335
end
336336

337-
value = basic_attribute_type?(attr) ? attr : attr.value_for_database
337+
value = active_model_attribute?(attr) ? attr.value_for_database : attr
338338

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

346346
def sp_executesql_sql_param(attr)
347-
return quote(attr) if basic_attribute_type?(attr)
347+
return quote(attr) unless active_model_attribute?(attr)
348348

349349
case value = attr.value_for_database
350350
when Type::Binary::Data, ActiveRecord::Type::SQLServer::Data
@@ -354,14 +354,8 @@ def sp_executesql_sql_param(attr)
354354
end
355355
end
356356

357-
def basic_attribute_type?(type)
358-
type.is_a?(Symbol) ||
359-
type.is_a?(String) ||
360-
type.is_a?(Numeric) ||
361-
type.is_a?(Time) ||
362-
type.is_a?(TrueClass) ||
363-
type.is_a?(FalseClass) ||
364-
type.is_a?(NilClass)
357+
def active_model_attribute?(type)
358+
type.is_a?(::ActiveModel::Attribute)
365359
end
366360

367361
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
@@ -602,4 +602,18 @@ def setup
602602
@conn.execute("ALTER TABLE engines DROP COLUMN old_car_id") rescue nil
603603
end
604604
end
605+
606+
describe "placeholder conditions" do
607+
it 'using time placeholder' do
608+
assert_equal Task.where("starting < ?", Time.now).count, 1
609+
end
610+
611+
it 'using date placeholder' do
612+
assert_equal Task.where("starting < ?", Date.today).count, 1
613+
end
614+
615+
it 'using date-time placeholder' do
616+
assert_equal Task.where("starting < ?", DateTime.current).count, 1
617+
end
618+
end
605619
end

0 commit comments

Comments
 (0)