1use crossterm::style::Stylize;
2
3pub 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}