Class: PgObjects::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/pg_objects/parser.rb

Overview

Reads directives from SQL-comments

--!depends_on [name_of_dependency]

name_of_dependency: short or full name of object as well as object_name

Constant Summary collapse

ROUTES =

rubocop: disable Style/WordArray

[
  ['DefineStmt', 'defnames', 0, 'String', 'str'],
  ['CreateFunctionStmt', 'funcname', 0, 'String', 'str'],
  ['CreateTrigStmt', 'trigname'],
  ['CreateEventTrigStmt', 'trigname'],
  ['CompositeTypeStmt', 'typevar', 'RangeVar', 'relname'],
  ['ViewStmt', 'view', 'RangeVar', 'relname'],
  ['CreateConversionStmt', 'conversion_name', 0, 'String', 'str'],
  ['CreateTableAsStmt', 'into', 'IntoClause', 'rel', 'RangeVar', 'relname'],
  ['CreateOpClassStmt', 'opclassname', 0, 'String', 'str']
].freeze

Class Method Summary collapse

Class Method Details

.fetch_directives(text) ⇒ Object



27
28
29
30
31
# File 'lib/pg_objects/parser.rb', line 27

def fetch_directives(text)
  {
    depends_on: fetch_dependencies(text)
  }
end

.fetch_object_name(text) ⇒ Object



33
34
35
36
37
38
# File 'lib/pg_objects/parser.rb', line 33

def fetch_object_name(text)
  parsed = PgQuery.parse(text).tree.dig(0, 'RawStmt', 'stmt')
  ROUTES.map { |route| parsed.dig(*route) }.compact[0]
rescue PgQuery::ParseError, NoMethodError
  nil
end