Skip to content

Commit dc60fa3

Browse files
committed
Support SQLCounter change to ignore "SCHEMA" and "TRANSACTION" log
Refer rails/rails#36153 and rails/rails#36202 Some of Oracle enhanced adapter unit tests get failed because they depend on log output which is not logged since they are "SCHEMA". To workaround these failures overriding `ActiveRecord::LogSubscriber::IGNORE_PAYLOAD_NAMES` in `spec/spec_helper.rb`, which causes these warnings. ``` $ bundle exec rspec ==> Loading config from ENV or use default ==> Running specs with MRI version 2.6.3 ==> Effective ActiveRecord version 6.1.0.alpha /home/yahonda/git/oracle-enhanced/spec/spec_helper.rb:112: warning: already initialized constant ActiveRecord::LogSubscriber::IGNORE_PAYLOAD_NAMES /home/yahonda/git/rails/activerecord/lib/active_record/log_subscriber.rb:5: warning: previous definition of IGNORE_PAYLOAD_NAMES was here ```
1 parent 4753a76 commit dc60fa3

File tree

6 files changed

+54
-44
lines changed

6 files changed

+54
-44
lines changed

lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,11 @@ def exec_rollback_db_transaction #:nodoc:
189189
end
190190

191191
def create_savepoint(name = current_savepoint_name) #:nodoc:
192-
execute("SAVEPOINT #{name}")
192+
execute("SAVEPOINT #{name}", "TRANSACTION")
193193
end
194194

195195
def exec_rollback_to_savepoint(name = current_savepoint_name) #:nodoc:
196-
execute("ROLLBACK TO #{name}")
196+
execute("ROLLBACK TO #{name}", "TRANSACTION")
197197
end
198198

199199
def release_savepoint(name = current_savepoint_name) #:nodoc:

lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def default_primary_key?(column)
167167

168168
def extract_expression_for_virtual_column(column)
169169
column_name = column.name
170-
@connection.select_value(<<~SQL.squish, "Table comment", [bind_string("table_name", table_name.upcase), bind_string("column_name", column_name.upcase)]).inspect
170+
@connection.select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name.upcase), bind_string("column_name", column_name.upcase)]).inspect
171171
select data_default from all_tab_columns
172172
where owner = SYS_CONTEXT('userenv', 'current_schema')
173173
and table_name = :table_name

lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module SchemaStatements
1111
# see: abstract/schema_statements.rb
1212

1313
def tables #:nodoc:
14-
select_values(<<~SQL.squish, "tables")
14+
select_values(<<~SQL.squish, "SCHEMA")
1515
SELECT DECODE(table_name, UPPER(table_name), LOWER(table_name), table_name)
1616
FROM all_tables
1717
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
@@ -43,7 +43,7 @@ def table_exists?(table_name)
4343
table_owner, table_name = default_owner, real_name
4444
end
4545

46-
select_values(<<~SQL.squish, "table exists", [bind_string("owner", table_owner), bind_string("table_name", table_name)]).any?
46+
select_values(<<~SQL.squish, "SCHEMA", [bind_string("owner", table_owner), bind_string("table_name", table_name)]).any?
4747
SELECT owner, table_name
4848
FROM all_tables
4949
WHERE owner = :owner
@@ -59,20 +59,20 @@ def data_source_exists?(table_name)
5959
end
6060

6161
def views # :nodoc:
62-
select_values(<<~SQL.squish, "views")
62+
select_values(<<~SQL.squish, "SCHEMA")
6363
SELECT LOWER(view_name) FROM all_views WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
6464
SQL
6565
end
6666

6767
def materialized_views #:nodoc:
68-
select_values(<<~SQL.squish, "materialized views")
68+
select_values(<<~SQL.squish, "SCHEMA")
6969
SELECT LOWER(mview_name) FROM all_mviews WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
7070
SQL
7171
end
7272

7373
# get synonyms for schema dump
7474
def synonyms
75-
result = select_all(<<~SQL.squish, "synonyms")
75+
result = select_all(<<~SQL.squish, "SCHEMA")
7676
SELECT synonym_name, table_owner, table_name
7777
FROM all_synonyms where owner = SYS_CONTEXT('userenv', 'current_schema')
7878
SQL
@@ -87,7 +87,7 @@ def indexes(table_name) #:nodoc:
8787
(_owner, table_name) = @connection.describe(table_name)
8888
default_tablespace_name = default_tablespace
8989

