mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
05dd3df35d
It appears to have been used at some point in the past, but is no longer used in any meaningful way. Whether a column is considered primary is a property of the model, not the schema/column. This also removes the need for yet another layer of caching of the model's schema, and we can leave that to the schema cache.
92 lines
2.3 KiB
Ruby
92 lines
2.3 KiB
Ruby
require 'cases/helper'
|
|
require 'models/topic'
|
|
|
|
module ActiveRecord
|
|
class BindParameterTest < ActiveRecord::TestCase
|
|
fixtures :topics
|
|
|
|
class LogListener
|
|
attr_accessor :calls
|
|
|
|
def initialize
|
|
@calls = []
|
|
end
|
|
|
|
def call(*args)
|
|
calls << args
|
|
end
|
|
end
|
|
|
|
def setup
|
|
super
|
|
@connection = ActiveRecord::Base.connection
|
|
@subscriber = LogListener.new
|
|
@pk = Topic.columns_hash[Topic.primary_key]
|
|
@subscription = ActiveSupport::Notifications.subscribe('sql.active_record', @subscriber)
|
|
end
|
|
|
|
teardown do
|
|
ActiveSupport::Notifications.unsubscribe(@subscription)
|
|
end
|
|
|
|
if ActiveRecord::Base.connection.supports_statement_cache?
|
|
def test_binds_are_logged
|
|
sub = @connection.substitute_at(@pk, 0)
|
|
binds = [[@pk, 1]]
|
|
sql = "select * from topics where id = #{sub}"
|
|
|
|
@connection.exec_query(sql, 'SQL', binds)
|
|
|
|
message = @subscriber.calls.find { |args| args[4][:sql] == sql }
|
|
assert_equal binds, message[4][:binds]
|
|
end
|
|
|
|
def test_binds_are_logged_after_type_cast
|
|
sub = @connection.substitute_at(@pk, 0)
|
|
binds = [[@pk, "3"]]
|
|
sql = "select * from topics where id = #{sub}"
|
|
|
|
@connection.exec_query(sql, 'SQL', binds)
|
|
|
|
message = @subscriber.calls.find { |args| args[4][:sql] == sql }
|
|
assert_equal [[@pk, 3]], message[4][:binds]
|
|
end
|
|
|
|
def test_find_one_uses_binds
|
|
Topic.find(1)
|
|
binds = [[@pk, 1]]
|
|
message = @subscriber.calls.find { |args| args[4][:binds] == binds }
|
|
assert message, 'expected a message with binds'
|
|
end
|
|
|
|
def test_logs_bind_vars
|
|
payload = {
|
|
:name => 'SQL',
|
|
:sql => 'select * from topics where id = ?',
|
|
:binds => [[@pk, 10]]
|
|
}
|
|
event = ActiveSupport::Notifications::Event.new(
|
|
'foo',
|
|
Time.now,
|
|
Time.now,
|
|
123,
|
|
payload)
|
|
|
|
logger = Class.new(ActiveRecord::LogSubscriber) {
|
|
attr_reader :debugs
|
|
def initialize
|
|
super
|
|
@debugs = []
|
|
end
|
|
|
|
def debug str
|
|
@debugs << str
|
|
end
|
|
}.new
|
|
|
|
logger.sql event
|
|
assert_match([[@pk.name, 10]].inspect, logger.debugs.first)
|
|
end
|
|
end
|
|
end
|
|
end
|