UNPKG

hana-cli

Version:
522 lines (490 loc) 14.3 kB
/** * Command examples and parameter presets for better discoverability */ export interface CommandExample { scenario: string; description: string; parameters: Record<string, any>; notes?: string; expectedOutput?: string; } export interface ParameterPreset { name: string; description: string; parameters: Record<string, any>; notes?: string; whenToUse?: string; } export interface CommandExamplesData { command: string; examples: CommandExample[]; } export interface CommandPresetsData { command: string; presets: ParameterPreset[]; } /** * Command examples library */ export const COMMAND_EXAMPLES: Record<string, CommandExample[]> = { import: [ { scenario: 'Basic CSV import', description: 'Simplest import - auto-detects column mapping', parameters: { filename: 'data.csv', table: 'MY_TABLE', schema: 'MY_SCHEMA', }, notes: 'Use this for straightforward imports where file columns match table columns', expectedOutput: 'Success message with number of rows imported', }, { scenario: 'Import with dry run', description: 'Preview import without committing to database', parameters: { filename: 'data.csv', table: 'MY_TABLE', schema: 'MY_SCHEMA', dryRun: true, }, notes: 'Always recommended to run this first to validate data and mappings', expectedOutput: 'Preview of what would be imported, including any errors', }, { scenario: 'Import with error handling', description: 'Continue import even if some rows fail', parameters: { filename: 'data.csv', table: 'MY_TABLE', schema: 'MY_SCHEMA', skipWithErrors: true, maxErrorsAllowed: 100, }, notes: 'Useful for large imports where you want to skip bad rows and review later', expectedOutput: 'Success with count of imported rows and skipped errors', }, { scenario: 'Large file import', description: 'Import large file with memory protection', parameters: { filename: 'large_data.csv', table: 'BIG_TABLE', schema: 'MY_SCHEMA', maxFileSizeMB: 500, timeoutSeconds: 3600, }, notes: 'Prevents memory issues and timeout errors with large files', expectedOutput: 'Success message after extended processing time', }, { scenario: 'Import with column name matching', description: 'Match file columns to table columns by name (not position)', parameters: { filename: 'data.csv', table: 'MY_TABLE', schema: 'MY_SCHEMA', matchMode: 'name', }, notes: 'Use when file column order differs from table column order', expectedOutput: 'Success with columns matched by header names', }, ], export: [ { scenario: 'Basic table export', description: 'Export entire table to CSV', parameters: { table: 'CUSTOMERS', schema: 'SALES', filename: 'customers_export.csv', }, expectedOutput: 'CSV file with all table data', }, { scenario: 'Export with filter', description: 'Export subset of data using WHERE clause', parameters: { table: 'ORDERS', schema: 'SALES', filename: 'recent_orders.csv', where: "ORDER_DATE >= '2025-01-01'", }, notes: 'Use SQL WHERE syntax to filter rows', expectedOutput: 'CSV file with filtered data only', }, { scenario: 'Export to Excel', description: 'Export table to Excel format', parameters: { table: 'SALES_DATA', schema: 'ANALYTICS', filename: 'sales_report.xlsx', }, notes: 'Automatically formats as Excel if filename ends in .xlsx', expectedOutput: 'Excel file with formatted data', }, ], tables: [ { scenario: 'List all tables in schema', description: 'View all tables in a specific schema', parameters: { schema: 'MY_SCHEMA', }, expectedOutput: 'Table with all table names, types, and sizes', }, { scenario: 'Search for tables by pattern', description: 'Find tables matching a name pattern', parameters: { schema: 'MY_SCHEMA', table: 'SALES%', }, notes: 'Use % as wildcard, similar to SQL LIKE', expectedOutput: 'Filtered list of matching tables', }, ], inspectTable: [ { scenario: 'View table structure', description: 'Get complete table metadata including columns and constraints', parameters: { table: 'CUSTOMERS', schema: 'SALES', }, expectedOutput: 'Detailed table structure with columns, types, keys, and indexes', }, ], dataProfile: [ { scenario: 'Profile complete table', description: 'Analyze data distribution and statistics', parameters: { table: 'SALES_DATA', schema: 'ANALYTICS', }, notes: 'May take several minutes for large tables', expectedOutput: 'Statistics for each column: distinct values, nulls, min/max, etc.', }, { scenario: 'Profile specific columns', description: 'Analyze only selected columns', parameters: { table: 'CUSTOMERS', schema: 'SALES', columns: ['COUNTRY', 'REGION', 'SEGMENT'], }, notes: 'Faster than profiling entire table', expectedOutput: 'Statistics for specified columns only', }, ], dataValidator: [ { scenario: 'Validate with rules file', description: 'Apply validation rules from JSON file', parameters: { table: 'CUSTOMERS', schema: 'SALES', rulesFile: 'validation_rules.json', }, notes: 'Rules file defines constraints like required fields, ranges, patterns', expectedOutput: 'List of validation failures with row numbers', }, ], duplicateDetection: [ { scenario: 'Find duplicates across all columns', description: 'Identify duplicate records', parameters: { table: 'CUSTOMERS', schema: 'SALES', }, expectedOutput: 'List of duplicate records grouped by matching values', }, { scenario: 'Find duplicates by key columns', description: 'Check for duplicates using specific columns', parameters: { table: 'ORDERS', schema: 'SALES', keyColumns: ['ORDER_ID', 'LINE_ITEM'], }, notes: 'More precise than checking all columns', expectedOutput: 'Duplicates based on specified key columns', }, ], compareSchema: [ { scenario: 'Compare two schemas', description: 'Find differences between source and target schemas', parameters: { sourceSchema: 'DEV_SCHEMA', targetSchema: 'PROD_SCHEMA', }, expectedOutput: 'Detailed diff showing added, modified, and deleted objects', }, ], schemaClone: [ { scenario: 'Clone schema structure', description: 'Copy schema structure without data', parameters: { sourceSchema: 'PROD_SCHEMA', targetSchema: 'TEST_SCHEMA', }, notes: 'Clones tables, views, stored procedures, but not data', expectedOutput: 'New schema with identical structure', }, ], tableCopy: [ { scenario: 'Copy table with data', description: 'Clone table including data', parameters: { sourceTable: 'CUSTOMERS', sourceSchema: 'PROD', targetTable: 'CUSTOMERS_BACKUP', targetSchema: 'BACKUP', }, expectedOutput: 'New table with copied data', }, ], status: [ { scenario: 'Check connection', description: 'Verify database connection and view current user', parameters: {}, notes: 'First command to run when connecting', expectedOutput: 'Current user, roles, and connection details', }, ], healthCheck: [ { scenario: 'System health check', description: 'Comprehensive system health assessment', parameters: {}, expectedOutput: 'Health status with warnings and recommendations', }, ], memoryAnalysis: [ { scenario: 'Analyze memory usage', description: 'View memory consumption by tables', parameters: {}, notes: 'Identifies memory-intensive tables', expectedOutput: 'List of tables sorted by memory usage', }, ], expensiveStatements: [ { scenario: 'Find slow queries', description: 'Identify expensive SQL statements', parameters: { limit: 10, }, notes: 'Shows statements from SQL plan cache', expectedOutput: 'Top expensive queries with execution metrics', }, ], }; /** * Parameter presets for common use cases */ export const COMMAND_PRESETS: Record<string, ParameterPreset[]> = { import: [ { name: 'quick-import', description: 'Fast import for small files with known good data', parameters: { filename: '<your-file.csv>', table: '<table-name>', schema: '<schema-name>', }, whenToUse: 'Small files (<10MB) with clean, validated data', }, { name: 'safe-import', description: 'Cautious import with validation and error handling', parameters: { filename: '<your-file.csv>', table: '<table-name>', schema: '<schema-name>', dryRun: true, skipWithErrors: true, maxErrorsAllowed: 10, }, notes: 'Run twice: first with dryRun:true, then with dryRun:false', whenToUse: 'Unvalidated data or first-time imports', }, { name: 'large-file', description: 'Import large files with memory protection', parameters: { filename: '<your-file.csv>', table: '<table-name>', schema: '<schema-name>', maxFileSizeMB: 500, timeoutSeconds: 3600, }, whenToUse: 'Files >100MB or expected long-running imports', }, { name: 'flexible-mapping', description: 'Import with flexible column matching', parameters: { filename: '<your-file.csv>', table: '<table-name>', schema: '<schema-name>', matchMode: 'name', }, whenToUse: 'File columns in different order than table columns', }, ], export: [ { name: 'full-table', description: 'Export complete table', parameters: { table: '<table-name>', schema: '<schema-name>', filename: '<output-file.csv>', }, whenToUse: 'Need all data from table', }, { name: 'filtered-export', description: 'Export with WHERE clause', parameters: { table: '<table-name>', schema: '<schema-name>', filename: '<output-file.csv>', where: '<your-condition>', }, whenToUse: 'Only need subset of data', }, { name: 'excel-export', description: 'Export to Excel format', parameters: { table: '<table-name>', schema: '<schema-name>', filename: '<output-file.xlsx>', }, whenToUse: 'Need Excel format for business users', }, ], dataProfile: [ { name: 'full-profile', description: 'Profile all columns', parameters: { table: '<table-name>', schema: '<schema-name>', }, whenToUse: 'Initial data exploration', }, { name: 'quick-profile', description: 'Profile specific columns only', parameters: { table: '<table-name>', schema: '<schema-name>', columns: ['<column1>', '<column2>'], }, whenToUse: 'Large tables where full profile is too slow', }, ], dataValidator: [ { name: 'default-rules', description: 'Generic starter rules based on common column patterns', parameters: { table: '<table-name>', schema: '<schema-name>', rules: '<id-column>:required;<email-column>:email;<date-column>:date;<amount-column>:numeric', }, notes: 'Adjust column names to match your table. Use rulesFile for larger rule sets.', whenToUse: 'Quick validation setup before refining rules', }, ], duplicateDetection: [ { name: 'all-columns', description: 'Check for complete duplicate rows', parameters: { table: '<table-name>', schema: '<schema-name>', }, whenToUse: 'Find exact duplicate records', }, { name: 'key-based', description: 'Check duplicates on key columns', parameters: { table: '<table-name>', schema: '<schema-name>', keyColumns: ['<key-column>'], }, whenToUse: 'Find duplicate business keys', }, ], compareSchema: [ { name: 'standard-compare', description: 'Compare two schemas', parameters: { sourceSchema: '<source-schema>', targetSchema: '<target-schema>', }, whenToUse: 'Check differences between environments', }, ], schemaClone: [ { name: 'structure-only', description: 'Clone schema without data', parameters: { sourceSchema: '<source-schema>', targetSchema: '<new-schema>', }, whenToUse: 'Create test environment with same structure', }, ], }; /** * Get examples for a command */ export function getCommandExamples(command: string): CommandExample[] { return COMMAND_EXAMPLES[command] || []; } /** * Get presets for a command */ export function getCommandPresets(command: string): ParameterPreset[] { return COMMAND_PRESETS[command] || []; } /** * Check if command has examples */ export function hasExamples(command: string): boolean { return command in COMMAND_EXAMPLES && COMMAND_EXAMPLES[command].length > 0; } /** * Check if command has presets */ export function hasPresets(command: string): boolean { return command in COMMAND_PRESETS && COMMAND_PRESETS[command].length > 0; } /** * Get all commands with examples */ export function getCommandsWithExamples(): string[] { return Object.keys(COMMAND_EXAMPLES); } /** * Get all commands with presets */ export function getCommandsWithPresets(): string[] { return Object.keys(COMMAND_PRESETS); }