UNPKG

ts-sql-query

Version:

Type-safe SQL query builder like QueryDSL or JOOQ in Java or Linq in .Net for TypeScript with MariaDB, MySql, Oracle, PostgreSql, Sqlite and SqlServer support.

101 lines (100 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.operationOf = exports.hasToSql = exports.getWithData = exports.hasWithData = exports.isAllowedQueryColumns = exports.flattenQueryColumns = exports.getQueryColumn = void 0; const values_1 = require("../expressions/values"); function getQueryColumn(columns, prop) { const propName = prop; let valueSource = columns[propName]; if (valueSource) { if ((0, values_1.isValueSource)(valueSource)) { return valueSource; } else { return undefined; } } const route = propName.split('.'); valueSource = columns; for (let i = 0, length = route.length; valueSource && i < length; i++) { if ((0, values_1.isValueSource)(valueSource)) { return undefined; } const currentProp = route[i]; valueSource = valueSource[currentProp]; } if ((0, values_1.isValueSource)(valueSource)) { return valueSource; } else { return undefined; } } exports.getQueryColumn = getQueryColumn; function flattenQueryColumns(columns, target, prefix) { for (let prop in columns) { const column = columns[prop]; if ((0, values_1.isValueSource)(column)) { const name = prefix + prop; if (target[name]) { throw new Error("You are trying to use the same column name '" + name + "' several times in the same query"); } target[name] = column; } else { flattenQueryColumns(column, target, prefix + prop + '.'); } } } exports.flattenQueryColumns = flattenQueryColumns; function isAllowedQueryColumns(columns, sqlBuilder) { for (let prop in columns) { const column = columns[prop]; if ((0, values_1.isValueSource)(column)) { const result = (0, values_1.__getValueSourcePrivate)(column).__isAllowed(sqlBuilder); if (!result) { return false; } } else { const result = isAllowedQueryColumns(column, sqlBuilder); if (!result) { return false; } } } return true; } exports.isAllowedQueryColumns = isAllowedQueryColumns; function hasWithData(value) { if (value && value.__name && (value.__selectData || value.__values)) { return true; } else { return false; } } exports.hasWithData = hasWithData; function getWithData(withView) { return withView; } exports.getWithData = getWithData; function hasToSql(value) { if (value === undefined || value === null) { return false; } if (typeof value === 'object') { return typeof value.__toSql === 'function'; } return false; } exports.hasToSql = hasToSql; function operationOf(value) { if (value === undefined || value === null) { return null; } if (typeof value.__operation === 'string') { return value.__operation; } return null; } exports.operationOf = operationOf;