Rails AR/Oracle Unit Test: [6364] failed (getting worse)

"bitsweat" has kicked AR/Oracle while it was down...

http://dev.rubyonrails.org/changeset/6364

Looks like it uncovered a bug in the Oracle adapter.

"bitsweat" has kicked AR/Oracle while it was down...

http://dev.rubyonrails.org/changeset/6364 ------------------------------------------------------------------------ r6364 | bitsweat | 2007-03-08 19:23:37 -0800 (Thu, 08 Mar 2007) | 1 line

Consistently quote primary key column names. Closes #7763. ------------------------------------------------------------------------

  1) Failure: test_native_types(MigrationTest)     [./test/migration_test.rb:307:in `test_native_types'      /usr/pkg/ruby184/lib/ruby/gems/1.8/gems/mocha-0.4.0/lib/mocha/test_case_adapter.rb:19:in `run']: <Rational(-1, 3)> expected but was <0>.

no idea what that's from. That was failing before this commit, yeah?

  2) Failure: test_update_counters_should_quote_pkey_and_quote_counter_columns(PrimaryKeysTest)     [./test/pk_test.rb:87:in `test_update_counters_should_quote_pkey_and_quote_counter_columns'      /usr/pkg/ruby184/lib/ruby/gems/1.8/gems/mocha-0.4.0/lib/mocha/test_case_adapter.rb:19:in `run']: Exception raised: Class: <ActiveRecord::StatementInvalid> Message: <"OCIError: ORA-00904: \"FLEACOUNT\": invalid identifier: UPDATE mixed_case_monkeys SET fleaCount = fleaCount + 99 WHERE (\"monkeyID\" = 1) ">

Looks like the Oracle adapter method doesn't like symbols, but core expects to be able to pass them (OracleAdapter, L164):

         def quote_column_name(name) #:nodoc:            name =~ /[A-Z]/ ? "\"#{name}\"" : name          end

needs a "to_s" on the name comparison:

         def quote_column_name(name) #:nodoc:            name.to_s =~ /[A-Z]/ ? "\"#{name}\"" : name          end

Here's an AdapterTestOracle you might wanna add to ensure things do what they're meant to do:

require 'abstract_unit' class AdapterTestOracle < Test::Unit::TestCase    def setup      @connection = ActiveRecord::Base.connection    end    def test_should_quote_string_mixed_case_column_names      assert_equal %("mixedCase"), @connection.quote_column_name("mixedCase")    end    def test_should_quote_symbol_mixed_case_column_names      assert_equal %("mixedCase"), @connection.quote_column_name(:mixedCase)    end end

Want me to submit another patch for this bug? I can't actually test Oracle though...

-- tim

Tim Lucas wrote:

Want me to submit another patch for this bug? I can't actually test Oracle though...

Thanks Tim. I'll bundle this up w/ a patch for the other issue, probably sometime tomorrow.

cool cool.

-- tim