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
JavaScript
;
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;