activerecord-oracle_enhanced-adapter 5.2.8 → 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +390 -21
  3. data/README.md +35 -8
  4. data/VERSION +1 -1
  5. data/lib/active_record/connection_adapters/emulation/oracle_adapter.rb +1 -1
  6. data/lib/active_record/connection_adapters/oracle_enhanced/column.rb +3 -3
  7. data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +42 -37
  8. data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +59 -60
  9. data/lib/active_record/connection_adapters/oracle_enhanced/database_limits.rb +5 -10
  10. data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +86 -81
  11. data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +9 -10
  12. data/lib/active_record/connection_adapters/oracle_enhanced/dbms_output.rb +1 -2
  13. data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +37 -16
  14. data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_quoting.rb +1 -1
  15. data/lib/active_record/connection_adapters/oracle_enhanced/lob.rb +5 -6
  16. data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +58 -49
  17. data/lib/active_record/connection_adapters/oracle_enhanced/oci_quoting.rb +1 -1
  18. data/lib/active_record/connection_adapters/oracle_enhanced/procedures.rb +6 -7
  19. data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +75 -51
  20. data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +13 -14
  21. data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +14 -4
  22. data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +27 -24
  23. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +156 -155
  24. data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +103 -90
  25. data/lib/active_record/connection_adapters/oracle_enhanced/type_metadata.rb +3 -2
  26. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +261 -161
  27. data/lib/active_record/type/oracle_enhanced/boolean.rb +0 -1
  28. data/lib/active_record/type/oracle_enhanced/character_string.rb +36 -0
  29. data/lib/active_record/type/oracle_enhanced/integer.rb +0 -1
  30. data/lib/arel/visitors/oracle.rb +221 -0
  31. data/lib/arel/visitors/oracle12.rb +128 -0
  32. data/spec/active_record/connection_adapters/emulation/oracle_adapter_spec.rb +0 -2
  33. data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +78 -26
  34. data/spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb +7 -15
  35. data/spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb +5 -0
  36. data/spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb +17 -17
  37. data/spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb +7 -10
  38. data/spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb +0 -15
  39. data/spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb +33 -36
  40. data/spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb +77 -258
  41. data/spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb +38 -39
  42. data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +273 -85
  43. data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +7 -8
  44. data/spec/active_record/oracle_enhanced/type/boolean_spec.rb +2 -4
  45. data/spec/active_record/oracle_enhanced/type/character_string_spec.rb +43 -0
  46. data/spec/active_record/oracle_enhanced/type/custom_spec.rb +90 -0
  47. data/spec/active_record/oracle_enhanced/type/decimal_spec.rb +56 -0
  48. data/spec/active_record/oracle_enhanced/type/dirty_spec.rb +1 -1
  49. data/spec/active_record/oracle_enhanced/type/integer_spec.rb +2 -2
  50. data/spec/active_record/oracle_enhanced/type/json_spec.rb +0 -1
  51. data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +6 -5
  52. data/spec/active_record/oracle_enhanced/type/timestamp_spec.rb +2 -4
  53. data/spec/spec_config.yaml.template +2 -2
  54. data/spec/spec_helper.rb +13 -2
  55. metadata +52 -30
  56. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +0 -28
@@ -131,10 +131,10 @@ describe "OracleEnhancedAdapter context index" do
131
131
  @post = Post.create(title: "abc", body: "def")
132
132
  expect(Post.contains(:all_text, "abc").to_a).to eq([@post])
133
133
  expect(Post.contains(:all_text, "def").to_a).to eq([@post])
134
- @post.update_attributes!(title: "ghi")
134
+ @post.update!(title: "ghi")
135
135
  # index will not be updated as all_text column is not changed
136
136
  expect(Post.contains(:all_text, "ghi").to_a).to be_empty
137
- @post.update_attributes!(all_text: "1")
137
+ @post.update!(all_text: "1")
138
138
  # index will be updated when all_text column is changed
139
139
  expect(Post.contains(:all_text, "ghi").to_a).to eq([@post])
