| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- "use strict";
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __export = (target, all) => {
- for (var name2 in all)
- __defProp(target, name2, { get: all[name2], enumerable: true });
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
- var sql_exports = {};
- __export(sql_exports, {
- FakePrimitiveParam: () => FakePrimitiveParam,
- Name: () => Name,
- Param: () => Param,
- Placeholder: () => Placeholder,
- SQL: () => SQL,
- StringChunk: () => StringChunk,
- View: () => View,
- fillPlaceholders: () => fillPlaceholders,
- getViewName: () => getViewName,
- isDriverValueEncoder: () => isDriverValueEncoder,
- isSQLWrapper: () => isSQLWrapper,
- isView: () => isView,
- name: () => name,
- noopDecoder: () => noopDecoder,
- noopEncoder: () => noopEncoder,
- noopMapper: () => noopMapper,
- param: () => param,
- placeholder: () => placeholder,
- sql: () => sql
- });
- module.exports = __toCommonJS(sql_exports);
- var import_entity = require("../entity.cjs");
- var import_enum = require("../pg-core/columns/enum.cjs");
- var import_subquery = require("../subquery.cjs");
- var import_tracing = require("../tracing.cjs");
- var import_view_common = require("../view-common.cjs");
- var import_column = require("../column.cjs");
- var import_table = require("../table.cjs");
- class FakePrimitiveParam {
- static [import_entity.entityKind] = "FakePrimitiveParam";
- }
- function isSQLWrapper(value) {
- return value !== null && value !== void 0 && typeof value.getSQL === "function";
- }
- function mergeQueries(queries) {
- const result = { sql: "", params: [] };
- for (const query of queries) {
- result.sql += query.sql;
- result.params.push(...query.params);
- if (query.typings?.length) {
- if (!result.typings) {
- result.typings = [];
- }
- result.typings.push(...query.typings);
- }
- }
- return result;
- }
- class StringChunk {
- static [import_entity.entityKind] = "StringChunk";
- value;
- constructor(value) {
- this.value = Array.isArray(value) ? value : [value];
- }
- getSQL() {
- return new SQL([this]);
- }
- }
- class SQL {
- constructor(queryChunks) {
- this.queryChunks = queryChunks;
- for (const chunk of queryChunks) {
- if ((0, import_entity.is)(chunk, import_table.Table)) {
- const schemaName = chunk[import_table.Table.Symbol.Schema];
- this.usedTables.push(
- schemaName === void 0 ? chunk[import_table.Table.Symbol.Name] : schemaName + "." + chunk[import_table.Table.Symbol.Name]
- );
- }
- }
- }
- static [import_entity.entityKind] = "SQL";
- /** @internal */
- decoder = noopDecoder;
- shouldInlineParams = false;
- /** @internal */
- usedTables = [];
- append(query) {
- this.queryChunks.push(...query.queryChunks);
- return this;
- }
- toQuery(config) {
- return import_tracing.tracer.startActiveSpan("drizzle.buildSQL", (span) => {
- const query = this.buildQueryFromSourceParams(this.queryChunks, config);
- span?.setAttributes({
- "drizzle.query.text": query.sql,
- "drizzle.query.params": JSON.stringify(query.params)
- });
- return query;
- });
- }
- buildQueryFromSourceParams(chunks, _config) {
- const config = Object.assign({}, _config, {
- inlineParams: _config.inlineParams || this.shouldInlineParams,
- paramStartIndex: _config.paramStartIndex || { value: 0 }
- });
- const {
- casing,
- escapeName,
- escapeParam,
- prepareTyping,
- inlineParams,
- paramStartIndex
- } = config;
- return mergeQueries(chunks.map((chunk) => {
- if ((0, import_entity.is)(chunk, StringChunk)) {
- return { sql: chunk.value.join(""), params: [] };
- }
- if ((0, import_entity.is)(chunk, Name)) {
- return { sql: escapeName(chunk.value), params: [] };
- }
- if (chunk === void 0) {
- return { sql: "", params: [] };
- }
- if (Array.isArray(chunk)) {
- const result = [new StringChunk("(")];
- for (const [i, p] of chunk.entries()) {
- result.push(p);
- if (i < chunk.length - 1) {
- result.push(new StringChunk(", "));
- }
- }
- result.push(new StringChunk(")"));
- return this.buildQueryFromSourceParams(result, config);
- }
- if ((0, import_entity.is)(chunk, SQL)) {
- return this.buildQueryFromSourceParams(chunk.queryChunks, {
- ...config,
- inlineParams: inlineParams || chunk.shouldInlineParams
- });
- }
- if ((0, import_entity.is)(chunk, import_table.Table)) {
- const schemaName = chunk[import_table.Table.Symbol.Schema];
- const tableName = chunk[import_table.Table.Symbol.Name];
- return {
- sql: schemaName === void 0 || chunk[import_table.IsAlias] ? escapeName(tableName) : escapeName(schemaName) + "." + escapeName(tableName),
- params: []
- };
- }
- if ((0, import_entity.is)(chunk, import_column.Column)) {
- const columnName = casing.getColumnCasing(chunk);
- if (_config.invokeSource === "indexes") {
- return { sql: escapeName(columnName), params: [] };
- }
- const schemaName = chunk.table[import_table.Table.Symbol.Schema];
- return {
- sql: chunk.table[import_table.IsAlias] || schemaName === void 0 ? escapeName(chunk.table[import_table.Table.Symbol.Name]) + "." + escapeName(columnName) : escapeName(schemaName) + "." + escapeName(chunk.table[import_table.Table.Symbol.Name]) + "." + escapeName(columnName),
- params: []
- };
- }
- if ((0, import_entity.is)(chunk, View)) {
- const schemaName = chunk[import_view_common.ViewBaseConfig].schema;
- const viewName = chunk[import_view_common.ViewBaseConfig].name;
- return {
- sql: schemaName === void 0 || chunk[import_view_common.ViewBaseConfig].isAlias ? escapeName(viewName) : escapeName(schemaName) + "." + escapeName(viewName),
- params: []
- };
- }
- if ((0, import_entity.is)(chunk, Param)) {
- if ((0, import_entity.is)(chunk.value, Placeholder)) {
- return { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ["none"] };
- }
- const mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);
- if ((0, import_entity.is)(mappedValue, SQL)) {
- return this.buildQueryFromSourceParams([mappedValue], config);
- }
- if (inlineParams) {
- return { sql: this.mapInlineParam(mappedValue, config), params: [] };
- }
- let typings = ["none"];
- if (prepareTyping) {
- typings = [prepareTyping(chunk.encoder)];
- }
- return { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };
- }
- if ((0, import_entity.is)(chunk, Placeholder)) {
- return { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ["none"] };
- }
- if ((0, import_entity.is)(chunk, SQL.Aliased) && chunk.fieldAlias !== void 0) {
- return { sql: escapeName(chunk.fieldAlias), params: [] };
- }
- if ((0, import_entity.is)(chunk, import_subquery.Subquery)) {
- if (chunk._.isWith) {
- return { sql: escapeName(chunk._.alias), params: [] };
- }
- return this.buildQueryFromSourceParams([
- new StringChunk("("),
- chunk._.sql,
- new StringChunk(") "),
- new Name(chunk._.alias)
- ], config);
- }
- if ((0, import_enum.isPgEnum)(chunk)) {
- if (chunk.schema) {
- return { sql: escapeName(chunk.schema) + "." + escapeName(chunk.enumName), params: [] };
- }
- return { sql: escapeName(chunk.enumName), params: [] };
- }
- if (isSQLWrapper(chunk)) {
- if (chunk.shouldOmitSQLParens?.()) {
- return this.buildQueryFromSourceParams([chunk.getSQL()], config);
- }
- return this.buildQueryFromSourceParams([
- new StringChunk("("),
- chunk.getSQL(),
- new StringChunk(")")
- ], config);
- }
- if (inlineParams) {
- return { sql: this.mapInlineParam(chunk, config), params: [] };
- }
- return { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ["none"] };
- }));
- }
- mapInlineParam(chunk, { escapeString }) {
- if (chunk === null) {
- return "null";
- }
- if (typeof chunk === "number" || typeof chunk === "boolean") {
- return chunk.toString();
- }
- if (typeof chunk === "string") {
- return escapeString(chunk);
- }
- if (typeof chunk === "object") {
- const mappedValueAsString = chunk.toString();
- if (mappedValueAsString === "[object Object]") {
- return escapeString(JSON.stringify(chunk));
- }
- return escapeString(mappedValueAsString);
- }
- throw new Error("Unexpected param value: " + chunk);
- }
- getSQL() {
- return this;
- }
- as(alias) {
- if (alias === void 0) {
- return this;
- }
- return new SQL.Aliased(this, alias);
- }
- mapWith(decoder) {
- this.decoder = typeof decoder === "function" ? { mapFromDriverValue: decoder } : decoder;
- return this;
- }
- inlineParams() {
- this.shouldInlineParams = true;
- return this;
- }
- /**
- * This method is used to conditionally include a part of the query.
- *
- * @param condition - Condition to check
- * @returns itself if the condition is `true`, otherwise `undefined`
- */
- if(condition) {
- return condition ? this : void 0;
- }
- }
- class Name {
- constructor(value) {
- this.value = value;
- }
- static [import_entity.entityKind] = "Name";
- brand;
- getSQL() {
- return new SQL([this]);
- }
- }
- function name(value) {
- return new Name(value);
- }
- function isDriverValueEncoder(value) {
- return typeof value === "object" && value !== null && "mapToDriverValue" in value && typeof value.mapToDriverValue === "function";
- }
- const noopDecoder = {
- mapFromDriverValue: (value) => value
- };
- const noopEncoder = {
- mapToDriverValue: (value) => value
- };
- const noopMapper = {
- ...noopDecoder,
- ...noopEncoder
- };
- class Param {
- /**
- * @param value - Parameter value
- * @param encoder - Encoder to convert the value to a driver parameter
- */
- constructor(value, encoder = noopEncoder) {
- this.value = value;
- this.encoder = encoder;
- }
- static [import_entity.entityKind] = "Param";
- brand;
- getSQL() {
- return new SQL([this]);
- }
- }
- function param(value, encoder) {
- return new Param(value, encoder);
- }
- function sql(strings, ...params) {
- const queryChunks = [];
- if (params.length > 0 || strings.length > 0 && strings[0] !== "") {
- queryChunks.push(new StringChunk(strings[0]));
- }
- for (const [paramIndex, param2] of params.entries()) {
- queryChunks.push(param2, new StringChunk(strings[paramIndex + 1]));
- }
- return new SQL(queryChunks);
- }
- ((sql2) => {
- function empty() {
- return new SQL([]);
- }
- sql2.empty = empty;
- function fromList(list) {
- return new SQL(list);
- }
- sql2.fromList = fromList;
- function raw(str) {
- return new SQL([new StringChunk(str)]);
- }
- sql2.raw = raw;
- function join(chunks, separator) {
- const result = [];
- for (const [i, chunk] of chunks.entries()) {
- if (i > 0 && separator !== void 0) {
- result.push(separator);
- }
- result.push(chunk);
- }
- return new SQL(result);
- }
- sql2.join = join;
- function identifier(value) {
- return new Name(value);
- }
- sql2.identifier = identifier;
- function placeholder2(name2) {
- return new Placeholder(name2);
- }
- sql2.placeholder = placeholder2;
- function param2(value, encoder) {
- return new Param(value, encoder);
- }
- sql2.param = param2;
- })(sql || (sql = {}));
- ((SQL2) => {
- class Aliased {
- constructor(sql2, fieldAlias) {
- this.sql = sql2;
- this.fieldAlias = fieldAlias;
- }
- static [import_entity.entityKind] = "SQL.Aliased";
- /** @internal */
- isSelectionField = false;
- getSQL() {
- return this.sql;
- }
- /** @internal */
- clone() {
- return new Aliased(this.sql, this.fieldAlias);
- }
- }
- SQL2.Aliased = Aliased;
- })(SQL || (SQL = {}));
- class Placeholder {
- constructor(name2) {
- this.name = name2;
- }
- static [import_entity.entityKind] = "Placeholder";
- getSQL() {
- return new SQL([this]);
- }
- }
- function placeholder(name2) {
- return new Placeholder(name2);
- }
- function fillPlaceholders(params, values) {
- return params.map((p) => {
- if ((0, import_entity.is)(p, Placeholder)) {
- if (!(p.name in values)) {
- throw new Error(`No value for placeholder "${p.name}" was provided`);
- }
- return values[p.name];
- }
- if ((0, import_entity.is)(p, Param) && (0, import_entity.is)(p.value, Placeholder)) {
- if (!(p.value.name in values)) {
- throw new Error(`No value for placeholder "${p.value.name}" was provided`);
- }
- return p.encoder.mapToDriverValue(values[p.value.name]);
- }
- return p;
- });
- }
- const IsDrizzleView = Symbol.for("drizzle:IsDrizzleView");
- class View {
- static [import_entity.entityKind] = "View";
- /** @internal */
- [import_view_common.ViewBaseConfig];
- /** @internal */
- [IsDrizzleView] = true;
- constructor({ name: name2, schema, selectedFields, query }) {
- this[import_view_common.ViewBaseConfig] = {
- name: name2,
- originalName: name2,
- schema,
- selectedFields,
- query,
- isExisting: !query,
- isAlias: false
- };
- }
- getSQL() {
- return new SQL([this]);
- }
- }
- function isView(view) {
- return typeof view === "object" && view !== null && IsDrizzleView in view;
- }
- function getViewName(view) {
- return view[import_view_common.ViewBaseConfig].name;
- }
- import_column.Column.prototype.getSQL = function() {
- return new SQL([this]);
- };
- import_table.Table.prototype.getSQL = function() {
- return new SQL([this]);
- };
- import_subquery.Subquery.prototype.getSQL = function() {
- return new SQL([this]);
- };
- // Annotate the CommonJS export names for ESM import in node:
- 0 && (module.exports = {
- FakePrimitiveParam,
- Name,
- Param,
- Placeholder,
- SQL,
- StringChunk,
- View,
- fillPlaceholders,
- getViewName,
- isDriverValueEncoder,
- isSQLWrapper,
- isView,
- name,
- noopDecoder,
- noopEncoder,
- noopMapper,
- param,
- placeholder,
- sql
- });
- //# sourceMappingURL=sql.cjs.map
|