UNPKG

drizzle-orm

Version:

Drizzle ORM package for SQL databases

122 lines 4.1 kB
import { Column } from "./column.js"; import { is } from "./entity.js"; import { Param, SQL, View } from "./sql/sql.js"; import { Subquery } from "./subquery.js"; import { getTableName, Table } from "./table.js"; import { ViewBaseConfig } from "./view-common.js"; function mapResultRow(columns, row, joinsNotNullableMap) { const nullifyMap = {}; const result = columns.reduce( (result2, { path, field }, columnIndex) => { let decoder; if (is(field, Column)) { decoder = field; } else if (is(field, SQL)) { decoder = field.decoder; } else { decoder = field.sql.decoder; } let node = result2; for (const [pathChunkIndex, pathChunk] of path.entries()) { if (pathChunkIndex < path.length - 1) { if (!(pathChunk in node)) { node[pathChunk] = {}; } node = node[pathChunk]; } else { const rawValue = row[columnIndex]; const value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue); if (joinsNotNullableMap && is(field, Column) && path.length === 2) { const objectName = path[0]; if (!(objectName in nullifyMap)) { nullifyMap[objectName] = value === null ? getTableName(field.table) : false; } else if (typeof nullifyMap[objectName] === "string" && nullifyMap[objectName] !== getTableName(field.table)) { nullifyMap[objectName] = false; } } } } return result2; }, {} ); if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) { for (const [objectName, tableName] of Object.entries(nullifyMap)) { if (typeof tableName === "string" && !joinsNotNullableMap[tableName]) { result[objectName] = null; } } } return result; } function orderSelectedFields(fields, pathPrefix) { return Object.entries(fields).reduce((result, [name, field]) => { if (typeof name !== "string") { return result; } const newPath = pathPrefix ? [...pathPrefix, name] : [name]; if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased)) { result.push({ path: newPath, field }); } else if (is(field, Table)) { result.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath)); } else { result.push(...orderSelectedFields(field, newPath)); } return result; }, []); } function haveSameKeys(left, right) { const leftKeys = Object.keys(left); const rightKeys = Object.keys(right); if (leftKeys.length !== rightKeys.length) { return false; } for (const [index, key] of leftKeys.entries()) { if (key !== rightKeys[index]) { return false; } } return true; } function mapUpdateSet(table, values) { const entries = Object.entries(values).filter(([, value]) => value !== void 0).map(([key, value]) => { if (is(value, SQL)) { return [key, value]; } else { return [key, new Param(value, table[Table.Symbol.Columns][key])]; } }); if (entries.length === 0) { throw new Error("No values to set"); } return Object.fromEntries(entries); } function applyMixins(baseClass, extendedClasses) { for (const extendedClass of extendedClasses) { for (const name of Object.getOwnPropertyNames(extendedClass.prototype)) { if (name === "constructor") continue; Object.defineProperty( baseClass.prototype, name, Object.getOwnPropertyDescriptor(extendedClass.prototype, name) || /* @__PURE__ */ Object.create(null) ); } } } function getTableColumns(table) { return table[Table.Symbol.Columns]; } function getTableLikeName(table) { return is(table, Subquery) ? table._.alias : is(table, View) ? table[ViewBaseConfig].name : is(table, SQL) ? void 0 : table[Table.Symbol.IsAlias] ? table[Table.Symbol.Name] : table[Table.Symbol.BaseName]; } export { applyMixins, getTableColumns, getTableLikeName, haveSameKeys, mapResultRow, mapUpdateSet, orderSelectedFields }; //# sourceMappingURL=utils.js.map