instance method build_indexes

Ruby on Rails edge

Since edge Private — implementation detail, not part of the public API

Signature

build_indexes(table_name, result)

No documentation comment.

Parameters

table_name req
result req
Source
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb, line 1043
          def build_indexes(table_name, result)
            result.map do |row|
              index_name = row[0]
              unique = row[1]
              indkey = row[2].split(" ").map(&:to_i)
              inddef = row[3]
              comment = row[4]
              valid = row[5]
              columns = decode_string_array(row[6]).map { |c| Utils.unquote_identifier(c.strip.gsub('""', '"')) }

              using, expressions, include, nulls_not_distinct, where = inddef.scan(/ USING (\w+?) \((.+?)\)(?: INCLUDE \((.+?)\))?( NULLS NOT DISTINCT)?(?: WHERE (.+))?\z/m).flatten

              orders = {}
              opclasses = {}
              include_columns = include ? include.split(",").map { |c| Utils.unquote_identifier(c.strip.gsub('""', '"')) } : []

              if indkey.include?(0)
                columns = expressions
              else
                # prevent INCLUDE columns from being matched
                columns.reject! { |c| include_columns.include?(c) }

                # add info on sort order (only desc order is explicitly specified, asc is the default)
                # and non-default opclasses
                expressions.scan(/(?<column>\w+)"?\s?(?<opclass>(?:\w+\.)?\w+_ops(_\w+)?)?\s?(?<desc>DESC)?\s?(?<nulls>NULLS (?:FIRST|LAST))?/).each do |column, opclass, desc, nulls|
                  opclasses[column] = opclass.split(".").last.to_sym if opclass

                  if nulls
                    orders[column] = [desc, nulls].compact.join(" ")
                  else
                    orders[column] = :desc if desc
                  end
                end
              end

              IndexDefinition.new(
                table_name,
                index_name,
                unique,
                columns,
                orders: orders,
                opclasses: opclasses,
                where: where,
                using: using.to_sym,
                include: include_columns.presence,
                nulls_not_distinct: nulls_not_distinct.present?,
                comment: comment.presence,
                valid: valid
              )
            end
          end

Defined in activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb line 1043 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close