rsim / oracle-enhanced

Oracle enhaced adapter for ActiveRecord
MIT License
547 stars 308 forks source link

Calling AR `first` finder method fails #1731

Closed belgoros closed 6 years ago

belgoros commented 6 years ago

Actual behavior

Here is my class

class SomeModel < ActiveRecord::Base
  self.table_name = 'AUTHOR'
  self.primary_key = "AUTH_ID"

  alias_attribute :id, 'aut_id'
  alias_attribute :first_name, 'aut_first_name'
  alias_attribute :last_name, 'aut_last_name'
  alias_attribute :login, 'aut_login'

  #ignore_table_columns :login
end

Running the ruby code that fails:

author = SomeModel.first
puts author.inspect

Errors:

ruby db_oracle_connection.rb
Traceback (most recent call last):
  25: from db_oracle_connection.rb:49:in `<main>'
  24: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/querying.rb:5:in `first'
  23: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation/finder_methods.rb:125:in `first'
  22: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation/finder_methods.rb:515:in `find_nth'
  21: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation/finder_methods.rb:530:in `find_nth_with_limit'
  20: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation.rb:195:in `to_ary'
  19: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation.rb:200:in `records'
  18: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation.rb:414:in `load'
  17: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation.rb:542:in `exec_queries'
  16: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation.rb:578:in `skip_query_cache_if_necessary'
  15: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/relation.rb:554:in `block in exec_queries'
  14: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/querying.rb:41:in `find_by_sql'
  13: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/query_cache.rb:101:in `select_all'
  12: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:55:in `select_all'
  11: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:469:in `select_prepared'
  10: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-oracle_enhanced-adapter-5.2.2/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:24:in `exec_query'
   9: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-oracle_enhanced-adapter-5.2.2/lib/active_record/connection_adapters/oracle_enhanced/dbms_output.rb:36:in `log'
   8: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:569:in `log'
   7: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activesupport-5.2.0/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
   6: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:578:in `block in log'
   5: from /Users/Serguei/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
   4: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:579:in `block (2 levels) in log'
   3: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-oracle_enhanced-adapter-5.2.2/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:41:in `block in exec_query'
   2: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/activerecord-oracle_enhanced-adapter-5.2.2/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb:140:in `exec'
   1: from /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/ruby-oci8-2.2.5.1/lib/oci8/cursor.rb:127:in `exec'
stmt.c:243:in oci8lib_250.bundle: OCIError: ORA-00904: "AUTHOR"."AUTH_ID": invalid identifier: SELECT * FROM (SELECT  "AUTHOR".* FROM "AUTHOR" ORDER BY "AUTHOR"."AUTH_ID" ASC ) WHERE ROWNUM <= :a1 (ActiveRecord::StatementInvalid)

System configuration

Rails version:

5.2.0

Oracle enhanced adapter version: 5.2.2

Ruby version: 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]

Oracle Database version: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

jacobat commented 6 years ago

Possible a stupid question, but are you sure you have an "AUTH_ID" column on your "AUTHOR" table? I encountered the same error message because I assumed I had an ID column when in fact I did not.

belgoros commented 6 years ago

@jacobat Oh, my bad, there was a typo in column name:

self.primary_key = "AUTH_ID"
alias_attribute :id, 'aut_id'

It should be:

self.primary_key = 'AUT_ID'

Once fixed, calling Author.first works as needed. Thank you!