activerecord-oracle_enhanced-adapter 1.1.9 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (22) hide show
  1. data/History.txt +11 -0
  2. data/README.txt +6 -2
  3. data/lib/active_record/connection_adapters/emulation/oracle_adapter.rb +5 -0
  4. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +771 -907
  5. data/lib/active_record/connection_adapters/oracle_enhanced_connection.rb +71 -0
  6. data/lib/active_record/connection_adapters/oracle_enhanced_core_ext.rb +64 -0
  7. data/lib/active_record/connection_adapters/oracle_enhanced_dirty.rb +2 -2
  8. data/lib/active_record/connection_adapters/oracle_enhanced_jdbc_connection.rb +352 -0
  9. data/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb +346 -0
  10. data/lib/active_record/connection_adapters/oracle_enhanced_procedures.rb +2 -1
  11. data/lib/active_record/connection_adapters/oracle_enhanced_reserved_words.rb +126 -0
  12. data/lib/active_record/connection_adapters/oracle_enhanced_version.rb +2 -2
  13. data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +200 -97
  14. data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +170 -0
  15. data/spec/active_record/connection_adapters/oracle_enhanced_core_ext_spec.rb +40 -0
  16. data/spec/active_record/connection_adapters/oracle_enhanced_cpk_spec.rb +11 -6
  17. data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +148 -53
  18. data/spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb +13 -5
  19. data/spec/active_record/connection_adapters/oracle_enhanced_emulate_oracle_adapter_spec.rb +27 -0
  20. data/spec/active_record/connection_adapters/oracle_enhanced_procedures_spec.rb +10 -6
  21. data/spec/spec_helper.rb +51 -6
  22. metadata +11 -2
@@ -2,8 +2,8 @@ module ActiveRecord #:nodoc:
2
2
  module ConnectionAdapters #:nodoc:
3
3
  module OracleEnhancedVersion #:nodoc:
4
4
  MAJOR = 1
5
- MINOR = 1
6
- TINY = 9
5
+ MINOR = 2
6
+ TINY = 0
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
9
9
  end
@@ -1,65 +1,79 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  describe "OracleEnhancedAdapter establish connection" do
4
-
4
+
5
5
  it "should connect to database" do
6
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
7
- :database => "xe",
8
- :username => "hr",
9
- :password => "hr")
6
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
10
7
  ActiveRecord::Base.connection.should_not be_nil
11
8
  ActiveRecord::Base.connection.class.should == ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter
12
9
  end
13
10
 
14
11
  it "should connect to database as SYSDBA" do
15
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
16
- :database => "xe",
17
- :username => "sys",
18
- :password => "manager",
19
- :privilege => :SYSDBA)
12
+ ActiveRecord::Base.establish_connection(SYS_CONNECTION_PARAMS)
20
13
  ActiveRecord::Base.connection.should_not be_nil
21
14
  ActiveRecord::Base.connection.class.should == ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter
22
15
  end
16
+
17
+ it "should be active after connection to database" do
18
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
19
+ ActiveRecord::Base.connection.should be_active
20
+ end
21
+
22
+ it "should not be active after disconnection to database" do
23
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
24
+ ActiveRecord::Base.connection.disconnect!
25
+ ActiveRecord::Base.connection.should_not be_active
26
+ end
27
+
28
+ it "should be active after reconnection to database" do
29
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
30
+ ActiveRecord::Base.connection.reconnect!
31
+ ActiveRecord::Base.connection.should be_active
32
+ end
23
33
 
24
34
  end
25
35
 
26
36
  describe "OracleEnhancedAdapter schema dump" do
27
-
37
+
28
38
  before(:all) do
