pg-query-config
Version:
Query Builder for PostgreSQL
264 lines (263 loc) • 8.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rc = exports.RightContain = exports.lc = exports.LeftContain = exports.json = exports.array = exports.ilike = exports.ILike = exports.like = exports.Like = exports.NotIn = exports.In = exports.lte = exports.LessEqual = exports.gte = exports.GreaterEqual = exports.lt = exports.Less = exports.gt = exports.Greater = exports.ne = exports.NotEqual = exports.eq = exports.Equal = void 0;
const utils_1 = require("./utils");
/**
* Basic operators
* Right Operand @type number | string
*/
/** IN(arg1, arg2, ...) */
const In = (args) => {
const fn = function (valueRefSet) {
const refs = args.filter(arg => arg || arg === 0).map(arg => `$${utils_1.addValueToReferenceSet(arg, valueRefSet)}`);
return refs.length ? `IN (${refs.join(',')})` : '';
};
if (args.some(arg => arg === null)) {
fn.nullableCondition = 'IS NULL';
}
return fn;
};
exports.In = In;
/** NOT IN(arg1, arg2, ...) */
const NotIn = (args) => {
const fn = function (valueRefSet) {
const refs = args.filter(arg => arg || arg === 0).map(arg => `$${utils_1.addValueToReferenceSet(arg, valueRefSet)}`);
return refs.length ? `NOT IN (${refs.join(',')})` : '';
};
if (args.some(arg => arg === null)) {
fn.nullableCondition = 'IS NOT NULL';
}
return fn;
};
exports.NotIn = NotIn;
/** Equal(arg) or EQ(arg)*/
const Equal = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `= $${ref}`;
};
};
exports.Equal = Equal;
exports.eq = Equal;
/** NotEqual(arg) or NE(arg)*/
const NotEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `<> $${ref}`;
};
};
exports.NotEqual = NotEqual;
exports.ne = NotEqual;
/** Greater(arg) or GT(arg) */
const Greater = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `> $${ref}`;
};
};
exports.Greater = Greater;
exports.gt = Greater;
/** Less(arg) or LT(arg) */
const Less = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `< $${ref}`;
};
};
exports.Less = Less;
exports.lt = Less;
/** GreaterEqual(arg) or GTE(arg) */
const GreaterEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `>= $${ref}`;
};
};
exports.GreaterEqual = GreaterEqual;
exports.gte = GreaterEqual;
/** LessEqual(arg) or LTE(arg) */
const LessEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `<= $${ref}`;
};
};
exports.LessEqual = LessEqual;
exports.lte = LessEqual;
/** Like (arg) */
const Like = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `LIKE $${ref}`;
};
};
exports.Like = Like;
exports.like = Like;
/** ILike (arg) */
const ILike = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(arg, valueRefSet);
return `ILIKE $${ref}`;
};
};
exports.ILike = ILike;
exports.ilike = ILike;
/**
* Array operators
* Right Operand @type number[] | string[]
*/
/**
* @description Does the left ARRAY value entries equal the right ARRAY values?
* @example '{a,b,c}' `@>` '{b}' // true
*/
const ArrayEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `= $${ref}`;
};
};
/**
* @description Does the left ARRAY value entries equal the right ARRAY values?
* @example '{a,b,c}' `@>` '{b}' // true
*/
const ArrayNotEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `<> $${ref}`;
};
};
/**
* @description Does the left ARRAY values less than the right ARRAY values?
* @example ARRAY[1,2,3] < ARRAY[1,2,4]' // true
*/
const ArrayLess = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `< $${ref}`;
};
};
/**
* @description Does the left ARRAY values greater than the right ARRAY values?
* @example ARRAY[1,4,3] > ARRAY[1,2,4] // true
*/
const ArrayGreater = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `> $${ref}`;
};
};
/**
* @description Does the left ARRAY values less than or equal the right ARRAY values?
* @example ARRAY[1,2,3] <= ARRAY[1,2,3] // true
*/
const ArrayLessEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `<= $${ref}`;
};
};
/**
* @description Does the right ARRAY values greater than or equal the left ARRAY values?
* @example ARRAY[1,4,3] >= ARRAY[1,4,3] // true
*/
const ArrayGreaterEqual = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `>= $${ref}`;
};
};
/**
* @description Does the left ARRAY values contain the right ARRAY values?
* @example ARRAY[1,4,3] `@>` ARRAY[3,1,3] // true
*/
const ArrayLeftContain = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `@> $${ref}`;
};
};
/**
* @description Does the right ARRAY values contain the left ARRAY values?
* @example ARRAY[2,2,7] `<@` ARRAY[1,7,4,2,6] // true
*/
const ArrayRightContain = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `<@ $${ref}`;
};
};
/**
* @description Does the ARRAY values overlap (have elements in common)?
* @example ARRAY[1,4,3] && ARRAY[2,1] // true
*/
const ArrayOverlap = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(`{${arg.join(',')}}`, valueRefSet);
return `&& $${ref}`;
};
};
/**
* Json operators
* Right Operand @type object | object[]
*/
/**
* @description Are the left JSON path/value entries contained at the top level within the right JSON value?
* @example '{"a":1, "b":2}'::jsonb `@>` '{"b":2}'::jsonb // true
*/
const JsonLeftContain = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(JSON.stringify(arg), valueRefSet);
return `@> $${ref}`;
};
};
/**
* @description Are the left JSON path/value entries contained at the top level within the right JSON value?
* @example '{"b":2}'::jsonb `<@` '{"a":1, "b":2}'::jsonb // true
*/
const JsonRightContain = (arg) => {
return function (valueRefSet) {
const ref = utils_1.addValueToReferenceSet(JSON.stringify(arg), valueRefSet);
return `<@ $${ref}`;
};
};
/**
* Common operators
*/
/**
* @description Are the left values contained in the right values?
*/
const LeftContain = (arg) => utils_1.isJson(arg) ? JsonLeftContain : ArrayLeftContain;
exports.LeftContain = LeftContain;
exports.lc = LeftContain;
/**
* @description Are the right values contained in the left values
*/
const RightContain = (arg) => utils_1.isJson(arg) ? JsonRightContain : ArrayRightContain;
exports.RightContain = RightContain;
exports.rc = RightContain;
exports.array = {
ArrayEqual,
ae: ArrayEqual,
ArrayNotEqual,
ane: ArrayNotEqual,
ArrayLess,
al: ArrayLess,
ArrayGreater,
ag: ArrayGreater,
ArrayLessEqual,
ale: ArrayLessEqual,
ArrayGreaterEqual,
age: ArrayGreaterEqual,
LeftContain: ArrayLeftContain,
lc: ArrayLeftContain,
RightContain: ArrayRightContain,
rc: ArrayRightContain,
ArrayOverlap,
ao: ArrayOverlap
};
exports.json = {
LeftContain: JsonLeftContain,
lc: JsonLeftContain,
RightContain: JsonRightContain,
rc: JsonRightContain
};