activerecord-oracle_enhanced-adapter 6.0.0.beta1 → 6.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/History.md +25 -1
 - data/VERSION +1 -1
 - data/lib/active_record/connection_adapters/oracle_enhanced/column.rb +2 -2
 - data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +21 -21
 - data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +57 -57
 - data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +3 -3
 - data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +5 -5
 - data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +5 -2
 - data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +41 -40
 - data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +35 -35
 - data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +26 -22
 - data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +1 -1
 - data/spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb +17 -17
 - data/spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb +2 -2
 - data/spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb +1 -1
 - data/spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb +24 -24
 - data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +2 -2
 - data/spec/active_record/oracle_enhanced/type/boolean_spec.rb +2 -2
 - data/spec/active_record/oracle_enhanced/type/character_string_spec.rb +1 -1
 - data/spec/active_record/oracle_enhanced/type/integer_spec.rb +2 -2
 - data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +1 -1
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 20b3aea35f3c42e8485b1b11ec0c5a549e0571b81522e5608abea0a6916d38f8
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 53379822a99628e864639ed410712386bbf025de3c75ac5f9aa99e33fa0cf170
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9c928e3b86ca4f34e45ad25ca37737f605fddfae4ae5b9205812f05079655a46fa748aa6f70d926b41269574bcc811bb297396ae60325a10211ffb3854b6b08e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1e8e54cab8bb27dc6754f559a19ee5ed60dfcad8835b6352ffd60304cd122294f326bf02bf93bd458410f8d319d2e707457d09292a9bfde56dcddc041e53e0fd
         
     | 
    
        data/History.md
    CHANGED
    
    | 
         @@ -1,4 +1,28 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ## 6.0.0. 
     | 
| 
      
 1 
     | 
    
         
            +
            ## 6.0.0.rc1 / 2019-04-25
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Major changes
         
     | 
| 
      
 4 
     | 
    
         
            +
              * Support Rails 6.0.0 rc1
         
     | 
| 
      
 5 
     | 
    
         
            +
              * Address `ORA-01795: maximum number of expressions in a list is 1000`
         
     | 
