Module: Benedictus::SqlFormatter
- Defined in:
- lib/benedictus/sql_formatter.rb
Constant Summary collapse
- INDENT =
" "- BLOCK_KEYWORDS =
[ "WITH RECURSIVE", "WITH", "SELECT DISTINCT", "SELECT", "FROM", "INNER JOIN", "LEFT OUTER JOIN", "LEFT JOIN", "RIGHT OUTER JOIN", "RIGHT JOIN", "FULL OUTER JOIN", "FULL JOIN", "CROSS JOIN", "JOIN", "WHERE", "GROUP BY", "ORDER BY", "HAVING", "LIMIT", "OFFSET", "UNION ALL", "UNION", "INTERSECT", "EXCEPT", "RETURNING" ].freeze
- INLINE_KEYWORDS =
%w[ ON AS AND OR NOT IN IS LIKE ILIKE BETWEEN NULL TRUE FALSE ASC DESC NULLS FIRST LAST USING CASE WHEN THEN ELSE END DISTINCT ALL ANY EXISTS INTERVAL ].freeze
- PLACEHOLDER_OPEN =
ASCII placeholder delimiters chosen so they cannot appear in well-formed SQL or in keyword names. Using printable ASCII keeps the file text-classifiable (no control bytes).
"[[!benedictus-mask:"- PLACEHOLDER_CLOSE =
"!]]"- PLACEHOLDER_RE =
/\[\[!benedictus-mask:(\d+)!\]\]/
Class Method Summary collapse
Class Method Details
.format(sql) ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/benedictus/sql_formatter.rb', line 38 def format(sql) return "" if sql.nil? || sql.empty? masked, literals = mask_literals(sql.to_s) upcased = uppercase_keywords(masked) broken = break_blocks(upcased) restore(broken, literals).strip rescue StandardError sql.to_s end |