#!/bin/bash set -eu # This script indents the output of Exposed SQL logger. # Usage: ./indent.sh filename # Remove leading "^SQL: " that Exposed uses. crop_leading_sql () { sed 's/^SQL: //' } # Inserts new line & two spaces before the first "(" # and last ")", and before each comma. Only triggers on # "CREATE TABLE"-lines. indent_create_table () { sed '/^CREATE/s/, /,/g' \ | sed '/^CREATE/s/\(,\|)$\)/\n \1/g' \ | sed '/^CREATE/s/(/\n (/' } # Inserts new line & two spaces before each "ALTER TABLE" # statement indent_alter_table () { sed 's/^ALTER TABLE \(.*\)/ALTER TABLE\n \1/' } # Inserts a blank line after between each CREATE/ALTER TABLE statement. blank_line_after_statement () { sed '/^CREATE TABLE/s/\(.*\)/\n\1/' \ | sed '/^ALTER TABLE/s/\(.*\)/\n\1/' } crop_leading_sql < $1 \ | indent_create_table \ | indent_alter_table \ | blank_line_after_statement