| 
      
 6 
     | 
    
         
            +
                - These changes has been made to Rails itself [rails/rails#35838, rails/rails#36074]
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            * Changes and bug fixes
         
     | 
| 
      
 9 
     | 
    
         
            +
              * Cache database version in schema cache [#1859]
         
     | 
| 
      
 10 
     | 
    
         
            +
              * Except `table_name` from column objects [#1860]
         
     | 
| 
      
 11 
     | 
    
         
            +
              * Remove unused `sequence_name` in `sql_for_insert` [#1861]
         
     | 
| 
      
 12 
     | 
    
         
            +
              * Use squiggly heredoc to strip odd indentation in the executed SQL [#1869]
         
     | 
| 
      
 13 
     | 
    
         
            +
              * Use Active Support `String#squish` instead of `String#strip.gsub` [#1871]
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            * CI
         
     | 
| 
      
 16 
     | 
    
         
            +
              * Revert "Add `allow_railures` for jruby-head until #1833 resolved" [#1862]
         
     | 
| 
      
 17 
     | 
    
         
            +
              * CI against JRuby 9.2.7.0 [#1864]
         
     | 
| 
      
 18 
     | 
    
         
            +
              * Use newer Code Climate analysis model, version 2 [#1868]
         
     | 
| 
      
 19 
     | 
    
         
            +
              * CI against Ruby 2.6.3 [#1870]
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            * RuboCop
         
     | 
| 
      
 22 
     | 
    
         
            +
              * Bump RuboCop version to 0.67 [#1867]
         
     | 
| 
      
 23 
     | 
    
         
            +
              * Enable `Layout/SpaceBeforeComment` cop [#1863]
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ## 6.0.0.beta1 / 2019-03-18
         
     | 
| 
       2 
26 
     | 
    
         | 
| 
       3 
27 
     | 
    
         
             
            * Major changes
         
     | 
| 
       4 
28 
     | 
    
         | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            6.0.0. 
     | 
| 
      
 1 
     | 
    
         
            +
            6.0.0.rc1
         
     | 
| 
         @@ -6,8 +6,8 @@ module ActiveRecord 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  class Column < ActiveRecord::ConnectionAdapters::Column
         
     | 
| 
       7 
7 
     | 
    
         
             
                    delegate :virtual, to: :sql_type_metadata, allow_nil: true
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                    def initialize(name, default, sql_type_metadata = nil, null = true,  
     | 
| 
       10 
     | 
    
         
            -
                      super(name, default, sql_type_metadata, null,  
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(name, default, sql_type_metadata = nil, null = true, comment: nil) #:nodoc:
         
     | 
| 
      
 10 
     | 
    
         
            +
                      super(name, default, sql_type_metadata, null, comment: comment)
         
     | 
| 
       11 
11 
     | 
    
         
             
                    end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                    def virtual?
         
     | 
| 
         @@ -34,27 +34,27 @@ module ActiveRecord 
     | 
|
| 
       34 
34 
     | 
    
         
             
                        else
         
     | 
| 
       35 
35 
     | 
    
         
             
                          table_owner, table_name = default_owner, real_name
         
     | 
| 
       36 
36 
     | 
    
         
             
                        end
         
     | 
| 
       37 
     | 
    
         
            -
                        sql =  
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                        sql = <<~SQL.squish
         
     | 
| 
      
 38 
     | 
    
         
            +
                          SELECT owner, table_name, 'TABLE' name_type
         
     | 
| 
      
 39 
     | 
    
         
            +
                          FROM all_tables
         
     | 
| 
      
 40 
     | 
    
         
            +
                          WHERE owner = '#{table_owner}'
         
     | 
| 
      
 41 
     | 
    
         
            +
                            AND table_name = '#{table_name}'
         
     | 
| 
      
 42 
     | 
    
         
            +
                          UNION ALL
         
     | 
| 
      
 43 
     | 
    
         
            +
                          SELECT owner, view_name table_name, 'VIEW' name_type
         
     | 
| 
      
 44 
     | 
    
         
            +
                          FROM all_views
         
     | 
| 
      
 45 
     | 
    
         
            +
                          WHERE owner = '#{table_owner}'
         
     | 
| 
      
 46 
     | 
    
         
            +
                            AND view_name = '#{table_name}'
         
     | 
| 
      
 47 
     | 
    
         
            +
                          UNION ALL
         
     | 
| 
      
 48 
     | 
    
         
            +
                          SELECT table_owner, table_name, 'SYNONYM' name_type
         
     | 
| 
      
 49 
     | 
    
         
            +
                          FROM all_synonyms
         
     | 
| 
      
 50 
     | 
    
         
            +
                          WHERE owner = '#{table_owner}'
         
     | 
| 
      
 51 
     | 
    
         
            +
                            AND synonym_name = '#{table_name}'
         
     | 
| 
      
 52 
     | 
    
         
            +
                          UNION ALL
         
     | 
| 
      
 53 
     | 
    
         
            +
                          SELECT table_owner, table_name, 'SYNONYM' name_type
         
     | 
| 
      
 54 
     | 
    
         
            +
                          FROM all_synonyms
         
     | 
| 
      
 55 
     | 
    
         
            +
                          WHERE owner = 'PUBLIC'
         
     | 
| 
      
 56 
     | 
    
         
            +
                            AND synonym_name = '#{real_name}'
         
     | 
| 
      
 57 
     | 
    
         
            +
                        SQL
         
     | 
| 
       58 
58 
     | 
    
         
             
                        if result = _select_one(sql)
         
     | 
| 
       59 
59 
     | 
    
         
             
                          case result["name_type"]
         
     | 
| 
       60 
60 
     | 
    
         
             
                          when "SYNONYM"
         
     | 
| 
         @@ -149,56 +149,56 @@ module ActiveRecord 
     | 
|
| 
       149 
149 
     | 
    
         
             
                        select_queries = select_queries.map { |s| s.strip.gsub(/\s+/, " ") }
         
     | 
| 
       150 
150 
     | 
    
         
             
                        keys, selected_columns = parse_select_queries(select_queries)
         
     | 
| 
       151 
151 
     | 
    
         
             
                        quoted_column_names = (column_names + keys).map { |col| quote_column_name(col) }
         
     | 
| 
       152 
     | 
    
         
            -
                        execute  
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
                          #{
         
     | 
| 
       158 
     | 
    
         
            -
                          selected_columns.map do |cols|
         
     | 
| 
       159 
     | 
    
         
            -
                            cols.map do |col|
         
     | 
| 
       160 
     | 
    
         
            -
                              raise ArgumentError, "Alias #{col} too large, should be 28 or less characters long" unless col.length <= 28
         
     | 
| 
       161 
     | 
    
         
            -
                              "l_#{col} VARCHAR2(32767);\n"
         
     | 
| 
       162 
     | 
    
         
            -
                            end.join
         
     | 
| 
       163 
     | 
    
         
            -
                          end.join
         
     | 
| 
       164 
     | 
    
         
            -
                          } BEGIN
         
     | 
| 
       165 
     | 
    
         
            -
                          FOR r1 IN (
         
     | 
| 
       166 
     | 
    
         
            -
                            SELECT #{quoted_column_names.join(', ')}
         
     | 
| 
       167 
     | 
    
         
            -
                            FROM	 #{quoted_table_name}
         
     | 
| 
       168 
     | 
    
         
            -
                            WHERE  #{quoted_table_name}.ROWID = p_rowid
         
     | 
| 
       169 
     | 
    
         
            -
                          ) LOOP
         
     | 
| 
      
 152 
     | 
    
         
            +
                        execute <<~SQL
         
     | 
| 
      
 153 
     | 
    
         
            +
                          CREATE OR REPLACE PROCEDURE #{quote_table_name(procedure_name)}
         
     | 
| 
      
 154 
     | 
    
         
            +
                            (p_rowid IN	      ROWID,
         
     | 
| 
      
 155 
     | 
    
         
            +
                            p_clob	IN OUT NOCOPY CLOB) IS
         
     | 
| 
      
 156 
     | 
    
         
            +
                            -- add_context_index_parameters #{(column_names + select_queries).inspect}#{!options.empty? ? +', ' << options.inspect[1..-2] : ''}
         
     | 
| 
       170 
157 
     | 
    
         
             
                            #{
         
     | 
| 
       171 
     | 
    
         
            -
                             
     | 
| 
       172 
     | 
    
         
            -
                               
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
                               
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
                             
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                               
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
                               
     | 
| 
       184 
     | 
    
         
            -
                               
     | 
| 
       185 
     | 
    
         
            -
                              (cols.map do |col|
         
     | 
| 
       186 
     | 
    
         
            -
                                "l_#{col} := l_#{col} || r2.#{col} || CHR(10);\n"
         
     | 
| 
       187 
     | 
    
         
            -
                              end.join) <<
         
     | 
| 
       188 
     | 
    
         
            -
                              "END LOOP;\n" <<
         
     | 
| 
       189 
     | 
    
         
            -
                              (cols.map do |col|
         
     | 
| 
      
 158 
     | 
    
         
            +
                            selected_columns.map do |cols|
         
     | 
| 
      
 159 
     | 
    
         
            +
                              cols.map do |col|
         
     | 
| 
      
 160 
     | 
    
         
            +
                                raise ArgumentError, "Alias #{col} too large, should be 28 or less characters long" unless col.length <= 28
         
     | 
| 
      
 161 
     | 
    
         
            +
                                "l_#{col} VARCHAR2(32767);\n"
         
     | 
| 
      
 162 
     | 
    
         
            +
                              end.join
         
     | 
| 
      
 163 
     | 
    
         
            +
                            end.join
         
     | 
| 
      
 164 
     | 
    
         
            +
                            } BEGIN
         
     | 
| 
      
 165 
     | 
    
         
            +
                            FOR r1 IN (
         
     | 
| 
      
 166 
     | 
    
         
            +
                              SELECT #{quoted_column_names.join(', ')}
         
     | 
| 
      
 167 
     | 
    
         
            +
                              FROM	 #{quoted_table_name}
         
     | 
| 
      
 168 
     | 
    
         
            +
                              WHERE  #{quoted_table_name}.ROWID = p_rowid
         
     | 
| 
      
 169 
     | 
    
         
            +
                            ) LOOP
         
     | 
| 
      
 170 
     | 
    
         
            +
                              #{
         
     | 
| 
      
 171 
     | 
    
         
            +
                              (column_names.map do |col|
         
     | 
| 
       190 
172 
     | 
    
         
             
                                col = col.to_s
         
     | 
| 
       191 
173 
     | 
    
         
             
                                +"DBMS_LOB.WRITEAPPEND(p_clob, #{col.length + 2}, '<#{col}>');\n" <<
         
     | 
| 
       192 
     | 
    
         
            -
                                "IF LENGTH( 
     | 
| 
       193 
     | 
    
         
            -
                                "DBMS_LOB.WRITEAPPEND(p_clob, LENGTH( 
     | 
| 
      
 174 
     | 
    
         
            +
                                "IF LENGTH(r1.#{col}) > 0 THEN\n" <<
         
     | 
| 
      
 175 
     | 
    
         
            +
                                "DBMS_LOB.WRITEAPPEND(p_clob, LENGTH(r1.#{col}), r1.#{col});\n" <<
         
     | 
| 
       194 
176 
     | 
    
         
             
                                "END IF;\n" <<
         
     | 
| 
       195 
177 
     | 
    
         
             
                                "DBMS_LOB.WRITEAPPEND(p_clob, #{col.length + 3}, '</#{col}>');\n"
         
     | 
| 
      
 178 
     | 
    
         
            +
                              end.join) <<
         
     | 
| 
      
 179 
     | 
    
         
            +
                              (selected_columns.zip(select_queries).map do |cols, query|
         
     | 
| 
      
 180 
     | 
    
         
            +
                                (cols.map do |col|
         
     | 
| 
      
 181 
     | 
    
         
            +
                                  "l_#{col} := '';\n"
         
     | 
| 
      
 182 
     | 
    
         
            +
                                end.join) <<
         
     | 
| 
      
 183 
     | 
    
         
            +
                                "FOR r2 IN (\n" <<
         
     | 
| 
      
 184 
     | 
    
         
            +
                                query.gsub(/:(\w+)/, "r1.\\1") << "\n) LOOP\n" <<
         
     | 
| 
      
 185 
     | 
    
         
            +
                                (cols.map do |col|
         
     | 
| 
      
 186 
     | 
    
         
            +
                                  "l_#{col} := l_#{col} || r2.#{col} || CHR(10);\n"
         
     | 
| 
      
 187 
     | 
    
         
            +
                                end.join) <<
         
     | 
| 
      
 188 
     | 
    
         
            +
                                "END LOOP;\n" <<
         
     | 
| 
      
 189 
     | 
    
         
            +
                                (cols.map do |col|
         
     | 
| 
      
 190 
     | 
    
         
            +
                                  col = col.to_s
         
     | 
| 
      
 191 
     | 
    
         
            +
                                  +"DBMS_LOB.WRITEAPPEND(p_clob, #{col.length + 2}, '<#{col}>');\n" <<
         
     | 
| 
      
 192 
     | 
    
         
            +
                                  "IF LENGTH(l_#{col}) > 0 THEN\n" <<
         
     | 
| 
      
 193 
     | 
    
         
            +
                                  "DBMS_LOB.WRITEAPPEND(p_clob, LENGTH(l_#{col}), l_#{col});\n" <<
         
     | 
| 
      
 194 
     | 
    
         
            +
                                  "END IF;\n" <<
         
     | 
| 
      
 195 
     | 
    
         
            +
                                  "DBMS_LOB.WRITEAPPEND(p_clob, #{col.length + 3}, '</#{col}>');\n"
         
     | 
| 
      
 196 
     | 
    
         
            +
                                end.join)
         
     | 
| 
       196 
197 
     | 
    
         
             
                              end.join)
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
                             
     | 
| 
       199 
     | 
    
         
            -
                          END 
     | 
| 
       200 
     | 
    
         
            -
                         
     | 
| 
       201 
     | 
    
         
            -
                      SQL
         
     | 
| 
      
 198 
     | 
    
         
            +
                              }
         
     | 
| 
      
 199 
     | 
    
         
            +
                            END LOOP;
         
     | 
| 
      
 200 
     | 
    
         
            +
                          END;
         
     | 
| 
      
 201 
     | 
    
         
            +
                        SQL
         
     | 
| 
       202 
202 
     | 
    
         
             
                      end
         
     | 
| 
       203 
203 
     | 
    
         | 
| 
       204 
204 
     | 
    
         
             
                      def parse_select_queries(select_queries)
         
     | 
| 
         @@ -215,12 +215,12 @@ module ActiveRecord 
     | 
|
| 
       215 
215 
     | 
    
         | 
| 
       216 
216 
     | 
    
         
             
                      def create_datastore_preference(datastore_name, procedure_name)
         
     | 
| 
       217 
217 
     | 
    
         
             
                        drop_ctx_preference(datastore_name)
         
     | 
| 
       218 
     | 
    
         
            -
                        execute  
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
       221 
     | 
    
         
            -
             
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
     | 
    
         
            -
             
     | 
| 
      
 218 
     | 
    
         
            +
                        execute <<~SQL
         
     | 
| 
      
 219 
     | 
    
         
            +
                          BEGIN
         
     | 
| 
      
 220 
     | 
    
         
            +
                            CTX_DDL.CREATE_PREFERENCE('#{datastore_name}', 'USER_DATASTORE');
         
     | 
| 
      
 221 
     | 
    
         
            +
                            CTX_DDL.SET_ATTRIBUTE('#{datastore_name}', 'PROCEDURE', '#{procedure_name}');
         
     | 
| 
      
 222 
     | 
    
         
            +
                          END;
         
     | 
| 
      
 223 
     | 
    
         
            +
                        SQL
         
     | 
| 
       224 
224 
     | 
    
         
             
                      end
         
     | 
| 
       225 
225 
     | 
    
         | 
| 
       226 
226 
     | 
    
         
             
                      def create_storage_preference(storage_name, tablespace)
         
     | 
| 
         @@ -281,13 +281,13 @@ module ActiveRecord 
     | 
|
| 
       281 
281 
     | 
    
         
             
                        trigger_name = default_index_column_trigger_name(index_name)
         
     | 
| 
       282 
282 
     | 
    
         
             
                        columns = Array(index_column_source)
         
     | 
| 
       283 
283 
     | 
    
         
             
                        quoted_column_names = columns.map { |col| quote_column_name(col) }.join(", ")
         
     | 
| 
       284 
     | 
    
         
            -
                        execute  
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
     | 
    
         
            -
             
     | 
| 
       287 
     | 
    
         
            -
             
     | 
| 
       288 
     | 
    
         
            -
             
     | 
| 
       289 
     | 
    
         
            -
             
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
      
 284 
     | 
    
         
            +
                        execute <<~SQL
         
     | 
| 
      
 285 
     | 
    
         
            +
                          CREATE OR REPLACE TRIGGER #{quote_table_name(trigger_name)}
         
     | 
| 
      
 286 
     | 
    
         
            +
                          BEFORE UPDATE OF #{quoted_column_names} ON #{quote_table_name(table_name)} FOR EACH ROW
         
     | 
| 
      
 287 
     | 
    
         
            +
                          BEGIN
         
     | 
| 
      
 288 
     | 
    
         
            +
                            :new.#{quote_column_name(index_column)} := '1';
         
     | 
| 
      
 289 
     | 
    
         
            +
                          END;
         
     | 
| 
      
 290 
     | 
    
         
            +
                        SQL
         
     | 
| 
       291 
291 
     | 
    
         
             
                      end
         
     | 
| 
       292 
292 
     | 
    
         | 
| 
       293 
293 
     | 
    
         
             
                      def drop_index_column_trigger(index_name)
         
     | 
| 
         @@ -76,7 +76,7 @@ module ActiveRecord 
     | 
|
| 
       76 
76 
     | 
    
         | 
| 
       77 
77 
     | 
    
         
             
                    # New method in ActiveRecord 3.1
         
     | 
| 
       78 
78 
     | 
    
         
             
                    # Will add RETURNING clause in case of trigger generated primary keys
         
     | 
| 
       79 
     | 
    
         
            -
                    def sql_for_insert(sql, pk,  
     | 
| 
      
 79 
     | 
    
         
            +
                    def sql_for_insert(sql, pk, binds)
         
     | 
| 
       80 
80 
     | 
    
         
             
                      unless pk == false || pk.nil? || pk.is_a?(Array)
         
     | 
| 
       81 
81 
     | 
    
         
             
                        sql = "#{sql} RETURNING #{quote_column_name(pk)} INTO :returning_id"
         
     | 
| 
       82 
82 
     | 
    
         
             
                        (binds = binds.dup) << ActiveRecord::Relation::QueryAttribute.new("returning_id", nil, Type::OracleEnhanced::Integer.new)
         
     | 
| 
         @@ -91,7 +91,7 @@ module ActiveRecord 
     | 
|
| 
       91 
91 
     | 
    
         | 
| 
       92 
92 
     | 
    
         
             
                    # New method in ActiveRecord 3.1
         
     | 
| 
       93 
93 
     | 
    
         
             
                    def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil)
         
     | 
| 
       94 
     | 
    
         
            -
                      sql, binds = sql_for_insert(sql, pk,  
     | 
| 
      
 94 
     | 
    
         
            +
                      sql, binds = sql_for_insert(sql, pk, binds)
         
     | 
| 
       95 
95 
     | 
    
         
             
                      type_casted_binds = type_casted_binds(binds)
         
     | 
| 
       96 
96 
     | 
    
         | 
| 
       97 
97 
     | 
    
         
             
                      log(sql, name, binds, type_casted_binds) do
         
     | 
| 
         @@ -252,7 +252,7 @@ module ActiveRecord 
     | 
|
| 
       252 
252 
     | 
    
         
             
                          value = klass.attribute_types[col.name].serialize(value)
         
     | 
| 
       253 
253 
     | 
    
         
             
                        end
         
     | 
| 
       254 
254 
     | 
    
         
             
                        uncached do
         
     | 
| 
       255 
     | 
    
         
            -
                          unless lob_record = select_one( 
     | 
| 
      
 255 
     | 
    
         
            +
                          unless lob_record = select_one(<<~SQL.squish, "Writable Large Object")
         
     | 
| 
       256 
256 
     | 
    
         
             
                            SELECT #{quote_column_name(col.name)} FROM #{quote_table_name(table_name)}
         
     | 
| 
       257 
257 
     | 
    
         
             
                            WHERE #{quote_column_name(klass.primary_key)} = #{id} FOR UPDATE
         
     | 
| 
       258 
258 
     | 
    
         
             
                          SQL
         
     | 
| 
         @@ -76,17 +76,17 @@ module ActiveRecord 
     | 
|
| 
       76 
76 
     | 
    
         
             
                      def action_sql(action, dependency)
         
     | 
| 
       77 
77 
     | 
    
         
             
                        if action == "UPDATE"
         
     | 
| 
       78 
78 
     | 
    
         
             
                          raise ArgumentError, <<~MSG
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
      
 79 
     | 
    
         
            +
                            '#{action}' is not supported by Oracle
         
     | 
| 
      
 80 
     | 
    
         
            +
                          MSG
         
     | 
| 
       81 
81 
     | 
    
         
             
                        end
         
     | 
| 
       82 
82 
     | 
    
         
             
                        case dependency
         
     | 
| 
       83 
83 
     | 
    
         
             
                        when :nullify then "ON #{action} SET NULL"
         
     | 
| 
       84 
84 
     | 
    
         
             
                        when :cascade  then "ON #{action} CASCADE"
         
     | 
| 
       85 
85 
     | 
    
         
             
                        else
         
     | 
| 
       86 
86 
     | 
    
         
             
                          raise ArgumentError, <<~MSG
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
      
 87 
     | 
    
         
            +
                            '#{dependency}' is not supported for #{action}
         
     | 
| 
      
 88 
     | 
    
         
            +
                            Supported values are: :nullify, :cascade
         
     | 
| 
      
 89 
     | 
    
         
            +
                          MSG
         
     | 
| 
       90 
90 
     | 
    
         
             
                        end
         
     | 
| 
       91 
91 
     | 
    
         
             
                      end
         
     | 
| 
       92 
92 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -85,6 +85,8 @@ module ActiveRecord #:nodoc: 
     | 
|
| 
       85 
85 
     | 
    
         
             
                      def table(table, stream)
         
     | 
| 
       86 
86 
     | 
    
         
             
                        columns = @connection.columns(table)
         
     | 
| 
       87 
87 
     | 
    
         
             
                        begin
         
     | 
| 
      
 88 
     | 
    
         
            +
                          self.table_name = table
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
       88 
90 
     | 
    
         
             
                          tbl = StringIO.new
         
     | 
| 
       89 
91 
     | 
    
         | 
| 
       90 
92 
     | 
    
         
             
                          # first dump primary key column
         
     | 
| 
         @@ -144,6 +146,8 @@ module ActiveRecord #:nodoc: 
     | 
|
| 
       144 
146 
     | 
    
         
             
                          stream.puts "# Could not dump table #{table.inspect} because of following #{e.class}"
         
     | 
| 
       145 
147 
     | 
    
         
             
                          stream.puts "#   #{e.message}"
         
     | 
| 
       146 
148 
     | 
    
         
             
                          stream.puts
         
     | 
| 
      
 149 
     | 
    
         
            +
                        ensure
         
     | 
| 
      
 150 
     | 
    
         
            +
                          self.table_name = nil
         
     | 
| 
       147 
151 
     | 
    
         
             
                        end
         
     | 
| 
       148 
152 
     | 
    
         
             
                      end
         
     | 
| 
       149 
153 
     | 
    
         | 
| 
         @@ -164,8 +168,7 @@ module ActiveRecord #:nodoc: 
     | 
|
| 
       164 
168 
     | 
    
         | 
| 
       165 
169 
     | 
    
         
             
                      def extract_expression_for_virtual_column(column)
         
     | 
| 
       166 
170 
     | 
    
         
             
                        column_name = column.name
         
     | 
| 
       167 
     | 
    
         
            -
                        table_name  
     | 
| 
       168 
     | 
    
         
            -
                        @connection.select_value(<<-SQL.strip.gsub(/\s+/, " "), "Table comment", [bind_string("table_name", table_name.upcase), bind_string("column_name", column_name.upcase)]).inspect
         
     | 
| 
      
 171 
     | 
    
         
            +
                        @connection.select_value(<<~SQL.squish, "Table comment", [bind_string("table_name", table_name.upcase), bind_string("column_name", column_name.upcase)]).inspect
         
     | 
| 
       169 
172 
     | 
    
         
             
                          select data_default from all_tab_columns
         
     | 
| 
       170 
173 
     | 
    
         
             
                          where owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       171 
174 
     | 
    
         
             
                          and table_name = :table_name
         
     | 
| 
         @@ -11,16 +11,16 @@ module ActiveRecord 
     | 
|
| 
       11 
11 
     | 
    
         
             
                    # see: abstract/schema_statements.rb
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                    def tables #:nodoc:
         
     | 
| 
       14 
     | 
    
         
            -
                      select_values( 
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
                      select_values(<<~SQL.squish, "tables")
         
     | 
| 
      
 15 
     | 
    
         
            +
                        SELECT DECODE(table_name, UPPER(table_name), LOWER(table_name), table_name)
         
     | 
| 
      
 16 
     | 
    
         
            +
                        FROM all_tables
         
     | 
| 
      
 17 
     | 
    
         
            +
                        WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
      
 18 
     | 
    
         
            +
                        AND secondary = 'N'
         
     | 
| 
      
 19 
     | 
    
         
            +
                        minus
         
     | 
| 
      
 20 
     | 
    
         
            +
                        SELECT DECODE(mview_name, UPPER(mview_name), LOWER(mview_name), mview_name)
         
     | 
| 
      
 21 
     | 
    
         
            +
                        FROM all_mviews
         
     | 
| 
      
 22 
     | 
    
         
            +
                        WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
      
 23 
     | 
    
         
            +
                      SQL
         
     | 
| 
       24 
24 
     | 
    
         
             
                    end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                    def data_sources
         
     | 
| 
         @@ -43,12 +43,12 @@ module ActiveRecord 
     | 
|
| 
       43 
43 
     | 
    
         
             
                        table_owner, table_name = default_owner, real_name
         
     | 
| 
       44 
44 
     | 
    
         
             
                      end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                      select_values( 
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 46 
     | 
    
         
            +
                      select_values(<<~SQL.squish, "table exists", [bind_string("owner", table_owner), bind_string("table_name", table_name)]).any?
         
     | 
| 
      
 47 
     | 
    
         
            +
                        SELECT owner, table_name
         
     | 
| 
      
 48 
     | 
    
         
            +
                        FROM all_tables
         
     | 
| 
      
 49 
     | 
    
         
            +
                        WHERE owner = :owner
         
     | 
| 
      
 50 
     | 
    
         
            +
                        AND table_name = :table_name
         
     | 
| 
      
 51 
     | 
    
         
            +
                      SQL
         
     | 
| 
       52 
52 
     | 
    
         
             
                    end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                    def data_source_exists?(table_name)
         
     | 
| 
         @@ -59,23 +59,23 @@ module ActiveRecord 
     | 
|
| 
       59 
59 
     | 
    
         
             
                    end
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                    def views # :nodoc:
         
     | 
| 
       62 
     | 
    
         
            -
                      select_values( 
     | 
| 
      
 62 
     | 
    
         
            +
                      select_values(<<~SQL.squish, "views")
         
     | 
| 
       63 
63 
     | 
    
         
             
                        SELECT LOWER(view_name) FROM all_views WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       64 
64 
     | 
    
         
             
                      SQL
         
     | 
| 
       65 
65 
     | 
    
         
             
                    end
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
                    def materialized_views #:nodoc:
         
     | 
| 
       68 
     | 
    
         
            -
                      select_values( 
     | 
| 
      
 68 
     | 
    
         
            +
                      select_values(<<~SQL.squish, "materialized views")
         
     | 
| 
       69 
69 
     | 
    
         
             
                        SELECT LOWER(mview_name) FROM all_mviews WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       70 
70 
     | 
    
         
             
                      SQL
         
     | 
| 
       71 
71 
     | 
    
         
             
                    end
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
                    # get synonyms for schema dump
         
     | 
| 
       74 
74 
     | 
    
         
             
                    def synonyms
         
     | 
| 
       75 
     | 
    
         
            -
                      result = select_all( 
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
      
 75 
     | 
    
         
            +
                      result = select_all(<<~SQL.squish, "synonyms")
         
     | 
| 
      
 76 
     | 
    
         
            +
                        SELECT synonym_name, table_owner, table_name
         
     | 
| 
      
 77 
     | 
    
         
            +
                        FROM all_synonyms where owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
      
 78 
     | 
    
         
            +
                      SQL
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
                      result.collect do |row|
         
     | 
| 
       81 
81 
     | 
    
         
             
                         OracleEnhanced::SynonymDefinition.new(oracle_downcase(row["synonym_name"]),
         
     | 
| 
         @@ -87,7 +87,7 @@ module ActiveRecord 
     | 
|
| 
       87 
87 
     | 
    
         
             
                      (_owner, table_name) = @connection.describe(table_name)
         
     | 
| 
       88 
88 
     | 
    
         
             
                      default_tablespace_name = default_tablespace
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
                      result = select_all( 
     | 
| 
      
 90 
     | 
    
         
            +
                      result = select_all(<<~SQL.squish, "indexes", [bind_string("table_name", table_name)])
         
     | 
| 
       91 
91 
     | 
    
         
             
                        SELECT LOWER(i.table_name) AS table_name, LOWER(i.index_name) AS index_name, i.uniqueness,
         
     | 
| 
       92 
92 
     | 
    
         
             
                          i.index_type, i.ityp_owner, i.ityp_name, i.parameters,
         
     | 
| 
       93 
93 
     | 
    
         
             
                          LOWER(i.tablespace_name) AS tablespace_name,
         
     | 
| 
         @@ -117,7 +117,7 @@ module ActiveRecord 
     | 
|
| 
       117 
117 
     | 
    
         
             
                          statement_parameters = nil
         
     | 
| 
       118 
118 
     | 
    
         
             
                          if row["index_type"] == "DOMAIN" && row["ityp_owner"] == "CTXSYS" && row["ityp_name"] == "CONTEXT"
         
     | 
| 
       119 
119 
     | 
    
         
             
                            procedure_name = default_datastore_procedure(row["index_name"])
         
     | 
| 
       120 
     | 
    
         
            -
                            source = select_values( 
     | 
| 
      
 120 
     | 
    
         
            +
                            source = select_values(<<~SQL.squish, "procedure", [bind_string("procedure_name", procedure_name.upcase)]).join
         
     | 
| 
       121 
121 
     | 
    
         
             
                              SELECT text
         
     | 
| 
       122 
122 
     | 
    
         
             
                              FROM all_source
         
     | 
| 
       123 
123 
     | 
    
         
             
                              WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
         @@ -361,7 +361,7 @@ module ActiveRecord 
     | 
|
| 
       361 
361 
     | 
    
         
             
                    # Will always query database and not index cache.
         
     | 
| 
       362 
362 
     | 
    
         
             
                    def index_name_exists?(table_name, index_name)
         
     | 
| 
       363 
363 
     | 
    
         
             
                      (_owner, table_name) = @connection.describe(table_name)
         
     | 
| 
       364 
     | 
    
         
            -
                      result = select_value( 
     | 
| 
      
 364 
     | 
    
         
            +
                      result = select_value(<<~SQL.squish, "index name exists")
         
     | 
| 
       365 
365 
     | 
    
         
             
                        SELECT 1 FROM all_indexes i
         
     | 
| 
       366 
366 
     | 
    
         
             
                        WHERE i.owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       367 
367 
     | 
    
         
             
                           AND i.table_owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
         @@ -477,8 +477,9 @@ module ActiveRecord 
     | 
|
| 
       477 
477 
     | 
    
         
             
                      clear_table_columns_cache(table_name)
         
     | 
| 
       478 
478 
     | 
    
         
             
                    end
         
     | 
| 
       479 
479 
     | 
    
         | 
| 
       480 
     | 
    
         
            -
                    def change_table_comment(table_name,  
     | 
| 
      
 480 
     | 
    
         
            +
                    def change_table_comment(table_name, comment_or_changes)
         
     | 
| 
       481 
481 
     | 
    
         
             
                      clear_cache!
         
     | 
| 
      
 482 
     | 
    
         
            +
                      comment = extract_new_comment_value(comment_or_changes)
         
     | 
| 
       482 
483 
     | 
    
         
             
                      if comment.nil?
         
     | 
| 
       483 
484 
     | 
    
         
             
                        execute "COMMENT ON TABLE #{quote_table_name(table_name)} IS ''"
         
     | 
| 
       484 
485 
     | 
    
         
             
                      else
         
     | 
| 
         @@ -486,14 +487,15 @@ module ActiveRecord 
     | 
|
| 
       486 
487 
     | 
    
         
             
                      end
         
     | 
| 
       487 
488 
     | 
    
         
             
                    end
         
     | 
| 
       488 
489 
     | 
    
         | 
| 
       489 
     | 
    
         
            -
                    def change_column_comment(table_name, column_name,  
     | 
| 
      
 490 
     | 
    
         
            +
                    def change_column_comment(table_name, column_name, comment_or_changes)
         
     | 
| 
       490 
491 
     | 
    
         
             
                      clear_cache!
         
     | 
| 
      
 492 
     | 
    
         
            +
                      comment = extract_new_comment_value(comment_or_changes)
         
     | 
| 
       491 
493 
     | 
    
         
             
                      execute "COMMENT ON COLUMN #{quote_table_name(table_name)}.#{quote_column_name(column_name)} IS '#{comment}'"
         
     | 
| 
       492 
494 
     | 
    
         
             
                    end
         
     | 
| 
       493 
495 
     | 
    
         | 
| 
       494 
496 
     | 
    
         
             
                    def table_comment(table_name) #:nodoc:
         
     | 
| 
       495 
497 
     | 
    
         
             
                      (_owner, table_name) = @connection.describe(table_name)
         
     | 
| 
       496 
     | 
    
         
            -
                      select_value( 
     | 
| 
      
 498 
     | 
    
         
            +
                      select_value(<<~SQL.squish, "Table comment", [bind_string("table_name", table_name)])
         
     | 
| 
       497 
499 
     | 
    
         
             
                        SELECT comments FROM all_tab_comments
         
     | 
| 
       498 
500 
     | 
    
         
             
                        WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       499 
501 
     | 
    
         
             
                          AND table_name = :table_name
         
     | 
| 
         @@ -509,7 +511,7 @@ module ActiveRecord 
     | 
|
| 
       509 
511 
     | 
    
         
             
                    def column_comment(table_name, column_name) #:nodoc:
         
     | 
| 
       510 
512 
     | 
    
         
             
                      # TODO: it  does not exist in Abstract adapter
         
     | 
| 
       511 
513 
     | 
    
         
             
                      (_owner, table_name) = @connection.describe(table_name)
         
     | 
| 
       512 
     | 
    
         
            -
                      select_value( 
     | 
| 
      
 514 
     | 
    
         
            +
                      select_value(<<~SQL.squish, "Column comment", [bind_string("table_name", table_name), bind_string("column_name", column_name.upcase)])
         
     | 
| 
       513 
515 
     | 
    
         
             
                        SELECT comments FROM all_col_comments
         
     | 
| 
       514 
516 
     | 
    
         
             
                        WHERE owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       515 
517 
     | 
    
         
             
                          AND table_name = :table_name
         
     | 
| 
         @@ -526,7 +528,7 @@ module ActiveRecord 
     | 
|
| 
       526 
528 
     | 
    
         
             
                    end
         
     | 
| 
       527 
529 
     | 
    
         | 
| 
       528 
530 
     | 
    
         
             
                    def tablespace(table_name)
         
     | 
| 
       529 
     | 
    
         
            -
                      select_value( 
     | 
| 
      
 531 
     | 
    
         
            +
                      select_value(<<~SQL.squish, "tablespace")
         
     | 
| 
       530 
532 
     | 
    
         
             
                        SELECT tablespace_name
         
     | 
| 
       531 
533 
     | 
    
         
             
                        FROM all_tables
         
     | 
| 
       532 
534 
     | 
    
         
             
                        WHERE table_name='#{table_name.to_s.upcase}'
         
     | 
| 
         @@ -538,7 +540,7 @@ module ActiveRecord 
     | 
|
| 
       538 
540 
     | 
    
         
             
                    def foreign_keys(table_name) #:nodoc:
         
     | 
| 
       539 
541 
     | 
    
         
             
                      (_owner, desc_table_name) = @connection.describe(table_name)
         
     | 
| 
       540 
542 
     | 
    
         | 
| 
       541 
     | 
    
         
            -
                      fk_info = select_all( 
     | 
| 
      
 543 
     | 
    
         
            +
                      fk_info = select_all(<<~SQL.squish, "Foreign Keys", [bind_string("desc_table_name", desc_table_name)])
         
     | 
| 
       542 
544 
     | 
    
         
             
                        SELECT r.table_name to_table
         
     | 
| 
       543 
545 
     | 
    
         
             
                              ,rc.column_name references_column
         
     | 
| 
       544 
546 
     | 
    
         
             
                              ,cc.column_name
         
     | 
| 
         @@ -580,12 +582,12 @@ module ActiveRecord 
     | 
|
| 
       580 
582 
     | 
    
         
             
                    # REFERENTIAL INTEGRITY ====================================
         
     | 
| 
       581 
583 
     | 
    
         | 
| 
       582 
584 
     | 
    
         
             
                    def disable_referential_integrity(&block) #:nodoc:
         
     | 
| 
       583 
     | 
    
         
            -
                      old_constraints = select_all( 
     | 
| 
       584 
     | 
    
         
            -
             
     | 
| 
       585 
     | 
    
         
            -
             
     | 
| 
       586 
     | 
    
         
            -
             
     | 
| 
       587 
     | 
    
         
            -
             
     | 
| 
       588 
     | 
    
         
            -
             
     | 
| 
      
 585 
     | 
    
         
            +
                      old_constraints = select_all(<<~SQL.squish, "Foreign Keys to disable and enable")
         
     | 
| 
      
 586 
     | 
    
         
            +
                        SELECT constraint_name, owner, table_name
         
     | 
| 
      
 587 
     | 
    
         
            +
                          FROM all_constraints
         
     | 
| 
      
 588 
     | 
    
         
            +
                          WHERE constraint_type = 'R'
         
     | 
| 
      
 589 
     | 
    
         
            +
                          AND status = 'ENABLED'
         
     | 
| 
      
 590 
     | 
    
         
            +
                          AND owner = SYS_CONTEXT('userenv', 'current_schema')
         
     | 
| 
       589 
591 
     | 
    
         
             
                      SQL
         
     | 
| 
       590 
592 
     | 
    
         
             
                      begin
         
     | 
| 
       591 
593 
     | 
    
         
             
                        old_constraints.each do |constraint|
         
     | 
| 
         @@ -652,8 +654,7 @@ module ActiveRecord 
     | 
|
| 
       652 
654 
     | 
    
         
             
                                         default_value,
         
     | 
| 
       653 
655 
     | 
    
         
             
                                         type_metadata,
         
     | 
| 
       654 
656 
     | 
    
         
             
                                         field["nullable"] == "Y",
         
     | 
| 
       655 
     | 
    
         
            -
                                          
     | 
| 
       656 
     | 
    
         
            -
                                         field["column_comment"]
         
     | 
| 
      
 657 
     | 
    
         
            +
                                         comment: field["column_comment"]
         
     | 
| 
       657 
658 
     | 
    
         
             
                                  )
         
     | 
| 
       658 
659 
     | 
    
         
             
                      end
         
     | 
| 
       659 
660 
     | 
    
         | 
| 
         @@ -697,7 +698,7 @@ module ActiveRecord 
     | 
|
| 
       697 
698 
     | 
    
         | 
| 
       698 
699 
     | 
    
         
             
                        return unless tablespace
         
     | 
| 
       699 
700 
     | 
    
         | 
| 
       700 
     | 
    
         
            -
                        index_name = select_value( 
     | 
| 
      
 701 
     | 
    
         
            +
                        index_name = select_value(<<~SQL.squish, "Index name for primary key",  [bind_string("table_name", table_name.upcase)])
         
     | 
| 
       701 
702 
     | 
    
         
             
                          SELECT index_name FROM all_constraints
         
     | 
| 
       702 
703 
     | 
    
         
             
                              WHERE table_name = :table_name
         
     | 
| 
       703 
704 
     | 
    
         
             
                              AND constraint_type = 'P'
         
     |