29
- @old_conn = ActiveRecord::Base.oracle_connection(
30
- :database => "xe",
31
- :username => "hr",
32
- :password => "hr")
33
- @old_conn.class.should == ActiveRecord::ConnectionAdapters::OracleAdapter
34
- @new_conn = ActiveRecord::Base.oracle_enhanced_connection(
35
- :database => "xe",
36
- :username => "hr",
37
- :password => "hr")
39
+ if !defined?(RUBY_ENGINE)
40
+ @old_conn = ActiveRecord::Base.oracle_connection(CONNECTION_PARAMS)
41
+ @old_conn.class.should == ActiveRecord::ConnectionAdapters::OracleAdapter
42
+ elsif RUBY_ENGINE == 'jruby'
43
+ @old_conn = ActiveRecord::Base.jdbc_connection(JDBC_CONNECTION_PARAMS)
44
+ @old_conn.class.should == ActiveRecord::ConnectionAdapters::JdbcAdapter
45
+ end
46
+
47
+ @new_conn = ActiveRecord::Base.oracle_enhanced_connection(CONNECTION_PARAMS)
38
48
  @new_conn.class.should == ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter
39
49
  end
40
50
 
41
- it "should return the same tables list as original oracle adapter" do
42
- @new_conn.tables.should == @old_conn.tables
43
- end
51
+ unless defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby" && RUBY_VERSION =~ /^1\.9/
52
+ it "should return the same tables list as original oracle adapter" do
53
+ @new_conn.tables.sort.should == @old_conn.tables.sort
54
+ end
44
55
 
45
- it "should return the same index list as original oracle adapter" do
46
- @new_conn.indexes('employees').should == @old_conn.indexes('employees')
47
- end
56
+ it "should return the same index list as original oracle adapter" do
57
+ @new_conn.indexes('employees').sort_by(&:name).should == @old_conn.indexes('employees').sort_by(&:name)
58
+ end
48
59
 
49
- it "should return the same pk_and_sequence_for as original oracle adapter" do
50
- @new_conn.tables.each do |t|
51
- @new_conn.pk_and_sequence_for(t).should == @old_conn.pk_and_sequence_for(t)
52
- end
53
- end
60
+ it "should return the same pk_and_sequence_for as original oracle adapter" do
61
+ if @old_conn.respond_to?(:pk_and_sequence_for)
62
+ @new_conn.tables.each do |t|
63
+ @new_conn.pk_and_sequence_for(t).should == @old_conn.pk_and_sequence_for(t)
64
+ end
65
+ end
66
+ end
54
67
 
55
- it "should return the same structure dump as original oracle adapter" do
56
- @new_conn.structure_dump.should == @old_conn.structure_dump
57
- end
68
+ it "should return the same structure dump as original oracle adapter" do
69
+ @new_conn.structure_dump.should == @old_conn.structure_dump
70
+ end
58
71
 
59
- it "should return the same structure drop as original oracle adapter" do
60
- @new_conn.structure_drop.should == @old_conn.structure_drop
72
+ it "should return the same structure drop as original oracle adapter" do
73
+ @new_conn.structure_drop.should == @old_conn.structure_drop
74
+ end
61
75
  end
62
-
76
+
63
77
  it "should return the character size of nvarchar fields" do
64
78
  @new_conn.execute <<-SQL
65
79
  CREATE TABLE nvarchartable (
@@ -75,10 +89,7 @@ end
75
89
 
76
90
  describe "OracleEnhancedAdapter database stucture dump extentions" do
77
91
  before(:all) do
78
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
79
- :database => "xe",
80
- :username => "hr",
81
- :password => "hr")
92
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
82
93
  @conn = ActiveRecord::Base.connection
83
94
  @conn.execute <<-SQL
84
95
  CREATE TABLE nvarchartable (
@@ -86,11 +97,11 @@ describe "OracleEnhancedAdapter database stucture dump extentions" do
86
97
  )
87
98
  SQL
88
99
  end
89
-
100
+
90
101
  after(:all) do
91
102
  @conn.execute "DROP TABLE nvarchartable"
92
103
  end
93
-
104
+
94
105
  it "should return the character size of nvarchar fields" do
95
106
  if /.*unq_nvarchar nvarchar2\((\d+)\).*/ =~ @conn.structure_dump
96
107
  "#$1".should == "255"
@@ -100,10 +111,7 @@ end
100
111
 
