ctreatma-activerecord-oracle_enhanced-adapter 1.4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/.rspec +2 -0
  2. data/Gemfile +51 -0
  3. data/History.md +269 -0
  4. data/License.txt +20 -0
  5. data/README.md +378 -0
  6. data/RUNNING_TESTS.md +45 -0
  7. data/Rakefile +46 -0
  8. data/VERSION +1 -0
  9. data/activerecord-oracle_enhanced-adapter.gemspec +130 -0
  10. data/ctreatma-activerecord-oracle_enhanced-adapter.gemspec +129 -0
  11. data/lib/active_record/connection_adapters/emulation/oracle_adapter.rb +5 -0
  12. data/lib/active_record/connection_adapters/oracle_enhanced.rake +105 -0
  13. data/lib/active_record/connection_adapters/oracle_enhanced_activerecord_patches.rb +41 -0
  14. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +1390 -0
  15. data/lib/active_record/connection_adapters/oracle_enhanced_base_ext.rb +106 -0
  16. data/lib/active_record/connection_adapters/oracle_enhanced_column.rb +136 -0
  17. data/lib/active_record/connection_adapters/oracle_enhanced_connection.rb +119 -0
  18. data/lib/active_record/connection_adapters/oracle_enhanced_context_index.rb +328 -0
  19. data/lib/active_record/connection_adapters/oracle_enhanced_core_ext.rb +25 -0
  20. data/lib/active_record/connection_adapters/oracle_enhanced_cpk.rb +21 -0
  21. data/lib/active_record/connection_adapters/oracle_enhanced_dirty.rb +39 -0
  22. data/lib/active_record/connection_adapters/oracle_enhanced_jdbc_connection.rb +553 -0
  23. data/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb +492 -0
  24. data/lib/active_record/connection_adapters/oracle_enhanced_procedures.rb +260 -0
  25. data/lib/active_record/connection_adapters/oracle_enhanced_schema_definitions.rb +213 -0
  26. data/lib/active_record/connection_adapters/oracle_enhanced_schema_dumper.rb +252 -0
  27. data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements.rb +373 -0
  28. data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements_ext.rb +265 -0
  29. data/lib/active_record/connection_adapters/oracle_enhanced_structure_dump.rb +290 -0
  30. data/lib/active_record/connection_adapters/oracle_enhanced_tasks.rb +17 -0
  31. data/lib/active_record/connection_adapters/oracle_enhanced_version.rb +1 -0
  32. data/lib/activerecord-oracle_enhanced-adapter.rb +25 -0
  33. data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +749 -0
  34. data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +310 -0
  35. data/spec/active_record/connection_adapters/oracle_enhanced_context_index_spec.rb +426 -0
  36. data/spec/active_record/connection_adapters/oracle_enhanced_core_ext_spec.rb +19 -0
  37. data/spec/active_record/connection_adapters/oracle_enhanced_cpk_spec.rb +113 -0
  38. data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +1330 -0
  39. data/spec/active_record/connection_adapters/oracle_enhanced_dbms_output_spec.rb +69 -0
  40. data/spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb +121 -0
  41. data/spec/active_record/connection_adapters/oracle_enhanced_emulate_oracle_adapter_spec.rb +25 -0
  42. data/spec/active_record/connection_adapters/oracle_enhanced_procedures_spec.rb +374 -0
  43. data/spec/active_record/connection_adapters/oracle_enhanced_schema_dump_spec.rb +380 -0
  44. data/spec/active_record/connection_adapters/oracle_enhanced_schema_statements_spec.rb +1112 -0
  45. data/spec/active_record/connection_adapters/oracle_enhanced_structure_dump_spec.rb +323 -0
  46. data/spec/spec_helper.rb +185 -0
  47. metadata +287 -0