90-
result = select_all(<<~SQL.squish, "indexes", [bind_string("table_name", table_name)])
90+
result = select_all(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name)])
9191
SELECT LOWER(i.table_name) AS table_name, LOWER(i.index_name) AS index_name, i.uniqueness,
9292
i.index_type, i.ityp_owner, i.ityp_name, i.parameters,
9393
LOWER(i.tablespace_name) AS tablespace_name,
@@ -117,7 +117,7 @@ def indexes(table_name) #:nodoc:
117117
statement_parameters = nil
118118
if row["index_type"] == "DOMAIN" && row["ityp_owner"] == "CTXSYS" && row["ityp_name"] == "CONTEXT"
119119
procedure_name = default_datastore_procedure(row["index_name"])
120-
source = select_values(<<~SQL.squish, "procedure", [bind_string("procedure_name", procedure_name.upcase)]).join
120+
source = select_values(<<~SQL.squish, "SCHEMA", [bind_string("procedure_name", procedure_name.upcase)]).join
121121
SELECT text
122122
FROM all_source
123123
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
@@ -366,7 +366,7 @@ def index_name(table_name, options) #:nodoc:
366366
# Will always query database and not index cache.
367367
def index_name_exists?(table_name, index_name)
368368
(_owner, table_name) = @connection.describe(table_name)
369-
result = select_value(<<~SQL.squish, "index name exists")
369+
result = select_value(<<~SQL.squish, "SCHEMA")
370370
SELECT 1 FROM all_indexes i
371371
WHERE i.owner = SYS_CONTEXT('userenv', 'current_schema')
372372
AND i.table_owner = SYS_CONTEXT('userenv', 'current_schema')
@@ -499,8 +499,9 @@ def change_column_comment(table_name, column_name, comment_or_changes)
499499
end
500500

501501
def table_comment(table_name) #:nodoc:
502+
# TODO
502503
(_owner, table_name) = @connection.describe(table_name)
503-
select_value(<<~SQL.squish, "Table comment", [bind_string("table_name", table_name)])
504+
select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name)])
504505
SELECT comments FROM all_tab_comments
505506
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
506507
AND table_name = :table_name
@@ -516,7 +517,7 @@ def table_options(table_name) # :nodoc:
516517
def column_comment(table_name, column_name) #:nodoc:
517518
# TODO: it does not exist in Abstract adapter
518519
(_owner, table_name) = @connection.describe(table_name)
519-
select_value(<<~SQL.squish, "Column comment", [bind_string("table_name", table_name), bind_string("column_name", column_name.upcase)])
520+
select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name), bind_string("column_name", column_name.upcase)])
520521
SELECT comments FROM all_col_comments
521522
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
522523
AND table_name = :table_name
@@ -533,7 +534,7 @@ def type_to_sql(type, limit: nil, precision: nil, scale: nil, **) #:nodoc:
533534
end
534535

535536
def tablespace(table_name)
536-
select_value(<<~SQL.squish, "tablespace")
537+
select_value(<<~SQL.squish, "SCHEMA")
537538
SELECT tablespace_name
538539
FROM all_tables
539540
WHERE table_name='#{table_name.to_s.upcase}'
@@ -545,7 +546,7 @@ def tablespace(table_name)
545546
def foreign_keys(table_name) #:nodoc:
546547
(_owner, desc_table_name) = @connection.describe(table_name)
547548

548-
fk_info = select_all(<<~SQL.squish, "Foreign Keys", [bind_string("desc_table_name", desc_table_name)])
549+
fk_info = select_all(<<~SQL.squish, "SCHEMA", [bind_string("desc_table_name", desc_table_name)])
549550
SELECT r.table_name to_table
550551
,rc.column_name references_column
551552
,cc.column_name
@@ -587,7 +588,7 @@ def extract_foreign_key_action(specifier) # :nodoc:
587588
# REFERENTIAL INTEGRITY ====================================
588589

589590
def disable_referential_integrity(&block) #:nodoc:
590-
old_constraints = select_all(<<~SQL.squish, "Foreign Keys to disable and enable")
591+
old_constraints = select_all(<<~SQL.squish, "SCHEMA")
591592
SELECT constraint_name, owner, table_name
592593
FROM all_constraints
593594
WHERE constraint_type = 'R'

lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module StructureDump #:nodoc:
88
STATEMENT_TOKEN = "\n\n/\n\n"
99