140
140
  @conn.remove_context_index :posts, index_column: :all_text
@@ -147,7 +147,7 @@ describe "OracleEnhancedAdapter context index" do
147
147
  @post = Post.create(title: "abc", body: "def")
148
148
  expect(Post.contains(:all_text, "abc").to_a).to eq([@post])
149
149
  expect(Post.contains(:all_text, "def").to_a).to eq([@post])
150
- @post.update_attributes!(title: "ghi")
150
+ @post.update!(title: "ghi")
151
151
  # index should be updated as created_at column is changed
152
152
  expect(Post.contains(:all_text, "ghi").to_a).to eq([@post])
153
153
  @conn.remove_context_index :posts, index_column: :all_text
@@ -168,7 +168,7 @@ describe "OracleEnhancedAdapter context index" do
168
168
  Post.transaction do
169
169
  @post = Post.create(title: "abc")
170
170
  expect(Post.contains(:title, "abc").to_a).to eq([@post])
171
- @post.update_attributes!(title: "ghi")
171
+ @post.update!(title: "ghi")
172
172
  expect(Post.contains(:title, "ghi").to_a).to eq([@post])
173
173
  end
174
174
  @conn.remove_context_index :posts, :title
@@ -265,7 +265,6 @@ describe "OracleEnhancedAdapter context index" do
265
265
  expect(Post.contains(:all_text, "ddd within comment_body").to_a).to eq([@post])
266
266
  expect(Post.contains(:all_text, "ddd within comment_author").to_a).to be_empty
267
267
  end
268
-
269
268
  end
270
269
 
271
270
  describe "with specified tablespace" do
@@ -311,13 +310,10 @@ describe "OracleEnhancedAdapter context index" do
311
310
  expect(Post.contains(:title, "aaa AND bbb").to_a).to eq([@post])
312
311
  @conn.remove_context_index :posts, name: "index_posts_text"
313
312
  end
314
-
315
313
  end
316
314
 
317
315
  describe "schema dump" do
318
-
319
316
  describe "without table prefixe and suffix" do
320
-
321
317
  before(:all) do
322
318
  @conn = ActiveRecord::Base.connection
323
319
  create_tables
@@ -330,7 +326,7 @@ describe "OracleEnhancedAdapter context index" do
330
326
  it "should dump definition of single column index" do
331
327
  @conn.add_context_index :posts, :title
332
328
  output = dump_table_schema "posts"
333
- expect(output).to match(/add_context_index "posts", \["title"\], name: \"index_posts_on_title\"$/)
329
+ expect(output).to match(/add_context_index "posts", \["title"\], name: "index_posts_on_title"$/)
334
330
  @conn.remove_context_index :posts, :title
335
331
  end
336
332
 
@@ -379,10 +375,9 @@ describe "OracleEnhancedAdapter context index" do
379
375
  sub_query = "SELECT comments.author AS comment_author, comments.body AS comment_body\nFROM comments\nWHERE comments.post_id = :id"
380
376
  @conn.add_context_index :posts, [:title, :body, sub_query], options
381
377
  output = dump_table_schema "posts"
382
- expect(output).to match(/add_context_index "posts", \[:title, :body, "#{sub_query.gsub(/\n/, ' ')}"\], #{options.inspect[1..-2]}$/)
378
+ expect(output).to match(/add_context_index "posts", \[:title, :body, "#{sub_query.tr("\n", ' ')}"\], #{options.inspect[1..-2]}$/)
383
379
  @conn.remove_context_index :posts, name: "post_and_comments_index"
384
380
  end
385
-
386
381
  end
387
382
 
388
383
  describe "with table prefix and suffix" do
@@ -428,12 +423,9 @@ describe "OracleEnhancedAdapter context index" do
428
423
  end
429
424
  output = dump_table_schema "posts"
430
425
  expect(output).to match(/add_context_index "posts", \[:title, :body, "SELECT comments.author AS comment_author, comments.body AS comment_body FROM comments WHERE comments.post_id = :id"\], #{
431
- options.inspect[1..-2].gsub(/[{}]/) { |s| '\\'.dup << s }}$/)
426
+ options.inspect[1..-2].gsub(/[{}]/) { |s| +'\\' << s }}$/)
432
427
  schema_define { remove_context_index :posts, name: "xxx_post_and_comments_i" }
