Sqlformat
by @bytesagain3
Format, lint, and pretty-print SQL with dialect conversion. Use when checking style, validating syntax, formatting queries, generating clean SQL.
clawhub install sqlformatπ About This Skill
name: SQLFormat description: "Format, lint, and pretty-print SQL with dialect conversion. Use when checking style, validating syntax, formatting queries, generating clean SQL." version: "2.0.0" author: "BytesAgain" homepage: https://bytesagain.com source: https://github.com/bytesagain/ai-skills tags: ["sql","format","lint","query","database","developer"] categories: ["Developer Tools", "Utility"]
SQLFormat
SQL query formatter, linter, and devtools toolkit. Check SQL style, validate syntax, format and pretty-print queries, lint for best practices, explain execution plans, convert between dialects, and manage SQL templates β all from the command line.
Commands
Run sqlformat to use. Each command records timestamped entries to its own log file.
Core Operations
| Command | Description |
|---------|-------------|
| check | Check SQL code for style or correctness issues |
| validate | Validate SQL syntax against rules |
| generate | Generate formatted SQL snippets or boilerplate |
| format | Format and pretty-print a SQL query with proper indentation |
| lint | Lint SQL for style violations and anti-patterns |
| explain | Record query explanation or execution plan notes |
| convert | Convert SQL between dialects (MySQL β PostgreSQL, etc.) |
| template | Store or retrieve reusable SQL templates |
| diff | Record differences between SQL versions |
| preview | Preview a formatting transformation before applying |
| fix | Log an applied fix to a SQL issue |
| report | Record a formatting or lint report |
Utility Commands
| Command | Description |
|---------|-------------|
| stats | Show summary statistics across all log files (entry counts, disk usage) |
| export | Export all data in a given format: json, csv, or txt |
| search | Search across all log files for a keyword (case-insensitive) |
| recent | Display the last 20 lines from the activity history log |
| status | Health check β version, data dir, entry count, disk usage |
| help | Show the full command reference |
| version | Print current version (v2.0.0) |
> Note: Each core command works in two modes β call with no arguments to view recent entries (last 20), or pass input to record a new timestamped entry.
Data Storage
All data is stored locally in plain-text log files:
~/.local/share/sqlformat/
βββ check.log # Style check records
βββ validate.log # Syntax validation results
βββ generate.log # Generated SQL snippets
βββ format.log # Formatted query records
βββ lint.log # Lint findings
βββ explain.log # Execution plan notes
βββ convert.log # Dialect conversion records
βββ template.log # Reusable SQL templates
βββ diff.log # SQL version diffs
βββ preview.log # Preview entries
βββ fix.log # Applied fix records
βββ report.log # Lint/format reports
βββ history.log # Unified activity log (all commands)
Each entry is stored as YYYY-MM-DD HH:MM| (pipe-delimited). The history.log file receives a line for every command executed, providing a single timeline of all activity.
Requirements
set -euo pipefail)date, wc, du, tail, grep, sed, cat, basenameWhen to Use
1. Code review prep β use format and lint to clean up SQL before submitting a pull request
2. SQL style enforcement β use check and lint to document style violations across a codebase
3. Dialect migration β use convert when porting queries from MySQL to PostgreSQL (or vice versa)
4. Query documentation β use explain and template to catalog common query patterns with notes
5. Batch formatting workflows β use generate and preview to build formatted SQL output pipelines
Examples
# Format a messy query
sqlformat format "SELECT u.id,u.name,o.total FROM users u JOIN orders o ON u.id=o.user_id WHERE o.status='active'"Lint SQL for anti-patterns
sqlformat lint "SELECT * FROM users WHERE 1=1"Validate SQL syntax
sqlformat validate "INSERT INTO products (name, price) VALUES ('Widget', 9.99)"Convert MySQL to PostgreSQL syntax
sqlformat convert "MySQL: AUTO_INCREMENT -> PostgreSQL: SERIAL"Store a reusable template
sqlformat template "pagination: SELECT * FROM {table} LIMIT {limit} OFFSET {offset}"Export all records to CSV
sqlformat export csvSearch for entries about JOIN formatting
sqlformat search JOINView statistics
sqlformat stats
Configuration
Set the SQLFORMAT_DIR environment variable to change the data directory:
export SQLFORMAT_DIR="/custom/path/to/data"
Default: ~/.local/share/sqlformat/
Powered by BytesAgain | bytesagain.com | hello@bytesagain.com
β‘ When to Use
π‘ Examples
# Format a messy query
sqlformat format "SELECT u.id,u.name,o.total FROM users u JOIN orders o ON u.id=o.user_id WHERE o.status='active'"Lint SQL for anti-patterns
sqlformat lint "SELECT * FROM users WHERE 1=1"Validate SQL syntax
sqlformat validate "INSERT INTO products (name, price) VALUES ('Widget', 9.99)"Convert MySQL to PostgreSQL syntax
sqlformat convert "MySQL: AUTO_INCREMENT -> PostgreSQL: SERIAL"Store a reusable template
sqlformat template "pagination: SELECT * FROM {table} LIMIT {limit} OFFSET {offset}"Export all records to CSV
sqlformat export csvSearch for entries about JOIN formatting
sqlformat search JOINView statistics
sqlformat stats
βοΈ Configuration
Set the SQLFORMAT_DIR environment variable to change the data directory:
export SQLFORMAT_DIR="/custom/path/to/data"
Default: ~/.local/share/sqlformat/
Powered by BytesAgain | bytesagain.com | hello@bytesagain.com