sql_cli/cli/
help.rs

1use crossterm::style::Stylize;
2
3/// Print comprehensive help text for SQL CLI
4pub fn print_help() {
5    println!("{}", "SQL CLI - Syntax-aware SQL editor".blue().bold());
6    println!();
7    println!("{}", "Usage:".yellow());
8    println!("  sql-cli [OPTIONS] [FILE.csv|FILE.json]");
9    println!();
10    println!("{}", "Options:".yellow());
11    println!(
12        "  {}, {}    - Show version and exit",
13        "--version".green(),
14        "-V".green()
15    );
16    println!(
17        "  {}, {}      - Show this help and exit",
18        "--help".green(),
19        "-h".green()
20    );
21    println!(
22        "  {}  - Initialize configuration with wizard",
23        "--init-config".green()
24    );
25    println!(
26        "  {} - Generate config file with defaults",
27        "--generate-config".green()
28    );
29    println!("  {}      - Use classic CLI mode", "--classic".green());
30    println!("  {}       - Use simple TUI mode", "--simple".green());
31    println!(
32        "  {}         - Launch action system debugger (TUI)",
33        "--keys".green()
34    );
35    println!(
36        "  {}   - Purge all cache entries (requires SQL_CLI_CACHE=true)",
37        "--cache-purge".green()
38    );
39
40    println!();
41    println!("{}", "SQL Refactoring Tools:".yellow());
42    println!(
43        "  {} - Generate banding CASE statement",
44        "--generate-bands".green()
45    );
46    println!("    Usage: --generate-bands --column <name> --bands <spec>");
47    println!("    Example: --generate-bands --column age --bands \"0-24,25-49,50-74,75+\"");
48    println!(
49        "  {} - Generate CASE from data analysis",
50        "--generate-case".green()
51    );
52    println!(
53        "    Usage: --generate-case <file> --column <name> [--style values|ranges] [--labels label1,label2,...]"
54    );
55    println!("    Example: --generate-case data.csv --column ocean_proximity --style values");
56    println!(
57        "  {} - Generate CASE for numeric range",
58        "--generate-case-range".green()
59    );
60    println!(
61        "    Usage: --generate-case-range --column <name> --min <n> --max <n> --bands <n> [--labels label1,label2,...]"
62    );
63    println!("    Example: --generate-case-range --column value --min 0 --max 100 --bands 5");
64
65    println!();
66    println!("{}", "Non-Interactive Query Mode:".yellow());
67    println!(
68        "  {}, {} <query>     - Execute SQL query and output results",
69        "-q".green(),
70        "--query".green()
71    );
72    println!(
73        "  {}, {} <file>  - Execute SQL from file",
74        "-f".green(),
75        "--query-file".green()
76    );
77    println!(
78        "  {}, {} <format>   - Output format: csv, json, table, tsv (default: csv)",
79        "-o".green(),
80        "--output".green()
81    );
82    println!(
83        "  {}, {} <file> - Write output to file",
84        "-O".green(),
85        "--output-file".green()
86    );
87    println!(
88        "  {} <style> - Table style: markdown, utf8, ascii, etc. (default: default)",
89        "--table-style".green()
90    );
91    println!(
92        "  {} - List all available table styles",
93        "--list-table-styles".green()
94    );
95    println!(
96        "  {} <col> - Show distinct values with counts for column",
97        "--distinct-column".green()
98    );
99    println!(
100        "  {}, {} <n>       - Limit output to n rows",
101        "-l".green(),
102        "--limit".green()
103    );
104    println!(
105        "  {} <n>  - Maximum column width for table output (default: 50, 0 = unlimited)",
106        "--max-col-width".green()
107    );
108    println!(
109        "  {} <n> - Rows to sample for column width (default: 100, 0 = all rows)",
110        "--col-sample-rows".green()
111    );
112    println!(
113        "  {} - Case-insensitive matching",
114        "--case-insensitive".green()
115    );
116    println!(
117        "  {}, {} - Enable debug tracing for query execution",
118        "--debug".green(),
119        "--debug-trace".green()
120    );
121    println!(
122        "  {}  - Auto-hide empty columns",
123        "--auto-hide-empty".green()
124    );
125    println!(
126        "  {}         - Show SQL query AST (parse tree)",
127        "--query-plan".green()
128    );
129    println!(
130        "  {}    - Show query execution work units",
131        "--show-work-units".green()
132    );
133    println!(
134        "  {}    - Show detailed execution plan with timings",
135        "--execution-plan".green()
136    );
137    println!(
138        "  {}  - Launch action system logger (console)",
139        "--keys-simple".green()
140    );
141
142    println!();
143    println!(
144        "{}",
145        "Query Analysis (for IDE/plugin integration):".yellow()
146    );
147    println!(
148        "  {}     - Analyze query structure (JSON output)",
149        "--analyze-query".green()
150    );
151    println!(
152        "  {}        - Expand SELECT * to column names (JSON output)",
153        "--expand-star".green()
154    );
155    println!(
156        "  {} <name> - Extract CTE as standalone query",
157        "--extract-cte".green()
158    );
159    println!(
160        "  {} <line:col> - Find query context at position (JSON output)",
161        "--query-at-position".green()
162    );
163
164    println!();
165    println!("{}", "SQL Formatting:".yellow());
166    println!(
167        "  {}, {} [file|-]   - Format SQL query (stdin if - or no file)",
168        "-F".green(),
169        "--format".green()
170    );
171    println!(
172        "  {}       - Format SQL from file",
173        "--format-sql <file>".green()
174    );
175
176    println!();
177    println!("{}", "Data Inspection:".yellow());
178    println!(
179        "  {}               - Show table schema (columns and types)",
180        "--schema".green()
181    );
182    println!(
183        "  {}          - Show table schema as JSON (nvim plugin)",
184        "--schema-json".green()
185    );
186
187    println!();
188    println!("{}", "Documentation & Help:".yellow());
189    println!(
190        "  {} <name>         - Show help for any function, aggregate, or generator",
191        "--item-help".green()
192    );
193    println!(
194        "  {}         - List all available SQL functions",
195        "--list-functions".green()
196    );
197    println!(
198        "  {} <name> - Show help for a specific function",
199        "--function-help".green()
200    );
201    println!(
202        "  {}    - Generate markdown documentation for all functions",
203        "--generate-docs".green()
204    );
205    println!(
206        "  {}       - List all available generator functions",
207        "--list-generators".green()
208    );
209    println!(
210        "  {} <name> - Show help for a specific generator",
211        "--generator-help".green()
212    );
213
214    println!();
215    println!("{}", "Performance Benchmarking:".yellow());
216    println!(
217        "  {}            - Run performance benchmarks",
218        "--benchmark".green()
219    );
220    println!(
221        "  {}  - Benchmark sizes (default: 100,1000,10000,50000,100000)",
222        "--sizes <n1,n2,n3>".green()
223    );
224    println!(
225        "  {} <cat>  - Run specific category (basic|aggregation|sorting|window|complex)",
226        "--category".green()
227    );
228    println!(
229        "  {}        - Run progressive benchmarks (10k increments)",
230        "--progressive".green()
231    );
232    println!(
233        "  {}  - Set increment for progressive (default: 10000)",
234        "--increment <n>".green()
235    );
236    println!(
237        "  {}  - Set max rows for progressive (default: 100000)",
238        "--max-rows <n>".green()
239    );
240    println!("  {}  - Save results as CSV", "--csv <output.csv>".green());
241    println!(
242        "  {}  - Generate markdown report",
243        "--report <file.md>".green()
244    );
245
246    println!();
247    println!("{}", "Examples:".yellow());
248    println!("  # Interactive TUI mode");
249    println!("  sql-cli data.csv");
250    println!();
251    println!("  # Non-interactive query with CSV output");
252    println!("  sql-cli data.csv -q \"SELECT * FROM data WHERE price > 100\"");
253    println!();
254    println!("  # Query with JSON output limited to 10 rows");
255    println!("  sql-cli data.json -q \"SELECT id, name FROM data\" -o json -l 10");
256    println!();
257    println!("  # Query from file with table output");
258    println!("  sql-cli trades.csv -f query.sql -o table");
259    println!();
260    println!("  # Query with output to file");
261    println!("  sql-cli data.csv -q \"SELECT * FROM data\" -O results.csv");
262    println!();
263    println!("  # Debug query with execution plan");
264    println!("  sql-cli data.csv -q \"SELECT * FROM data WHERE id > 100\" --execution-plan");
265
266    println!();
267    println!("{}", "Commands:".yellow());
268    println!("  {}  - Execute query and fetch results", "Enter".green());
269    println!("  {}    - Syntax-aware completion", "Tab".green());
270    println!("  {} - Previous command", "Ctrl+P".green());
271    println!("  {} - Next command", "Ctrl+N".green());
272    println!("  {} - Search history", "Ctrl+R".green());
273    println!("  {} - Exit", "Ctrl+D".green());
274    println!("  {}  - Show this help", "\\help".green());
275    println!("  {} - Clear screen", "\\clear".green());
276    println!(
277        "  {} - Export last results to CSV",
278        "\\export <filename>".green()
279    );
280    println!();
281    println!("{}", "Supported syntax:".yellow());
282    println!("  SELECT column1, column2 FROM trade_deal");
283    println!("  SELECT * FROM trade_deal WHERE price > 100");
284    println!("  SELECT * FROM trade_deal WHERE platformOrderId.Contains('123')");
285    println!("  SELECT * FROM trade_deal ORDER BY tradeDate DESC");
286    println!();
287}