UNPKG

dbgate-sqltree

Version:

JavaScript/TypeScript SQL query-builder library

119 lines (118 loc) 3.77 kB
"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;