aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/adapters
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/cases/adapters')
-rw-r--r--activerecord/test/cases/adapters/mysql/connection_test.rb58
-rw-r--r--activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb51
-rw-r--r--activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb32
-rw-r--r--activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb62
4 files changed, 194 insertions, 9 deletions
diff --git a/activerecord/test/cases/adapters/mysql/connection_test.rb b/activerecord/test/cases/adapters/mysql/connection_test.rb
index f76a23a8ad..67bd8ec7e0 100644
--- a/activerecord/test/cases/adapters/mysql/connection_test.rb
+++ b/activerecord/test/cases/adapters/mysql/connection_test.rb
@@ -43,6 +43,64 @@ class MysqlConnectionTest < ActiveRecord::TestCase
assert @connection.active?
end
+ def test_bind_value_substitute
+ bind_param = @connection.substitute_for('foo', [])
+ assert_equal Arel.sql('?'), bind_param
+ end
+
+ def test_exec_no_binds
+ @connection.exec('drop table if exists ex')
+ @connection.exec(<<-eosql)
+ CREATE TABLE `ex` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,
+ `data` varchar(255))
+ eosql
+ result = @connection.exec('SELECT id, data FROM ex')
+ assert_equal 0, result.rows.length
+ assert_equal 2, result.columns.length
+ assert_equal %w{ id data }, result.columns
+
+ @connection.exec('INSERT INTO ex (id, data) VALUES (1, "foo")')
+ result = @connection.exec('SELECT id, data FROM ex')
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [[1, 'foo']], result.rows
+ end
+
+ def test_exec_with_binds
+ @connection.exec('drop table if exists ex')
+ @connection.exec(<<-eosql)
+ CREATE TABLE `ex` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,
+ `data` varchar(255))
+ eosql
+ @connection.exec('INSERT INTO ex (id, data) VALUES (1, "foo")')
+ result = @connection.exec(
+ 'SELECT id, data FROM ex WHERE id = ?', nil, [[nil, 1]])
+
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [[1, 'foo']], result.rows
+ end
+
+ def test_exec_typecasts_bind_vals
+ @connection.exec('drop table if exists ex')
+ @connection.exec(<<-eosql)
+ CREATE TABLE `ex` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,
+ `data` varchar(255))
+ eosql
+ @connection.exec('INSERT INTO ex (id, data) VALUES (1, "foo")')
+ column = @connection.columns('ex').find { |col| col.name == 'id' }
+
+ result = @connection.exec(
+ 'SELECT id, data FROM ex WHERE id = ?', nil, [[column, '1-fuu']])
+
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [[1, 'foo']], result.rows
+ end
+
# Test that MySQL allows multiple results for stored procedures
if Mysql.const_defined?(:CLIENT_MULTI_RESULTS)
def test_multi_results
diff --git a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb
index 7b72151b57..b0fd2273df 100644
--- a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb
+++ b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb
@@ -5,6 +5,8 @@ module ActiveRecord
class PostgreSQLAdapterTest < ActiveRecord::TestCase
def setup
@connection = ActiveRecord::Base.connection
+ @connection.exec('drop table if exists ex')
+ @connection.exec('create table ex(id serial primary key, data character varying(255))')
end
def test_table_alias_length
@@ -12,6 +14,55 @@ module ActiveRecord
@connection.table_alias_length
end
end
+
+ def test_exec_no_binds
+ result = @connection.exec('SELECT id, data FROM ex')
+ assert_equal 0, result.rows.length
+ assert_equal 2, result.columns.length
+ assert_equal %w{ id data }, result.columns
+
+ string = @connection.quote('foo')
+ @connection.exec("INSERT INTO ex (id, data) VALUES (1, #{string})")
+ result = @connection.exec('SELECT id, data FROM ex')
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [['1', 'foo']], result.rows
+ end
+
+ def test_exec_with_binds
+ string = @connection.quote('foo')
+ @connection.exec("INSERT INTO ex (id, data) VALUES (1, #{string})")
+ result = @connection.exec(
+ 'SELECT id, data FROM ex WHERE id = $1', nil, [[nil, 1]])
+
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [['1', 'foo']], result.rows
+ end
+
+ def test_exec_typecasts_bind_vals
+ string = @connection.quote('foo')
+ @connection.exec("INSERT INTO ex (id, data) VALUES (1, #{string})")
+
+ column = @connection.columns('ex').find { |col| col.name == 'id' }
+ result = @connection.exec(
+ 'SELECT id, data FROM ex WHERE id = $1', nil, [[column, '1-fuu']])
+
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [['1', 'foo']], result.rows
+ end
+
+ def test_substitute_for
+ bind = @connection.substitute_for(nil, [])
+ assert_equal Arel.sql('$1'), bind
+
+ bind = @connection.substitute_for(nil, [nil])
+ assert_equal Arel.sql('$2'), bind
+ end
end
end
end
diff --git a/activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb b/activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb
index 6f372edc38..881631fb19 100644
--- a/activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb
+++ b/activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb
@@ -43,6 +43,36 @@ class SchemaAuthorizationTest < ActiveRecord::TestCase
end
end
+ def test_session_auth=
+ assert_raise(ActiveRecord::StatementInvalid) do
+ @connection.session_auth = 'DEFAULT'
+ @connection.execute "SELECT * FROM #{TABLE_NAME}"
+ end
+ end
+
+ def test_setting_auth_clears_stmt_cache
+ assert_nothing_raised do
+ set_session_auth
+ USERS.each do |u|
+ set_session_auth u
+ assert_equal u, @connection.exec("SELECT name FROM #{TABLE_NAME} WHERE id = $1", 'SQL', [[nil, 1]]).first['name']
+ set_session_auth
+ end
+ end
+ end
+
+ def test_auth_with_bind
+ assert_nothing_raised do
+ set_session_auth
+ USERS.each do |u|
+ @connection.clear_cache!
+ set_session_auth u
+ assert_equal u, @connection.exec("SELECT name FROM #{TABLE_NAME} WHERE id = $1", 'SQL', [[nil, 1]]).first['name']
+ set_session_auth
+ end
+ end
+ end
+
def test_schema_uniqueness
assert_nothing_raised do
set_session_auth
@@ -78,7 +108,7 @@ class SchemaAuthorizationTest < ActiveRecord::TestCase
private
def set_session_auth auth = nil
- @connection.execute "SET SESSION AUTHORIZATION #{auth || 'default'}"
+ @connection.session_auth = auth || 'default'
end
end
diff --git a/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb b/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb
index 934cf72f72..973c51f3d7 100644
--- a/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb
+++ b/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb
@@ -3,6 +3,12 @@ require "cases/helper"
module ActiveRecord
module ConnectionAdapters
class SQLite3AdapterTest < ActiveRecord::TestCase
+ def setup
+ @conn = Base.sqlite3_connection :database => ':memory:',
+ :adapter => 'sqlite3',
+ :timeout => 100
+ end
+
def test_connection_no_db
assert_raises(ArgumentError) do
Base.sqlite3_connection {}
@@ -38,18 +44,58 @@ module ActiveRecord
end
def test_connect
- conn = Base.sqlite3_connection :database => ':memory:',
- :adapter => 'sqlite3',
- :timeout => 100
- assert conn, 'should have connection'
+ assert @conn, 'should have connection'
end
# sqlite3 defaults to UTF-8 encoding
def test_encoding
- conn = Base.sqlite3_connection :database => ':memory:',
- :adapter => 'sqlite3',
- :timeout => 100
- assert_equal 'UTF-8', conn.encoding
+ assert_equal 'UTF-8', @conn.encoding
+ end
+
+ def test_bind_value_substitute
+ bind_param = @conn.substitute_for('foo', [])
+ assert_equal Arel.sql('?'), bind_param
+ end
+
+ def test_exec_no_binds
+ @conn.exec('create table ex(id int, data string)')
+ result = @conn.exec('SELECT id, data FROM ex')
+ assert_equal 0, result.rows.length
+ assert_equal 2, result.columns.length
+ assert_equal %w{ id data }, result.columns
+
+ @conn.exec('INSERT INTO ex (id, data) VALUES (1, "foo")')
+ result = @conn.exec('SELECT id, data FROM ex')
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [[1, 'foo']], result.rows
+ end
+
+ def test_exec_with_binds
+ @conn.exec('create table ex(id int, data string)')
+ @conn.exec('INSERT INTO ex (id, data) VALUES (1, "foo")')
+ result = @conn.exec(
+ 'SELECT id, data FROM ex WHERE id = ?', nil, [[nil, 1]])
+
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [[1, 'foo']], result.rows
+ end
+
+ def test_exec_typecasts_bind_vals
+ @conn.exec('create table ex(id int, data string)')
+ @conn.exec('INSERT INTO ex (id, data) VALUES (1, "foo")')
+ column = @conn.columns('ex').find { |col| col.name == 'id' }
+
+ result = @conn.exec(
+ 'SELECT id, data FROM ex WHERE id = ?', nil, [[column, '1-fuu']])
+
+ assert_equal 1, result.rows.length
+ assert_equal 2, result.columns.length
+
+ assert_equal [[1, 'foo']], result.rows
end
end
end