activerecord-oracle_enhanced-adapter 6.0.6 → 6.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +128 -4
- data/README.md +12 -1
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +2 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +0 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/database_limits.rb +0 -9
- data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +6 -6
- data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +8 -9
- data/lib/active_record/connection_adapters/oracle_enhanced/dbms_output.rb +0 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +7 -5
- data/lib/active_record/connection_adapters/oracle_enhanced/lob.rb +1 -2
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +2 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/procedures.rb +0 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +7 -11
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +2 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +15 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +42 -39
- data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +16 -17
- data/lib/active_record/connection_adapters/oracle_enhanced/type_metadata.rb +2 -1
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +52 -33
- data/lib/active_record/type/oracle_enhanced/boolean.rb +0 -1
- data/lib/active_record/type/oracle_enhanced/integer.rb +0 -1
- data/lib/arel/visitors/oracle.rb +217 -0
- data/lib/arel/visitors/oracle12.rb +124 -0
- data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +9 -3
- data/spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb +5 -0
- data/spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb +0 -1
- data/spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb +27 -0
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +83 -0
- data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +4 -2
- data/spec/spec_config.yaml.template +2 -2
- data/spec/spec_helper.rb +13 -2
- metadata +6 -4
@@ -3,9 +3,8 @@
|
|
3
3
|
module ActiveRecord
|
4
4
|
module ConnectionAdapters
|
5
5
|
module OracleEnhanced
|
6
|
-
class SchemaCreation <
|
6
|
+
class SchemaCreation < SchemaCreation
|
7
7
|
private
|
8
|
-
|
9
8
|
def visit_ColumnDefinition(o)
|
10
9
|
if [:blob, :clob, :nclob].include?(sql_type = type_to_sql(o.type, **o.options).downcase.to_sym)
|
11
10
|
if (tablespace = default_tablespace_for(sql_type))
|
@@ -36,7 +35,7 @@ module ActiveRecord
|
|
36
35
|
create_sql << " TABLESPACE #{tablespace}"
|
37
36
|
end
|
38
37
|
end
|
39
|
-
add_table_options!(create_sql,
|
38
|
+
add_table_options!(create_sql, o)
|
40
39
|
create_sql << " AS #{to_sql(o.as)}" if o.as
|
41
40
|
create_sql
|
42
41
|
end
|
@@ -4,7 +4,15 @@ module ActiveRecord #:nodoc:
|
|
4
4
|
module ConnectionAdapters #:nodoc:
|
5
5
|
module OracleEnhanced #:nodoc:
|
6
6
|
class SchemaDumper < ConnectionAdapters::SchemaDumper #:nodoc:
|
7
|
+
DEFAULT_PRIMARY_KEY_COLUMN_SPEC = { precision: "38", null: "false" }.freeze
|
8
|
+
private_constant :DEFAULT_PRIMARY_KEY_COLUMN_SPEC
|
9
|
+
|
7
10
|
private
|
11
|
+
def column_spec_for_primary_key(column)
|
12
|
+
spec = super
|
13
|
+
spec.except!(:precision) if prepare_column_options(column) == DEFAULT_PRIMARY_KEY_COLUMN_SPEC
|
14
|
+
spec
|
15
|
+
end
|
8
16
|
|
9
17
|
def tables(stream)
|
10
18
|
# do not include materialized views in schema dump - they should be created separately after schema creation
|
@@ -51,6 +59,7 @@ module ActiveRecord #:nodoc:
|
|
51
59
|
else
|
52
60
|
statement_parts = [ ("add_context_index " + remove_prefix_and_suffix(table).inspect) ]
|
53
61
|
statement_parts << index.columns.inspect
|
62
|
+
statement_parts << ("sync: " + $1.inspect) if index.parameters =~ /SYNC\((.*?)\)/
|
54
63
|
statement_parts << ("name: " + index.name.inspect)
|
55
64
|
end
|
56
65
|
else
|
@@ -72,7 +81,7 @@ module ActiveRecord #:nodoc:
|
|
72
81
|
index_statements = indexes.map do |index|
|
73
82
|
" t.index #{index_parts(index).join(', ')}" unless index.type == "CTXSYS.CONTEXT"
|
74
83
|
end
|
75
|
-
stream.puts index_statements.sort.join("\n")
|
84
|
+
stream.puts index_statements.compact.sort.join("\n")
|
76
85
|
end
|
77
86
|
end
|
78
87
|
|
@@ -107,7 +116,10 @@ module ActiveRecord #:nodoc:
|
|
107
116
|
tbl.print ", primary_key: #{pk.inspect}" unless pk == "id"
|
108
117
|
pkcol = columns.detect { |c| c.name == pk }
|
109
118
|
pkcolspec = column_spec_for_primary_key(pkcol)
|
110
|
-
|
119
|
+
unless pkcolspec.empty?
|
120
|
+
if pkcolspec != pkcolspec.slice(:id, :default)
|
121
|
+
pkcolspec = { id: { type: pkcolspec.delete(:id), **pkcolspec }.compact }
|
122
|
+
end
|
111
123
|
tbl.print ", #{format_colspec(pkcolspec)}"
|
112
124
|
end
|
113
125
|
when Array
|
@@ -168,7 +180,7 @@ module ActiveRecord #:nodoc:
|
|
168
180
|
|
169
181
|
def extract_expression_for_virtual_column(column)
|
170
182
|
column_name = column.name
|
171
|
-
@connection.select_value(<<~SQL.squish, "
|
183
|
+
@connection.select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name.upcase), bind_string("column_name", column_name.upcase)]).inspect
|
172
184
|
select /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ data_default from all_tab_columns
|
173
185
|
where owner = SYS_CONTEXT('userenv', 'current_schema')
|
174
186
|
and table_name = :table_name
|
@@ -11,7 +11,7 @@ module ActiveRecord
|
|
11
11
|
# see: abstract/schema_statements.rb
|
12
12
|
|
13
13
|
def tables #:nodoc:
|
14
|
-
select_values(<<~SQL.squish, "
|
14
|
+
select_values(<<~SQL.squish, "SCHEMA")
|
15
15
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */
|
16
16
|
DECODE(table_name, UPPER(table_name), LOWER(table_name), table_name)
|
17
17
|
FROM all_tables
|
@@ -44,7 +44,7 @@ module ActiveRecord
|
|
44
44
|
table_owner, table_name = default_owner, real_name
|
45
45
|
end
|
46
46
|
|
47
|
-
select_values(<<~SQL.squish, "
|
47
|
+
select_values(<<~SQL.squish, "SCHEMA", [bind_string("owner", table_owner), bind_string("table_name", table_name)]).any?
|
48
48
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ owner, table_name
|
49
49
|
FROM all_tables
|
50
50
|
WHERE owner = :owner
|
@@ -60,14 +60,14 @@ module ActiveRecord
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def views # :nodoc:
|
63
|
-
select_values(<<~SQL.squish, "
|
63
|
+
select_values(<<~SQL.squish, "SCHEMA")
|
64
64
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */
|
65
65
|
LOWER(view_name) FROM all_views WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
66
66
|
SQL
|
67
67
|
end
|
68
68
|
|
69
69
|
def materialized_views #:nodoc:
|
70
|
-
select_values(<<~SQL.squish, "
|
70
|
+
select_values(<<~SQL.squish, "SCHEMA")
|
71
71
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */
|
72
72
|
LOWER(mview_name) FROM all_mviews WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
73
73
|
SQL
|
@@ -75,7 +75,7 @@ module ActiveRecord
|
|
75
75
|
|
76
76
|
# get synonyms for schema dump
|
77
77
|
def synonyms
|
78
|
-
result = select_all(<<~SQL.squish, "
|
78
|
+
result = select_all(<<~SQL.squish, "SCHEMA")
|
79
79
|
SELECT synonym_name, table_owner, table_name
|
80
80
|
FROM all_synonyms where owner = SYS_CONTEXT('userenv', 'current_schema')
|
81
81
|
SQL
|
@@ -90,7 +90,7 @@ module ActiveRecord
|
|
90
90
|
(_owner, table_name) = @connection.describe(table_name)
|
91
91
|
default_tablespace_name = default_tablespace
|
92
92
|
|
93
|
-
result = select_all(<<~SQL.squish, "
|
93
|
+
result = select_all(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name)])
|
94
94
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ LOWER(i.table_name) AS table_name, LOWER(i.index_name) AS index_name, i.uniqueness,
|
95
95
|
i.index_type, i.ityp_owner, i.ityp_name, i.parameters,
|
96
96
|
LOWER(i.tablespace_name) AS tablespace_name,
|
@@ -120,7 +120,7 @@ module ActiveRecord
|
|
120
120
|
statement_parameters = nil
|
121
121
|
if row["index_type"] == "DOMAIN" && row["ityp_owner"] == "CTXSYS" && row["ityp_name"] == "CONTEXT"
|
122
122
|
procedure_name = default_datastore_procedure(row["index_name"])
|
123
|
-
source = select_values(<<~SQL.squish, "
|
123
|
+
source = select_values(<<~SQL.squish, "SCHEMA", [bind_string("procedure_name", procedure_name.upcase)]).join
|
124
124
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ text
|
125
125
|
FROM all_source
|
126
126
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
@@ -199,19 +199,19 @@ module ActiveRecord
|
|
199
199
|
# t.string :last_name, :comment => “Surname”
|
200
200
|
# end
|
201
201
|
|
202
|
-
def create_table(table_name, **options)
|
203
|
-
create_sequence =
|
204
|
-
td = create_table_definition
|
202
|
+
def create_table(table_name, id: :primary_key, primary_key: nil, force: nil, **options)
|
203
|
+
create_sequence = id != false
|
204
|
+
td = create_table_definition(
|
205
|
+
table_name, **options.extract!(:temporary, :options, :as, :comment, :tablespace, :organization)
|
206
|
+
)
|
205
207
|
|
206
|
-
if
|
207
|
-
pk =
|
208
|
-
Base.get_primary_key table_name.to_s.singularize
|
209
|
-
end
|
208
|
+
if id && !td.as
|
209
|
+
pk = primary_key || Base.get_primary_key(table_name.to_s.singularize)
|
210
210
|
|
211
211
|
if pk.is_a?(Array)
|
212
212
|
td.primary_keys pk
|
213
213
|
else
|
214
|
-
td.primary_key pk,
|
214
|
+
td.primary_key pk, id, **options
|
215
215
|
end
|
216
216
|
end
|
217
217
|
|
@@ -229,8 +229,10 @@ module ActiveRecord
|
|
229
229
|
yield td if block_given?
|
230
230
|
create_sequence = create_sequence || td.create_sequence
|
231
231
|
|
232
|
-
if
|
233
|
-
drop_table(table_name,
|
232
|
+
if force && data_source_exists?(table_name)
|
233
|
+
drop_table(table_name, force: force, if_exists: true)
|
234
|
+
else
|
235
|
+
schema_cache.clear_data_source_cache!(table_name.to_s)
|
234
236
|
end
|
235
237
|
|
236
238
|
execute schema_creation.accept td
|
@@ -238,14 +240,14 @@ module ActiveRecord
|
|
238
240
|
create_sequence_and_trigger(table_name, options) if create_sequence
|
239
241
|
|
240
242
|
if supports_comments? && !supports_comments_in_create?
|
241
|
-
if table_comment =
|
243
|
+
if table_comment = td.comment.presence
|
242
244
|
change_table_comment(table_name, table_comment)
|
243
245
|
end
|
244
246
|
td.columns.each do |column|
|
245
247
|
change_column_comment(table_name, column.name, column.comment) if column.comment.present?
|
246
248
|
end
|
247
249
|
end
|
248
|
-
td.indexes.each { |c, o| add_index table_name, c, o }
|
250
|
+
td.indexes.each { |c, o| add_index table_name, c, **o }
|
249
251
|
|
250
252
|
rebuild_primary_key_index_to_default_tablespace(table_name, options)
|
251
253
|
end
|
@@ -254,13 +256,16 @@ module ActiveRecord
|
|
254
256
|
if new_name.to_s.length > DatabaseLimits::IDENTIFIER_MAX_LENGTH
|
255
257
|
raise ArgumentError, "New table name '#{new_name}' is too long; the limit is #{DatabaseLimits::IDENTIFIER_MAX_LENGTH} characters"
|
256
258
|
end
|
259
|
+
schema_cache.clear_data_source_cache!(table_name.to_s)
|
260
|
+
schema_cache.clear_data_source_cache!(new_name.to_s)
|
257
261
|
execute "RENAME #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}"
|
258
262
|
execute "RENAME #{quote_table_name("#{table_name}_seq")} TO #{default_sequence_name(new_name)}" rescue nil
|
259
263
|
|
260
264
|
rename_table_indexes(table_name, new_name)
|
261
265
|
end
|
262
266
|
|
263
|
-
def drop_table(table_name, options
|
267
|
+
def drop_table(table_name, **options) #:nodoc:
|
268
|
+
schema_cache.clear_data_source_cache!(table_name.to_s)
|
264
269
|
execute "DROP TABLE #{quote_table_name(table_name)}#{' CASCADE CONSTRAINTS' if options[:force] == :cascade}"
|
265
270
|
seq_name = options[:sequence_name] || default_sequence_name(table_name)
|
266
271
|
execute "DROP SEQUENCE #{quote_table_name(seq_name)}" rescue nil
|
@@ -290,7 +295,7 @@ module ActiveRecord
|
|
290
295
|
end
|
291
296
|
end
|
292
297
|
|
293
|
-
def add_index(table_name, column_name, options
|
298
|
+
def add_index(table_name, column_name, **options) #:nodoc:
|
294
299
|
index_name, index_type, quoted_column_names, tablespace, index_options = add_index_options(table_name, column_name, **options)
|
295
300
|
execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} (#{quoted_column_names})#{tablespace} #{index_options}"
|
296
301
|
if index_type == "UNIQUE"
|
@@ -309,13 +314,11 @@ module ActiveRecord
|
|
309
314
|
index_type = options[:unique] ? "UNIQUE" : ""
|
310
315
|
index_name = options[:name].to_s if options.key?(:name)
|
311
316
|
tablespace = tablespace_for(:index, options[:tablespace])
|
312
|
-
|
313
|
-
# TODO: This option is used for NOLOGGING, needs better argumetn name
|
317
|
+
# TODO: This option is used for NOLOGGING, needs better argument name
|
314
318
|
index_options = options[:options]
|
315
319
|
|
316
|
-
|
317
|
-
|
318
|
-
end
|
320
|
+
validate_index_length!(table_name, index_name, options.fetch(:internal, false))
|
321
|
+
|
319
322
|
if table_exists?(table_name) && index_name_exists?(table_name, index_name)
|
320
323
|
raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' already exists"
|
321
324
|
end
|
@@ -326,8 +329,8 @@ module ActiveRecord
|
|
326
329
|
|
327
330
|
# Remove the given index from the table.
|
328
331
|
# Gives warning if index does not exist
|
329
|
-
def remove_index(table_name,
|
330
|
-
index_name = index_name_for_remove(table_name, options)
|
332
|
+
def remove_index(table_name, column_name = nil, **options) #:nodoc:
|
333
|
+
index_name = index_name_for_remove(table_name, column_name, options)
|
331
334
|
# TODO: It should execute only when index_type == "UNIQUE"
|
332
335
|
execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(index_name)}" rescue nil
|
333
336
|
execute "DROP INDEX #{quote_column_name(index_name)}"
|
@@ -364,7 +367,7 @@ module ActiveRecord
|
|
364
367
|
# Will always query database and not index cache.
|
365
368
|
def index_name_exists?(table_name, index_name)
|
366
369
|
(_owner, table_name) = @connection.describe(table_name)
|
367
|
-
result = select_value(<<~SQL.squish, "
|
370
|
+
result = select_value(<<~SQL.squish, "SCHEMA")
|
368
371
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ 1 FROM all_indexes i
|
369
372
|
WHERE i.owner = SYS_CONTEXT('userenv', 'current_schema')
|
370
373
|
AND i.table_owner = SYS_CONTEXT('userenv', 'current_schema')
|
@@ -443,7 +446,7 @@ module ActiveRecord
|
|
443
446
|
change_column table_name, column_name, column.sql_type, null: null
|
444
447
|
end
|
445
448
|
|
446
|
-
def change_column(table_name, column_name, type, options
|
449
|
+
def change_column(table_name, column_name, type, **options) #:nodoc:
|
447
450
|
column = column_for(table_name, column_name)
|
448
451
|
|
449
452
|
# remove :null option if its value is the same as current column definition
|
@@ -497,8 +500,9 @@ module ActiveRecord
|
|
497
500
|
end
|
498
501
|
|
499
502
|
def table_comment(table_name) #:nodoc:
|
503
|
+
# TODO
|
500
504
|
(_owner, table_name) = @connection.describe(table_name)
|
501
|
-
select_value(<<~SQL.squish, "
|
505
|
+
select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name)])
|
502
506
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ comments FROM all_tab_comments
|
503
507
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
504
508
|
AND table_name = :table_name
|
@@ -514,7 +518,7 @@ module ActiveRecord
|
|
514
518
|
def column_comment(table_name, column_name) #:nodoc:
|
515
519
|
# TODO: it does not exist in Abstract adapter
|
516
520
|
(_owner, table_name) = @connection.describe(table_name)
|
517
|
-
select_value(<<~SQL.squish, "
|
521
|
+
select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name), bind_string("column_name", column_name.upcase)])
|
518
522
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ comments FROM all_col_comments
|
519
523
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
520
524
|
AND table_name = :table_name
|
@@ -531,7 +535,7 @@ module ActiveRecord
|
|
531
535
|
end
|
532
536
|
|
533
537
|
def tablespace(table_name)
|
534
|
-
select_value(<<~SQL.squish, "
|
538
|
+
select_value(<<~SQL.squish, "SCHEMA")
|
535
539
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ tablespace_name
|
536
540
|
FROM all_tables
|
537
541
|
WHERE table_name='#{table_name.to_s.upcase}'
|
@@ -543,7 +547,7 @@ module ActiveRecord
|
|
543
547
|
def foreign_keys(table_name) #:nodoc:
|
544
548
|
(_owner, desc_table_name) = @connection.describe(table_name)
|
545
549
|
|
546
|
-
fk_info = select_all(<<~SQL.squish, "
|
550
|
+
fk_info = select_all(<<~SQL.squish, "SCHEMA", [bind_string("desc_table_name", desc_table_name)])
|
547
551
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ r.table_name to_table
|
548
552
|
,rc.column_name references_column
|
549
553
|
,cc.column_name
|
@@ -585,7 +589,7 @@ module ActiveRecord
|
|
585
589
|
# REFERENTIAL INTEGRITY ====================================
|
586
590
|
|
587
591
|
def disable_referential_integrity(&block) #:nodoc:
|
588
|
-
old_constraints = select_all(<<~SQL.squish, "
|
592
|
+
old_constraints = select_all(<<~SQL.squish, "SCHEMA")
|
589
593
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ constraint_name, owner, table_name
|
590
594
|
FROM all_constraints
|
591
595
|
WHERE constraint_type = 'R'
|
@@ -617,13 +621,12 @@ module ActiveRecord
|
|
617
621
|
end
|
618
622
|
|
619
623
|
private
|
620
|
-
|
621
624
|
def schema_creation
|
622
625
|
OracleEnhanced::SchemaCreation.new self
|
623
626
|
end
|
624
627
|
|
625
|
-
def create_table_definition(
|
626
|
-
OracleEnhanced::TableDefinition.new(self,
|
628
|
+
def create_table_definition(name, **options)
|
629
|
+
OracleEnhanced::TableDefinition.new(self, name, **options)
|
627
630
|
end
|
628
631
|
|
629
632
|
def new_column_from_field(table_name, field)
|
@@ -645,7 +648,7 @@ module ActiveRecord
|
|
645
648
|
# If a default contains a newline these cleanup regexes need to
|
646
649
|
# match newlines.
|
647
650
|
field["data_default"].sub!(/^'(.*)'$/m, '\1')
|
648
|
-
field["data_default"] = nil if
|
651
|
+
field["data_default"] = nil if /^(null|empty_[bc]lob\(\))$/i.match?(field["data_default"])
|
649
652
|
# TODO: Needs better fix to fallback "N" to false
|
650
653
|
field["data_default"] = false if field["data_default"] == "N" && OracleEnhancedAdapter.emulate_booleans_from_strings
|
651
654
|
end
|
@@ -8,7 +8,7 @@ module ActiveRecord #:nodoc:
|
|
8
8
|
STATEMENT_TOKEN = "\n\n/\n\n"
|
9
9
|
|
10
10
|
def structure_dump #:nodoc:
|
11
|
-
sequences = select(<<~SQL.squish, "
|
11
|
+
sequences = select(<<~SQL.squish, "SCHEMA")
|
12
12
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */
|
13
13
|
sequence_name, min_value, max_value, increment_by, order_flag, cycle_flag
|
14
14
|
FROM all_sequences
|
@@ -18,7 +18,7 @@ module ActiveRecord #:nodoc:
|
|
18
18
|
structure = sequences.map do |result|
|
19
19
|
"CREATE SEQUENCE #{quote_table_name(result["sequence_name"])} MINVALUE #{result["min_value"]} MAXVALUE #{result["max_value"]} INCREMENT BY #{result["increment_by"]} #{result["order_flag"] == 'Y' ? "ORDER" : "NOORDER"} #{result["cycle_flag"] == 'Y' ? "CYCLE" : "NOCYCLE"}"
|
20
20
|
end
|
21
|
-
tables = select_values(<<~SQL.squish, "
|
21
|
+
tables = select_values(<<~SQL.squish, "SCHEMA")
|
22
22
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ table_name FROM all_tables t
|
23
23
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') AND secondary = 'N'
|
24
24
|
AND NOT EXISTS (SELECT mv.mview_name FROM all_mviews mv
|
@@ -30,7 +30,7 @@ module ActiveRecord #:nodoc:
|
|
30
30
|
tables.each do |table_name|
|
31
31
|
virtual_columns = virtual_columns_for(table_name) if supports_virtual_columns?
|
32
32
|
ddl = +"CREATE#{ ' GLOBAL TEMPORARY' if temporary_table?(table_name)} TABLE \"#{table_name}\" (\n"
|
33
|
-
columns = select_all(<<~SQL.squish, "
|
33
|
+
columns = select_all(<<~SQL.squish, "SCHEMA")
|
34
34
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ column_name, data_type, data_length, char_used, char_length,
|
35
35
|
data_precision, data_scale, data_default, nullable
|
36
36
|
FROM all_tab_columns
|
@@ -91,7 +91,7 @@ module ActiveRecord #:nodoc:
|
|
91
91
|
|
92
92
|
def structure_dump_primary_key(table) #:nodoc:
|
93
93
|
opts = { name: "", cols: [] }
|
94
|
-
pks = select_all(<<~SQL.squish, "
|
94
|
+
pks = select_all(<<~SQL.squish, "SCHEMA")
|
95
95
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ a.constraint_name, a.column_name, a.position
|
96
96
|
FROM all_cons_columns a
|
97
97
|
JOIN all_constraints c
|
@@ -110,7 +110,7 @@ module ActiveRecord #:nodoc:
|
|
110
110
|
|
111
111
|
def structure_dump_unique_keys(table) #:nodoc:
|
112
112
|
keys = {}
|
113
|
-
uks = select_all(<<~SQL.squish, "
|
113
|
+
uks = select_all(<<~SQL.squish, "SCHEMA")
|
114
114
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ a.constraint_name, a.column_name, a.position
|
115
115
|
FROM all_cons_columns a
|
116
116
|
JOIN all_constraints c
|
@@ -146,7 +146,7 @@ module ActiveRecord #:nodoc:
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def structure_dump_fk_constraints #:nodoc:
|
149
|
-
foreign_keys = select_all(<<~SQL.squish, "
|
149
|
+
foreign_keys = select_all(<<~SQL.squish, "SCHEMA")
|
150
150
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ table_name FROM all_tables
|
151
151
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY 1
|
152
152
|
SQL
|
@@ -174,7 +174,7 @@ module ActiveRecord #:nodoc:
|
|
174
174
|
|
175
175
|
def structure_dump_column_comments(table_name)
|
176
176
|
comments = []
|
177
|
-
columns = select_values(<<~SQL.squish, "
|
177
|
+
columns = select_values(<<~SQL.squish, "SCHEMA")
|
178
178
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ column_name FROM user_tab_columns
|
179
179
|
WHERE table_name = '#{table_name}' ORDER BY column_id
|
180
180
|
SQL
|
@@ -208,7 +208,7 @@ module ActiveRecord #:nodoc:
|
|
208
208
|
# Extract all stored procedures, packages, synonyms.
|
209
209
|
def structure_dump_db_stored_code #:nodoc:
|
210
210
|
structure = []
|
211
|
-
all_source = select_all(<<~SQL.squish, "
|
211
|
+
all_source = select_all(<<~SQL.squish, "SCHEMA")
|
212
212
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ DISTINCT name, type
|
213
213
|
FROM all_source
|
214
214
|
WHERE type IN ('PROCEDURE', 'PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'TRIGGER', 'TYPE')
|
@@ -240,7 +240,7 @@ module ActiveRecord #:nodoc:
|
|
240
240
|
|
241
241
|
def structure_dump_views #:nodoc:
|
242
242
|
structure = []
|
243
|
-
views = select_all(<<~SQL.squish, "
|
243
|
+
views = select_all(<<~SQL.squish, "SCHEMA")
|
244
244
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ view_name, text FROM all_views
|
245
245
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY view_name ASC
|
246
246
|
SQL
|
@@ -252,7 +252,7 @@ module ActiveRecord #:nodoc:
|
|
252
252
|
|
253
253
|
def structure_dump_synonyms #:nodoc:
|
254
254
|
structure = []
|
255
|
-
synonyms = select_all(<<~SQL.squish, "
|
255
|
+
synonyms = select_all(<<~SQL.squish, "SCHEMA")
|
256
256
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ owner, synonym_name, table_name, table_owner
|
257
257
|
FROM all_synonyms
|
258
258
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
@@ -265,14 +265,14 @@ module ActiveRecord #:nodoc:
|
|
265
265
|
end
|
266
266
|
|
267
267
|
def structure_drop #:nodoc:
|
268
|
-
sequences = select_values(<<~SQL.squish, "
|
268
|
+
sequences = select_values(<<~SQL.squish, "SCHEMA")
|
269
269
|
SELECT/*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */
|
270
270
|
sequence_name FROM all_sequences where sequence_owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY 1
|
271
271
|
SQL
|
272
272
|
statements = sequences.map do |seq|
|
273
273
|
"DROP SEQUENCE \"#{seq}\""
|
274
274
|
end
|
275
|
-
tables = select_values(<<~SQL.squish, "
|
275
|
+
tables = select_values(<<~SQL.squish, "SCHEMA")
|
276
276
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ table_name from all_tables t
|
277
277
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') AND secondary = 'N'
|
278
278
|
AND NOT EXISTS (SELECT mv.mview_name FROM all_mviews mv
|
@@ -288,7 +288,7 @@ module ActiveRecord #:nodoc:
|
|
288
288
|
end
|
289
289
|
|
290
290
|
def temp_table_drop #:nodoc:
|
291
|
-
temporary_tables = select_values(<<~SQL.squish, "
|
291
|
+
temporary_tables = select_values(<<~SQL.squish, "SCHEMA")
|
292
292
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ table_name FROM all_tables
|
293
293
|
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
|
294
294
|
AND secondary = 'N' AND temporary = 'Y' ORDER BY 1
|
@@ -319,11 +319,10 @@ module ActiveRecord #:nodoc:
|
|
319
319
|
end
|
320
320
|
|
321
321
|
private
|
322
|
-
|
323
322
|
# Called only if `supports_virtual_columns?` returns true
|
324
323
|
# return [{'column_name' => 'FOOS', 'data_default' => '...'}, ...]
|
325
324
|
def virtual_columns_for(table)
|
326
|
-
select_all(<<~SQL.squish, "
|
325
|
+
select_all(<<~SQL.squish, "SCHEMA")
|
327
326
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ column_name, data_default
|
328
327
|
FROM all_tab_cols
|
329
328
|
WHERE virtual_column = 'YES'
|
@@ -334,7 +333,7 @@ module ActiveRecord #:nodoc:
|
|
334
333
|
|
335
334
|
def drop_sql_for_feature(type)
|
336
335
|
short_type = type == "materialized view" ? "mview" : type
|
337
|
-
features = select_values(<<~SQL.squish, "
|
336
|
+
features = select_values(<<~SQL.squish, "SCHEMA")
|
338
337
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ #{short_type}_name FROM all_#{short_type.tableize}
|
339
338
|
where owner = SYS_CONTEXT('userenv', 'current_schema')
|
340
339
|
SQL
|
@@ -345,7 +344,7 @@ module ActiveRecord #:nodoc:
|
|
345
344
|
end
|
346
345
|
|
347
346
|
def drop_sql_for_object(type)
|
348
|
-
objects = select_values(<<~SQL.squish, "
|
347
|
+
objects = select_values(<<~SQL.squish, "SCHEMA")
|
349
348
|
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ object_name FROM all_objects
|
350
349
|
WHERE object_type = '#{type.upcase}' and owner = SYS_CONTEXT('userenv', 'current_schema')
|
351
350
|
SQL
|