dbgate-sqltree
Version:
JavaScript/TypeScript SQL query-builder library
119 lines (118 loc) • 3.77 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLogCompoudCondition = exports.selectKeysFromTable = exports.mergeConditions = exports.scriptToSql = exports.treeToSql = void 0;
const dumpSqlCommand_1 = require("./dumpSqlCommand");
function treeToSql(driver, object, func) {
const dmp = driver.createDumper();
func(dmp, object);
return dmp.s;
}
exports.treeToSql = treeToSql;
function scriptToSql(driver, script) {
const dmp = driver.createDumper();
for (const cmd of script) {
(0, dumpSqlCommand_1.dumpSqlCommand)(dmp, cmd);
dmp.endCommand();
}
return dmp.s;
}
exports.scriptToSql = scriptToSql;
function mergeConditions(condition1, condition2) {
if (!condition1)
return condition2;
if (!condition2)
return condition1;
if (condition1.conditionType == 'and' && condition2.conditionType == 'and') {
return {
conditionType: 'and',
conditions: [...condition1.conditions, ...condition2.conditions],
};
}
if (condition1.conditionType == 'and') {
return {
conditionType: 'and',
conditions: [...condition1.conditions, condition2],
};
}
if (condition2.conditionType == 'and') {
return {
conditionType: 'and',
conditions: [condition1, ...condition2.conditions],
};
}
return {
conditionType: 'and',
conditions: [condition1, condition2],
};
}
exports.mergeConditions = mergeConditions;
function selectKeysFromTable(options) {
const source = {
name: { pureName: options.pureName, schemaName: options.schemaName },
};
const res = {
commandType: 'select',
columns: options.keyColumns.map(col => ({
exprType: 'column',
columnName: col,
source,
})),
from: source,
where: {
conditionType: 'or',
conditions: options.loadKeys.map(key => ({
conditionType: 'and',
conditions: key.map((keyValue, index) => ({
conditionType: 'binary',
operator: '=',
left: {
exprType: 'column',
columnName: options.keyColumns[index],
source,
},
right: {
exprType: 'value',
value: keyValue,
},
})),
})),
},
};
return res;
}
exports.selectKeysFromTable = selectKeysFromTable;
function createLogCompoudCondition(fieldFilters, timeColumn, timeFrom, timeTo) {
const conditions = [
{
conditionType: 'binary',
operator: '>=',
left: { exprType: 'column', columnName: timeColumn },
right: { exprType: 'value', value: timeFrom },
},
{
conditionType: 'binary',
operator: '<=',
left: { exprType: 'column', columnName: timeColumn },
right: { exprType: 'value', value: timeTo },
},
];
for (const [key, values] of Object.entries(fieldFilters)) {
if (values.length == 1 && values[0] == null) {
conditions.push({
conditionType: 'isNull',
expr: { exprType: 'column', columnName: key },
});
continue;
}
conditions.push({
conditionType: 'in',
expr: { exprType: 'column', columnName: key },
values,
});
}
return {
conditionType: 'and',
conditions,
};
}
exports.createLogCompoudCondition = createLogCompoudCondition;