101
112
  describe "OracleEnhancedAdapter database session store" do
102
113
  before(:all) do
103
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
104
- :database => "xe",
105
- :username => "hr",
106
- :password => "hr")
114
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
107
115
  @conn = ActiveRecord::Base.connection
108
116
  @conn.execute <<-SQL
109
117
  CREATE TABLE sessions (
@@ -119,6 +127,11 @@ describe "OracleEnhancedAdapter database session store" do
119
127
  CREATE SEQUENCE sessions_seq MINVALUE 1 MAXVALUE 999999999999999999999999999
120
128
  INCREMENT BY 1 START WITH 10040 CACHE 20 NOORDER NOCYCLE
121
129
  SQL
130
+ if ENV['RAILS_GEM_VERSION'] >= '2.3'
131
+ @session_class = ActiveRecord::SessionStore::Session
132
+ else
133
+ @session_class = CGI::Session::ActiveRecordStore::Session
134
+ end
122
135
  end
123
136
 
124
137
  after(:all) do
@@ -131,29 +144,29 @@ describe "OracleEnhancedAdapter database session store" do
131
144
  end
132
145
 
133
146
  it "should save session data" do
134
- @session = CGI::Session::ActiveRecordStore::Session.new :session_id => "111111", :data => "something" #, :updated_at => Time.now
147
+ @session = @session_class.new :session_id => "111111", :data => "something" #, :updated_at => Time.now
135
148
  @session.save!
136
- @session = CGI::Session::ActiveRecordStore::Session.find_by_session_id("111111")
149
+ @session = @session_class.find_by_session_id("111111")
137
150
  @session.data.should == "something"
138
151
  end
139
152
 
140
153
  it "should change session data when partial updates enabled" do
141
- return pending("Not in this ActiveRecord version") unless CGI::Session::ActiveRecordStore::Session.respond_to?(:partial_updates=)
142
- CGI::Session::ActiveRecordStore::Session.partial_updates = true
143
- @session = CGI::Session::ActiveRecordStore::Session.new :session_id => "222222", :data => "something" #, :updated_at => Time.now
154
+ return pending("Not in this ActiveRecord version") unless @session_class.respond_to?(:partial_updates=)
155
+ @session_class.partial_updates = true
156
+ @session = @session_class.new :session_id => "222222", :data => "something" #, :updated_at => Time.now
144
157
  @session.save!
145
- @session = CGI::Session::ActiveRecordStore::Session.find_by_session_id("222222")
158
+ @session = @session_class.find_by_session_id("222222")
146
159
  @session.data = "other thing"
147
160
  @session.save!
148
161
  # second save should call again blob writing callback
149
162
  @session.save!
150
- @session = CGI::Session::ActiveRecordStore::Session.find_by_session_id("222222")
163
+ @session = @session_class.find_by_session_id("222222")
151
164
  @session.data.should == "other thing"
152
165
  end
153
166
 
154
167
  it "should have one enhanced_write_lobs callback" do
155
- return pending("Not in this ActiveRecord version") unless CGI::Session::ActiveRecordStore::Session.respond_to?(:after_save_callback_chain)
156
- CGI::Session::ActiveRecordStore::Session.after_save_callback_chain.select{|cb| cb.method == :enhanced_write_lobs}.should have(1).record
168
+ return pending("Not in this ActiveRecord version") unless @session_class.respond_to?(:after_save_callback_chain)
169
+ @session_class.after_save_callback_chain.select{|cb| cb.method == :enhanced_write_lobs}.should have(1).record
157
170
  end
158
171
 
159
172
  it "should not set sessions table session_id column type as integer if emulate_integers_by_column_name is true" do
@@ -167,10 +180,7 @@ end
167
180
 
168
181
  describe "OracleEnhancedAdapter ignore specified table columns" do
169
182
  before(:all) do
170
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
171
- :database => "xe",
172
- :username => "hr",
173
- :password => "hr")
183
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
174
184
  @conn = ActiveRecord::Base.connection
175
185
  @conn.execute <<-SQL
