diff --git a/src/defaultHandler.ts b/src/defaultHandler.ts index abd2acf..883c337 100644 --- a/src/defaultHandler.ts +++ b/src/defaultHandler.ts @@ -751,6 +751,22 @@ export class Handler { } return builder; }, + exists: (handler: Handler, a: allModifierInput[]):QueryBuilder =>{ + let e = a[0]; + if (e instanceof Attribute || e instanceof AttributeAlias) return new QueryBuilder([{ data: "exists (" + e.getString(handler) + ")" }]) + if (e instanceof Modifier || e instanceof selectQuery || e instanceof Aggregation) { + const builder = new QueryBuilder(); + builder.addCode("exists ("); + builder.append(e.serialize(handler)); + builder.addCode(")"); + return builder; + } + return new QueryBuilder([ + { data: "exists (" }, + { inject: true, data: e }, + { data: ")" } + ]); + }, concat: (handler: Handler, a: allModifierInput[]): QueryBuilder => { const builder = new QueryBuilder(); builder.addCode("CONCAT("); diff --git a/src/funcs.ts b/src/funcs.ts index b567b05..e440898 100644 --- a/src/funcs.ts +++ b/src/funcs.ts @@ -20,6 +20,8 @@ export const not = (arg: allModifierInput) => new BooleanModifier("not", [arg]); export const like = (a: allModifierInput, b: allModifierInput) => new BooleanModifier("like", [a, b]); export const regexp = (a: allModifierInput, b: allModifierInput) => new BooleanModifier("regexp", [a, b]); +export const exists = (q: selectQuery) => new BooleanModifier("exists", [q]); + export const concat = (...args: allModifierInput[]) => new StringModifier("concat", args); //aggregations