activerecord-oracle_enhanced-adapter 1.4.3 → 1.5.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -14
- data/History.md +51 -0
- data/README.md +32 -1
- data/VERSION +1 -1
- data/activerecord-oracle_enhanced-adapter.gemspec +2 -4
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +315 -57
- data/lib/active_record/connection_adapters/oracle_enhanced_column_dumper.rb +55 -0
- data/lib/active_record/connection_adapters/oracle_enhanced_context_index.rb +4 -13
- data/lib/active_record/connection_adapters/oracle_enhanced_dirty.rb +5 -6
- data/lib/active_record/connection_adapters/oracle_enhanced_jdbc_connection.rb +19 -11
- data/lib/active_record/connection_adapters/oracle_enhanced_procedures.rb +163 -232
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_definitions.rb +18 -10
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_dumper.rb +20 -32
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements.rb +54 -35
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +5 -74
- data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +3 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_context_index_spec.rb +98 -98
- data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +5 -1
- data/spec/active_record/connection_adapters/oracle_enhanced_dbms_output_spec.rb +3 -3
- data/spec/active_record/connection_adapters/oracle_enhanced_procedures_spec.rb +11 -5
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_dump_spec.rb +56 -55
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_statements_spec.rb +15 -8
- data/spec/active_record/connection_adapters/oracle_enhanced_structure_dump_spec.rb +4 -3
- data/spec/spec_helper.rb +25 -54
- metadata +32 -20
- data/lib/active_record/connection_adapters/oracle_enhanced_activerecord_patches.rb +0 -41
- data/lib/active_record/connection_adapters/oracle_enhanced_base_ext.rb +0 -121
- data/lib/active_record/connection_adapters/oracle_enhanced_tasks.rb +0 -17
@@ -92,7 +92,8 @@ describe "OracleEnhancedConnection" do
|
|
92
92
|
|
93
93
|
it "should create new connection using :url" do
|
94
94
|
params = CONNECTION_PARAMS.dup
|
95
|
-
params[:url] = "jdbc:oracle:thin:@#{DATABASE_HOST && "
|
95
|
+
params[:url] = "jdbc:oracle:thin:@#{DATABASE_HOST && "//#{DATABASE_HOST}#{DATABASE_PORT && ":#{DATABASE_PORT}"}/"}#{DATABASE_NAME}"
|
96
|
+
|
96
97
|
params[:host] = nil
|
97
98
|
params[:database] = nil
|
98
99
|
@conn = ActiveRecord::ConnectionAdapters::OracleEnhancedConnection.create(params)
|
@@ -157,7 +158,7 @@ describe "OracleEnhancedConnection" do
|
|
157
158
|
|
158
159
|
it "should fall back to directly instantiating OracleDriver" do
|
159
160
|
params = CONNECTION_PARAMS.dup
|
160
|
-
params[:url] = "jdbc:oracle:thin:@#{DATABASE_HOST && "
|
161
|
+
params[:url] = "jdbc:oracle:thin:@#{DATABASE_HOST && "//#{DATABASE_HOST}#{DATABASE_PORT && ":#{DATABASE_PORT}"}/"}#{DATABASE_NAME}"
|
161
162
|
params[:host] = nil
|
162
163
|
params[:database] = nil
|
163
164
|
java.sql.DriverManager.stub!(:getConnection).and_raise('no suitable driver found')
|
@@ -7,19 +7,19 @@ describe "OracleEnhancedAdapter context index" do
|
|
7
7
|
|
8
8
|
def create_table_posts
|
9
9
|
schema_define do
|
10
|
-
create_table :posts, :
|
10
|
+
create_table :posts, force: true do |t|
|
11
11
|
t.string :title
|
12
12
|
t.text :body
|
13
13
|
t.integer :comments_count
|
14
14
|
t.timestamps
|
15
|
-
t.string :all_text, :
|
15
|
+
t.string :all_text, limit: 2 # will be used for multi-column index
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
def create_table_comments
|
21
21
|
schema_define do
|
22
|
-
create_table :comments, :
|
22
|
+
create_table :comments, force: true do |t|
|
23
23
|
t.integer :post_id
|
24
24
|
t.string :author
|
25
25
|
t.text :body
|
@@ -68,11 +68,11 @@ describe "OracleEnhancedAdapter context index" do
|
|
68
68
|
class ::Post < ActiveRecord::Base
|
69
69
|
has_context_index
|
70
70
|
end
|
71
|
-
@post0 = Post.create(:
|
72
|
-
@post1 = Post.create(:
|
73
|
-
@post2 = Post.create(:
|
74
|
-
@post_with_null_body = Post.create(:
|
75
|
-
@post_with_null_title = Post.create(:
|
71
|
+
@post0 = Post.create(title: "dummy title", body: "dummy body")
|
72
|
+
@post1 = Post.create(title: @title_words.join(' '), body: @body_words.join(' '))
|
73
|
+
@post2 = Post.create(title: (@title_words*2).join(' '), body: (@body_words*2).join(' '))
|
74
|
+
@post_with_null_body = Post.create(title: "withnull", body: nil)
|
75
|
+
@post_with_null_title = Post.create(title: nil, body: "withnull")
|
76
76
|
end
|
77
77
|
|
78
78
|
after(:all) do
|
@@ -88,7 +88,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
88
88
|
it "should create single VARCHAR2 column index" do
|
89
89
|
@conn.add_context_index :posts, :title
|
90
90
|
@title_words.each do |word|
|
91
|
-
Post.contains(:title, word).
|
91
|
+
Post.contains(:title, word).to_a.should == [@post2, @post1]
|
92
92
|
end
|
93
93
|
@conn.remove_context_index :posts, :title
|
94
94
|
end
|
@@ -96,7 +96,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
96
96
|
it "should create single CLOB column index" do
|
97
97
|
@conn.add_context_index :posts, :body
|
98
98
|
@body_words.each do |word|
|
99
|
-
Post.contains(:body, word).
|
99
|
+
Post.contains(:body, word).to_a.should == [@post2, @post1]
|
100
100
|
end
|
101
101
|
@conn.remove_context_index :posts, :body
|
102
102
|
end
|
@@ -110,62 +110,62 @@ describe "OracleEnhancedAdapter context index" do
|
|
110
110
|
it "should create multiple column index" do
|
111
111
|
@conn.add_context_index :posts, [:title, :body]
|
112
112
|
(@title_words+@body_words).each do |word|
|
113
|
-
Post.contains(:title, word).
|
113
|
+
Post.contains(:title, word).to_a.should == [@post2, @post1]
|
114
114
|
end
|
115
115
|
@conn.remove_context_index :posts, [:title, :body]
|
116
116
|
end
|
117
117
|
|
118
118
|
it "should index records with null values" do
|
119
119
|
@conn.add_context_index :posts, [:title, :body]
|
120
|
-
Post.contains(:title, "withnull").
|
120
|
+
Post.contains(:title, "withnull").to_a.should == [@post_with_null_body, @post_with_null_title]
|
121
121
|
@conn.remove_context_index :posts, [:title, :body]
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should create multiple column index with specified main index column" do
|
125
125
|
@conn.add_context_index :posts, [:title, :body],
|
126
|
-
:
|
127
|
-
@post = Post.create(:
|
128
|
-
Post.contains(:all_text, "abc").
|
129
|
-
Post.contains(:all_text, "def").
|
130
|
-
@post.update_attributes!(:
|
126
|
+
index_column: :all_text, sync: 'ON COMMIT'
|
127
|
+
@post = Post.create(title: "abc", body: "def")
|
128
|
+
Post.contains(:all_text, "abc").to_a.should == [@post]
|
129
|
+
Post.contains(:all_text, "def").to_a.should == [@post]
|
130
|
+
@post.update_attributes!(title: "ghi")
|
131
131
|
# index will not be updated as all_text column is not changed
|
132
|
-
Post.contains(:all_text, "ghi").
|
133
|
-
@post.update_attributes!(:
|
132
|
+
Post.contains(:all_text, "ghi").to_a.should be_empty
|
133
|
+
@post.update_attributes!(all_text: "1")
|
134
134
|
# index will be updated when all_text column is changed
|
135
|
-
Post.contains(:all_text, "ghi").
|
136
|
-
@conn.remove_context_index :posts, :
|
135
|
+
Post.contains(:all_text, "ghi").to_a.should == [@post]
|
136
|
+
@conn.remove_context_index :posts, index_column: :all_text
|
137
137
|
end
|
138
138
|
|
139
139
|
it "should create multiple column index with trigger updated main index column" do
|
140
140
|
@conn.add_context_index :posts, [:title, :body],
|
141
|
-
:
|
142
|
-
:
|
143
|
-
@post = Post.create(:
|
144
|
-
Post.contains(:all_text, "abc").
|
145
|
-
Post.contains(:all_text, "def").
|
146
|
-
@post.update_attributes!(:
|
141
|
+
index_column: :all_text, index_column_trigger_on: [:created_at, :updated_at],
|
142
|
+
sync: 'ON COMMIT'
|
143
|
+
@post = Post.create(title: "abc", body: "def")
|
144
|
+
Post.contains(:all_text, "abc").to_a.should == [@post]
|
145
|
+
Post.contains(:all_text, "def").to_a.should == [@post]
|
146
|
+
@post.update_attributes!(title: "ghi")
|
147
147
|
# index should be updated as created_at column is changed
|
148
|
-
Post.contains(:all_text, "ghi").
|
149
|
-
@conn.remove_context_index :posts, :
|
148
|
+
Post.contains(:all_text, "ghi").to_a.should == [@post]
|
149
|
+
@conn.remove_context_index :posts, index_column: :all_text
|
150
150
|
end
|
151
151
|
|
152
152
|
it "should use base letter conversion with BASIC_LEXER" do
|
153
|
-
@post = Post.create!(:
|
153
|
+
@post = Post.create!(title: "āčē", body: "dummy")
|
154
154
|
@conn.add_context_index :posts, :title,
|
155
|
-
:
|
156
|
-
Post.contains(:title, "āčē").
|
157
|
-
Post.contains(:title, "ace").
|
158
|
-
Post.contains(:title, "ACE").
|
155
|
+
lexer: { type: "BASIC_LEXER", base_letter_type: 'GENERIC', base_letter: true }
|
156
|
+
Post.contains(:title, "āčē").to_a.should == [@post]
|
157
|
+
Post.contains(:title, "ace").to_a.should == [@post]
|
158
|
+
Post.contains(:title, "ACE").to_a.should == [@post]
|
159
159
|
@conn.remove_context_index :posts, :title
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should create transactional index and sync index within transaction on inserts and updates" do
|
163
|
-
@conn.add_context_index :posts, :title, :
|
163
|
+
@conn.add_context_index :posts, :title, transactional: true
|
164
164
|
Post.transaction do
|
165
|
-
@post = Post.create(:
|
166
|
-
Post.contains(:title, "abc").
|
167
|
-
@post.update_attributes!(:
|
168
|
-
Post.contains(:title, "ghi").
|
165
|
+
@post = Post.create(title: "abc")
|
166
|
+
Post.contains(:title, "abc").to_a.should == [@post]
|
167
|
+
@post.update_attributes!(title: "ghi")
|
168
|
+
Post.contains(:title, "ghi").to_a.should == [@post]
|
169
169
|
end
|
170
170
|
@conn.remove_context_index :posts, :title
|
171
171
|
end
|
@@ -176,11 +176,11 @@ describe "OracleEnhancedAdapter context index" do
|
|
176
176
|
@conn = ActiveRecord::Base.connection
|
177
177
|
create_tables
|
178
178
|
class ::Post < ActiveRecord::Base
|
179
|
-
has_many :comments, :
|
179
|
+
has_many :comments, dependent: :destroy
|
180
180
|
has_context_index
|
181
181
|
end
|
182
182
|
class ::Comment < ActiveRecord::Base
|
183
|
-
belongs_to :post, :
|
183
|
+
belongs_to :post, counter_cache: true
|
184
184
|
end
|
185
185
|
end
|
186
186
|
|
@@ -201,16 +201,16 @@ describe "OracleEnhancedAdapter context index" do
|
|
201
201
|
# specify aliases always with AS keyword
|
202
202
|
"SELECT comments.author AS comment_author, comments.body AS comment_body FROM comments WHERE comments.post_id = :id"
|
203
203
|
],
|
204
|
-
:
|
205
|
-
:
|
206
|
-
:
|
207
|
-
@post = Post.create!(:
|
208
|
-
@post.comments.create!(:
|
209
|
-
@post.comments.create!(:
|
204
|
+
name: 'post_and_comments_index',
|
205
|
+
index_column: :all_text, index_column_trigger_on: [:updated_at, :comments_count],
|
206
|
+
sync: 'ON COMMIT'
|
207
|
+
@post = Post.create!(title: "aaa", body: "bbb")
|
208
|
+
@post.comments.create!(author: "ccc", body: "ddd")
|
209
|
+
@post.comments.create!(author: "eee", body: "fff")
|
210
210
|
["aaa", "bbb", "ccc", "ddd", "eee", "fff"].each do |word|
|
211
|
-
Post.contains(:all_text, word).
|
211
|
+
Post.contains(:all_text, word).to_a.should == [@post]
|
212
212
|
end
|
213
|
-
@conn.remove_context_index :posts, :
|
213
|
+
@conn.remove_context_index :posts, name: 'post_and_comments_index'
|
214
214
|
end
|
215
215
|
|
216
216
|
it "should create multiple table index with specified main index column (when subquery has newlines)" do
|
@@ -223,36 +223,36 @@ describe "OracleEnhancedAdapter context index" do
|
|
223
223
|
FROM comments
|
224
224
|
WHERE comments.post_id = :id }
|
225
225
|
],
|
226
|
-
:
|
227
|
-
:
|
228
|
-
:
|
229
|
-
@post = Post.create!(:
|
230
|
-
@post.comments.create!(:
|
231
|
-
@post.comments.create!(:
|
226
|
+
name: 'post_and_comments_index',
|
227
|
+
index_column: :all_text, index_column_trigger_on: [:updated_at, :comments_count],
|
228
|
+
sync: 'ON COMMIT'
|
229
|
+
@post = Post.create!(title: "aaa", body: "bbb")
|
230
|
+
@post.comments.create!(author: "ccc", body: "ddd")
|
231
|
+
@post.comments.create!(author: "eee", body: "fff")
|
232
232
|
["aaa", "bbb", "ccc", "ddd", "eee", "fff"].each do |word|
|
233
|
-
Post.contains(:all_text, word).
|
233
|
+
Post.contains(:all_text, word).to_a.should == [@post]
|
234
234
|
end
|
235
|
-
@conn.remove_context_index :posts, :
|
235
|
+
@conn.remove_context_index :posts, name: 'post_and_comments_index'
|
236
236
|
end
|
237
237
|
|
238
238
|
it "should find by search term within specified field" do
|
239
|
-
@post = Post.create!(:
|
240
|
-
@post.comments.create!(:
|
239
|
+
@post = Post.create!(title: "aaa", body: "bbb")
|
240
|
+
@post.comments.create!(author: "ccc", body: "ddd")
|
241
241
|
@conn.add_context_index :posts,
|
242
242
|
[:title, :body,
|
243
243
|
# specify aliases always with AS keyword
|
244
244
|
"SELECT comments.author AS comment_author, comments.body AS comment_body FROM comments WHERE comments.post_id = :id"
|
245
245
|
],
|
246
|
-
:
|
247
|
-
Post.contains(:all_text, "aaa within title").
|
248
|
-
Post.contains(:all_text, "aaa within body").
|
249
|
-
Post.contains(:all_text, "bbb within body").
|
250
|
-
Post.contains(:all_text, "bbb within title").
|
251
|
-
Post.contains(:all_text, "ccc within comment_author").
|
252
|
-
Post.contains(:all_text, "ccc within comment_body").
|
253
|
-
Post.contains(:all_text, "ddd within comment_body").
|
254
|
-
Post.contains(:all_text, "ddd within comment_author").
|
255
|
-
@conn.remove_context_index :posts, :
|
246
|
+
index_column: :all_text
|
247
|
+
Post.contains(:all_text, "aaa within title").to_a.should == [@post]
|
248
|
+
Post.contains(:all_text, "aaa within body").to_a.should be_empty
|
249
|
+
Post.contains(:all_text, "bbb within body").to_a.should == [@post]
|
250
|
+
Post.contains(:all_text, "bbb within title").to_a.should be_empty
|
251
|
+
Post.contains(:all_text, "ccc within comment_author").to_a.should == [@post]
|
252
|
+
Post.contains(:all_text, "ccc within comment_body").to_a.should be_empty
|
253
|
+
Post.contains(:all_text, "ddd within comment_body").to_a.should == [@post]
|
254
|
+
Post.contains(:all_text, "ddd within comment_author").to_a.should be_empty
|
255
|
+
@conn.remove_context_index :posts, index_column: :all_text
|
256
256
|
end
|
257
257
|
|
258
258
|
end
|
@@ -264,7 +264,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
264
264
|
class ::Post < ActiveRecord::Base
|
265
265
|
has_context_index
|
266
266
|
end
|
267
|
-
@post = Post.create(:
|
267
|
+
@post = Post.create(title: 'aaa', body: 'bbb')
|
268
268
|
@tablespace = @conn.default_tablespace
|
269
269
|
set_logger
|
270
270
|
@conn = ActiveRecord::Base.connection
|
@@ -288,17 +288,17 @@ describe "OracleEnhancedAdapter context index" do
|
|
288
288
|
end
|
289
289
|
|
290
290
|
it "should create index on single column" do
|
291
|
-
@conn.add_context_index :posts, :title, :
|
291
|
+
@conn.add_context_index :posts, :title, tablespace: @tablespace
|
292
292
|
verify_logged_statements
|
293
|
-
Post.contains(:title, 'aaa').
|
293
|
+
Post.contains(:title, 'aaa').to_a.should == [@post]
|
294
294
|
@conn.remove_context_index :posts, :title
|
295
295
|
end
|
296
296
|
|
297
297
|
it "should create index on multiple columns" do
|
298
|
-
@conn.add_context_index :posts, [:title, :body], :
|
298
|
+
@conn.add_context_index :posts, [:title, :body], name: 'index_posts_text', tablespace: @conn.default_tablespace
|
299
299
|
verify_logged_statements
|
300
|
-
Post.contains(:title, 'aaa AND bbb').
|
301
|
-
@conn.remove_context_index :posts, :
|
300
|
+
Post.contains(:title, 'aaa AND bbb').to_a.should == [@post]
|
301
|
+
@conn.remove_context_index :posts, name: 'index_posts_text'
|
302
302
|
end
|
303
303
|
|
304
304
|
end
|
@@ -325,7 +325,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
325
325
|
|
326
326
|
it "should dump definition of single column index" do
|
327
327
|
@conn.add_context_index :posts, :title
|
328
|
-
standard_dump.should =~ /add_context_index "posts", \["title"\], :
|
328
|
+
standard_dump.should =~ /add_context_index "posts", \["title"\], name: \"index_posts_on_title\"$/
|
329
329
|
@conn.remove_context_index :posts, :title
|
330
330
|
end
|
331
331
|
|
@@ -337,41 +337,41 @@ describe "OracleEnhancedAdapter context index" do
|
|
337
337
|
|
338
338
|
it "should dump definition of multiple table index with options" do
|
339
339
|
options = {
|
340
|
-
:
|
341
|
-
:
|
342
|
-
:
|
343
|
-
:
|
340
|
+
name: 'post_and_comments_index',
|
341
|
+
index_column: :all_text, index_column_trigger_on: :updated_at,
|
342
|
+
transactional: true,
|
343
|
+
sync: 'ON COMMIT'
|
344
344
|
}
|
345
345
|
sub_query = "SELECT comments.author AS comment_author, comments.body AS comment_body FROM comments WHERE comments.post_id = :id"
|
346
346
|
@conn.add_context_index :posts, [:title, :body, sub_query], options
|
347
347
|
standard_dump.should =~ /add_context_index "posts", \[:title, :body, "#{sub_query}"\], #{options.inspect[1..-2]}$/
|
348
|
-
@conn.remove_context_index :posts, :
|
348
|
+
@conn.remove_context_index :posts, name: 'post_and_comments_index'
|
349
349
|
end
|
350
350
|
|
351
351
|
it "should dump definition of multiple table index with options (when definition is larger than 4000 bytes)" do
|
352
352
|
options = {
|
353
|
-
:
|
354
|
-
:
|
355
|
-
:
|
356
|
-
:
|
353
|
+
name: 'post_and_comments_index',
|
354
|
+
index_column: :all_text, index_column_trigger_on: :updated_at,
|
355
|
+
transactional: true,
|
356
|
+
sync: 'ON COMMIT'
|
357
357
|
}
|
358
358
|
sub_query = "SELECT comments.author AS comment_author, comments.body AS comment_body FROM comments WHERE comments.post_id = :id#{' AND 1=1' * 500}"
|
359
359
|
@conn.add_context_index :posts, [:title, :body, sub_query], options
|
360
360
|
standard_dump.should =~ /add_context_index "posts", \[:title, :body, "#{sub_query}"\], #{options.inspect[1..-2]}$/
|
361
|
-
@conn.remove_context_index :posts, :
|
361
|
+
@conn.remove_context_index :posts, name: 'post_and_comments_index'
|
362
362
|
end
|
363
363
|
|
364
364
|
it "should dump definition of multiple table index with options (when subquery has newlines)" do
|
365
365
|
options = {
|
366
|
-
:
|
367
|
-
:
|
368
|
-
:
|
369
|
-
:
|
366
|
+
name: 'post_and_comments_index',
|
367
|
+
index_column: :all_text, index_column_trigger_on: :updated_at,
|
368
|
+
transactional: true,
|
369
|
+
sync: 'ON COMMIT'
|
370
370
|
}
|
371
371
|
sub_query = "SELECT comments.author AS comment_author, comments.body AS comment_body\nFROM comments\nWHERE comments.post_id = :id"
|
372
372
|
@conn.add_context_index :posts, [:title, :body, sub_query], options
|
373
373
|
standard_dump.should =~ /add_context_index "posts", \[:title, :body, "#{sub_query.gsub(/\n/, ' ')}"\], #{options.inspect[1..-2]}$/
|
374
|
-
@conn.remove_context_index :posts, :
|
374
|
+
@conn.remove_context_index :posts, name: 'post_and_comments_index'
|
375
375
|
end
|
376
376
|
|
377
377
|
end
|
@@ -391,7 +391,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
391
391
|
|
392
392
|
it "should dump definition of single column index" do
|
393
393
|
schema_define { add_context_index :posts, :title }
|
394
|
-
standard_dump.should =~ /add_context_index "posts", \["title"\], :
|
394
|
+
standard_dump.should =~ /add_context_index "posts", \["title"\], name: "i_xxx_posts_xxx_title"$/
|
395
395
|
schema_define { remove_context_index :posts, :title }
|
396
396
|
end
|
397
397
|
|
@@ -403,11 +403,11 @@ describe "OracleEnhancedAdapter context index" do
|
|
403
403
|
|
404
404
|
it "should dump definition of multiple table index with options" do
|
405
405
|
options = {
|
406
|
-
:
|
407
|
-
:
|
408
|
-
:
|
409
|
-
:
|
410
|
-
:
|
406
|
+
name: 'xxx_post_and_comments_i',
|
407
|
+
index_column: :all_text, index_column_trigger_on: :updated_at,
|
408
|
+
lexer: { type: "BASIC_LEXER", base_letter_type: 'GENERIC', base_letter: true },
|
409
|
+
wordlist: { type: "BASIC_WORDLIST", prefix_index: true },
|
410
|
+
sync: 'ON COMMIT'
|
411
411
|
}
|
412
412
|
schema_define do
|
413
413
|
add_context_index :posts,
|
@@ -417,7 +417,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
417
417
|
end
|
418
418
|
standard_dump.should =~ /add_context_index "posts", \[:title, :body, "SELECT comments.author AS comment_author, comments.body AS comment_body FROM comments WHERE comments.post_id = :id"\], #{
|
419
419
|
options.inspect[1..-2].gsub(/[{}]/){|s| '\\'<<s }}$/
|
420
|
-
schema_define { remove_context_index :posts, :
|
420
|
+
schema_define { remove_context_index :posts, name: 'xxx_post_and_comments_i' }
|
421
421
|
end
|
422
422
|
|
423
423
|
end
|
@@ -918,7 +918,11 @@ describe "OracleEnhancedAdapter handling of CLOB columns" do
|
|
918
918
|
serialize :comments
|
919
919
|
end
|
920
920
|
class ::TestEmployeeReadOnlyClob < ActiveRecord::Base
|
921
|
-
|
921
|
+
if self.respond_to?(:table_name=)
|
922
|
+
self.table_name = "test_employees"
|
923
|
+
else
|
924
|
+
set_table_name = "test_employees"
|
925
|
+
end
|
922
926
|
attr_readonly :comments
|
923
927
|
end
|
924
928
|
end
|
@@ -42,7 +42,7 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
|
|
42
42
|
it "should NOT log dbms output when dbms output is disabled" do
|
43
43
|
@conn.disable_dbms_output
|
44
44
|
|
45
|
-
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").should == [{'is_it_long'=>1}]
|
45
|
+
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a.should == [{'is_it_long'=>1}]
|
46
46
|
|
47
47
|
@logger.output(:debug).should_not match(/^DBMS_OUTPUT/)
|
48
48
|
end
|
@@ -50,7 +50,7 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
|
|
50
50
|
it "should log dbms output lines to the rails log" do
|
51
51
|
@conn.enable_dbms_output
|
52
52
|
|
53
|
-
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").should == [{'is_it_long'=>1}]
|
53
|
+
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a.should == [{'is_it_long'=>1}]
|
54
54
|
|
55
55
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: before the if -hi there-$/)
|
56
56
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: it is longer than 5$/)
|
@@ -60,7 +60,7 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
|
|
60
60
|
it "should log dbms output lines to the rails log" do
|
61
61
|
@conn.enable_dbms_output
|
62
62
|
|
63
|
-
@conn.select_all("select more_than_five_characters_long('short') is_it_long from dual").should == [{'is_it_long'=>0}]
|
63
|
+
@conn.select_all("select more_than_five_characters_long('short') is_it_long from dual").to_a.should == [{'is_it_long'=>0}]
|
64
64
|
|
65
65
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: before the if -short-$/)
|
66
66
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: it is 5 or shorter$/)
|
@@ -107,6 +107,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
107
107
|
|
108
108
|
before(:each) do
|
109
109
|
class ::TestEmployee < ActiveRecord::Base
|
110
|
+
include ActiveRecord::OracleEnhancedProcedures
|
111
|
+
|
110
112
|
if self.respond_to?(:primary_key=)
|
111
113
|
self.primary_key = :employee_id
|
112
114
|
else
|
@@ -226,9 +228,9 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
226
228
|
@employee.first_name.should == "First"
|
227
229
|
end
|
228
230
|
|
229
|
-
it "should not update record if nothing is changed and partial
|
231
|
+
it "should not update record if nothing is changed and partial writes are enabled" do
|
230
232
|
return pending("Not in this ActiveRecord version") unless TestEmployee.respond_to?(:partial_updates=)
|
231
|
-
TestEmployee.
|
233
|
+
TestEmployee.partial_writes = true
|
232
234
|
@employee = TestEmployee.create(
|
233
235
|
:first_name => "First",
|
234
236
|
:last_name => "Last",
|
@@ -240,9 +242,9 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
240
242
|
@employee.version.should == 1
|
241
243
|
end
|
242
244
|
|
243
|
-
it "should update record if nothing is changed and partial
|
245
|
+
it "should update record if nothing is changed and partial writes are disabled" do
|
244
246
|
return pending("Not in this ActiveRecord version") unless TestEmployee.respond_to?(:partial_updates=)
|
245
|
-
TestEmployee.
|
247
|
+
TestEmployee.partial_writes = false
|
246
248
|
@employee = TestEmployee.create(
|
247
249
|
:first_name => "First",
|
248
250
|
:last_name => "Last",
|
@@ -295,6 +297,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
295
297
|
}.should raise_error("Make the transaction rollback")
|
296
298
|
@employee.id.should == empl_id
|
297
299
|
TestEmployee.find_by_employee_id(empl_id).should_not be_nil
|
300
|
+
clear_logger
|
298
301
|
end
|
299
302
|
|
300
303
|
it "should set timestamps when creating record" do
|
@@ -330,10 +333,11 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
330
333
|
:hire_date => @today
|
331
334
|
)
|
332
335
|
@logger.logged(:debug).last.should match(/^TestEmployee Create \(\d+\.\d+(ms)?\) custom create method$/)
|
336
|
+
clear_logger
|
333
337
|
end
|
334
338
|
|
335
339
|
it "should log update record" do
|
336
|
-
(TestEmployee.
|
340
|
+
(TestEmployee.partial_writes = false) rescue nil
|
337
341
|
@employee = TestEmployee.create(
|
338
342
|
:first_name => "First",
|
339
343
|
:last_name => "Last",
|
@@ -342,6 +346,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
342
346
|
set_logger
|
343
347
|
@employee.save!
|
344
348
|
@logger.logged(:debug).last.should match(/^TestEmployee Update \(\d+\.\d+(ms)?\) custom update method with employee_id=#{@employee.id}$/)
|
349
|
+
clear_logger
|
345
350
|
end
|
346
351
|
|
347
352
|
it "should log delete record" do
|
@@ -353,6 +358,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
353
358
|
set_logger
|
354
359
|
@employee.destroy
|
355
360
|
@logger.logged(:debug).last.should match(/^TestEmployee Destroy \(\d+\.\d+(ms)?\) custom delete method with employee_id=#{@employee.id}$/)
|
361
|
+
clear_logger
|
356
362
|
end
|
357
363
|
|
358
364
|
it "should validate new record before creation" do
|