433
428
  end
434
-
435
429
  end
436
-
437
430
  end
438
-
439
431
  end
@@ -20,6 +20,11 @@ describe "Oracle Enhanced adapter database tasks" do
20
20
  query = "SELECT COUNT(*) FROM dba_users WHERE UPPER(username) = '#{new_user_config[:username].upcase}'"
21
21
  expect(ActiveRecord::Base.connection.select_value(query)).to eq(1)
22
22
  end
23
+ it "grants permissions defined by OracleEnhancedAdapter.persmissions" do
24
+ query = "SELECT COUNT(*) FROM DBA_SYS_PRIVS WHERE GRANTEE = '#{new_user_config[:username].upcase}'"
25
+ permissions_count = ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.permissions.size
26
+ expect(ActiveRecord::Base.connection.select_value(query)).to eq(permissions_count)
27
+ end
23
28
  after do
24
29
  ActiveRecord::Base.connection.execute("DROP USER #{new_user_config[:username]}")
25
30
  end
@@ -5,23 +5,23 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
5
5
 
6
6
  before(:all) do
7
7
  ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
8
- ActiveRecord::Base.connection.execute <<-SQL
9
- CREATE or REPLACE
10
- FUNCTION MORE_THAN_FIVE_CHARACTERS_LONG (some_text VARCHAR2) RETURN INTEGER
11
- AS
12
- longer_than_five INTEGER;
13
- BEGIN
14
- dbms_output.put_line('before the if -' || some_text || '-');
15
- IF length(some_text) > 5 THEN
16
- dbms_output.put_line('it is longer than 5');
17
- longer_than_five := 1;
18
- ELSE
19
- dbms_output.put_line('it is 5 or shorter');
20
- longer_than_five := 0;
21
- END IF;
22
- dbms_output.put_line('about to return: ' || longer_than_five);
23
- RETURN longer_than_five;
24
- END;
8
+ ActiveRecord::Base.connection.execute <<~SQL
9
+ CREATE or REPLACE
10
+ FUNCTION MORE_THAN_FIVE_CHARACTERS_LONG (some_text VARCHAR2) RETURN INTEGER
11
+ AS
12
+ longer_than_five INTEGER;
13
+ BEGIN
14
+ dbms_output.put_line('before the if -' || some_text || '-');
15
+ IF length(some_text) > 5 THEN
16
+ dbms_output.put_line('it is longer than 5');
17
+ longer_than_five := 1;
18
+ ELSE
19
+ dbms_output.put_line('it is 5 or shorter');
20
+ longer_than_five := 0;
21
+ END IF;
22
+ dbms_output.put_line('about to return: ' || longer_than_five);
23
+ RETURN longer_than_five;
24
+ END;
25
25
  SQL
26
26
  end
27
27
 
@@ -23,7 +23,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
23
23
  t.timestamps null: true
24
24
  end
25
25
  end
26
- @conn.execute <<-SQL
26
+ @conn.execute <<~SQL
27
27
  CREATE OR REPLACE PACKAGE test_employees_pkg IS
28
28
  PROCEDURE create_employee(
29
29
  p_first_name VARCHAR2,
@@ -43,7 +43,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
43
43
  p_employee_id NUMBER);
44
44
  END;
45
45
  SQL
46
- @conn.execute <<-SQL
46
+ @conn.execute <<~SQL
47
47
  CREATE OR REPLACE PACKAGE BODY test_employees_pkg IS
