diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-10-22 11:29:27 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-10-26 13:44:11 -0700 |
commit | 104d0b263e5d9b17216f06c72d422d26ca5a537f (patch) | |
tree | f5586fc5ae3a21d4e7bf255e72823bf37a0c8c6b /activerecord | |
parent | fca229e205e7d417a025198825cfe19c5c395bff (diff) | |
download | rails-104d0b263e5d9b17216f06c72d422d26ca5a537f.tar.gz rails-104d0b263e5d9b17216f06c72d422d26ca5a537f.tar.bz2 rails-104d0b263e5d9b17216f06c72d422d26ca5a537f.zip |
adding backwards compatibility for non-prepare statement handling drivers
Diffstat (limited to 'activerecord')
4 files changed, 34 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb index 0e4f68e85c..16d01f051b 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb @@ -4,7 +4,15 @@ module ActiveRecord # Returns an array of record hashes with the column names as keys and # column values as values. def select_all(sql, name = nil, bind_values = []) - select(sql, name, bind_values) + if supports_statement_cache? + select(sql, name, bind_values) + else + return select(sql, name) if bind_values.empty? + binds = bind_values.dup + select sql.gsub('?') { + quote(*binds.shift.reverse) + }, name + end end # Returns a record hash with the column names as keys and column values @@ -42,7 +50,7 @@ module ActiveRecord # Executes +sql+ statement in the context of this connection using # +bind_values+ as the bind substitutes. +name+ is logged along with # the executed +sql+ statement. - def exec(sql, name = nil, binds = []) + def exec(sql, name = 'SQL', binds = []) end # Returns the last auto-generated ID from the affected table. @@ -74,6 +82,12 @@ module ActiveRecord nil end + # Returns +true+ when the connection adapter supports prepared statement + # caching, otherwise returns +false+ + def supports_statement_cache? + false + end + # Runs the given block in a database transaction, and returns the result # of the block. # diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 28413ce7a9..36817fcbfd 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -203,6 +203,12 @@ module ActiveRecord ADAPTER_NAME end + # Returns +true+ when the connection adapter supports prepared statement + # caching, otherwise returns +false+ + def supports_statement_cache? + true + end + def supports_migrations? #:nodoc: true end diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 4792f824cf..58c0f85dc2 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -211,6 +211,12 @@ module ActiveRecord ADAPTER_NAME end + # Returns +true+ when the connection adapter supports prepared statement + # caching, otherwise returns +false+ + def supports_statement_cache? + true + end + # Initializes and connects a PostgreSQL adapter. def initialize(connection, logger, connection_parameters, config) super(connection, logger) diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index 97f595af66..d95b950e18 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -62,6 +62,12 @@ module ActiveRecord sqlite_version >= '2.0.0' end + # Returns +true+ when the connection adapter supports prepared statement + # caching, otherwise returns +false+ + def supports_statement_cache? + true + end + def supports_migrations? #:nodoc: true end |