prepareTableNamesToTables(tableNames) { this.tableNamesToTables = R.pipe( R.unnest, R.groupBy(n => n[0]), R.map(groupedNameToDef => groupedNameToDef.map(nameToDef => nameToDef[1])) )( tableNames.map(tableName => { const [schema, table] = this.parseTableName(tableName); const tableDefinition = this.resolveTableDefinition(tableName); const definition = { schema, table, tableDefinition, tableName }; const tableizeName = inflection.tableize(table); const parts = tableizeName.split('_'); const tableNamesFromParts = R.range(0, parts.length - 1).map(toDrop => inflection.tableize(R.drop(toDrop, parts).join('_'))); const names = R.uniq([table, tableizeName].concat(tableNamesFromParts)); return names.map(n => [n, definition]); }) ); }
cursor = ctx.start.start; if (ctx.children[0].getText() === originalAlias) { const withoutFirst = R.drop(1, ctx.children); result += [tableAlias].concat(withoutFirst.map(c => c.getText())).join(''); cursor = ctx.stop.stop + 1;
const join = R.drop(1, toJoin) .map( (q, i) => (this.dimensionAliasNames().length ?
curry((char, val) => { if (firstChar(val) === char) { return trimChar(char, drop(1, val)); } if (lastChar(val) === char) { return trimChar(char, take(val.length - 1, val)); } return val; })
// NOTE: Maybe safer to avoid recursive calls? const stripLeadingChars = val => isNaN(firstCharAsNumber(val)) ? stripLeadingChars(drop(1, val)) : val