Module: ActiveRecordExtended::LtreeSelectMethods

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_record_extended/ltree_query_methods.rb

Overview

SELECT clause helpers - mixed into ActiveRecord::Base

Class Method Summary collapse

Class Method Details

.order_by_ltree_depth(column, direction = :asc) ⇒ ActiveRecord::Relation

Returns relation ordered by ltree depth.

Returns:

  • (ActiveRecord::Relation)

    relation ordered by ltree depth



183
184
185
# File 'lib/active_record_extended/ltree_query_methods.rb', line 183

def order_by_ltree_depth(column, direction = :asc)
  order(Arel.sql("nlevel(#{table_name}.#{column}) #{direction}"))
end

.select_ltree_depth(column, alias_name = nil) ⇒ ActiveRecord::Relation

Returns relation selecting the ltree depth column.

Returns:

  • (ActiveRecord::Relation)

    relation selecting the ltree depth column



150
151
152
153
# File 'lib/active_record_extended/ltree_query_methods.rb', line 150

def select_ltree_depth(column, alias_name = nil)
  alias_name ||= "#{column}_depth"
  select("#{table_name}.*, nlevel(#{table_name}.#{column}) as #{alias_name}")
end

.select_ltree_parent(column, alias_name = nil) ⇒ ActiveRecord::Relation

Returns relation selecting the ltree parent column.

Returns:

  • (ActiveRecord::Relation)

    relation selecting the ltree parent column



162
163
164
165
# File 'lib/active_record_extended/ltree_query_methods.rb', line 162

def select_ltree_parent(column, alias_name = nil)
  alias_name ||= "#{column}_parent"
  select("#{table_name}.*, subpath(#{table_name}.#{column}, 0, nlevel(#{table_name}.#{column}) - 1) as #{alias_name}")
end

.select_ltree_root(column, alias_name = nil) ⇒ ActiveRecord::Relation

Returns relation selecting the ltree root column.

Returns:

  • (ActiveRecord::Relation)

    relation selecting the ltree root column



156
157
158
159
# File 'lib/active_record_extended/ltree_query_methods.rb', line 156

def select_ltree_root(column, alias_name = nil)
  alias_name ||= "#{column}_root"
  select("#{table_name}.*, subpath(#{table_name}.#{column}, 0, 1) as #{alias_name}")
end

.select_ltree_subpath(column, offset, len = nil, alias_name: nil) ⇒ ActiveRecord::Relation

Returns relation selecting the ltree subpath column.

Parameters:

  • alias_name (Object, nil) (defaults to: nil)
  • column (Object)
  • offset (Object)
  • len (Object, nil) (defaults to: nil)

Returns:

  • (ActiveRecord::Relation)

    relation selecting the ltree subpath column



172
173
174
175
176
177
178
179
180
# File 'lib/active_record_extended/ltree_query_methods.rb', line 172

def select_ltree_subpath(column, offset, len = nil, alias_name: nil)
  alias_name ||= "#{column}_subpath"
  subpath_sql = if len
                  "subpath(#{table_name}.#{column}, #{offset}, #{len})"
                else
                  "subpath(#{table_name}.#{column}, #{offset})"
                end
  select("#{table_name}.*, #{subpath_sql} as #{alias_name}")
end