diff --git a/package.json b/package.json index 6d02c27..b7a92e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dblang", - "version": "1.0.0", + "version": "0.6.2", "description": "", "main": "dist/db.js", "types": "dist/db.d.ts", diff --git a/readme.md b/readme.md index 40d89f5..3620bda 100644 --- a/readme.md +++ b/readme.md @@ -238,6 +238,7 @@ BooleanModifier: - `le(v1, v2, ...)` - `not(v1)` - `like(v1, v2)` +- `exists(s)` NumberModifier: - `plus(v1, v2, ...)` @@ -248,7 +249,7 @@ NumberModifier: StringModifier: - `concat(v1, v2, ...)` -(v\* = string, number, boolean, null, Modifier, Aggregation, select Query, Attribute) +(v\* = string, number, boolean, null, Modifier, Aggregation, select Query, Attribute; s = selectQuery) #### Joins 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