176
186
  CREATE TABLE test_employees (
@@ -193,7 +203,7 @@ describe "OracleEnhancedAdapter ignore specified table columns" do
193
203
  INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE
194
204
  SQL
195
205
  end
196
-
206
+
197
207
  after(:all) do
198
208
  @conn.execute "DROP TABLE test_employees"
199
209
  @conn.execute "DROP SEQUENCE test_employees_seq"
@@ -204,14 +214,14 @@ describe "OracleEnhancedAdapter ignore specified table columns" do
204
214
  end
205
215
 
206
216
  it "should ignore specified table columns" do
207
- class TestEmployee < ActiveRecord::Base
217
+ class ::TestEmployee < ActiveRecord::Base
208
218
  ignore_table_columns :phone_number, :hire_date
209
219
  end
210
220
  TestEmployee.connection.columns('test_employees').select{|c| ['phone_number','hire_date'].include?(c.name) }.should be_empty
211
221
  end
212
222
 
213
223
  it "should ignore specified table columns specified in several lines" do
214
- class TestEmployee < ActiveRecord::Base
224
+ class ::TestEmployee < ActiveRecord::Base
215
225
  ignore_table_columns :phone_number
216
226
  ignore_table_columns :hire_date
217
227
  end
@@ -219,7 +229,7 @@ describe "OracleEnhancedAdapter ignore specified table columns" do
219
229
  end
220
230
 
221
231
  it "should not ignore unspecified table columns" do
222
- class TestEmployee < ActiveRecord::Base
232
+ class ::TestEmployee < ActiveRecord::Base
223
233
  ignore_table_columns :phone_number, :hire_date
224
234
  end
225
235
  TestEmployee.connection.columns('test_employees').select{|c| c.name == 'email' }.should_not be_empty
@@ -231,10 +241,7 @@ end
231
241
  describe "OracleEnhancedAdapter table and sequence creation with non-default primary key" do
232
242
 
233
243
  before(:all) do
234
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
235
- :database => "xe",
236
- :username => "hr",
237
- :password => "hr")
244
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
238
245
  ActiveRecord::Schema.define do
239
246
  suppress_messages do
240
247
  create_table :keyboards, :force => true, :id => false do |t|
@@ -246,13 +253,13 @@ describe "OracleEnhancedAdapter table and sequence creation with non-default pri
246
253
  end
247
254
  end
248
255
  end
249
- class Keyboard < ActiveRecord::Base
256
+ class ::Keyboard < ActiveRecord::Base
250
257
  set_primary_key :key_number
251
258
  end
252
- class IdKeyboard < ActiveRecord::Base
259
+ class ::IdKeyboard < ActiveRecord::Base
253
260
  end
254
261
  end
255
-
262
+
256
263
  after(:all) do
257
264
  ActiveRecord::Schema.define do
258
265
  suppress_messages do
@@ -263,7 +270,7 @@ describe "OracleEnhancedAdapter table and sequence creation with non-default pri
263
270
  Object.send(:remove_const, "Keyboard")
264
271
  Object.send(:remove_const, "IdKeyboard")
265
272
  end
266
-
273
+
267
274
  it "should create sequence for non-default primary key" do
268
275
  ActiveRecord::Base.connection.next_sequence_value(Keyboard.sequence_name).should_not be_nil
269
276
  end
@@ -276,12 +283,9 @@ end
276
283
  describe "OracleEnhancedAdapter without composite_primary_keys" do
277
284
 
278
285
  before(:all) do
279
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
280
- :database => "xe",
281
- :username => "hr",
282
- :password => "hr")
286
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
283
287
  Object.send(:remove_const, 'CompositePrimaryKeys') if defined?(CompositePrimaryKeys)
284
- class Employee < ActiveRecord::Base
288
+ class ::Employee < ActiveRecord::Base
285
289
  set_primary_key :employee_id
286
290
  end
287
291
  end
@@ -299,10 +303,7 @@ end
299
303
  describe "OracleEnhancedAdapter sequence creation parameters" do
