@rnaga/wp-node
Version:
👉 **[View Full Documentation at rnaga.github.io/wp-node →](https://rnaga.github.io/wp-node/)**
71 lines (70 loc) • 2.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueryBuilder = void 0;
class QueryBuilder {
alias;
builders;
builder;
clazz;
constructor(alias, builders, builder, clazz) {
this.alias = alias;
this.builders = builders;
this.builder = builder;
this.clazz = clazz;
}
get or() {
this.builder.or.__ref(this);
return this;
}
get not() {
this.builder.not.__ref(this);
return this;
}
count(table, column) {
const { column: toColumn } = this.alias;
this.builder
.clear("select")
.clear("offset")
.clear("group")
.countDistinct(`${toColumn(table, column)} as count`)
.first();
return this;
}
countGroupby(table, column) {
const { column: toColumn } = this.alias;
this.builder
.clear("select")
.clear("offset")
.clear("group")
.select(`${toColumn(table, column)} as ${column.toString()}`)
.count(`${toColumn(table, column)} as count`)
.groupBy(toColumn(table, column));
return this;
}
andWhere(fn, alias) {
this.builder.andWhere((subBuilder) => {
const query = this.builders.get(this.clazz, subBuilder, alias ?? this.alias);
fn(query);
});
return this;
}
andWhereNot(func, alias) {
this.builder.not.__ref(this).andWhere(func, alias);
return this;
}
orWhere(fn, alias) {
this.builder.orWhere((subBuilder) => {
const query = this.builders.get(this.clazz, subBuilder, alias ?? this.alias);
fn(query);
});
return this;
}
orWhereNot(func, alias) {
this.builder.not.__ref(this).orWhere(func, alias);
return this;
}
usingQuery(target, alias) {
return this.builders.get(target, this.builder, alias);
}
}
exports.QueryBuilder = QueryBuilder;