import { clone } from 'lodash'; export class SqlPartDef { type: string; style: string; label: string; params: any[]; defaultParams: any[]; wrapOpen: string; wrapClose: string; separator: string; constructor(options: any) { this.type = options.type; if (options.label) { this.label = options.label; } else { this.label = this.type[0].toUpperCase() + this.type.substring(1) + ':'; } this.style = options.style; if (this.style === 'function') { this.wrapOpen = '('; this.wrapClose = ')'; this.separator = ', '; } else { this.wrapOpen = ' '; this.wrapClose = ' '; this.separator = ' '; } this.params = options.params; this.defaultParams = options.defaultParams; } } export class SqlPart { part: any; def: SqlPartDef; params: any[]; label: string; name: string; datatype: string; constructor(part: any, def: any) { this.part = part; this.def = def; if (!this.def) { throw { message: 'Could not find sql part ' + part.type }; } this.datatype = part.datatype; if (part.name) { this.name = part.name; this.label = def.label + ' ' + part.name; } else { this.name = ''; this.label = def.label; } part.params = part.params || clone(this.def.defaultParams); this.params = part.params; } updateParam(strValue: string, index: number) { // handle optional parameters if (strValue === '' && this.def.params[index].optional) { this.params.splice(index, 1); } else { this.params[index] = strValue; } this.part.params = this.params; } }