UNPKG

drizzle-orm

Version:

Drizzle ORM package for SQL databases

184 lines • 4.57 kB
import { Column } from "../../column.js"; import { is } from "../../entity.js"; import { Table } from "../../table.js"; import { isDriverValueEncoder, isSQLWrapper, Param, Placeholder, SQL, sql, StringChunk, View } from "../sql.js"; function bindIfParam(value, column) { if (isDriverValueEncoder(column) && !isSQLWrapper(value) && !is(value, Param) && !is(value, Placeholder) && !is(value, Column) && !is(value, Table) && !is(value, View)) { return new Param(value, column); } return value; } const eq = (left, right) => { return sql`${left} = ${bindIfParam(right, left)}`; }; const ne = (left, right) => { return sql`${left} <> ${bindIfParam(right, left)}`; }; function and(...unfilteredConditions) { const conditions = unfilteredConditions.filter( (c) => c !== void 0 ); if (conditions.length === 0) { return void 0; } if (conditions.length === 1) { return new SQL(conditions); } return new SQL([ new StringChunk("("), sql.join(conditions, new StringChunk(" and ")), new StringChunk(")") ]); } function or(...unfilteredConditions) { const conditions = unfilteredConditions.filter( (c) => c !== void 0 ); if (conditions.length === 0) { return void 0; } if (conditions.length === 1) { return new SQL(conditions); } return new SQL([ new StringChunk("("), sql.join(conditions, new StringChunk(" or ")), new StringChunk(")") ]); } function not(condition) { return sql`not ${condition}`; } const gt = (left, right) => { return sql`${left} > ${bindIfParam(right, left)}`; }; const gte = (left, right) => { return sql`${left} >= ${bindIfParam(right, left)}`; }; const lt = (left, right) => { return sql`${left} < ${bindIfParam(right, left)}`; }; const lte = (left, right) => { return sql`${left} <= ${bindIfParam(right, left)}`; }; function inArray(column, values) { if (Array.isArray(values)) { if (values.length === 0) { return sql`false`; } return sql`${column} in ${values.map((v) => bindIfParam(v, column))}`; } return sql`${column} in ${bindIfParam(values, column)}`; } function notInArray(column, values) { if (Array.isArray(values)) { if (values.length === 0) { return sql`true`; } return sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`; } return sql`${column} not in ${bindIfParam(values, column)}`; } function isNull(value) { return sql`${value} is null`; } function isNotNull(value) { return sql`${value} is not null`; } function exists(subquery) { return sql`exists ${subquery}`; } function notExists(subquery) { return sql`not exists ${subquery}`; } function between(column, min, max) { return sql`${column} between ${bindIfParam(min, column)} and ${bindIfParam( max, column )}`; } function notBetween(column, min, max) { return sql`${column} not between ${bindIfParam( min, column )} and ${bindIfParam(max, column)}`; } function like(column, value) { return sql`${column} like ${value}`; } function notLike(column, value) { return sql`${column} not like ${value}`; } function ilike(column, value) { return sql`${column} ilike ${value}`; } function notIlike(column, value) { return sql`${column} not ilike ${value}`; } function arrayContains(column, values) { if (Array.isArray(values)) { if (values.length === 0) { throw new Error("arrayContains requires at least one value"); } const array = sql`${bindIfParam(values, column)}`; return sql`${column} @> ${array}`; } return sql`${column} @> ${bindIfParam(values, column)}`; } function arrayContained(column, values) { if (Array.isArray(values)) { if (values.length === 0) { throw new Error("arrayContained requires at least one value"); } const array = sql`${bindIfParam(values, column)}`; return sql`${column} <@ ${array}`; } return sql`${column} <@ ${bindIfParam(values, column)}`; } function arrayOverlaps(column, values) { if (Array.isArray(values)) { if (values.length === 0) { throw new Error("arrayOverlaps requires at least one value"); } const array = sql`${bindIfParam(values, column)}`; return sql`${column} && ${array}`; } return sql`${column} && ${bindIfParam(values, column)}`; } export { and, arrayContained, arrayContains, arrayOverlaps, between, bindIfParam, eq, exists, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, ne, not, notBetween, notExists, notIlike, notInArray, notLike, or }; //# sourceMappingURL=conditions.js.map