@@ -0,0 +1,323 @@
1
+ require 'spec_helper'
2
+
3
+ describe "OracleEnhancedAdapter structure dump" do
4
+ include LoggerSpecHelper
5
+
6
+ before(:all) do
7
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
8
+ @conn = ActiveRecord::Base.connection
9
+ @oracle11g = !! @conn.select_value("SELECT * FROM v$version WHERE banner LIKE 'Oracle%11g%'")
10
+ end
11
+ describe "structure dump" do
12
+ before(:each) do
13
+ @conn.create_table :test_posts, :force => true do |t|
14
+ t.string :title
15
+ t.string :foo
16
+ t.integer :foo_id
17
+ end
18
+ @conn.create_table :foos do |t|
19
+ end
20
+ class ::TestPost < ActiveRecord::Base
21
+ end
22
+ TestPost.set_table_name "test_posts"
23
+ end
24
+
25
+ after(:each) do
26
+ @conn.drop_table :test_posts
27
+ @conn.drop_table :foos
28
+ @conn.execute "DROP SEQUENCE test_posts_seq" rescue nil
29
+ @conn.execute "ALTER TABLE test_posts drop CONSTRAINT fk_test_post_foo" rescue nil
30
+ @conn.execute "DROP TRIGGER test_post_trigger" rescue nil
31
+ @conn.execute "DROP TYPE TEST_TYPE" rescue nil
32
+ @conn.execute "DROP TABLE bars" rescue nil
33
+ @conn.execute "ALTER TABLE foos drop CONSTRAINT UK_BAZ" rescue nil
34
+ @conn.execute "ALTER TABLE foos drop CONSTRAINT UK_FOOZ_BAZ" rescue nil
35
+ @conn.execute "ALTER TABLE foos drop column fooz_id" rescue nil
36
+ @conn.execute "ALTER TABLE foos drop column baz_id" rescue nil
37
+ @conn.execute "ALTER TABLE test_posts drop column fooz_id" rescue nil
38
+ @conn.execute "ALTER TABLE test_posts drop column baz_id" rescue nil
39
+ end
40
+
41
+ it "should dump single primary key" do
42
+ dump = ActiveRecord::Base.connection.structure_dump
43
+ dump.should =~ /CONSTRAINT (.+) PRIMARY KEY \(ID\)\n/
44
+ end
45
+
46
+ it "should dump composite primary keys" do
47
+ pk = @conn.send(:select_one, <<-SQL)
48
+ select constraint_name from user_constraints where table_name = 'TEST_POSTS' and constraint_type='P'
49
+ SQL
50
+ @conn.execute <<-SQL
51
+ alter table test_posts drop constraint #{pk["constraint_name"]}
52
+ SQL
53
+ @conn.execute <<-SQL
54
+ ALTER TABLE TEST_POSTS
55
+ add CONSTRAINT pk_id_title PRIMARY KEY (id, title)
56
+ SQL
57
+ dump = ActiveRecord::Base.connection.structure_dump
58
+ dump.should =~ /CONSTRAINT (.+) PRIMARY KEY \(ID,TITLE\)\n/
59
+ end
60
+
61
+ it "should dump foreign keys" do
62
+ @conn.execute <<-SQL
63
+ ALTER TABLE TEST_POSTS
64
+ ADD CONSTRAINT fk_test_post_foo FOREIGN KEY (foo_id) REFERENCES foos(id)
65
+ SQL
66
+ dump = ActiveRecord::Base.connection.structure_dump_fk_constraints
67
+ dump.split('\n').length.should == 1
68
+ dump.should =~ /ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_FOO\"? FOREIGN KEY \(\"?FOO_ID\"?\) REFERENCES \"?FOOS\"?\(\"?ID\"?\)/i
69
+ end
70
+
71
+ it "should dump foreign keys when reference column name is not 'id'" do
72
+ @conn.add_column :foos, :baz_id, :integer
73
+
74
+ @conn.execute <<-SQL
75
+ ALTER TABLE FOOS
76
+ ADD CONSTRAINT UK_BAZ UNIQUE (BAZ_ID)
77
+ SQL
78
+
79
+ @conn.add_column :test_posts, :baz_id, :integer
80
+
81
+ @conn.execute <<-SQL
82
+ ALTER TABLE TEST_POSTS
83
+ ADD CONSTRAINT fk_test_post_baz FOREIGN KEY (baz_id) REFERENCES foos(baz_id)
84
+ SQL
85
+
86
+ dump = ActiveRecord::Base.connection.structure_dump_fk_constraints
87
+ dump.split('\n').length.should == 1
88
+ dump.should =~ /ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_BAZ\"? FOREIGN KEY \(\"?BAZ_ID\"?\) REFERENCES \"?FOOS\"?\(\"?BAZ_ID\"?\)/i
89
+ end
90
+
91
+ it "should dump composite foreign keys" do
92
+ @conn.add_column :foos, :fooz_id, :integer
93
+ @conn.add_column :foos, :baz_id, :integer
94
+
95
+ @conn.execute <<-SQL
96
+ ALTER TABLE FOOS
97
+ ADD CONSTRAINT UK_FOOZ_BAZ UNIQUE (BAZ_ID,FOOZ_ID)
98
+ SQL
99
+
100
+ @conn.add_column :test_posts, :fooz_id, :integer
101
+ @conn.add_column :test_posts, :baz_id, :integer
102
+
103
+ @conn.execute <<-SQL
104
+ ALTER TABLE TEST_POSTS
105
+ ADD CONSTRAINT fk_test_post_fooz_baz FOREIGN KEY (baz_id,fooz_id) REFERENCES foos(baz_id,fooz_id)
106
+ SQL
107
+
108
+ dump = ActiveRecord::Base.connection.structure_dump_fk_constraints
109
+ dump.split('\n').length.should == 1
110
+ dump.should =~ /ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_FOOZ_BAZ\"? FOREIGN KEY \(\"?BAZ_ID\"?\,\"?FOOZ_ID\"?\) REFERENCES \"?FOOS\"?\(\"?BAZ_ID\"?\,\"?FOOZ_ID\"?\)/i
111
+ end
112
+
113
+ it "should not error when no foreign keys are present" do
114
+ dump = ActiveRecord::Base.connection.structure_dump_fk_constraints
115
+ dump.split('\n').length.should == 0
116
+ dump.should == ''
117
+ end
118
+
119
+ it "should dump triggers" do
120
+ @conn.execute <<-SQL
121
+ create or replace TRIGGER TEST_POST_TRIGGER
122
+ BEFORE INSERT
123
+ ON TEST_POSTS
124
+ FOR EACH ROW
125
+ BEGIN
126
+ SELECT 'bar' INTO :new.FOO FROM DUAL;
127
+ END;
128
+ SQL
129
+ dump = ActiveRecord::Base.connection.structure_dump_db_stored_code.gsub(/\n|\s+/,' ')
130
+ dump.should =~ /CREATE OR REPLACE TRIGGER TEST_POST_TRIGGER/
131
+ end
132
+
133
+ it "should dump types" do
134
+ @conn.execute <<-SQL
135
+ create or replace TYPE TEST_TYPE AS TABLE OF VARCHAR2(10);
136
+ SQL
137
+ dump = ActiveRecord::Base.connection.structure_dump_db_stored_code.gsub(/\n|\s+/,' ')
138
+ dump.should =~ /CREATE OR REPLACE TYPE TEST_TYPE/
139
+ end
140
+
141
+ it "should dump virtual columns" do
142
+ pending "Not supported in this database version" unless @oracle11g
143
+ @conn.execute <<-SQL
144
+ CREATE TABLE bars (
145
+ id NUMBER(38,0) NOT NULL,
146
+ id_plus NUMBER GENERATED ALWAYS AS(id + 2) VIRTUAL,
147
+ PRIMARY KEY (ID)
148
+ )
149
+ SQL
150
+ dump = ActiveRecord::Base.connection.structure_dump
151
+ dump.should =~ /\"?ID_PLUS\"? NUMBER GENERATED ALWAYS AS \(ID\+2\) VIRTUAL/
152
+ end
153
+
154
+ it "should dump unique keys" do
155
+ @conn.execute <<-SQL
156
+ ALTER TABLE test_posts
157
+ add CONSTRAINT uk_foo_foo_id UNIQUE (foo, foo_id)
158
+ SQL
159
+ dump = ActiveRecord::Base.connection.structure_dump_unique_keys("test_posts")
160
+ dump.should == ["ALTER TABLE TEST_POSTS ADD CONSTRAINT UK_FOO_FOO_ID UNIQUE (FOO,FOO_ID)"]
161
+
162
+ dump = ActiveRecord::Base.connection.structure_dump
163
+ dump.should =~ /CONSTRAINT UK_FOO_FOO_ID UNIQUE \(FOO,FOO_ID\)/
164
+ end
165
+
166
+ it "should dump indexes" do
167
+ ActiveRecord::Base.connection.add_index(:test_posts, :foo, :name => :ix_test_posts_foo)
168
+ ActiveRecord::Base.connection.add_index(:test_posts, :foo_id, :name => :ix_test_posts_foo_id, :unique => true)
169
+
170
+ @conn.execute <<-SQL
171
+ ALTER TABLE test_posts
172
+ add CONSTRAINT uk_foo_foo_id UNIQUE (foo, foo_id)
173
+ SQL
174
+
175
+ dump = ActiveRecord::Base.connection.structure_dump
176
+ dump.should =~ /CREATE UNIQUE INDEX "?IX_TEST_POSTS_FOO_ID"? ON "?TEST_POSTS"? \("?FOO_ID"?\)/i
177
+ dump.should =~ /CREATE INDEX "?IX_TEST_POSTS_FOO\"? ON "?TEST_POSTS"? \("?FOO"?\)/i
178
+ dump.should_not =~ /CREATE UNIQUE INDEX "?UK_TEST_POSTS_/i
179
+ end
180
+ end
181
+ describe "temporary tables" do
182
+ after(:all) do
183
+ @conn.drop_table :test_comments rescue nil
184
+ end
185
+ it "should dump correctly" do
186
+ @conn.create_table :test_comments, :temporary => true, :id => false do |t|
187
+ t.integer :post_id
188
+ end
189
+ dump = ActiveRecord::Base.connection.structure_dump
190
+ dump.should =~ /CREATE GLOBAL TEMPORARY TABLE "?TEST_COMMENTS"?/i
191
+ end
192
+ end
193
+
194
+ describe "database stucture dump extentions" do
195
+ before(:all) do
196
+ @conn.execute <<-SQL
197
+ CREATE TABLE nvarchartable (
198
+ unq_nvarchar NVARCHAR2(255) DEFAULT NULL
199
+ )
200
+ SQL
201
+ end
202
+
203
+ after(:all) do
204
+ @conn.execute "DROP TABLE nvarchartable"
205
+ end
206
+
207
+ it "should return the character size of nvarchar fields" do
208
+ if /.*unq_nvarchar nvarchar2\((\d+)\).*/ =~ @conn.structure_dump
209
+ "#$1".should == "255"
210
+ end
211
+ end
212
+ end
213
+
214
+ describe "temp_table_drop" do
215
+ before(:each) do
216
+ @conn.create_table :temp_tbl, :temporary => true do |t|
217
+ t.string :foo
218
+ end
219
+ @conn.create_table :not_temp_tbl do |t|
220
+ t.string :foo
221
+ end
222
+ end
223
+ it "should dump drop sql for just temp tables" do
224
+ dump = @conn.temp_table_drop
225
+ dump.should =~ /DROP TABLE "TEMP_TBL"/
226
+ dump.should_not =~ /DROP TABLE "?NOT_TEMP_TBL"?/i
227
+ end
228
+ after(:each) do
229
+ @conn.drop_table :temp_tbl
230
+ @conn.drop_table :not_temp_tbl
231
+ end
232
+ end
233
+
234
+ describe "full drop" do
235
+ before(:each) do
236
+ @conn.create_table :full_drop_test do |t|
237
+ t.integer :id
238
+ end
239
+ @conn.create_table :full_drop_test_temp, :temporary => true do |t|
240
+ t.string :foo
241
+ end
242
+ #view
243
+ @conn.execute <<-SQL
244
+ create or replace view full_drop_test_view (foo) as select id as "foo" from full_drop_test
245
+ SQL
246
+ #materialized view
247
+ @conn.execute <<-SQL
248
+ create materialized view full_drop_test_mview (foo) as select id as "foo" from full_drop_test
249
+ SQL
250
+ #package
251
+ @conn.execute <<-SQL
252
+ create or replace package full_drop_test_package as
253
+ function test_func return varchar2;
254
+ end test_package;
255
+ SQL
256
+ @conn.execute <<-SQL
257
+ create or replace package body full_drop_test_package as
258
+ function test_func return varchar2 is
259
+ begin
260
+ return ('foo');
261
+ end test_func;
262
+ end test_package;
263
+ SQL
264
+ #function
265
+ @conn.execute <<-SQL
266
+ create or replace function full_drop_test_function
267
+ return varchar2
268
+ is
269
+ foo varchar2(3);
270
+ begin
271
+ return('foo');
272
+ end;
273
+ SQL
274
+ #procedure
275
+ @conn.execute <<-SQL
276
+ create or replace procedure full_drop_test_procedure
277
+ begin
278
+ delete from full_drop_test where id=1231231231
279
+ exception
280
+ when no_data_found then
281
+ dbms_output.put_line('foo');
282
+ end;
283
+ SQL
284
+ #synonym
285
+ @conn.execute <<-SQL
286
+ create or replace synonym full_drop_test_synonym for full_drop_test
287
+ SQL
288
+ #type
289
+ @conn.execute <<-SQL
290
+ create or replace type full_drop_test_type as table of number
291
+ SQL
292
+ end
293
+ after(:each) do
294
+ @conn.drop_table :full_drop_test
295
+ @conn.drop_table :full_drop_test_temp
296
+ @conn.execute "DROP VIEW FULL_DROP_TEST_VIEW" rescue nil
297
+ @conn.execute "DROP MATERIALIZED VIEW FULL_DROP_TEST_MVIEW" rescue nil
298
+ @conn.execute "DROP SYNONYM FULL_DROP_TEST_SYNONYM" rescue nil
299
+ @conn.execute "DROP PACKAGE FULL_DROP_TEST_PACKAGE" rescue nil
300
+ @conn.execute "DROP FUNCTION FULL_DROP_TEST_FUNCTION" rescue nil
301
+ @conn.execute "DROP PROCEDURE FULL_DROP_TEST_PROCEDURE" rescue nil
302
+ @conn.execute "DROP TYPE FULL_DROP_TEST_TYPE" rescue nil
303
+ end
304
+ it "should contain correct sql" do
305
+ drop = @conn.full_drop
306
+ drop.should =~ /DROP TABLE "FULL_DROP_TEST" CASCADE CONSTRAINTS/
307
+ drop.should =~ /DROP SEQUENCE "FULL_DROP_TEST_SEQ"/
308
+ drop.should =~ /DROP VIEW "FULL_DROP_TEST_VIEW"/
309
+ drop.should_not =~ /DROP TABLE "?FULL_DROP_TEST_MVIEW"?/i
310
+ drop.should =~ /DROP MATERIALIZED VIEW "FULL_DROP_TEST_MVIEW"/
311
+ drop.should =~ /DROP PACKAGE "FULL_DROP_TEST_PACKAGE"/
312
+ drop.should =~ /DROP FUNCTION "FULL_DROP_TEST_FUNCTION"/
313
+ drop.should =~ /DROP PROCEDURE "FULL_DROP_TEST_PROCEDURE"/
314
+ drop.should =~ /DROP SYNONYM "FULL_DROP_TEST_SYNONYM"/
315
+ drop.should =~ /DROP TYPE "FULL_DROP_TEST_TYPE"/
316
+ end
317
+ it "should not drop tables when preserve_tables is true" do
318
+ drop = @conn.full_drop(true)
319
+ drop.should =~ /DROP TABLE "FULL_DROP_TEST_TEMP"/
320
+ drop.should_not =~ /DROP TABLE "?FULL_DROP_TEST"? CASCADE CONSTRAINTS/i
321
+ end
322
+ end
323
+ end
@@ -0,0 +1,185 @@
1
+ require 'rubygems'
2
+ require "bundler"
3
+ Bundler.setup(:default, :development)
4
+
5
+ $:.unshift(File.expand_path('../../lib', __FILE__))
6
+
7
+ require 'rspec'
8
+
9
+ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby'
10
+ puts "==> Running specs with MRI version #{RUBY_VERSION}"
11
+ require 'oci8'
12
+ elsif RUBY_ENGINE == 'jruby'
13
+ puts "==> Running specs with JRuby version #{JRUBY_VERSION}"
14
+ end
15
+
16
+ ENV['RAILS_GEM_VERSION'] ||= '3.2-master'
17
+ NO_COMPOSITE_PRIMARY_KEYS = true if ENV['RAILS_GEM_VERSION'] >= '2.3.5' || ENV['RAILS_GEM_VERSION'] =~ /^2\.3\.1\d$/
18
+
19
+ puts "==> Running specs with Rails version #{ENV['RAILS_GEM_VERSION']}"
20
+
21
+ require 'active_record'
22
+
23
+ if ENV['RAILS_GEM_VERSION'] >= '3.0'
24
+ require 'action_dispatch'
25
+ require 'active_support/core_ext/module/attribute_accessors'
26
+ require 'active_support/core_ext/class/attribute_accessors'
27
+
28
+ if ENV['RAILS_GEM_VERSION'] =~ /^3.0.0.beta/
29
+ require "rails/log_subscriber"
30
+ require 'active_record/railties/log_subscriber'
31
+ else
32
+ require "active_support/log_subscriber"
33
+ require 'active_record/log_subscriber'
34
+ end
35
+
36
+ require 'logger'
37
+ elsif ENV['RAILS_GEM_VERSION'] =~ /^2.3/
38
+ require 'action_pack'
39
+ require 'action_controller/session/abstract_store'
40
+ require 'active_record/session_store'
41
+ elsif ENV['RAILS_GEM_VERSION'] <= '2.3'
42
+ require 'action_pack'
43
+ require 'action_controller/session/active_record_store'
44
+ end
45
+
46
+ require 'active_record/connection_adapters/oracle_enhanced_adapter'
47
+ require 'ruby-plsql'
48
+
49
+ module LoggerSpecHelper
50
+ def set_logger
51
+ @logger = MockLogger.new
52
+ @old_logger = ActiveRecord::Base.logger
53
+
54
+ if ENV['RAILS_GEM_VERSION'] >= '3.0'
55
+ @notifier = ActiveSupport::Notifications::Fanout.new
56
+
57
+ ActiveSupport::LogSubscriber.colorize_logging = false
58
+
59
+ ActiveRecord::Base.logger = @logger
60
+ @old_notifier = ActiveSupport::Notifications.notifier
61
+ ActiveSupport::Notifications.notifier = @notifier
62
+
63
+ ActiveRecord::LogSubscriber.attach_to(:active_record)
64
+ if ENV['RAILS_GEM_VERSION'] >= '3.2'
65
+ ActiveSupport::Notifications.subscribe("sql.active_record", ActiveRecord::ExplainSubscriber.new)
66
+ end
67
+ else # ActiveRecord 2.x
68
+ if ActiveRecord::Base.respond_to?(:connection_pool)
69
+ ActiveRecord::Base.connection_pool.clear_reloadable_connections!
70
+ else
71
+ ActiveRecord::Base.clear_active_connections!
72
+ end
73
+ ActiveRecord::Base.logger = @logger
74
+ ActiveRecord::Base.colorize_logging = false
75
+ # ActiveRecord::Base.logger.level = Logger::DEBUG
76
+ end
77
+
78
+ end
79
+
80
+ class MockLogger
81
+ attr_reader :flush_count
82
+
83
+ def initialize
84
+ @flush_count = 0
85
+ @logged = Hash.new { |h,k| h[k] = [] }
86
+ end
87
+
88
+ # used in AtiveRecord 2.x
89
+ def debug?
90
+ true
91
+ end
92
+
93
+ def method_missing(level, message)
94
+ @logged[level] << message
95
+ end
96
+
97
+ def logged(level)
98
+ @logged[level].compact.map { |l| l.to_s.strip }
99
+ end
100
+
101
+ def output(level)
102
+ logged(level).join("\n")
103
+ end
104
+
105
+ def flush
106
+ @flush_count += 1
107
+ end
108
+
109
+ def clear(level)
110
+ @logged[level] = []
111
+ end
112
+ end
113
+
114
+ def clear_logger
115
+ ActiveRecord::Base.logger = @old_logger
116
+ @logger = nil
117
+
118
+ if ENV['RAILS_GEM_VERSION'] >= '3.0'
119
+ ActiveSupport::Notifications.notifier = @old_notifier
120
+ @notifier = nil
121
+ end
122
+
123
+ end
124
+
125
+ # Wait notifications to be published (for Rails 3.0)
126
+ # should not be currently used with sync queues in tests
127
+ def wait
128
+ @notifier.wait if @notifier
129
+ end
130
+
131
+ end
132
+
133
+ module SchemaSpecHelper
134
+ def schema_define(&block)
135
+ ActiveRecord::Schema.define do
136
+ suppress_messages do
137
+ instance_eval(&block)
138
+ end
139
+ end
140
+ end
141
+ end
142
+
143
+ DATABASE_NAME = ENV['DATABASE_NAME'] || 'orcl'
144
+ DATABASE_HOST = ENV['DATABASE_HOST']
145
+ DATABASE_PORT = ENV['DATABASE_PORT']
146
+ DATABASE_USER = ENV['DATABASE_USER'] || 'oracle_enhanced'
147
+ DATABASE_PASSWORD = ENV['DATABASE_PASSWORD'] || 'oracle_enhanced'
148
+ DATABASE_SYS_PASSWORD = ENV['DATABASE_SYS_PASSWORD'] || 'admin'
149
+
150
+ CONNECTION_PARAMS = {
151
+ :adapter => "oracle_enhanced",
152
+ :database => DATABASE_NAME,
153
+ :host => DATABASE_HOST,
154
+ :port => DATABASE_PORT,
155
+ :username => DATABASE_USER,
156
+ :password => DATABASE_PASSWORD
157
+ }
158
+
159
+ SYS_CONNECTION_PARAMS = {
160
+ :adapter => "oracle_enhanced",
161
+ :database => DATABASE_NAME,
162
+ :host => DATABASE_HOST,
163
+ :port => DATABASE_PORT,
164
+ :username => "sys",
165
+ :password => DATABASE_SYS_PASSWORD,
166
+ :privilege => "SYSDBA"
167
+ }
168
+
169
+ SYSTEM_CONNECTION_PARAMS = {
170
+ :adapter => "oracle_enhanced",
171
+ :database => DATABASE_NAME,
172
+ :host => DATABASE_HOST,
173
+ :port => DATABASE_PORT,
174
+ :username => "system",
175
+ :password => DATABASE_SYS_PASSWORD
176
+ }
177
+
178
+ DATABASE_NON_DEFAULT_TABLESPACE = ENV['DATABASE_NON_DEFAULT_TABLESPACE'] || "SYSTEM"
179
+
180
+ # Set default $KCODE to UTF8
181
+ $KCODE = "UTF8"
182
+
183
+ # set default time zone in TZ environment variable
184
+ # which will be used to set session time zone
185
+ ENV['TZ'] ||= 'Europe/Riga'