HANA-CLI Parameter Standardization Remediation Plan
Generated: February 16, 2026
Scope: 171 commands in ./bin folder
Objective: Standardize parameter naming, aliasing, and default values across all CLI commands
Executive Summary
| Category | Issues | Severity |
|---|---|---|
| Alias Conflicts | 3 critical duplicates | 🔴 HIGH |
| Naming Inconsistency | 15+ variations | 🟡 MEDIUM |
| Default Values | 8 inconsistent patterns | 🟡 MEDIUM |
| Case Sensitivity | 12+ casing issues | 🟠 LOW-MEDIUM |
Part 1: Global Standards to Adopt
1.1 Standard Parameter Definitions
Dry Run / Preview Operations
Standard Name: dryRun
Type: boolean
Default: false
Alias: ['dr', 'preview']
Description Key: "dryRun"
Current Issues:
dryRunused in: generateTestData.js, restore.jsdryused in: massGrant.js, massUpdate.js, massDelete.js
Affected Commands (14):
- generateTestData.js ✓ (already correct)
- restore.js ✓ (already correct)
- massGrant.js ❌ (fix: dry → dryRun)
- massUpdate.js ❌ (fix: dry → dryRun)
- massDelete.js ❌ (fix: dry → dryRun)
- massExport.js ❌ (fix: dry → dryRun)
- massRename.js ❌ (fix: dry → dryRun)
- massConvert.js ❌ (fix: dry → dryRun)
- schemaClone.js ❌ (fix: dryRun if exists)
- tableCopy.js (add: if missing)
- dataSync.js (add: if missing)
- import.js ✓ (already dryRun)
- export.js (add: dryRun with preview alias)
- dataValidator.js (add: dryRun)
Batch Size (Data Operations)
Standard Name: batchSize
Type: number
Default: 1000
Alias: ['b', 'batch']
Description Key: "batchSize"
Current Issues:
- Default 1000: import.js, restore.js, tableCopy.js, dataSync.js, backup.js
- Default 5000: some commands
- Default 10000: some commands
- Different aliases used
Affected Commands (18):
- import.js ✓ (1000 - correct)
- restore.js ✓ (1000 - correct)
- tableCopy.js ✓ (1000 - correct)
- dataSync.js ✓ (1000 - correct)
- backup.js (verify default)
- compareData.js (add: batchSize)
- compareSchema.js (verify default)
- duplicateDetection.js (verify default)
- dataValidator.js (verify default)
- referentialCheck.js (add: batchSize)
- massExport.js (standardize to 1000)
- massUpdate.js (add/standardize)
- massDelete.js (add if missing)
- dataMask.js (standardize)
- dataLineage.js (add: batchSize)
- dataDiff.js (add: batchSize)
- generateTestData.js (add: batchSize)
- schemaClone.js (standardize)
Timeout (Long-Running Operations)
Standard Name: timeout
Type: number
Default: 3600 (1 hour in seconds)
Alias: ['to', 'timeoutSeconds']
Description Key: "timeout"
Min: 60, Max: 86400
Current Status:
- Most compare/sync/validation commands have: 3600 ✓
- But not all at 3600
Affected Commands (50+):
- export.js ✓ (3600)
- import.js (verify 3600)
- compareData.js ✓ (3600)
- compareSchema.js ✓ (3600)
- dataSync.js (verify 3600)
- duplicateDetection.js ✓ (3600)
- dataValidator.js ✓ (3600)
- referentialCheck.js ✓ (3600)
- All other long-running commands (add if missing)
Schema Selection
Standard Pattern: Single parameter named schema
Type: string
Default: '**CURRENT_SCHEMA**'
Alias: ['s']
Description Key: "schema"
For Source/Target Operations:
sourceSchema/targetSchemapattern (mandatory pair)- Same default:
'**CURRENT_SCHEMA**' - Same aliases:
['ss']/['ts']
Current Issues:
- Inconsistent defaults (some missing)
- Inconsistent aliasing
Affected Commands:
Single schema (should have default):
- schemas.js ✓ (default: "*")
- tables.js ✓ (default: 'CURRENT_SCHEMA')
- users.js (no schema)
- procedures.js (verify default)
- functions.js (verify default)
- views.js (verify default)
- triggers.js (verify default)
- roles.js (verify default)
Source/Target (verify both have defaults):
- compareData.js ❌ (no defaults - ADD)
- compareSchema.js ❌ (no defaults - ADD)
- tableCopy.js ✓ (both have defaults)
- dataSync.js ✓ (both have defaults)
- schemaClone.js (verify)
Format/Output Parameters
Standard Pattern: Two separate parameters
File Output:
- Standard Name:
output - Type: string (file path)
- Alias:
['o', 'outputFile'] - Description Key: "output"
Format Selection:
- Standard Name:
format - Type: string (choices)
- Alias:
['f'] - Common Choices: "csv", "json", "excel"
- Default: Command-dependent (csv for data, json for structured)
Current Issues:
- Some commands have
outputonly - Some have
formatonly - Some have both but inconsistent naming
- Inconsistent defaults
Affected Commands (30+):
- export.js: ✓ Both parameters correct
- import.js: Verify format parameter
- compareData.js: ✓ Both correct
- compareSchema.js: Verify format
- dataValidator.js: ✓ Both correct
- duplicateDetection.js: ✓ Both correct
- referentialCheck.js: ✓ Both correct
- generateTestData.js: ✓ Both correct
- massExport.js: Verify both
- All other output-producing commands
Limit (Result Set Size)
Standard Name: limit
Type: number
Default: 1000 (for list operations) or command-specific for data operations
Alias: ['l']
Description Key: "limit"
Current Issues:
- tables.js: default 200
- schemas.js: default 200
- compareData.js: default 1000
- duplicateDetection.js: default 10000
- dataValidator.js: default 10000
Recommendation: Standardize based on command category
- List commands (tables, schemas, users, etc.): 200
- Data operations (compare, validate, analyze): 10000
- Other operations: 1000
1.2 Alias Standardization
Primary Alias Pattern
- First letter of parameter (lowercase)
- Additional short meaningful abbreviation
- Maximum 2 aliases per parameter
Format:
parameterName: {
alias: ['p', 'abbrev'], // NOT ['p', 'parameterName']
// ... rest of config
}Forbidden Alias Patterns
- ❌ Self-referential:
schema: {alias: ['s', 'schema']} - ❌ Case-inconsistent:
BackupFile,Schema(use lowercase) - ❌ Duplicates: Two parameters with alias
['u'] - ❌ Redundant:
log: {alias: ['log']}
Part 2: Priority 1 - CRITICAL FIXES (Alias Conflicts)
Issue 2.1: DUPLICATE ALIAS in connect.js
File: bin/connect.js
Problem: Both user and userstorekey have alias 'u'
Current Code:
user: {
alias: ['u'],
desc: baseLite.bundle.getText("user")
},
userstorekey: {
alias: ['u', 'userstorekey'], // ❌ CONFLICT with user
desc: baseLite.bundle.getText("userstorekey")
}Fix:
user: {
alias: ['u'], // Keep: most common usage
desc: baseLite.bundle.getText("user")
},
userstorekey: {
alias: ['uk', 'userstore'], // ❌ Changed from ['u', 'userstorekey']
desc: baseLite.bundle.getText("userstorekey")
}Issue 2.2: Case-Inconsistent Aliases in restore.js
File: bin/restore.js
Problem: Capital letter aliases break consistency
Current Code:
backupFile: {
alias: ['bf', 'BackupFile'], // ❌ Capital B
// ...
},
schema: {
alias: ['s', 'Schema'], // ❌ Capital S
// ...
},
batchSize: {
alias: ['b', 'BatchSize'], // ❌ Capital B
// ...
},
dryRun: {
alias: ['dr', 'DryRun'], // ❌ Capital D
// ...
}Fix: Remove capital letter aliases, keep only lowercase abbreviations
backupFile: {
alias: ['bf', 'file'],
// ...
},
schema: {
alias: ['s'],
// ...
},
batchSize: {
alias: ['b', 'batch'],
// ...
},
dryRun: {
alias: ['dr', 'preview'],
// ...
}Issue 2.3: Case Issues in tables.js
File: bin/tables.js
Problem: Capital letter in alias ['t', 'Table']
Current Code:
table: {
alias: ['t', 'Table'], // ❌ Capital T
type: 'string',
default: "*",
desc: baseLite.bundle.getText("table")
},
profile: {
alias: ['p', 'Profile'], // ❌ Capital P
type: 'string',
desc: baseLite.bundle.getText("profile")
}Fix:
table: {
alias: ['t'],
type: 'string',
default: "*",
desc: baseLite.bundle.getText("table")
},
profile: {
alias: ['p'],
type: 'string',
desc: baseLite.bundle.getText("profile")
}Part 3: Priority 2 - HIGH IMPACT (Naming Standardization)
Group 2.1: Batch Mass Operations
Commands: massGrant.js, massUpdate.js, massDelete.js, massExport.js, massRename.js, massConvert.js
Change Required: dry → dryRun
Before:
dry: {
alias: ['d', 'dryrun'],
type: 'boolean',
desc: baseLite.bundle.getText("dryRun"),
default: false
}After:
dryRun: {
alias: ['dr', 'preview'],
type: 'boolean',
desc: baseLite.bundle.getText("dryRun"),
default: false
}Updates in handler (3 locations per file):
- In builder definition
- In inputPrompts
- In function parameter usage (argv.dryRun)
Group 2.2: Log Parameter Standardization
Commands: massGrant.js, massUpdate.js, massDelete.js
Issue: Redundant alias ['log'] when name is already log
Current:
log: {
alias: ['log'], // ❌ Redundant
type: 'boolean',
desc: baseLite.bundle.getText("mass.log")
}Fix:
log: {
alias: ['l'], // Changed: meaningful abbreviation
type: 'boolean',
desc: baseLite.bundle.getText("mass.log")
}Group 2.3: Schema Defaults
Commands: compareData.js, compareSchema.js, and similar source/target operations
Issue: Missing default values for schema parameters
Current:
sourceSchema: {
alias: ['ss'],
type: 'string',
desc: baseLite.bundle.getText("compareDataSourceSchema")
},
targetSchema: {
alias: ['ts'],
type: 'string',
desc: baseLite.bundle.getText("compareDataTargetSchema")
}Fix:
sourceSchema: {
alias: ['ss'],
type: 'string',
default: '**CURRENT_SCHEMA**',
desc: baseLite.bundle.getText("compareDataSourceSchema")
},
targetSchema: {
alias: ['ts'],
type: 'string',
default: '**CURRENT_SCHEMA**',
desc: baseLite.bundle.getText("compareDataTargetSchema")
}Group 2.4: Format Default Standardization
Commands: export.js, dataValidator.js, duplicateDetection.js, referentialCheck.js
Issue: Inconsistent format defaults
Current:
// export.js
format: {
default: "csv", // ✓
// ...
},
// dataValidator.js
format: {
default: "summary", // ❌ Should be "csv" or standardized
// ...
},
// duplicateDetection.js
format: {
default: "summary", // ❌
// ...
}Fix - Establish Standard Defaults:
- Data export commands (export.js): default: "csv"
- Report/summary commands (dataValidator.js, duplicateDetection.js): default: "json" (structured output)
- Comparison commands (compareSchema.js): default: "json"
Example Fix for dataValidator.js:
format: {
alias: ['f'],
choices: ["json", "csv", "summary", "detailed"],
default: "json", // Changed from "summary"
type: 'string',
desc: baseLite.bundle.getText("dataValidatorFormat")
}Part 4: Priority 3 - MEDIUM IMPACT (Missing Standard Parameters)
Group 3.1: Add dryRun to Commands Missing It
Commands needing addition (12):
- export.js
- import.js ✓ (has it)
- compareData.js
- compareSchema.js
- dataSync.js
- tableCopy.js
- schemaClone.js
- generateTestData.js
- dataValidator.js
- duplicateDetection.js
- referentialCheck.js
- dataMask.js
Template to Add:
// In builder:
dryRun: {
alias: ['dr', 'preview'],
type: 'boolean',
default: false,
desc: baseLite.bundle.getText("dryRun")
},
// In inputPrompts:
dryRun: {
description: baseLite.bundle.getText("dryRun"),
type: 'boolean',
required: false,
ask: () => false
}Group 3.2: Ensure Timeout on All Long-Running Commands
Commands needing verification/addition (40+):
Check and standardize to timeout: 3600 (one hour default) in:
- All export/import commands
- All compare/sync commands
- All data manipulation commands
- All validation commands
- All batch operations
Template:
timeout: {
alias: ['to', 'timeoutSeconds'],
type: 'number',
default: 3600,
desc: baseLite.bundle.getText("timeout")
}Group 3.3: Add Profile Parameter to Data Commands
Why: Multi-database support (PostgreSQL, SQLite)
Commands needing addition (8-10):
- backup.js
- restore.js
- import.js
- export.js
- dataValidator.js (has it ✓)
- tableCopy.js (has it ✓)
Template:
profile: {
alias: ['p', 'db'],
type: 'string',
desc: baseLite.bundle.getText("profile")
}Part 5: Low Priority - Code Quality (Case Standardization)
Group 5.1: Remove Self-Referential Aliases
Pattern to eliminate:
// ❌ BAD
schema: {
alias: ['s', 'schema'], // 'schema' is redundant
// ...
}
// ✓ GOOD
schema: {
alias: ['s'],
// ...
}Affected:
- massGrant.js:
schema: {alias: ['s', 'schema']} - massGrant.js:
object: {alias: ['o', 'object']} - massGrant.js:
privilege: {alias: ['p', 'privilege']} - massGrant.js:
grantee: {alias: ['g', 'grantee']} - massUpdate.js: similar patterns
- massDelete.js: similar patterns
Part 6: Implementation Roadmap
Phase 1: Critical Fixes (Session 1)
Timeline: 1-2 hours
Files: 3
Commands affected: 3
- ✅ connect.js - Fix userstorekey alias
- ✅ restore.js - Remove capital aliases
- ✅ tables.js - Remove capital aliases
Phase 2: High Impact Standardization (Session 2)
Timeline: 2-3 hours
Files: 15
Commands affected: 20+
- ✅ Convert all
dry→dryRun(6 commands) - ✅ Remove redundant log aliases (3 commands)
- ✅ Add schema defaults to comparison commands (4 commands)
- ✅ Standardize format defaults (4 commands)
Phase 3: Medium Impact Additions (Session 3)
Timeline: 3-4 hours
Files: 20+
Commands affected: 40+
- ✅ Add dryRun to commands missing it (12 commands)
- ✅ Add timeout to commands missing it (30+ commands)
- ✅ Add profile to data commands (10 commands)
Phase 4: Code Quality Polish (Session 4)
Timeline: 1-2 hours
Files: 8+
Commands affected: 15+
- ✅ Remove self-referential aliases (8 commands)
- ✅ Standardize remaining naming patterns
Part 7: Testing Checklist
After each phase, verify:
- [ ] Command-line help shows correct parameters
- [ ] Aliases work correctly:
hana-cli <cmd> --paramandhana-cli <cmd> -alias - [ ] Default values apply when parameter omitted
- [ ] No alias conflicts in help output
- [ ] Prompt handling accepts new parameter names
- [ ] Documentation reflects new names
Test Commands:
# Test alias
hana-cli command --dryRun
hana-cli command --dr
hana-cli command -dr
# Test defaults
hana-cli command [required-param] # Should use defaults for optional
# Test help
hana-cli help command | grep -E "alias|default"Part 8: Documentation Updates
After implementation, update:
Help text in
_i18n/messages.properties- Ensure parameter descriptions are clear
- Verify alias explanations
README.md
- Add parameter standardization guide
- Document standard parameter meanings
Command-specific docs (if they exist)
- Update with new parameter names
Type definitions (TypeScript if used)
- Update interfaces for standardized parameters
Appendix A: Quick Reference - Standard Parameters
| Parameter | Type | Default | Aliases | Notes |
|---|---|---|---|---|
dryRun | bool | false | dr, preview | STANDARD - use everywhere |
batchSize | num | 1000 | b, batch | Data operations only |
timeout | num | 3600 | to, timeoutSeconds | Long-running commands |
schema | str | **CURRENT_SCHEMA** | s | Single schema context |
sourceSchema | str | **CURRENT_SCHEMA** | ss | With targetSchema pair |
targetSchema | str | **CURRENT_SCHEMA** | ts | With sourceSchema pair |
output | str | none | o, outputFile | File path/name |
format | str | "csv" or "json" | f | Output format selection |
limit | num | 1000 | l | Result set limit |
profile | str | none | p, db | Database profile |
log | bool | false | l | Logging enabled |
Appendix B: Commands by Standardization Status
✅ Already Compliant (20+)
- generateTestData.js
- import.js
- export.js
- compareData.js
- compareSchema.js
- dataValidator.js
- duplicateDetection.js
- referentialCheck.js
- [others with correct patterns]
🔴 Critical Issues (3)
- connect.js
- restore.js
- tables.js
🟡 High Priority (15)
- massGrant.js
- massUpdate.js
- massDelete.js
- massExport.js
- massRename.js
- massConvert.js
- dataSync.js
- schemaClone.js
- [others missing standard params]
🟠 Medium Priority (20)
- All list commands (schemas, users, roles, etc.)
- All backup/restore related
- All data operation commands without dryRun
Appendix C: Command Group Reference
Data Manipulation (9)
export, import, compareData, compareSchema, dataSync, tableCopy, dataMask, dataLineage, dataDiff
Batch Operations (6)
massGrant, massUpdate, massDelete, massExport, massRename, massConvert
Validation & Analysis (5)
dataValidator, duplicateDetection, referentialCheck, generateTestData, [others]
Backup & Restore (4)
backup, restore, backupList, backupStatus
List/Inspect (20+)
tables, schemas, users, views, procedures, functions, roles, sequences, synonyms, triggers, indexes, [others]
Infrastructure (10+)
status, healthCheck, systemInfo, containers, hanaCloudInstances, [others]