300
304
 
301
305
  before(:all) do
302
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
303
- :database => "xe",
304
- :username => "hr",
305
- :password => "hr")
306
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
306
307
  end
307
308
 
308
309
  def create_test_employees_table(sequence_start_value = nil)
@@ -315,7 +316,7 @@ describe "OracleEnhancedAdapter sequence creation parameters" do
315
316
  end
316
317
  end
317
318
  end
318
-
319
+
319
320
  def save_default_sequence_start_value
320
321
  @saved_sequence_start_value = ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value
321
322
  end
@@ -341,7 +342,7 @@ describe "OracleEnhancedAdapter sequence creation parameters" do
341
342
  ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value.should == 10000
342
343
 
343
344
  create_test_employees_table
344
- class TestEmployee < ActiveRecord::Base; end
345
+ class ::TestEmployee < ActiveRecord::Base; end
345
346
 
346
347
  employee = TestEmployee.create!
347
348
  employee.id.should == 10000
@@ -351,7 +352,7 @@ describe "OracleEnhancedAdapter sequence creation parameters" do
351
352
  ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value = 1
352
353
 
353
354
  create_test_employees_table
354
- class TestEmployee < ActiveRecord::Base; end
355
+ class ::TestEmployee < ActiveRecord::Base; end
355
356
 
356
357
  employee = TestEmployee.create!
357
358
  employee.id.should == 1
@@ -359,7 +360,7 @@ describe "OracleEnhancedAdapter sequence creation parameters" do
359
360
 
360
361
  it "should use sequence start value from table definition" do
361
362
  create_test_employees_table(10)
362
- class TestEmployee < ActiveRecord::Base; end
363
+ class ::TestEmployee < ActiveRecord::Base; end
363
364
 
364
365
  employee = TestEmployee.create!
365
366
  employee.id.should == 10
@@ -367,7 +368,7 @@ describe "OracleEnhancedAdapter sequence creation parameters" do
367
368
 
368
369
  it "should use sequence start value and other options from table definition" do
369
370
  create_test_employees_table("100 NOCACHE INCREMENT BY 10")
370
- class TestEmployee < ActiveRecord::Base; end
371
+ class ::TestEmployee < ActiveRecord::Base; end
371
372
 
372
373
  employee = TestEmployee.create!
373
374
  employee.id.should == 100
@@ -380,10 +381,7 @@ end
380
381
  describe "OracleEnhancedAdapter table and column comments" do
381
382
 
382
383
  before(:all) do
383
- ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced",
384
- :database => "xe",
385
- :username => "hr",
386
- :password => "hr")
384
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
387
385
  @conn = ActiveRecord::Base.connection
388
386
  end
389
387
 
@@ -411,8 +409,8 @@ describe "OracleEnhancedAdapter table and column comments" do
411
409
  it "should create table with table comment" do
412
410
  table_comment = "Test Employees"
413
411
  create_test_employees_table(table_comment)
414
- class TestEmployee < ActiveRecord::Base; end
415
-
412
+ class ::TestEmployee < ActiveRecord::Base; end
413
+
416
414
  @conn.table_comment("test_employees").should == table_comment
417
415
  TestEmployee.table_comment.should == table_comment
418
416
  end
@@ -420,8 +418,8 @@ describe "OracleEnhancedAdapter table and column comments" do
420
418
  it "should create table with columns comment" do
421
419
  column_comments = {:first_name => "Given Name", :last_name => "Surname"}
422
420
  create_test_employees_table(nil, column_comments)
423
- class TestEmployee < ActiveRecord::Base; end
424
-
421
+ class ::TestEmployee < ActiveRecord::Base; end
422
+
425
423
  [:first_name, :last_name].each do |attr|
426
424
  @conn.column_comment("test_employees", attr.to_s).should == column_comments[attr]
427
425
  end
@@ -435,8 +433,8 @@ describe "OracleEnhancedAdapter table and column comments" do
435
433
  table_comment = "Test Employees"
436
434
  column_comments = {:first_name => "Given Name", :last_name => "Surname"}