1010
def structure_dump #:nodoc:
11-
sequences = select(<<~SQL.squish, "sequences to dump at structure dump")
11+
sequences = select(<<~SQL.squish, "SCHEMA")
1212
SELECT sequence_name, min_value, max_value, increment_by, order_flag, cycle_flag
1313
FROM all_sequences
1414
where sequence_owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY 1
@@ -17,7 +17,7 @@ def structure_dump #:nodoc:
1717
structure = sequences.map do |result|
1818
"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"}"
1919
end
20-
tables = select_values(<<~SQL.squish, "tables at structure dump")
20+
tables = select_values(<<~SQL.squish, "SCHEMA")
2121
SELECT table_name FROM all_tables t
2222
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') AND secondary = 'N'
2323
AND NOT EXISTS (SELECT mv.mview_name FROM all_mviews mv
@@ -29,7 +29,7 @@ def structure_dump #:nodoc:
2929
tables.each do |table_name|
3030
virtual_columns = virtual_columns_for(table_name) if supports_virtual_columns?
3131
ddl = +"CREATE#{ ' GLOBAL TEMPORARY' if temporary_table?(table_name)} TABLE \"#{table_name}\" (\n"
32-
columns = select_all(<<~SQL.squish, "columns at structure dump")
32+
columns = select_all(<<~SQL.squish, "SCHEMA")
3333
SELECT column_name, data_type, data_length, char_used, char_length,
3434
data_precision, data_scale, data_default, nullable
3535
FROM all_tab_columns
@@ -89,7 +89,7 @@ def structure_dump_virtual_column(column, data_default) #:nodoc:
8989

9090
def structure_dump_primary_key(table) #:nodoc:
9191
opts = { name: "", cols: [] }
92-
pks = select_all(<<~SQL.squish, "Primary Keys")
92+
pks = select_all(<<~SQL.squish, "SCHEMA")
9393
SELECT a.constraint_name, a.column_name, a.position
9494
FROM all_cons_columns a
9595
JOIN all_constraints c
@@ -108,7 +108,7 @@ def structure_dump_primary_key(table) #:nodoc:
108108

109109
def structure_dump_unique_keys(table) #:nodoc:
110110
keys = {}
111-
uks = select_all(<<~SQL.squish, "Primary Keys")
111+
uks = select_all(<<~SQL.squish, "SCHEMA")
112112
SELECT a.constraint_name, a.column_name, a.position
113113
FROM all_cons_columns a
114114
JOIN all_constraints c
@@ -144,7 +144,7 @@ def structure_dump_indexes(table_name) #:nodoc:
144144
end
145145

146146
def structure_dump_fk_constraints #:nodoc:
147-
foreign_keys = select_all(<<~SQL.squish, "foreign keys at structure dump")
147+
foreign_keys = select_all(<<~SQL.squish, "SCHEMA")
148148
SELECT table_name FROM all_tables
149149
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY 1
150150
SQL
@@ -172,7 +172,7 @@ def structure_dump_table_comments(table_name)
172172

173173
def structure_dump_column_comments(table_name)
174174
comments = []
175-
columns = select_values(<<~SQL.squish, "column comments at structure dump")
175+
columns = select_values(<<~SQL.squish, "SCHEMA")
176176
SELECT column_name FROM user_tab_columns
177177
WHERE table_name = '#{table_name}' ORDER BY column_id
178178
SQL
@@ -206,7 +206,7 @@ def foreign_key_definition(to_table, options = {}) #:nodoc:
206206
# Extract all stored procedures, packages, synonyms.
207207
def structure_dump_db_stored_code #:nodoc:
208208
structure = []
209-
all_source = select_all(<<~SQL.squish, "stored program at structure dump")
209+
all_source = select_all(<<~SQL.squish, "SCHEMA")
210210
SELECT DISTINCT name, type
211211
FROM all_source
212212
WHERE type IN ('PROCEDURE', 'PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'TRIGGER', 'TYPE')
@@ -238,7 +238,7 @@ def structure_dump_db_stored_code #:nodoc:
238238

239239
def structure_dump_views #:nodoc:
240240
structure = []
241-
views = select_all(<<~SQL.squish, "views at structure dump")
241+
views = select_all(<<~SQL.squish, "SCHEMA")
242242
SELECT view_name, text FROM all_views
243243
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY view_name ASC
244244
SQL
@@ -250,7 +250,7 @@ def structure_dump_views #:nodoc:
250250

251251
def structure_dump_synonyms #:nodoc:
252252
structure = []
253-
synonyms = select_all(<<~SQL.squish, "synonyms at structure dump")
253+
synonyms = select_all(<<~SQL.squish, "SCHEMA")
254254
SELECT owner, synonym_name, table_name, table_owner
255255
FROM all_synonyms
256256
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
@@ -263,13 +263,13 @@ def structure_dump_synonyms #:nodoc:
263263
end
264264

265265
def structure_drop #:nodoc:
266-
sequences = select_values(<<~SQL.squish, "sequences to drop at structure dump")
266+
sequences = select_values(<<~SQL.squish, "SCHEMA")
267267
SELECT sequence_name FROM all_sequences where sequence_owner = SYS_CONTEXT('userenv', 'current_schema') ORDER BY 1
268268
SQL
269269
statements = sequences.map do |seq|
270270
"DROP SEQUENCE \"#{seq}\""
271271
end
272-
tables = select_values(<<~SQL.squish, "tables to drop at structure dump")
272+
tables = select_values(<<~SQL.squish, "SCHEMA")
273273
SELECT table_name from all_tables t
274274
WHERE owner = SYS_CONTEXT('userenv', 'current_schema') AND secondary = 'N'
275275
AND NOT EXISTS (SELECT mv.mview_name FROM all_mviews mv
@@ -285,7 +285,7 @@ def structure_drop #:nodoc:
285285
end
286286

287287
def temp_table_drop #:nodoc:
288-
temporary_tables = select_values(<<~SQL.squish, "temporary tables to drop at structure dump")
288+
temporary_tables = select_values(<<~SQL.squish, "SCHEMA")
289289
SELECT table_name FROM all_tables
290290
WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
291291
AND secondary = 'N' AND temporary = 'Y' ORDER BY 1
@@ -319,7 +319,7 @@ def execute_structure_dump(string)
319319
# Called only if `supports_virtual_columns?` returns true
320320
# return [{'column_name' => 'FOOS', 'data_default' => '...'}, ...]
321321
def virtual_columns_for(table)
322-
select_all(<<~SQL.squish, "virtual columns for")
322+
select_all(<<~SQL.squish, "SCHEMA")
323323
SELECT column_name, data_default
324324
FROM all_tab_cols
325325
WHERE virtual_column = 'YES'
@@ -330,7 +330,7 @@ def virtual_columns_for(table)
330330

331331
def drop_sql_for_feature(type)
332332
short_type = type == "materialized view" ? "mview" : type
333-
features = select_values(<<~SQL.squish, "features to drop")
333+
features = select_values(<<~SQL.squish, "SCHEMA")
334334
SELECT #{short_type}_name FROM all_#{short_type.tableize}
335335
where owner = SYS_CONTEXT('userenv', 'current_schema')
336336
SQL
@@ -341,7 +341,7 @@ def drop_sql_for_feature(type)
341341
end
342342

343343
def drop_sql_for_object(type)
344-
objects = select_values(<<~SQL.squish, "objects to drop")
344+
objects = select_values(<<~SQL.squish, "SCHEMA")
345345
SELECT object_name FROM all_objects
346346
WHERE object_type = '#{type.upcase}' and owner = SYS_CONTEXT('userenv', 'current_schema')
347347
SQL

lib/active_record/connection_adapters/oracle_enhanced_adapter.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ def next_sequence_value(sequence_name)
463463
# if sequence_name is set to :autogenerated then it means that primary key will be populated by trigger
464464
raise ArgumentError "Trigger based primary key is not supported" if sequence_name == AUTOGENERATED_SEQUENCE_NAME
465465
# call directly connection method to avoid prepared statement which causes fetching of next sequence value twice
466-
select_value(<<~SQL.squish, "next sequence value")
466+
select_value(<<~SQL.squish, "SCHEMA")
467467
SELECT #{quote_table_name(sequence_name)}.NEXTVAL FROM dual
468468
SQL
469469
end
@@ -501,7 +501,7 @@ def reset_pk_sequence!(table_name, primary_key = nil, sequence_name = nil) #:nod
501501
end
502502

503503
if primary_key && sequence_name
504-
new_start_value = select_value(<<~SQL.squish, "new start value")
504+
new_start_value = select_value(<<~SQL.squish, "SCHEMA")
505505
select NVL(max(#{quote_column_name(primary_key)}),0) + 1 from #{quote_table_name(table_name)}
506506
SQL
507507

@@ -512,32 +512,32 @@ def reset_pk_sequence!(table_name, primary_key = nil, sequence_name = nil) #:nod
512512

513513
# Current database name
514514
def current_database
515-
select_value(<<~SQL.squish, "current database on CDB ")
515+
select_value(<<~SQL.squish, "SCHEMA")
516516
SELECT SYS_CONTEXT('userenv', 'con_name') FROM dual
517517
SQL
518518
rescue ActiveRecord::StatementInvalid
519-
select_value(<<~SQL.squish, "current database")
519+
select_value(<<~SQL.squish, "SCHEMA")
520520
SELECT SYS_CONTEXT('userenv', 'db_name') FROM dual
521521
SQL
522522
end
523523

524524
# Current database session user
525525
def current_user
526-
select_value(<<~SQL.squish, "current user")
526+
select_value(<<~SQL.squish, "SCHEMA")
527527
SELECT SYS_CONTEXT('userenv', 'session_user') FROM dual
528528
SQL
529529
end
530530

531531
# Current database session schema
532532
def current_schema
533-
select_value(<<~SQL.squish, "current schema")
533+
select_value(<<~SQL.squish, "SCHEMA")
534534
SELECT SYS_CONTEXT('userenv', 'current_schema') FROM dual
535535
SQL
536536
end
537537

538538
# Default tablespace name of current user
539539
def default_tablespace
540-
select_value(<<~SQL.squish, "default tablespace")
540+
select_value(<<~SQL.squish, "SCHEMA")
541541
SELECT LOWER(default_tablespace) FROM user_users
542542
WHERE username = SYS_CONTEXT('userenv', 'current_schema')
543543
SQL
@@ -546,7 +546,7 @@ def default_tablespace
546546
def column_definitions(table_name)
547547
(owner, desc_table_name) = @connection.describe(table_name)
548548

549-
select_all(<<~SQL.squish, "Column definitions")
549+
select_all(<<~SQL.squish, "SCHEMA")
550550
SELECT cols.column_name AS name, cols.data_type AS sql_type,
551551
cols.data_default, cols.nullable, cols.virtual_column, cols.hidden_column,
552552
cols.data_type_owner AS sql_type_owner,
@@ -578,15 +578,15 @@ def clear_table_columns_cache(table_name)
578578
def pk_and_sequence_for(table_name, owner = nil, desc_table_name = nil) #:nodoc:
579579
(owner, desc_table_name) = @connection.describe(table_name)
580580

581-
seqs = select_values(<<~SQL.squish, "Sequence")
581+
seqs = select_values(<<~SQL.squish, "SCHEMA")
582582
select us.sequence_name
583583
from all_sequences us
584584
where us.sequence_owner = '#{owner}'
585585
and us.sequence_name = upper(#{quote(default_sequence_name(desc_table_name))})
586586
SQL
587587

588588
# changed back from user_constraints to all_constraints for consistency
589-
pks = select_values(<<~SQL.squish, "Primary Key")
589+
pks = select_values(<<~SQL.squish, "SCHEMA")
590590
SELECT cc.column_name
591591
FROM all_constraints c, all_cons_columns cc
592592
WHERE c.owner = '#{owner}'
@@ -620,7 +620,7 @@ def has_primary_key?(table_name, owner = nil, desc_table_name = nil) #:nodoc:
620620
def primary_keys(table_name) # :nodoc:
621621
(_owner, desc_table_name) = @connection.describe(table_name)
622622

623-
pks = select_values(<<~SQL.squish, "Primary Keys", [bind_string("table_name", desc_table_name)])
623+
pks = select_values(<<~SQL.squish, "SCHEMA", [bind_string("table_name", desc_table_name)])
624624
SELECT cc.column_name
625625
FROM all_constraints c, all_cons_columns cc
626626
WHERE c.owner = SYS_CONTEXT('userenv', 'current_schema')
@@ -650,7 +650,7 @@ def columns_for_distinct(columns, orders) #:nodoc:
650650
end
651651

652652
def temporary_table?(table_name) #:nodoc:
653-
select_value(<<~SQL.squish, "temporary table", [bind_string("table_name", table_name.upcase)]) == "Y"
653+
select_value(<<~SQL.squish, "SCHEMA", [bind_string("table_name", table_name.upcase)]) == "Y"
654654
SELECT temporary FROM all_tables WHERE table_name = :table_name and owner = SYS_CONTEXT('userenv', 'current_schema')
655655
SQL
656656
end

0 commit comments

Comments
 (0)