query designer SQL generator

This commit is contained in:
Jan Prochazka
2020-12-28 16:31:21 +01:00
parent c10c6afbc5
commit 60fd1c38ae
3 changed files with 121 additions and 19 deletions

View File

@@ -2,6 +2,7 @@ import { SqlDumper } from 'dbgate-types';
import { Condition, BinaryCondition } from './types';
import { dumpSqlExpression } from './dumpSqlExpression';
import { link } from 'fs';
import { dumpSqlSelect } from './dumpSqlCommand';
export function dumpSqlCondition(dmp: SqlDumper, condition: Condition) {
switch (condition.conditionType) {
@@ -30,7 +31,7 @@ export function dumpSqlCondition(dmp: SqlDumper, condition: Condition) {
break;
case 'and':
case 'or':
dmp.putCollection(` ^${condition.conditionType} `, condition.conditions, cond => {
dmp.putCollection(` ^${condition.conditionType} `, condition.conditions, (cond) => {
dmp.putRaw('(');
dumpSqlCondition(dmp, cond);
dmp.putRaw(')');
@@ -51,5 +52,15 @@ export function dumpSqlCondition(dmp: SqlDumper, condition: Condition) {
dumpSqlCondition(dmp, condition.condition);
dmp.put(')');
break;
case 'exists':
dmp.put('^exists (');
dumpSqlSelect(dmp, condition.subQuery);
dmp.put(')');
break;
case 'notExists':
dmp.put('^not ^exists (');
dumpSqlSelect(dmp, condition.subQuery);
dmp.put(')');
break;
}
}

View File

@@ -82,7 +82,23 @@ export interface CompoudCondition {
conditions: Condition[];
}
export type Condition = BinaryCondition | NotCondition | TestCondition | CompoudCondition | LikeCondition;
export interface ExistsCondition {
conditionType: 'exists';
subQuery: Select;
}
export interface NotExistsCondition {
conditionType: 'notExists';
subQuery: Select;
}
export type Condition =
| BinaryCondition
| NotCondition
| TestCondition
| CompoudCondition
| LikeCondition
| ExistsCondition
| NotExistsCondition;
export interface Source {
name?: NamedObjectInfo;