48
48
  PROCEDURE create_employee(
49
49
  p_first_name VARCHAR2,
@@ -87,7 +87,6 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
87
87
  END delete_employee;
88
88
  END;
89
89
  SQL
90
-
91
90
  end
92
91
 
93
92
  after(:all) do
@@ -134,7 +133,6 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
134
133
  end
135
134
 
136
135
  private
137
-
138
136
  def raise_make_transaction_rollback
139
137
  raise "Make the transaction rollback"
140
138
  end
@@ -212,8 +210,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
212
210
  expect(@employee.first_name).to eq("First")
213
211
  end
214
212
 
215
- it "should not update record if nothing is changed and partial writes are enabled" do
216
- TestEmployee.partial_writes = true
213
+ it "should not update record if nothing is changed and partial updates are enabled" do
214
+ TestEmployee.partial_updates = true
217
215
  @employee = TestEmployee.create(
218
216
  first_name: "First",
219
217
  last_name: "Last",
@@ -225,8 +223,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
225
223
  expect(@employee.version).to eq(1)
226
224
  end
227
225
 
228
- it "should update record if nothing is changed and partial writes are disabled" do
229
- TestEmployee.partial_writes = false
226
+ it "should update record if nothing is changed and partial updates are disabled" do
227
+ TestEmployee.partial_updates = false
230
228
  @employee = TestEmployee.create(
231
229
  first_name: "First",
232
230
  last_name: "Last",
@@ -318,7 +316,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
318
316
  end
319
317
 
320
318
  it "should log update record" do
321
- (TestEmployee.partial_writes = false) rescue nil
319
+ (TestEmployee.partial_updates = false) rescue nil
322
320
  @employee = TestEmployee.create(
323
321
  first_name: "First",
324
322
  last_name: "Last",
@@ -361,5 +359,4 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
361
359
  expect(@employee.save).to be_falsey
362
360
  expect(@employee.errors[:first_name]).not_to be_blank
363
361
  end
364
-
365
362
  end
@@ -9,7 +9,6 @@ describe "OracleEnhancedAdapter quoting" do
9
9
  end
10
10
 
11
11
  describe "reserved words column quoting" do
12
-
13
12
  before(:all) do
14
13
  schema_define do
15
14
  create_table :test_reserved_words do |t|
@@ -60,7 +59,6 @@ describe "OracleEnhancedAdapter quoting" do
60
59
  it "should remove double quotes in column quoting" do
61
60
  expect(ActiveRecord::Base.connection.quote_column_name('aaa "bbb" ccc')).to eq('"aaa bbb ccc"')
62
61
  end
63
-
64
62
  end
65
63
 
66
64
  describe "valid table names" do
@@ -88,10 +86,6 @@ describe "OracleEnhancedAdapter quoting" do
88
86
  expect(@adapter.valid_table_name?("ABC_123.DEF_456")).to be_truthy
89
87
  end
90
88
 
91
- it "should be valid with irregular schema name and database links" do
92
- expect(@adapter.valid_table_name?('abc$#_123.abc$#_123@abc$#@._123')).to be_truthy
93
- end
94
-
95
89
  it "should not be valid with two dots in name" do
96
90
  expect(@adapter.valid_table_name?("abc_123.def_456.ghi_789")).to be_falsey
97
91
  end
@@ -114,10 +108,6 @@ describe "OracleEnhancedAdapter quoting" do
114
108
  expect(@adapter.valid_table_name?(("a" * 31) + ".validname")).to be_falsey
115
109
  end
116
110
 
117
- it "should not be valid for database links > 128 characters" do
118
- expect(@adapter.valid_table_name?("name@" + "a" * 129)).to be_falsey
119
- end
120
-
121
111
  it "should not be valid for names that do not begin with alphabetic characters" do
122
112
  expect(@adapter.valid_table_name?("1abc")).to be_falsey
123
113
  expect(@adapter.valid_table_name?("_abc")).to be_falsey
@@ -127,7 +117,6 @@ describe "OracleEnhancedAdapter quoting" do
127
117
  end
128
118
 
129
119
  describe "table quoting" do
130
-
131
120
  def create_warehouse_things_table
132
121
  ActiveRecord::Schema.define do
133
122
  suppress_messages do
@@ -188,9 +177,5 @@ describe "OracleEnhancedAdapter quoting" do
188
177
 
189
178
  expect(@conn.tables).to include("CamelCase")
190
179
  end
191
-
192
- it "properly quotes database links" do
193
- expect(@conn.quote_table_name("asdf@some.link")).to eq('"ASDF"@"SOME.LINK"')
194
- end
195
180
  end
196
181
  end
@@ -19,9 +19,9 @@ describe "OracleEnhancedAdapter schema dump" do
19
19
  end
20
20
 
21
21
  def create_test_posts_table(options = {})
22
- options.merge! force: true
22
+ options[:force] = true
23
23
  schema_define do
24
- create_table :test_posts, options do |t|
24
+ create_table :test_posts, **options do |t|
25
25
  t.string :title
26
26
  t.timestamps null: true
27
27
  end
@@ -51,7 +51,6 @@ describe "OracleEnhancedAdapter schema dump" do
51
51
  create_test_posts_table
52
52
  expect(standard_dump(ignore_tables: [ /test_posts/i ])).not_to match(/create_table "test_posts"/)
53
53
  end
54
-
55
54
  end
56
55
 
57
56
  describe "dumping default values" do
@@ -72,7 +71,7 @@ describe "OracleEnhancedAdapter schema dump" do
72
71
 
73
72
  it "should be able to dump default values using special characters" do
74
73
  output = dump_table_schema "test_defaults"
75
- expect(output).to match(/t.string \"special_c\", default: "\\n"/)
74
+ expect(output).to match(/t.string "special_c", default: "\\n"/)
76
75
  end
77
76
  end
78
77
 
@@ -86,7 +85,6 @@ describe "OracleEnhancedAdapter schema dump" do
86
85
  output = dump_table_schema "test_posts"
87
86
  expect(output).to match(/create_table "test_posts", primary_key: "post_id"/)
88
87
  end
89
-
90
88
  end
91
89
 
92
90
  describe "table with ntext columns" do
@@ -106,28 +104,10 @@ describe "OracleEnhancedAdapter schema dump" do
106
104
 
107
105
  it "should be able to dump ntext columns" do
108
106
  output = dump_table_schema "test_ntexts"
109
- expect(output).to match(/t.ntext \"ntext_column\"/)
107
+ expect(output).to match(/t.ntext "ntext_column"/)
110
108
  end
111
109
  end
112
110
 
113
- describe "table with primary key trigger" do
114
-
115
- after(:each) do
116
- drop_test_posts_table
117
- end
118
-
119
- it "should include primary key trigger in schema dump" do
120
- create_test_posts_table(primary_key_trigger: true)
121
- expect(standard_dump).to match(/create_table "test_posts".*add_primary_key_trigger "test_posts"/m)
122
- end
123
-
124
- it "should include primary key trigger with non-default primary key in schema dump" do
125
- create_test_posts_table(primary_key_trigger: true, primary_key: "post_id")
126
- expect(standard_dump).to match(/create_table "test_posts", primary_key: "post_id".*add_primary_key_trigger "test_posts", primary_key: "post_id"/m)
127
- end
128
-
129
- end
130
-
131
111
  describe "foreign key constraints" do
132
112
  before(:all) do
133
113
  schema_define do
@@ -227,7 +207,7 @@ describe "OracleEnhancedAdapter schema dump" do
227
207
  end
228
208
  end
229
209
 
230
- @conn.execute <<-SQL
210
+ @conn.execute <<~SQL
231
211
  ALTER TABLE TEST_COMMENTS
232
212
  ADD CONSTRAINT TEST_COMMENTS_BAZ_ID_FK FOREIGN KEY (baz_id) REFERENCES test_posts(baz_id)
233
213
  SQL
@@ -235,7 +215,6 @@ describe "OracleEnhancedAdapter schema dump" do
235
215
  output = dump_table_schema "test_comments"
236
216
  expect(output).to match(/add_foreign_key "test_comments", "test_posts", column: "baz_id", primary_key: "baz_id", name: "test_comments_baz_id_fk"/)
237
217
  end
238
-
239
218
  end
240
219
 
241
220
  describe "synonyms" do
@@ -252,13 +231,6 @@ describe "OracleEnhancedAdapter schema dump" do
252
231
  expect(standard_dump).to match(/add_synonym "test_synonym", "schema_name.table_name", force: true/)
253
232
  end
254
233
 
255
- it "should include synonym to other database table in schema dump" do
256
- schema_define do
257
- add_synonym :test_synonym, "table_name@link_name", force: true
258
- end
259
- expect(standard_dump).to match(/add_synonym "test_synonym", "table_name@link_name(\.[-A-Za-z0-9_]+)*", force: true/)
260
- end
261
-
262
234
  it "should not include ignored table names in schema dump" do
263
235
  schema_define do
264
236
  add_synonym :test_synonym, "schema_name.table_name", force: true
@@ -279,7 +251,6 @@ describe "OracleEnhancedAdapter schema dump" do
279
251
  end
280
252
  expect(standard_dump(ignore_tables: [ /table_name/i ])).to match(/add_synonym "test_synonym"/)
281
253
  end
282
-
283
254
  end
284
255
 
285
256
  describe "temporary tables" do
@@ -319,7 +290,6 @@ describe "OracleEnhancedAdapter schema dump" do
319
290
  output = dump_table_schema "test_posts"
320
291
  expect(output).to match(/t\.index \["NVL\(\\"CREATED_AT\\",\\"UPDATED_AT\\"\)"\], name: "index_test_posts_cr_upd_at"$/)
321
292
  end
322
-
323
293
  end
324
294
 
325
295
  describe "materialized views" do
@@ -335,6 +305,33 @@ describe "OracleEnhancedAdapter schema dump" do
335
305
  end
336
306
  end
337
307
 
308
+ describe "context indexes" do
309
+ before(:each) do
310
+ schema_define do
311
+ create_table :test_context_indexed_posts, force: true do |t|
312
+ t.string :title
313
+ t.string :body
314
+ t.index :title
315
+ end
316
+ add_context_index :test_context_indexed_posts, :body, sync: "ON COMMIT"
317
+ end
318
+ end
319
+
320
+ after(:each) do
321
+ schema_define do
322
+ drop_table :test_context_indexed_posts
323
+ end
324
+ end
325
+
326
+ it "should dump the context index" do
327
+ expect(standard_dump).to include(%(add_context_index "test_context_indexed_posts", ["body"]))
328
+ end
329
+
330
+ it "dumps the sync option" do
331
+ expect(standard_dump).to include(%(sync: "ON COMMIT"))
332
+ end
333
+ end
334
+
338
335
  describe "virtual columns" do
339
336
  before(:all) do
340
337
  skip "Not supported in this database version" unless @oracle11g_or_higher
@@ -373,7 +370,7 @@ describe "OracleEnhancedAdapter schema dump" do
373
370
  expect(output).to match(/t\.virtual "full_name",(\s*)type: :string,(\s*)limit: 512,(\s*)as: "\\"FIRST_NAME\\"\|\|', '\|\|\\"LAST_NAME\\""/)
374
371
  expect(output).to match(/t\.virtual "short_name",(\s*)type: :string,(\s*)limit: 300,(\s*)as:(.*)/)
375
372
  expect(output).to match(/t\.virtual "full_name_length",(\s*)type: :integer,(\s*)precision: 38,(\s*)as:(.*)/)
376
- expect(output).to match(/t\.virtual "name_ratio",(\s*)as:(.*)\"$/) # no :type
373
+ expect(output).to match(/t\.virtual "name_ratio",(\s*)as:(.*)"$/) # no :type
377
374
  expect(output).to match(/t\.virtual "abbrev_name",(\s*)type: :string,(\s*)limit: 100,(\s*)as:(.*)/)
378
375
  expect(output).to match(/t\.virtual "field_with_leading_space",(\s*)type: :string,(\s*)limit: 300,(\s*)as: "' '\|\|\\"FIRST_NAME\\"\|\|' '"/)
379
376
  end