Title: [920] trunk/activerecord-jdbc:
Fix problem with reserved words coming back pre-quoted from #indexes in postgres
- Revision
- 920
- Author
- nicksieger
- Date
- 2008-02-29 17:37:55 -0500 (Fri, 29 Feb 2008)
Log Message
Fix problem with reserved words coming back pre-quoted from #indexes in postgres
Modified Paths
Added Paths
Diff
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb (919 => 920)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb 2008-02-29 21:33:56 UTC (rev 919)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb 2008-02-29 22:37:55 UTC (rev 920)
@@ -177,7 +177,41 @@
end
@connection.columns_internal(table_name, name, schema_name)
end
-
+
+ # From postgresql_adapter.rb
+ def indexes(table_name, name = nil)
+ result = select_rows(<<-SQL, name)
+ SELECT i.relname, d.indisunique, a.attname
+ FROM pg_class t, pg_class i, pg_index d, pg_attribute a
+ WHERE i.relkind = 'i'
+ AND d.indexrelid = i.oid
+ AND d.indisprimary = 'f'
+ AND t.oid = d.indrelid
+ AND t.relname = '#{table_name}'
+ AND a.attrelid = t.oid
+ AND ( d.indkey[0]=a.attnum OR d.indkey[1]=a.attnum
+ OR d.indkey[2]=a.attnum OR d.indkey[3]=a.attnum
+ OR d.indkey[4]=a.attnum OR d.indkey[5]=a.attnum
+ OR d.indkey[6]=a.attnum OR d.indkey[7]=a.attnum
+ OR d.indkey[8]=a.attnum OR d.indkey[9]=a.attnum )
+ ORDER BY i.relname
+ SQL
+
+ current_index = nil
+ indexes = []
+
+ result.each do |row|
+ if current_index != row[0]
+ indexes << ::ActiveRecord::ConnectionAdapters::IndexDefinition.new(table_name, row[0], row[1] == "t", [])
+ current_index = row[0]
+ end
+
+ indexes.last.columns << row[2]
+ end
+
+ indexes
+ end
+
def last_insert_id(table, sequence_name)
Integer(select_value("SELECT currval('#{sequence_name}')"))
end
Added: trunk/activerecord-jdbc/test/models/reserved_word.rb (0 => 920)
--- trunk/activerecord-jdbc/test/models/reserved_word.rb (rev 0)
+++ trunk/activerecord-jdbc/test/models/reserved_word.rb 2008-02-29 22:37:55 UTC (rev 920)
@@ -0,0 +1,18 @@
+require 'rubygems'
+require 'active_record'
+
+class CreateReservedWords < ActiveRecord::Migration
+ def self.up
+ create_table "reserved_words", :force => true do |t|
+ t.column :position, :integer
+ t.column :select, :integer
+ end
+ end
+
+ def self.down
+ drop_table "reserved_words"
+ end
+end
+
+class ReservedWord < ActiveRecord::Base
+end
\ No newline at end of file
Added: trunk/activerecord-jdbc/test/postgres_reserved_test.rb (0 => 920)
--- trunk/activerecord-jdbc/test/postgres_reserved_test.rb (rev 0)
+++ trunk/activerecord-jdbc/test/postgres_reserved_test.rb 2008-02-29 22:37:55 UTC (rev 920)
@@ -0,0 +1,22 @@
+require 'jdbc_common'
+require 'db/postgres'
+require 'models/reserved_word'
+
+class PostgresReservedWordsTest < Test::Unit::TestCase
+ def setup
+ CreateReservedWords.up
+ end
+ def teardown
+ CreateReservedWords.down
+ end
+
+ def test_quote_reserved_word_column
+ columns = ReservedWord.column_names - ["id"]
+ ReservedWord.connection.add_index :reserved_words, columns
+ indexes = ReservedWord.connection.indexes("reserved_words")
+ assert_equal 1, indexes.size
+ columns.each do |c|
+ assert indexes[0].columns.include?(c), "#{indexes[0].columns.inspect} does not include #{c.inspect}"
+ end
+ end
+end
\ No newline at end of file
Modified: trunk/activerecord-jdbc/test/simple.rb (919 => 920)
--- trunk/activerecord-jdbc/test/simple.rb 2008-02-29 21:33:56 UTC (rev 919)
+++ trunk/activerecord-jdbc/test/simple.rb 2008-02-29 22:37:55 UTC (rev 920)
@@ -87,7 +87,7 @@
indexes = @connection.indexes(:entries)
assert_equal(1, indexes.size)
- assert_equal "entries", indexes.first.table
+ assert_equal "entries", indexes.first.table.to_s
assert_equal index_name, indexes.first.name
assert !indexes.first.unique
assert_equal ["updated_on"], indexes.first.columns
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel