soda-angular
Version:
Socrata SODA client for Angular
82 lines (81 loc) • 2.62 kB
JavaScript
import { LimitClause, OffsetClause, SelectClause, WhereClause } from './clauses';
import { OrderClause } from './clauses/order';
import { SoqlQuery } from './soql-query';
export class SoqlQueryBuilder {
get LimitClause() { return this.limitClause; }
;
get OffsetClause() { return this.offsetClause; }
;
get SelectClause() { return this.selectClause; }
;
get WhereClause() { return this.whereClause; }
;
get OrderClause() { return this.orderClause; }
;
limit(maxRows) {
this.limitClause = new LimitClause(maxRows);
return this;
}
clearLimit() {
this.limitClause = undefined;
}
offset(rows) {
this.offsetClause = new OffsetClause(rows);
return this;
}
clearOffset() {
this.offsetClause = undefined;
}
select(...columns) {
const existingColumns = this.selectClause ? this.selectClause.Columns : [];
this.selectClause = new SelectClause(...existingColumns, ...columns);
return this;
}
clearSelect() {
this.selectClause = undefined;
}
filter(...filters) {
const existingFilters = this.whereClause ? this.whereClause.Components : [];
this.whereClause = new WhereClause(...existingFilters, ...filters);
return this;
}
orderBy(...columns) {
const existingOrder = this.orderClause ? this.orderClause.Columns : [];
this.orderClause = new OrderClause(...existingOrder, ...columns);
return this;
}
clearOrder() {
this.orderClause = undefined;
}
clearFilters() {
this.whereClause = undefined;
}
getQuery() {
const clauses = new Array();
if (this.whereClause) {
clauses.push(this.whereClause);
}
if (this.selectClause) {
clauses.push(this.selectClause);
}
if (this.limitClause) {
clauses.push(this.limitClause);
}
if (this.offsetClause) {
clauses.push(this.offsetClause);
}
if (this.orderClause) {
clauses.push(this.orderClause);
}
return new SoqlQuery(...clauses);
}
clone() {
const newBuilder = new SoqlQueryBuilder();
newBuilder.whereClause = this.whereClause;
newBuilder.selectClause = this.selectClause;
newBuilder.limitClause = this.limitClause;
newBuilder.offsetClause = this.offsetClause;
newBuilder.orderClause = this.orderClause;
return newBuilder;
}
}