Sha256: 28e3fe8cae9c50a8ea8ee184e8c191baea0e8d64d2c4549074ea5d4875dba389

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

module ActiveGraph
  module Core
    module Schema
      def version
        # BTW: community / enterprise could be retrieved via `result.first.edition`
        query('CALL dbms.components()', {}, skip_instrumentation: true).first[:versions][0]
      end

      def indexes
        raw_indexes do |keys, result|
          result.map do |row|
            { type: row[:type].to_sym, label: label(keys, row), properties: properties(row),
              state: row[:state].to_sym }
          end
        end
      end

      def constraints
        raw_indexes do |keys, result|
          result.select(&method(v4?(keys) ? :v4_filter : :v3_filter)).map do |row|
            { type: :uniqueness, label: label(keys, row), properties: properties(row) }
          end
        end
      end

      def raw_indexes
        result = query('CALL db.indexes()', {}, skip_instrumentation: true)
        yield result.keys, result.reject { |row| row[:type] == 'LOOKUP' }
      end

      private

      def v4_filter(row)
        row[:uniqueness] == 'UNIQUE'
      end

      def v3_filter(row)
        row[:type] == 'node_unique_property'
      end

      def label(keys, row)
        if v34?(keys)
          row[:label]
        else
          (v4?(keys) ? row[:labelsOrTypes] : row[:tokenNames]).first
        end.to_sym
      end

      def v4?(keys)
        return @v4 unless @v4.nil?
        @v4 = keys.include?(:labelsOrTypes)
      end

      def v34?(keys)
        return @v34 unless @v34.nil?
        @v34 = keys.include?(:label)
      end

      def properties(row)
        row[:properties].map(&:to_sym)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activegraph-10.2.0.beta.1 lib/active_graph/core/schema.rb