Class: SqlBeautifier::InsertQuery

Inherits:
Base
  • Object
show all
Includes:
DmlRendering
Defined in:
lib/sql_beautifier/insert_query.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(normalized_sql, depth: 0) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/sql_beautifier/insert_query.rb', line 15

def self.parse(normalized_sql, depth: 0)
  scanner = Scanner.new(normalized_sql)
  return nil unless scanner.keyword_at?("insert")

  scanner.skip_past_keyword!("insert")
  return nil unless scanner.keyword_at?("into")

  scanner.skip_past_keyword!("into")

  table_name = scanner.read_identifier!
  return nil unless table_name

  scanner.skip_whitespace!

  column_list = parse_column_list(normalized_sql, scanner)
  values_rows, select_sql, on_conflict_clause, returning_clause = parse_body(normalized_sql, scanner)

  return nil unless values_rows || select_sql

  new(
    table_name: table_name,
    column_list: column_list,
    values_rows: values_rows,
    select_sql: select_sql,
    on_conflict_clause: on_conflict_clause,
    returning_clause: returning_clause,
    depth: depth
  )
end

Instance Method Details

#render ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/sql_beautifier/insert_query.rb', line 45

def render
  output = +""
  output << render_insert_into
  output << render_column_list if @column_list
  output << render_values if @values_rows
  output << render_select if @select_sql
  output << render_on_conflict if @on_conflict_clause
  output << render_returning if @returning_clause

  "#{output}\n"
end