ionic-orm-2
Version:
Data-mapper ORM for Ionic WebSQL and SQLite
85 lines • 3.54 kB
JavaScript
/**
* Utilities to work with FindOptions.
*/
export class FindOptionsUtils {
/**
* Checks if given object is really instance of FindOptions interface.
*/
static isFindOptions(object) {
const possibleOptions = object;
return possibleOptions && !!possibleOptions.alias && typeof possibleOptions.alias === "string" && (!!possibleOptions.limit ||
!!possibleOptions.offset ||
!!possibleOptions.firstResult ||
!!possibleOptions.maxResults ||
!!possibleOptions.where ||
!!possibleOptions.having ||
!!possibleOptions.whereConditions ||
!!possibleOptions.havingConditions ||
!!possibleOptions.orderBy ||
!!possibleOptions.groupBy ||
!!possibleOptions.leftJoinAndSelect ||
!!possibleOptions.innerJoinAndSelect ||
!!possibleOptions.leftJoin ||
!!possibleOptions.innerJoin ||
!!possibleOptions.parameters);
}
/**
* Applies give find options to the given query builder.
*/
static applyOptionsToQueryBuilder(qb, options) {
if (options.limit)
qb.setLimit(options.limit);
if (options.offset)
qb.setOffset(options.offset);
if (options.firstResult)
qb.setFirstResult(options.firstResult);
if (options.maxResults)
qb.setMaxResults(options.maxResults);
if (options.where)
qb.where(options.where);
if (options.having)
qb.having(options.having);
if (options.whereConditions) {
Object.keys(options.whereConditions).forEach(key => {
const name = key.indexOf(".") === -1 ? options.alias + "." + key : key;
qb.andWhere(name + "=:" + key);
});
qb.addParameters(options.whereConditions);
}
if (options.havingConditions) {
Object.keys(options.havingConditions).forEach(key => {
const name = key.indexOf(".") === -1 ? options.alias + "." + key : key;
qb.andHaving(name + "=:" + key);
});
qb.addParameters(options.havingConditions);
}
if (options.orderBy)
Object.keys(options.orderBy).forEach(columnName => qb.addOrderBy(columnName, options.orderBy[columnName]));
if (options.groupBy)
options.groupBy.forEach(groupBy => qb.addGroupBy(groupBy));
if (options.leftJoin)
Object.keys(options.leftJoin).forEach(key => {
if (options.leftJoin)
qb.leftJoin(options.leftJoin[key], key);
});
if (options.innerJoin)
Object.keys(options.innerJoin).forEach(key => {
if (options.innerJoin)
qb.innerJoin(options.innerJoin[key], key);
});
if (options.leftJoinAndSelect)
Object.keys(options.leftJoinAndSelect).forEach(key => {
if (options.leftJoinAndSelect)
qb.leftJoinAndSelect(options.leftJoinAndSelect[key], key);
});
if (options.innerJoinAndSelect)
Object.keys(options.innerJoinAndSelect).forEach(key => {
if (options.innerJoinAndSelect)
qb.innerJoinAndSelect(options.innerJoinAndSelect[key], key);
});
if (options.parameters)
qb.addParameters(options.parameters);
return qb;
}
}
//# sourceMappingURL=FindOptionsUtils.js.map