AK-21/Graphite-Industrial-Intelligence
0
1import { Column } from "./column.js";2import { entityKind, is } from "./entity.js";3import { SQL, sql } from "./sql/sql.js";4import { Table } from "./table.js";5import { ViewBaseConfig } from "./view-common.js";6class ColumnAliasProxyHandler {7 constructor(table) {8 this.table = table;9 }10 static [entityKind] = "ColumnAliasProxyHandler";11 get(columnObj, prop) {12 if (prop === "table") {13 return this.table;14 }15 return columnObj[prop];16 }17}18class TableAliasProxyHandler {19 constructor(alias, replaceOriginalName) {20 this.alias = alias;21 this.replaceOriginalName = replaceOriginalName;22 }23 static [entityKind] = "TableAliasProxyHandler";24 get(target, prop) {25 if (prop === Table.Symbol.IsAlias) {26 return true;27 }28 if (prop === Table.Symbol.Name) {29 return this.alias;30 }31 if (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {32 return this.alias;33 }34 if (prop === ViewBaseConfig) {35 return {36 ...target[ViewBaseConfig],37 name: this.alias,38 isAlias: true39 };40 }41 if (prop === Table.Symbol.Columns) {42 const columns = target[Table.Symbol.Columns];43 if (!columns) {44 return columns;45 }46 const proxiedColumns = {};47 Object.keys(columns).map((key) => {48 proxiedColumns[key] = new Proxy(49 columns[key],50 new ColumnAliasProxyHandler(new Proxy(target, this))51 );52 });53 return proxiedColumns;54 }55 const value = target[prop];56 if (is(value, Column)) {57 return new Proxy(value, new ColumnAliasProxyHandler(new Proxy(target, this)));58 }59 return value;60 }61}62class RelationTableAliasProxyHandler {63 constructor(alias) {64 this.alias = alias;65 }66 static [entityKind] = "RelationTableAliasProxyHandler";67 get(target, prop) {68 if (prop === "sourceTable") {69 return aliasedTable(target.sourceTable, this.alias);70 }71 return target[prop];72 }73}74function aliasedTable(table, tableAlias) {75 return new Proxy(table, new TableAliasProxyHandler(tableAlias, false));76}77function aliasedRelation(relation, tableAlias) {78 return new Proxy(relation, new RelationTableAliasProxyHandler(tableAlias));79}80function aliasedTableColumn(column, tableAlias) {81 return new Proxy(82 column,83 new ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false)))84 );85}86function mapColumnsInAliasedSQLToAlias(query, alias) {87 return new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);88}89function mapColumnsInSQLToAlias(query, alias) {90 return sql.join(query.queryChunks.map((c) => {91 if (is(c, Column)) {92 return aliasedTableColumn(c, alias);93 }94 if (is(c, SQL)) {95 return mapColumnsInSQLToAlias(c, alias);96 }97 if (is(c, SQL.Aliased)) {98 return mapColumnsInAliasedSQLToAlias(c, alias);99 }100 return c;101 }));102}103export {104 ColumnAliasProxyHandler,105 RelationTableAliasProxyHandler,106 TableAliasProxyHandler,107 aliasedRelation,108 aliasedTable,109 aliasedTableColumn,110 mapColumnsInAliasedSQLToAlias,111 mapColumnsInSQLToAlias112};113//# sourceMappingURL=alias.js.map