diff options
7 files changed, 123 insertions, 33 deletions
| diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index 9794c5663e..692473abc5 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -313,10 +313,10 @@ module ActiveRecord            sql = "SHOW TABLES"          end -        select_all(sql).map { |table| +        select_all(sql, 'SCHEMA').map { |table|            table.delete('Table_type')            sql = "SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}" -          exec_without_stmt(sql).first['Create Table'] + ";\n\n" +          exec_without_stmt(sql, 'SCHEMA').first['Create Table'] + ";\n\n"          }.join        end @@ -508,7 +508,7 @@ module ActiveRecord        # SHOW VARIABLES LIKE 'name'        def show_variable(name) -        variables = select_all("SHOW VARIABLES LIKE '#{name}'") +        variables = select_all("SHOW VARIABLES LIKE '#{name}'", 'SCHEMA')          variables.first['Value'] unless variables.empty?        end @@ -630,7 +630,7 @@ module ActiveRecord            raise ActiveRecordError, "No such column: #{table_name}.#{column_name}"          end -        current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'")["Type"] +        current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'", 'SCHEMA')["Type"]          rename_column_sql = "CHANGE #{quote_column_name(column_name)} #{quote_column_name(new_column_name)} #{current_type}"          add_column_options!(rename_column_sql, options)          rename_column_sql diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 14bc95abfe..6b40299cc0 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -523,7 +523,7 @@ module ActiveRecord        # Returns the configured supported identifier length supported by PostgreSQL        def table_alias_length -        @table_alias_length ||= query('SHOW max_identifier_length')[0][0].to_i +        @table_alias_length ||= query('SHOW max_identifier_length', 'SCHEMA')[0][0].to_i        end        # QUOTING ================================================== @@ -985,7 +985,7 @@ module ActiveRecord        # Returns an array of indexes for the given table.        def indexes(table_name, name = nil) -         result = query(<<-SQL, name) +         result = query(<<-SQL, 'SCHEMA')             SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid             FROM pg_class t             INNER JOIN pg_index d ON t.oid = d.indrelid @@ -997,7 +997,6 @@ module ActiveRecord            ORDER BY i.relname          SQL -          result.map do |row|            index_name = row[0]            unique = row[1] == 't' @@ -1036,7 +1035,7 @@ module ActiveRecord        # Returns the current database name.        def current_database -        query('select current_database()')[0][0] +        query('select current_database()', 'SCHEMA')[0][0]        end        # Returns the current schema name. @@ -1046,7 +1045,7 @@ module ActiveRecord        # Returns the current database encoding format.        def encoding -        query(<<-end_sql)[0][0] +        query(<<-end_sql, 'SCHEMA')[0][0]            SELECT pg_encoding_to_char(pg_database.encoding) FROM pg_database            WHERE pg_database.datname LIKE '#{current_database}'          end_sql @@ -1054,7 +1053,7 @@ module ActiveRecord        # Returns an array of schema names.        def schema_names -        query(<<-SQL).flatten +        query(<<-SQL, 'SCHEMA').flatten            SELECT nspname              FROM pg_namespace             WHERE nspname !~ '^pg_.*' diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index d4ffa82b17..a0c7e559ce 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -208,7 +208,6 @@ module ActiveRecord          true        end -        # QUOTING ==================================================        def quote(value, column = nil) @@ -220,7 +219,6 @@ module ActiveRecord          end        end -        def quote_string(s) #:nodoc:          @connection.class.quote(s)        end @@ -359,7 +357,7 @@ module ActiveRecord        # SCHEMA STATEMENTS ======================================== -      def tables(name = 'SCHEMA', table_name = nil) #:nodoc: +      def tables(name = nil, table_name = nil) #:nodoc:          sql = <<-SQL            SELECT name            FROM sqlite_master @@ -367,13 +365,13 @@ module ActiveRecord          SQL          sql << " AND name = #{quote_table_name(table_name)}" if table_name -        exec_query(sql, name).map do |row| +        exec_query(sql, 'SCHEMA').map do |row|            row['name']          end        end -      def table_exists?(name) -        name && tables('SCHEMA', name).any? +      def table_exists?(table_name) +        table_name && tables(nil, table_name).any?        end        # Returns an array of +SQLite3Column+ objects for the table specified by +table_name+. @@ -394,12 +392,12 @@ module ActiveRecord        # Returns an array of indexes for the given table.        def indexes(table_name, name = nil) #:nodoc: -        exec_query("PRAGMA index_list(#{quote_table_name(table_name)})", name).map do |row| +        exec_query("PRAGMA index_list(#{quote_table_name(table_name)})", 'SCHEMA').map do |row|            IndexDefinition.new(              table_name,              row['name'],              row['unique'] != 0, -            exec_query("PRAGMA index_info('#{row['name']}')").map { |col| +            exec_query("PRAGMA index_info('#{row['name']}')", "Columns for index #{row['name']} on #{table_name}").map { |col|                col['name']              })          end diff --git a/activerecord/test/cases/adapters/mysql2/connection_test.rb b/activerecord/test/cases/adapters/mysql2/connection_test.rb index 684c7f5929..276c499276 100644 --- a/activerecord/test/cases/adapters/mysql2/connection_test.rb +++ b/activerecord/test/cases/adapters/mysql2/connection_test.rb @@ -4,6 +4,13 @@ class MysqlConnectionTest < ActiveRecord::TestCase    def setup      super      @connection = ActiveRecord::Model.connection +    @connection.extend(LogIntercepter) +    @connection.intercepted = true +  end + +  def teardown +    @connection.intercepted = false +    @connection.logged = []    end    def test_no_automatic_reconnection_after_timeout @@ -45,6 +52,26 @@ class MysqlConnectionTest < ActiveRecord::TestCase      end    end +  def test_logs_name_structure_dump +    @connection.structure_dump +    assert_equal "SCHEMA", @connection.logged[0][1] +    assert_equal "SCHEMA", @connection.logged[2][1] +  end + +  def test_logs_name_show_variable +    @connection.show_variable 'foo' +    assert_equal "SCHEMA", @connection.logged[0][1] +  end + +  def test_logs_name_rename_column_sql +    @connection.execute "CREATE TABLE `bar_baz` (`foo` varchar(255))" +    @connection.logged = [] +    @connection.send(:rename_column_sql, 'bar_baz', 'foo', 'foo2') +    assert_equal "SCHEMA", @connection.logged[0][1] +  ensure +    @connection.execute "DROP TABLE `bar_baz`" +  end +    private    def run_without_connection diff --git a/activerecord/test/cases/adapters/postgresql/connection_test.rb b/activerecord/test/cases/adapters/postgresql/connection_test.rb index 4baec749ff..adb2cef010 100644 --- a/activerecord/test/cases/adapters/postgresql/connection_test.rb +++ b/activerecord/test/cases/adapters/postgresql/connection_test.rb @@ -8,6 +8,13 @@ module ActiveRecord      def setup        super        @connection = ActiveRecord::Base.connection +      @connection.extend(LogIntercepter) +      @connection.intercepted = true +    end + +    def teardown +      @connection.intercepted = false +      @connection.logged = []      end      def test_encoding @@ -25,5 +32,42 @@ module ActiveRecord        expect = NonExistentTable.connection.query('show geqo').first.first        assert_equal 'off', expect      end + +    def test_tables_logs_name +      @connection.tables('hello') +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end + +    def test_indexes_logs_name +      @connection.indexes('items', 'hello') +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end + +    def test_table_exists_logs_name +      @connection.table_exists?('items') +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end + +    def test_table_alias_length_logs_name +      @connection.instance_variable_set("@table_alias_length", nil) +      @connection.table_alias_length +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end + +    def test_current_database_logs_name +      @connection.current_database +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end + +    def test_encoding_logs_name +      @connection.encoding +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end + +    def test_schema_names_logs_name +      @connection.schema_names +      assert_equal 'SCHEMA', @connection.logged[0][1] +    end +    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 8a7f44d0a3..5e947799cc 100644 --- a/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +++ b/activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb @@ -20,6 +20,14 @@ module ActiveRecord              number integer            )          eosql + +        @conn.extend(LogIntercepter) +        @conn.intercepted = true +      end +     +      def teardown +        @conn.intercepted = false +        @conn.logged = []        end        def test_column_types @@ -232,13 +240,23 @@ module ActiveRecord        end        def test_tables_logs_name -        name = "hello" -        assert_logged [[name, []]] do -          @conn.tables(name) +        assert_logged [['SCHEMA', []]] do +          @conn.tables('hello')            assert_not_nil @conn.logged.first.shift          end        end +      def test_indexes_logs_name +        assert_logged [["PRAGMA index_list(\"items\")", 'SCHEMA', []]] do +          @conn.indexes('items', 'hello') +        end +      end + +      def test_table_exists_logs_name +        assert @conn.table_exists?('items') +        assert_equal 'SCHEMA', @conn.logged[0][1] +      end +        def test_columns          columns = @conn.columns('items').sort_by { |x| x.name }          assert_equal 2, columns.length @@ -274,7 +292,6 @@ module ActiveRecord        end        def test_indexes_logs -        intercept_logs_on @conn          assert_difference('@conn.logged.length') do            @conn.indexes('items')          end @@ -326,21 +343,10 @@ module ActiveRecord        private        def assert_logged logs -        intercept_logs_on @conn          yield          assert_equal logs, @conn.logged        end -      def intercept_logs_on ctx -        @conn.extend(Module.new { -          attr_accessor :logged -          def log sql, name, binds = [] -            @logged << [sql, name, binds] -            yield -          end -        }) -        @conn.logged = [] -      end      end    end  end diff --git a/activerecord/test/cases/helper.rb b/activerecord/test/cases/helper.rb index 37fa13f771..afff020561 100644 --- a/activerecord/test/cases/helper.rb +++ b/activerecord/test/cases/helper.rb @@ -121,3 +121,19 @@ class << Time      @now = nil    end  end + +module LogIntercepter +  attr_accessor :logged, :intercepted +  def self.extended(base) +    base.logged = [] +  end +  def log(sql, name, binds = [], &block) +    if @intercepted +      @logged << [sql, name, binds] +      yield +    else +      super(sql, name,binds, &block) +    end +  end +end + | 
