From 3f1b833a1baccccd1bbd4a1b779491ffba23dacf Mon Sep 17 00:00:00 2001 From: Avin Mathew Date: Wed, 9 Oct 2013 12:31:59 +1000 Subject: [PATCH] Support Oracle JDBC Adapter Oracle does not support semi-colons in TRUNCATE TABLE statements and throws an `ORA-00911: invalid character` error. So use the same syntax with a JdbcOracleConnection as used by the OracleEnhancedAdapter. --- lib/database_cleaner/active_record/truncation.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/database_cleaner/active_record/truncation.rb b/lib/database_cleaner/active_record/truncation.rb index 89801f4..b53986b 100755 --- a/lib/database_cleaner/active_record/truncation.rb +++ b/lib/database_cleaner/active_record/truncation.rb @@ -114,13 +114,13 @@ module DatabaseCleaner def truncate_table(table_name) begin execute("TRUNCATE TABLE #{quote_table_name(table_name)};") - rescue ActiveRecord::StatementInvalid + rescue ::ActiveRecord::StatementInvalid execute("DELETE FROM #{quote_table_name(table_name)};") end end end - module OracleEnhancedAdapter + module OracleAdapter def truncate_table(table_name) execute("TRUNCATE TABLE #{quote_table_name(table_name)}") end @@ -176,7 +176,13 @@ module ActiveRecord #Apply adapter decoraters where applicable (adapter should be loaded) AbstractAdapter.class_eval { include DatabaseCleaner::ConnectionAdapters::AbstractAdapter } - JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete } if defined?(JdbcAdapter) + if defined?(JdbcAdapter) + if defined?(OracleJdbcConnection) + JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::OracleAdapter } + else + JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete } + end + end AbstractMysqlAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(AbstractMysqlAdapter) Mysql2Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(Mysql2Adapter) SQLiteAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::SQLiteAdapter } if defined?(SQLiteAdapter) @@ -184,7 +190,7 @@ module ActiveRecord PostgreSQLAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::PostgreSQLAdapter } if defined?(PostgreSQLAdapter) IBM_DBAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::IBM_DBAdapter } if defined?(IBM_DBAdapter) SQLServerAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete } if defined?(SQLServerAdapter) - OracleEnhancedAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::OracleEnhancedAdapter } if defined?(OracleEnhancedAdapter) + OracleEnhancedAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::OracleAdapter } if defined?(OracleEnhancedAdapter) end end