Hi all,
I’m getting some OCI8 driver errorsd when migrating my Rails app from
PostgreSQL and MySQL to Oracle 8i DB.
My application’s environment:
Rails 1.2.6
Oracle 8i
Windows XP PRO
The errors occurs in two areas:
The “has_and_belongs_to_many” method generates SQL statement that
Oracle 8i doesn’t like at all:
My model:
class ProductLink < ActiveRecord::Base
has_and_belongs_to_many :products,
:join_table => ‘products_product_links’
end
The Oracle error and SQL:
OCIError: ORA-00933: SQL command not properly ended: SELECT * FROM
product_links INNER JOIN products_product_links ON product_links.id =
products_product_links.product_link_id WHERE
(products_product_links.product_id = 2 ) )
Stacktrace:
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:128:in
log' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb:222:in
execute’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb:490:in
select' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in
select_all’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:427:in
find_by_sql' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:997:in
find_every’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:418:in
find' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb:67:in
find’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:163:in
find_target' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:131:in
load_target’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:122:in
method_missing' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb:91:in
method_missing’
C:/cvsroot/PORTAL0101/portal/app/views/your_devices/_third_levels.rhtml:10:in
_run_rhtml_47app47views47your_devices47_third_levels46rhtml' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:325:in
send’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:325:in
compile_and_render_template' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:301:in
render_template’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:260:in
globalize_old_render_file' C:/cvsroot/PORTAL0101/portal/vendor/plugins/globalize/lib/globalize/rails/action_view.rb:18:in
render_file’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:275:in
render' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/partials.rb:59:in
render_partial’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:26:in
benchmark' C:/ruby/lib/ruby/1.8/benchmark.rb:293:in
measure’
C:/ruby/lib/ruby/1.8/benchmark.rb:307:in realtime' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:26:in
benchmark’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/partials.rb:58:in
render_partial' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:287:in
render’
C:/cvsroot/PORTAL0101/portal/app/views/your_devices/info.rhtml:42:in
_run_rhtml_47app47views47your_devices47info46rhtml' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:325:in
send’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:325:in
compile_and_render_template' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:301:in
render_template’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:260:in
globalize_old_render_file' C:/cvsroot/PORTAL0101/portal/vendor/plugins/globalize/lib/globalize/rails/action_view.rb:18:in
render_file’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:812:in
render_file' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:717:in
render_with_no_layout’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/layout.rb:247:in
render_without_benchmark' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:50:in
render’
C:/ruby/lib/ruby/1.8/benchmark.rb:293:in measure' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:50:in
render’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:1102:in
perform_action_without_filters' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:696:in
call_filters’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:688:in
perform_action_without_benchmark' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in
perform_action_without_rescue’
C:/ruby/lib/ruby/1.8/benchmark.rb:293:in measure' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in
perform_action_without_rescue’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/rescue.rb:83:in
perform_action' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:435:in
send’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:435:in
process_without_filters' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:684:in
process_without_session_management_support’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/session_management.rb:114:in
process_without_test' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/test_process.rb:15:in
process’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:334:in
process' C:/cvsroot/PORTAL0101/portal/vendor/rails/railties/lib/dispatcher.rb:41:in
dispatch’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:267:in
process' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:152:in
get’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:508:in
send' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:508:in
get’
test/integration/pmp_test.rb:59:in test_your_devices' C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in
send’
C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in run' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:463:in
run’
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in
each’
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in
run’
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in each' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in
run’
C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:in
run_suite' C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:67:in
start_mediator’
C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:41:in
start' C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in
run’
C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:216:in run' C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:12:in
run’
C:/ruby/lib/ruby/1.8/test/unit.rb:278
C:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake/rake_test_loader.rb:5
I’m getting the same error when invoking the find method with the
“:include” option:
My model’s find method:
Ticket.find_all_by_status(‘open’, :include => [:user, :ticket_category])
The Oracle error and SQL:
OCIError: ORA-00933: SQL command not properly ended: SELECT tickets.id
AS t0_r0, tickets.user_id AS t0_r1, tickets.priority AS t0_r2,
tickets.status AS t0_r3, tickets.ticket_category_id AS t0_r4,
tickets.subject AS t0_r5, tickets.body AS t0_r6, tickets.created_at AS
t0_r7, tickets.updated_at AS t0_r8, tickets.closed_at AS t0_r9, users.id
AS t1_r0, users.role_id AS t1_r1, users.subscriber_id AS t1_r2,
users.setting_method AS t1_r3, users.name AS t1_r4, users.email AS
t1_r5, users.hashed_password AS t1_r6, users.salt AS t1_r7,
users.reset_code AS t1_r8, users.created_at AS t1_r9, users.logged_at AS
t1_r10, ticket_categories.id AS t2_r0, ticket_categories.name AS t2_r1
FROM tickets LEFT OUTER JOIN users ON users.id = tickets.user_id LEFT
OUTER JOIN ticket_categories ON ticket_categories.id =
tickets.ticket_category_id WHERE (tickets.status = ‘open’ AND
tickets.user_id = 1) )
Stacktrace:
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:128:in
log' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb:222:in
execute’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb:490:in
select' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in
select_all’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations.rb:1187:in
select_all_rows' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations.rb:1044:in
find_with_associations’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations.rb:1042:in
catch' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations.rb:1042:in
find_with_associations’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:996:in
find_every' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:1219:in
send’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:1219:in
method_missing' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/deprecation.rb:44:in
silence’
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:1219:in
method_missing' C:/cvsroot/PORTAL0101/portal/app/models/ticket.rb:41:in
find_ticket_by_user_and_status’
C:/cvsroot/PORTAL0101/portal/app/models/ticket.rb:27:in
find_pending' C:/cvsroot/PORTAL0101/portal/app/controllers/tickets_controller.rb:49:in
pending’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:1101:in
send' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:1101:in
perform_action_without_filters’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:696:in
call_filters' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:688:in
perform_action_without_benchmark’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in
perform_action_without_rescue' C:/ruby/lib/ruby/1.8/benchmark.rb:293:in
measure’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in
perform_action_without_rescue' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/rescue.rb:83:in
perform_action’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:435:in
send' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:435:in
process_without_filters’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:684:in
process_without_session_management_support' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/session_management.rb:114:in
process_without_test’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/test_process.rb:15:in
process' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:334:in
process’
C:/cvsroot/PORTAL0101/portal/vendor/rails/railties/lib/dispatcher.rb:41:in
dispatch' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:267:in
process’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:152:in
get' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:116:in
follow_redirect!’
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:134:in
post_via_redirect' ./test/integration/tickets_test.rb:70:in
create_ticket’
./test/integration/tickets_test.rb:29:in test_ticket_life_cycle' C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in
send’
C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in run' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:463:in
run’
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in
each’
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in
run’
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in each' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in
run’
C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:in
run_suite' C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:67:in
start_mediator’
C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:41:in
start' C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in
run’
C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:216:in run' C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:12:in
run’
C:/ruby/lib/ruby/1.8/test/unit.rb:278
C:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake/rake_test_loader.rb:5
Everything works great with the others databases, so i think there’s a
problem with the oracle_adapter.
Anyone encounters my same problems and have found a solution for it?
I ggogle them, but was unable to find anything.
Greetings
Michele