Skip to content

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

CategoryIssuesSeverity
Alias Conflicts3 critical duplicates🔴 HIGH
Naming Inconsistency15+ variations🟡 MEDIUM
Default Values8 inconsistent patterns🟡 MEDIUM
Case Sensitivity12+ 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:

  • dryRun used in: generateTestData.js, restore.js
  • dry used 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 / targetSchema pattern (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 output only
  • Some have format only
  • 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:

javascript
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:

javascript
user: {
  alias: ['u'],
  desc: baseLite.bundle.getText("user")
},
userstorekey: {
  alias: ['u', 'userstorekey'],  // ❌ CONFLICT with user
  desc: baseLite.bundle.getText("userstorekey")
}

Fix:

javascript
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:

javascript
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

javascript
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:

javascript
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:

javascript
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: drydryRun

Before:

javascript
dry: {
  alias: ['d', 'dryrun'],
  type: 'boolean',
  desc: baseLite.bundle.getText("dryRun"),
  default: false
}

After:

javascript
dryRun: {
  alias: ['dr', 'preview'],
  type: 'boolean',
  desc: baseLite.bundle.getText("dryRun"),
  default: false
}

Updates in handler (3 locations per file):

  1. In builder definition
  2. In inputPrompts
  3. 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:

javascript
log: {
  alias: ['log'],  // ❌ Redundant
  type: 'boolean',
  desc: baseLite.bundle.getText("mass.log")
}

Fix:

javascript
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:

javascript
sourceSchema: {
  alias: ['ss'],
  type: 'string',
  desc: baseLite.bundle.getText("compareDataSourceSchema")
},
targetSchema: {
  alias: ['ts'],
  type: 'string',
  desc: baseLite.bundle.getText("compareDataTargetSchema")
}

Fix:

javascript
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:

javascript
// 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:

javascript
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:

javascript
// 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:

javascript
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:

javascript
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:

javascript
// ❌ 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

  1. ✅ connect.js - Fix userstorekey alias
  2. ✅ restore.js - Remove capital aliases
  3. ✅ tables.js - Remove capital aliases

Phase 2: High Impact Standardization (Session 2)

Timeline: 2-3 hours
Files: 15
Commands affected: 20+

  1. ✅ Convert all drydryRun (6 commands)
  2. ✅ Remove redundant log aliases (3 commands)
  3. ✅ Add schema defaults to comparison commands (4 commands)
  4. ✅ Standardize format defaults (4 commands)

Phase 3: Medium Impact Additions (Session 3)

Timeline: 3-4 hours
Files: 20+
Commands affected: 40+

  1. ✅ Add dryRun to commands missing it (12 commands)
  2. ✅ Add timeout to commands missing it (30+ commands)
  3. ✅ Add profile to data commands (10 commands)

Phase 4: Code Quality Polish (Session 4)

Timeline: 1-2 hours
Files: 8+
Commands affected: 15+

  1. ✅ Remove self-referential aliases (8 commands)
  2. ✅ Standardize remaining naming patterns

Part 7: Testing Checklist

After each phase, verify:

  • [ ] Command-line help shows correct parameters
  • [ ] Aliases work correctly: hana-cli <cmd> --param and hana-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:

bash
# 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:

  1. Help text in _i18n/messages.properties

    • Ensure parameter descriptions are clear
    • Verify alias explanations
  2. README.md

    • Add parameter standardization guide
    • Document standard parameter meanings
  3. Command-specific docs (if they exist)

    • Update with new parameter names
  4. Type definitions (TypeScript if used)

    • Update interfaces for standardized parameters

Appendix A: Quick Reference - Standard Parameters

ParameterTypeDefaultAliasesNotes
dryRunboolfalsedr, previewSTANDARD - use everywhere
batchSizenum1000b, batchData operations only
timeoutnum3600to, timeoutSecondsLong-running commands
schemastr**CURRENT_SCHEMA**sSingle schema context
sourceSchemastr**CURRENT_SCHEMA**ssWith targetSchema pair
targetSchemastr**CURRENT_SCHEMA**tsWith sourceSchema pair
outputstrnoneo, outputFileFile path/name
formatstr"csv" or "json"fOutput format selection
limitnum1000lResult set limit
profilestrnonep, dbDatabase profile
logboolfalselLogging 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]