437
435
  create_test_employees_table(table_comment, column_comments)
438
- class TestEmployee < ActiveRecord::Base; end
439
-
436
+ class ::TestEmployee < ActiveRecord::Base; end
437
+
440
438
  @conn.table_comment(TestEmployee.table_name).should == table_comment
441
439
  TestEmployee.table_comment.should == table_comment
442
440
  [:first_name, :last_name].each do |attr|
@@ -447,4 +445,109 @@ describe "OracleEnhancedAdapter table and column comments" do
447
445
  end
448
446
  end
449
447
 
450
- end
448
+ end
449
+
450
+ describe "OracleEnhancedAdapter column quoting" do
451
+
452
+ before(:all) do
453
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
454
+ @conn = ActiveRecord::Base.connection
455
+ end
456
+
457
+ def create_test_reserved_words_table
458
+ ActiveRecord::Schema.define do
459
+ suppress_messages do
460
+ create_table :test_reserved_words do |t|
461
+ t.string :varchar2
462
+ t.integer :integer
463
+ end
464
+ end
465
+ end
466
+ end
467
+
468
+ after(:each) do
469
+ ActiveRecord::Schema.define do
470
+ suppress_messages do
471
+ drop_table :test_reserved_words
472
+ end
473
+ end
474
+ Object.send(:remove_const, "TestReservedWord")
475
+ ActiveRecord::Base.table_name_prefix = nil
476
+ end
477
+
478
+ it "should allow creation of a table with oracle reserved words as column names" do
479
+ create_test_reserved_words_table
480
+ class ::TestReservedWord < ActiveRecord::Base; end
481
+
482
+ [:varchar2, :integer].each do |attr|
483
+ TestReservedWord.columns_hash[attr.to_s].name.should == attr.to_s
484
+ end
485
+ end
486
+
487
+ end
488
+
489
+ describe "OracleEnhancedAdapter valid table names" do
490
+ before(:all) do
491
+ @adapter = ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter
492
+ end
493
+ it "should be valid with letters and digits" do
494
+ @adapter.valid_table_name?("abc_123").should be_true
495
+ end
496
+
497
+ it "should be valid with schema name" do
498
+ @adapter.valid_table_name?("abc_123.def_456").should be_true
499
+ end
500
+
501
+ it "should be valid with $ in name" do
502
+ @adapter.valid_table_name?("sys.v$session").should be_true
503
+ end
504
+
505
+ it "should not be valid with two dots in name" do
506
+ @adapter.valid_table_name?("abc_123.def_456.ghi_789").should be_false
507
+ end
508
+
509
+ it "should not be valid with invalid characters" do
510
+ @adapter.valid_table_name?("warehouse-things").should be_false
511
+ end
512
+
513
+ end
514
+
515
+ describe "OracleEnhancedAdapter table quoting" do
516
+
517
+ before(:all) do
518
+ ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
519
+ @conn = ActiveRecord::Base.connection
520
+ end
521
+
522
+ def create_warehouse_things_table
523
+ ActiveRecord::Schema.define do
524
+ suppress_messages do
525
+ create_table "warehouse-things" do |t|
526
+ t.string :name
527
+ t.integer :foo
528
+ end
529
+ end
530
+ end
531
+ end
532
+
533
+ after(:each) do
534
+ ActiveRecord::Schema.define do
535
+ suppress_messages do
536
+ drop_table "warehouse-things"
537
+ end
538
+ end
539
+ Object.send(:remove_const, "WarehouseThing")
540
+ ActiveRecord::Base.table_name_prefix = nil
541
+ end
542
+
543
+ it "should allow creation of a table with non alphanumeric characters" do
544
+ create_warehouse_things_table
545
+ class ::WarehouseThing < ActiveRecord::Base
546
+ set_table_name "warehouse-things"
547
+ end
548
+
549
+ wh = WarehouseThing.create!(:name => "Foo", :foo => 2)
550
+ wh.id.should_not be_nil
551
+ end
552
+
553
+ end