data-finder-ts 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/{chunk-4JVW4TAB.js → chunk-BGEX377Q.js} +58 -8
  2. package/dist/chunk-BGEX377Q.js.map +1 -0
  3. package/dist/chunk-BKPWV3OF.js +962 -0
  4. package/dist/chunk-BKPWV3OF.js.map +1 -0
  5. package/dist/{chunk-PMPLCEWQ.js → chunk-GPHWC533.js} +2 -2
  6. package/dist/{chunk-FJYA2ASS.js → chunk-KAK75RVS.js} +74 -12
  7. package/dist/chunk-KAK75RVS.js.map +1 -0
  8. package/dist/{chunk-4LNZV6EN.js → chunk-MGEL5RWM.js} +206 -78
  9. package/dist/chunk-MGEL5RWM.js.map +1 -0
  10. package/dist/chunk-PF6EJZHB.js +1015 -0
  11. package/dist/chunk-PF6EJZHB.js.map +1 -0
  12. package/dist/datafinder/attribute.cjs +537 -11
  13. package/dist/datafinder/attribute.cjs.map +1 -1
  14. package/dist/datafinder/attribute.d.cts +29 -7
  15. package/dist/datafinder/attribute.d.ts +29 -7
  16. package/dist/datafinder/attribute.js +2 -2
  17. package/dist/datafinder/runner.cjs +1267 -215
  18. package/dist/datafinder/runner.cjs.map +1 -1
  19. package/dist/datafinder/runner.d.cts +28 -5
  20. package/dist/datafinder/runner.d.ts +28 -5
  21. package/dist/datafinder/runner.js +6 -6
  22. package/dist/datafinder/sql-generator.cjs +1203 -206
  23. package/dist/datafinder/sql-generator.cjs.map +1 -1
  24. package/dist/datafinder/sql-generator.d.cts +19 -5
  25. package/dist/datafinder/sql-generator.d.ts +19 -5
  26. package/dist/datafinder/sql-generator.js +9 -5
  27. package/dist/datafinder/typed-attributes.cjs +693 -88
  28. package/dist/datafinder/typed-attributes.cjs.map +1 -1
  29. package/dist/datafinder/typed-attributes.d.cts +3 -242
  30. package/dist/datafinder/typed-attributes.d.ts +3 -242
  31. package/dist/datafinder/typed-attributes.js +3 -3
  32. package/dist/dialect-CogGPm_y.d.cts +38 -0
  33. package/dist/dialect-aaG1bDi5.d.ts +38 -0
  34. package/dist/index.cjs +1677 -408
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +109 -5
  37. package/dist/index.d.ts +109 -5
  38. package/dist/index.js +321 -11
  39. package/dist/index.js.map +1 -1
  40. package/dist/model/milestoning.cjs +529 -0
  41. package/dist/model/milestoning.cjs.map +1 -1
  42. package/dist/model/milestoning.js +2 -2
  43. package/dist/model/relational.cjs +547 -16
  44. package/dist/model/relational.cjs.map +1 -1
  45. package/dist/model/relational.d.cts +421 -57
  46. package/dist/model/relational.d.ts +421 -57
  47. package/dist/model/relational.js +53 -3
  48. package/dist/typed-attributes-CUTf_6Ru.d.ts +328 -0
  49. package/dist/typed-attributes-CdWXq_78.d.cts +328 -0
  50. package/package.json +3 -2
  51. package/dist/chunk-4JVW4TAB.js.map +0 -1
  52. package/dist/chunk-4LNZV6EN.js.map +0 -1
  53. package/dist/chunk-FJYA2ASS.js.map +0 -1
  54. package/dist/chunk-MH4XMYVB.js +0 -696
  55. package/dist/chunk-MH4XMYVB.js.map +0 -1
  56. package/dist/chunk-UYMOE6YU.js +0 -509
  57. package/dist/chunk-UYMOE6YU.js.map +0 -1
  58. /package/dist/{chunk-PMPLCEWQ.js.map → chunk-GPHWC533.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/datafinder/sql-generator.ts"],"sourcesContent":["import { Attribute } from './attribute';\nimport {\n RelationalOperationElement,\n Operation,\n NoOperation,\n ConstantOperation,\n StringConstantOperation,\n IntegerConstantOperation,\n FloatConstantOperation,\n DateConstantOperation,\n DateTimeConstantOperation,\n BooleanConstantOperation,\n DecimalConstantOperation,\n LogicalOperation,\n LogicalOperator,\n ComparisonOperation,\n ComparisonOperator,\n IsNullOperation,\n IsNotNullOperation,\n AggregateOperation,\n AggregateOperator,\n ScalarFunctionOperation,\n ScalarFunction,\n DateExtractOperation,\n DateArithmeticOperation,\n DateDiffOperation,\n WindowFunction,\n WindowFunctionOperation,\n WindowSpecification,\n Column,\n ColumnWithJoin,\n Table,\n JoinOperation,\n JoinTreeNodeOperation,\n SortOperation,\n SortDirection,\n CountAllOperation,\n UnaryOperation,\n Alias,\n ExistsOperation,\n NotExistsOperation,\n SelectOperation,\n} from '../model/relational';\nimport {\n MilestonedTable,\n BiTemporalColumns,\n BusinessDateAndProcessingTemporalColumns,\n ProcessingTemporalColumns,\n SingleBusinessDateColumn,\n} from '../model/milestoning';\nimport { DateAttribute, DateTimeAttribute } from './typed-attributes';\n\nclass TableAlias {\n constructor(readonly table: string, readonly alias: string) {}\n}\n\nclass TableAliasColumn extends RelationalOperationElement {\n constructor(readonly column: Column, readonly tableAlias: TableAlias) { super(); }\n}\n\nclass Join {\n constructor(\n readonly source: TableAliasColumn,\n readonly target: TableAliasColumn,\n readonly filterOp?: RelationalOperationElement,\n ) {}\n}\n\nfunction sqlFormatDatetime(value: Date): string {\n const pad = (n: number, w = 2) => String(n).padStart(w, '0');\n return `'${value.getUTCFullYear()}-${pad(value.getUTCMonth() + 1)}-${pad(value.getUTCDate())} ${pad(value.getUTCHours())}:${pad(value.getUTCMinutes())}:${pad(value.getUTCSeconds())}'`;\n}\n\nfunction sqlFormatDate(value: Date): string {\n const pad = (n: number) => String(n).padStart(2, '0');\n return `'${value.getUTCFullYear()}-${pad(value.getUTCMonth() + 1)}-${pad(value.getUTCDate())}'`;\n}\n\nconst LOGICAL_OPERATOR_STR: Record<LogicalOperator, string> = {\n [LogicalOperator.AND]: ' AND ',\n [LogicalOperator.OR]: ' OR ',\n};\n\nconst COMPARISON_OPERATOR_STR: Record<ComparisonOperator, string> = {\n [ComparisonOperator.EQUAL]: ' = ',\n [ComparisonOperator.NOT_EQUAL]: ' <> ',\n [ComparisonOperator.LESS_THAN]: ' < ',\n [ComparisonOperator.GREATER_THAN]: ' > ',\n [ComparisonOperator.LESS_THAN_OR_EQUAL_TO]: ' <= ',\n [ComparisonOperator.GREATER_THAN_OR_EQUAL_TO]: ' >= ',\n [ComparisonOperator.LIKE]: ' LIKE ',\n [ComparisonOperator.NOT_LIKE]: ' NOT LIKE ',\n};\n\nconst AGGREGATE_SQL_NAMES: Partial<Record<AggregateOperator, string>> = {\n [AggregateOperator.AVERAGE]: 'AVG',\n};\n\nconst WINDOW_SQL_NAMES: Record<WindowFunction, string> = {\n [WindowFunction.ROW_NUMBER]: 'ROW_NUMBER',\n [WindowFunction.RANK]: 'RANK',\n [WindowFunction.DENSE_RANK]: 'DENSE_RANK',\n [WindowFunction.NTILE]: 'NTILE',\n [WindowFunction.LAG]: 'LAG',\n [WindowFunction.LEAD]: 'LEAD',\n [WindowFunction.FIRST_VALUE]: 'FIRST_VALUE',\n [WindowFunction.LAST_VALUE]: 'LAST_VALUE',\n [WindowFunction.CUME_DIST]: 'CUME_DIST',\n [WindowFunction.PERCENT_RANK]: 'PERCENT_RANK',\n};\n\nconst SCALAR_SQL_NAMES: Record<ScalarFunction, string> = {\n [ScalarFunction.ABS]: 'ABS',\n [ScalarFunction.CEILING]: 'CEILING',\n [ScalarFunction.FLOOR]: 'FLOOR',\n [ScalarFunction.MOD]: 'MOD',\n [ScalarFunction.POWER]: 'POWER',\n [ScalarFunction.SQRT]: 'SQRT',\n [ScalarFunction.ROUND]: 'ROUND',\n [ScalarFunction.UPPER]: 'UPPER',\n [ScalarFunction.LOWER]: 'LOWER',\n [ScalarFunction.TRIM]: 'TRIM',\n [ScalarFunction.LTRIM]: 'LTRIM',\n [ScalarFunction.RTRIM]: 'RTRIM',\n [ScalarFunction.LENGTH]: 'LENGTH',\n [ScalarFunction.REVERSE]: 'REVERSE',\n [ScalarFunction.LEFT]: 'LEFT',\n [ScalarFunction.RIGHT]: 'RIGHT',\n [ScalarFunction.REPEAT]: 'REPEAT',\n [ScalarFunction.REPLACE]: 'REPLACE',\n [ScalarFunction.SUBSTRING]: 'SUBSTRING',\n};\n\nfunction constantValueString(op: ConstantOperation): string {\n if (op instanceof StringConstantOperation) return \"'\" + op.value + \"'\";\n if (op instanceof DateConstantOperation) return sqlFormatDate(op.value);\n if (op instanceof DateTimeConstantOperation) return sqlFormatDatetime(op.value);\n if (op instanceof IntegerConstantOperation) return String(op.value);\n if (op instanceof FloatConstantOperation) return String(op.value);\n if (op instanceof BooleanConstantOperation) return op.value ? 'TRUE' : 'FALSE';\n if (op instanceof DecimalConstantOperation) return String(op.value);\n throw new Error('Unknown constant operation');\n}\n\nfunction windowSpecToString(window: WindowSpecification): string {\n const parts: string[] = [];\n if (window.partitionBy.length > 0) {\n parts.push('PARTITION BY ' + window.partitionBy.map(p => sqlOperationToString(p)).join(', '));\n }\n if (window.orderBy.length > 0) {\n parts.push('ORDER BY ' + window.orderBy.map(s =>\n sqlOperationToString(s.column) + (s.direction === SortDirection.ASC ? ' ASC' : ' DESC'),\n ).join(', '));\n }\n return 'OVER (' + parts.join(' ') + ')';\n}\n\nfunction sqlOperationToString(operation: RelationalOperationElement): string {\n if (operation instanceof TableAliasColumn) {\n return operation.tableAlias.alias + '.' + operation.column.name;\n }\n if (operation instanceof WindowFunctionOperation) {\n const fn = WINDOW_SQL_NAMES[operation.func];\n const parts: string[] = [];\n if (operation.element !== null && operation.element !== undefined) {\n parts.push(sqlOperationToString(operation.element));\n }\n if (operation.secondArg !== undefined) parts.push(String(operation.secondArg));\n for (const arg of operation.extraArgs) {\n parts.push(typeof arg === 'string' ? \"'\" + arg + \"'\" : String(arg));\n }\n const sql = fn + '(' + parts.join(', ') + ')';\n return sql + (operation.window !== undefined ? ' ' + windowSpecToString(operation.window) : ' OVER ()');\n }\n if (operation instanceof AggregateOperation) {\n const fn = AGGREGATE_SQL_NAMES[operation.operator] ?? operation.operator;\n let sql = fn + '(' + sqlOperationToString(operation.element) + ')';\n if (operation.window !== undefined) {\n sql += ' ' + windowSpecToString(operation.window);\n }\n return sql;\n }\n if (operation instanceof ScalarFunctionOperation) {\n const fn = SCALAR_SQL_NAMES[operation.func];\n const parts: string[] = [sqlOperationToString(operation.element)];\n if (operation.secondArg !== undefined) parts.push(String(operation.secondArg));\n for (const arg of operation.extraArgs) {\n parts.push(typeof arg === 'string' ? \"'\" + arg + \"'\" : String(arg));\n }\n return fn + '(' + parts.join(', ') + ')';\n }\n if (operation instanceof DateExtractOperation) {\n return 'EXTRACT(' + operation.part + ' FROM ' + sqlOperationToString(operation.element) + ')';\n }\n if (operation instanceof DateArithmeticOperation) {\n const op = operation.isAdd ? '+' : '-';\n return sqlOperationToString(operation.element) + ' ' + op + ' INTERVAL ' + operation.n + ' ' + operation.unit;\n }\n if (operation instanceof DateDiffOperation) {\n const otherSql = sqlFormatDatetime(operation.other);\n return \"DATE_DIFF('\" + operation.unit.toLowerCase() + \"', \" + sqlOperationToString(operation.element) + ', ' + otherSql + ')';\n }\n if (operation instanceof CountAllOperation) return 'COUNT(*)';\n if (operation instanceof Alias) {\n return sqlOperationToString(operation.element) + ' AS \"' + operation.name + '\"';\n }\n throw new TypeError('Unknown operation in sqlOperationToString: ' + operation.constructor.name);\n}\n\nfunction embeddedOf(ref: Attribute | ColumnWithJoin): Attribute | ColumnWithJoin | undefined {\n return ref instanceof Attribute ? ref.embedded() : ref.embedded;\n}\n\nfunction findColumn(operation: RelationalOperationElement): ColumnWithJoin {\n if (operation instanceof UnaryOperation) return findColumn(operation.element);\n if (operation instanceof ColumnWithJoin) return operation;\n throw new TypeError('Cannot find ColumnWithJoin in: ' + operation.constructor.name);\n}\n\nfunction openEndClause(\n endAttr: DateTimeAttribute | DateAttribute,\n value: Date,\n infiniteDatetime?: string,\n): Operation {\n const gtOp = endAttr instanceof DateTimeAttribute ? endAttr.gt(value) : endAttr.gt(value);\n if (infiniteDatetime === undefined) {\n const colRef = new ColumnWithJoin(endAttr.column(), endAttr.parent());\n return new LogicalOperation(gtOp, LogicalOperator.OR, new IsNullOperation(colRef));\n }\n return gtOp;\n}\n\nfunction buildMilestoningFilterOperation(\n businessDate: Date | null,\n processingDatetime: Date | null,\n table: MilestonedTable,\n joinNode?: JoinTreeNodeOperation,\n): Operation | null {\n const mc = table.milestoningColumns;\n const ops: Operation[] = [];\n\n if (mc instanceof BiTemporalColumns) {\n if (businessDate !== null) {\n const dateFrom = new DateAttribute('business_date_from', mc.businessDateFromColumn.name, mc.businessDateFromColumn.type, mc.businessDateFromColumn.table!.qualifiedName, joinNode);\n const dateTo = new DateAttribute('business_date_to', mc.businessDateToColumn.name, mc.businessDateToColumn.type, mc.businessDateToColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(dateFrom.lte(businessDate), LogicalOperator.AND, openEndClause(dateTo, businessDate, mc.infiniteDatetime)));\n }\n if (processingDatetime !== null) {\n const startAt = new DateTimeAttribute('start_at', mc.startAtColumn.name, mc.startAtColumn.type, mc.startAtColumn.table!.qualifiedName, joinNode);\n const endAt = new DateTimeAttribute('end_at', mc.endAtColumn.name, mc.endAtColumn.type, mc.endAtColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(startAt.lte(processingDatetime), LogicalOperator.AND, openEndClause(endAt, processingDatetime, mc.infiniteDatetime)));\n }\n } else if (mc instanceof BusinessDateAndProcessingTemporalColumns) {\n if (businessDate !== null) {\n const businessAtt = new DateAttribute('business_date', mc.businessDateColumn.name, mc.businessDateColumn.type, mc.businessDateColumn.table!.qualifiedName, joinNode);\n ops.push(businessAtt.eq(businessDate));\n }\n if (processingDatetime !== null) {\n const startAt = new DateTimeAttribute('start_at', mc.startAtColumn.name, mc.startAtColumn.type, mc.startAtColumn.table!.qualifiedName, joinNode);\n const endAt = new DateTimeAttribute('end_at', mc.endAtColumn.name, mc.endAtColumn.type, mc.endAtColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(startAt.lte(processingDatetime), LogicalOperator.AND, openEndClause(endAt, processingDatetime, mc.infiniteDatetime)));\n }\n } else if (mc instanceof ProcessingTemporalColumns && processingDatetime !== null) {\n const startAt = new DateTimeAttribute('start_at', mc.startAtColumn.name, mc.startAtColumn.type, mc.startAtColumn.table!.qualifiedName, joinNode);\n const endAt = new DateTimeAttribute('end_at', mc.endAtColumn.name, mc.endAtColumn.type, mc.endAtColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(startAt.lte(processingDatetime), LogicalOperator.AND, openEndClause(endAt, processingDatetime, mc.infiniteDatetime)));\n } else if (mc instanceof SingleBusinessDateColumn && businessDate !== null) {\n const businessAtt = new DateAttribute('business_date', mc.businessDateColumn.name, mc.businessDateColumn.type, mc.businessDateColumn.table!.qualifiedName, joinNode);\n ops.push(businessAtt.eq(businessDate));\n }\n\n if (ops.length === 0) return null;\n if (ops.length === 1) return ops[0];\n return new LogicalOperation(ops[0], LogicalOperator.AND, ops[1]);\n}\n\n/**\n * Like buildMilestoningFilterOperation but applies a business-date range filter.\n *\n * Bitemporal tables use interval overlap:\n * business_date_from_col <= businessDateTo AND business_date_to_col > businessDateFrom\n * Single-date tables:\n * business_date >= businessDateFrom AND business_date <= businessDateTo\n * Processing-date filtering is point-in-time, as in the normal path.\n */\nfunction buildMilestoningFilterOperationForDateRange(\n businessDateFrom: Date | null,\n businessDateTo: Date | null,\n processingDatetime: Date | null,\n table: MilestonedTable,\n joinNode?: JoinTreeNodeOperation,\n): Operation | null {\n const mc = table.milestoningColumns;\n const ops: Operation[] = [];\n const hasRange = businessDateFrom !== null && businessDateTo !== null;\n\n const processingOp = (m: BiTemporalColumns | BusinessDateAndProcessingTemporalColumns | ProcessingTemporalColumns): Operation => {\n const startAt = new DateTimeAttribute('start_at', m.startAtColumn.name, m.startAtColumn.type, m.startAtColumn.table!.qualifiedName, joinNode);\n const endAt = new DateTimeAttribute('end_at', m.endAtColumn.name, m.endAtColumn.type, m.endAtColumn.table!.qualifiedName, joinNode);\n return new LogicalOperation(startAt.lte(processingDatetime!), LogicalOperator.AND, openEndClause(endAt, processingDatetime!, m.infiniteDatetime));\n };\n\n if (mc instanceof BiTemporalColumns) {\n if (hasRange) {\n const dateFrom = new DateAttribute('business_date_from', mc.businessDateFromColumn.name, mc.businessDateFromColumn.type, mc.businessDateFromColumn.table!.qualifiedName, joinNode);\n const dateTo = new DateAttribute('business_date_to', mc.businessDateToColumn.name, mc.businessDateToColumn.type, mc.businessDateToColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(dateFrom.lte(businessDateTo!), LogicalOperator.AND, openEndClause(dateTo, businessDateFrom!, mc.infiniteDatetime)));\n }\n if (processingDatetime !== null) ops.push(processingOp(mc));\n } else if (mc instanceof BusinessDateAndProcessingTemporalColumns) {\n if (hasRange) {\n const businessAtt = new DateAttribute('business_date', mc.businessDateColumn.name, mc.businessDateColumn.type, mc.businessDateColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(businessAtt.gte(businessDateFrom!), LogicalOperator.AND, businessAtt.lte(businessDateTo!)));\n }\n if (processingDatetime !== null) ops.push(processingOp(mc));\n } else if (mc instanceof ProcessingTemporalColumns) {\n if (processingDatetime !== null) ops.push(processingOp(mc));\n } else if (mc instanceof SingleBusinessDateColumn && hasRange) {\n const businessAtt = new DateAttribute('business_date', mc.businessDateColumn.name, mc.businessDateColumn.type, mc.businessDateColumn.table!.qualifiedName, joinNode);\n ops.push(new LogicalOperation(businessAtt.gte(businessDateFrom!), LogicalOperator.AND, businessAtt.lte(businessDateTo!)));\n }\n\n if (ops.length === 0) return null;\n if (ops.length === 1) return ops[0];\n return new LogicalOperation(ops[0], LogicalOperator.AND, ops[1]);\n}\n\ntype RefVisitor = (ref: Attribute | ColumnWithJoin) => void;\n\ntype NodeVisitor = (node: JoinTreeNodeOperation) => void;\n\n/**\n * Call `visit` for every Attribute/ColumnWithJoin referenced anywhere in `op`, and `visitExists` for the\n * join node of every exists()/notExists(). The latter are not attribute references, so they don't count\n * against whether other references to the same node can be satisfied by an embedded alternate.\n */\nfunction walkRefs(\n op: RelationalOperationElement | null | undefined,\n visit: RefVisitor,\n visitExists?: NodeVisitor,\n): void {\n if (op === null || op === undefined) return;\n if (op instanceof Attribute || op instanceof ColumnWithJoin) {\n visit(op);\n } else if (op instanceof ExistsOperation || op instanceof NotExistsOperation) {\n visitExists?.(op.node);\n } else if (op instanceof AggregateOperation) {\n walkRefs(op.element, visit, visitExists);\n if (op.window) walkWindowSpec(op.window, visit, visitExists);\n } else if (op instanceof WindowFunctionOperation) {\n if (op.element) walkRefs(op.element, visit, visitExists);\n if (op.window) walkWindowSpec(op.window, visit, visitExists);\n } else if (op instanceof ScalarFunctionOperation || op instanceof DateExtractOperation ||\n op instanceof DateArithmeticOperation || op instanceof DateDiffOperation ||\n op instanceof IsNullOperation || op instanceof IsNotNullOperation) {\n walkRefs((op as UnaryOperation).element, visit, visitExists);\n } else if (op instanceof SortOperation) {\n walkRefs(op.column, visit, visitExists);\n } else if (op instanceof LogicalOperation || op instanceof ComparisonOperation) {\n walkRefs((op as any).left, visit, visitExists);\n walkRefs((op as any).right, visit, visitExists);\n }\n}\n\nfunction walkWindowSpec(window: WindowSpecification, visit: RefVisitor, visitExists?: NodeVisitor): void {\n for (const p of window.partitionBy) walkRefs(p, visit, visitExists);\n for (const s of window.orderBy) walkRefs(s.column, visit, visitExists);\n}\n\n/**\n * Translate property-equality filters given to a related finder (e.g. `ef.projects({ code: 'ALPHA' })`)\n * into a relational filter on the join node. `columnMap` maps property ids to [column, type, table].\n */\nfunction buildJoinFilterFromProperties(\n node: JoinTreeNodeOperation,\n filter: Record<string, unknown>,\n columnMap: Record<string, [string, string, string]>,\n): Operation {\n const ops: Operation[] = [];\n for (const [key, value] of Object.entries(filter)) {\n const entry = columnMap[key];\n if (entry === undefined) {\n throw new Error(`Unknown property '${key}' — valid properties are: ${Object.keys(columnMap).sort().join(', ')}`);\n }\n const [name, type, table] = entry;\n const col = new ColumnWithJoin(new Column(name, type, table), node);\n let constant: ConstantOperation;\n if (typeof value === 'boolean') constant = new BooleanConstantOperation(value);\n else if (typeof value === 'number') constant = Number.isInteger(value) ? new IntegerConstantOperation(value) : new FloatConstantOperation(value);\n else if (value instanceof Date) constant = type.toUpperCase() === 'DATE' ? new DateConstantOperation(value) : new DateTimeConstantOperation(value);\n else constant = new StringConstantOperation(String(value));\n ops.push(new ComparisonOperation(col, ComparisonOperator.EQUAL, constant));\n }\n return ops.reduce((acc, op) => new LogicalOperation(acc, LogicalOperator.AND, op));\n}\n\n/**\n * The nodes plus every ancestor, each once, ancestors first. The SQL generator joins a node's\n * ancestors whenever it joins the node, so each of them needs its join filter set too, not only the\n * nodes an expression refers to directly.\n */\nfunction withAncestors(nodes: Iterable<JoinTreeNodeOperation>): JoinTreeNodeOperation[] {\n const ordered = new Set<JoinTreeNodeOperation>();\n const add = (node: JoinTreeNodeOperation): void => {\n if (ordered.has(node)) return;\n if (node.parent !== undefined) add(node.parent);\n ordered.add(node);\n };\n for (const node of nodes) add(node);\n return [...ordered];\n}\n\nfunction buildQueryOperation(\n businessDate: Date | null,\n processingDatetime: Date | null,\n columns: (Attribute | RelationalOperationElement)[],\n table: Table,\n op: RelationalOperationElement,\n orderBy: SortOperation[] = [],\n groupBy: Attribute[] = [],\n limit?: number,\n businessDateTo: Date | null = null,\n): SelectOperation {\n let filter = op;\n const milestoningFor = (t: MilestonedTable, node?: JoinTreeNodeOperation) =>\n businessDateTo !== null\n ? buildMilestoningFilterOperationForDateRange(businessDate, businessDateTo, processingDatetime, t, node)\n : buildMilestoningFilterOperation(businessDate, processingDatetime, t, node);\n\n if (table instanceof MilestonedTable) {\n const milestonedOp = milestoningFor(table);\n if (milestonedOp !== null) {\n filter = filter instanceof NoOperation\n ? milestonedOp\n : new LogicalOperation(filter, LogicalOperator.AND, milestonedOp);\n }\n }\n\n const requiredJoins = new Set<JoinTreeNodeOperation>();\n const collect: RefVisitor = ref => {\n const parent = ref instanceof Attribute ? ref.parent() : ref.parent;\n if (parent !== undefined) requiredJoins.add(parent);\n };\n const collectNode: NodeVisitor = node => requiredJoins.add(node);\n for (const col of columns) walkRefs(col, collect, collectNode);\n for (const expr of groupBy) walkRefs(expr, collect, collectNode);\n for (const sort of orderBy) walkRefs(sort, collect, collectNode);\n walkRefs(op, collect, collectNode);\n\n const joinFilters = new Map<JoinTreeNodeOperation, Operation>();\n for (const node of withAncestors(requiredJoins)) {\n let combined: Operation | undefined;\n if (Object.keys(node.join.filterKwargs).length > 0) {\n combined = buildJoinFilterFromProperties(node, node.join.filterKwargs, node.join.filterColumnMap);\n }\n if (node.join.target instanceof MilestonedTable) {\n const milestonedOp = milestoningFor(node.join.target, node);\n if (milestonedOp !== null) {\n combined = combined === undefined ? milestonedOp : new LogicalOperation(combined, LogicalOperator.AND, milestonedOp);\n }\n }\n if (combined !== undefined) joinFilters.set(node, combined);\n }\n\n return new SelectOperation(columns, filter, orderBy, groupBy, limit, table, joinFilters);\n}\n\nclass SQLQueryGenerator {\n private _select: Alias[] = [];\n private _from: Set<TableAlias> = new Set();\n private _join: Join[] = [];\n private _groupByParts: string[] = [];\n private _orderByParts: string[] = [];\n private _where = '';\n private _limit?: number;\n private _tableAliasIncr = 0;\n private _tableAliasesByTable = new Map<unknown, TableAlias>();\n private _addedJoinIds = new Set<JoinTreeNodeOperation>();\n private _rootTable?: Table;\n private _elidableNodes = new Set<JoinTreeNodeOperation>();\n private _joinFilters: ReadonlyMap<JoinTreeNodeOperation, Operation> = new Map();\n\n generate(select: SelectOperation): void {\n this._rootTable = select.table;\n this._elidableNodes = this._computeElidableNodes(select);\n this._joinFilters = select.joinFilters;\n if (this._rootTable !== undefined) {\n this._from.add(this._tableAliasForTable(this._rootTable.qualifiedName, this._rootTable.qualifiedName));\n }\n this.processSelect(select.display);\n this._where = this.buildFilter(select.filter);\n const groupByJoins = new Map<JoinTreeNodeOperation, JoinTreeNodeOperation>();\n for (const expr of select.groupBy) {\n this._collectRequiredJoins(expr, groupByJoins);\n }\n for (const node of groupByJoins.values()) {\n this._addJoin(node);\n }\n this._groupByParts = select.groupBy.map(a => this._attrToColString(a as Attribute));\n this._orderByParts = select.orderBy.map(s =>\n this.buildFilter(s.column) + (s.direction === SortDirection.ASC ? ' ASC' : ' DESC'),\n );\n this._limit = select.limit;\n }\n\n private _attrToColString(attr: Attribute): string {\n const { column, parent } = this._resolve(attr);\n const ta = this._tableAliasForTable(column.owner!, parent ?? column.owner!);\n return ta.alias + '.' + column.name;\n }\n\n private _collectRequiredJoins(op: RelationalOperationElement | null | undefined, out: Map<JoinTreeNodeOperation, JoinTreeNodeOperation>): void {\n walkRefs(op, ref => {\n const { parent } = this._resolve(ref);\n if (parent !== undefined) out.set(parent, parent);\n });\n }\n\n /**\n * Determine upfront which join nodes can be satisfied entirely by embedded (join-less) alternates:\n * a node is elidable when every reference to it has an embedded alternate. A reference without one\n * (e.g. a milestoning column) keeps the join for every reference to that node.\n */\n private _computeElidableNodes(select: SelectOperation): Set<JoinTreeNodeOperation> {\n const refsByNode = new Map<JoinTreeNodeOperation, (Attribute | ColumnWithJoin)[]>();\n const record = (ref: Attribute | ColumnWithJoin) => {\n const parent = ref instanceof Attribute ? ref.parent() : ref.parent;\n if (parent === undefined) return;\n const refs = refsByNode.get(parent);\n if (refs) refs.push(ref); else refsByNode.set(parent, [ref]);\n };\n for (const col of select.display) walkRefs(col, record);\n for (const expr of select.groupBy) walkRefs(expr, record);\n for (const sort of select.orderBy) walkRefs(sort, record);\n walkRefs(select.filter, record);\n\n const elidable = new Set<JoinTreeNodeOperation>();\n for (const [node, refs] of refsByNode) {\n if (refs.every(ref => embeddedOf(ref) !== undefined)) elidable.add(node);\n }\n return elidable;\n }\n\n /** The (column, parent) a reference should resolve to, substituting its embedded alternate when its join is elided. */\n private _resolve(ref: Attribute | ColumnWithJoin): { column: Column; parent?: JoinTreeNodeOperation } {\n const column = ref instanceof Attribute ? ref.column() : ref.column;\n const parent = ref instanceof Attribute ? ref.parent() : ref.parent;\n if (parent !== undefined && this._elidableNodes.has(parent)) {\n const embedded = embeddedOf(ref);\n if (embedded !== undefined) return this._resolve(embedded);\n }\n return { column, parent };\n }\n\n private _rewriteWindowSpec(window: WindowSpecification): WindowSpecification {\n const partitionBy = window.partitionBy.map(p => this._rewriteOperation(p));\n const orderBy = window.orderBy.map(s => new SortOperation(this._rewriteOperation(s.column) as ColumnWithJoin, s.direction));\n return new WindowSpecification(partitionBy, orderBy);\n }\n\n private _rewriteOperation(op: RelationalOperationElement): RelationalOperationElement {\n if (op instanceof Attribute || op instanceof ColumnWithJoin) {\n const { column, parent } = this._resolve(op);\n return new TableAliasColumn(column, this._tableAliasForTable(column.owner!, parent ?? column.owner!));\n }\n if (op instanceof Column) {\n const ta = this._tableAliasForTable(op.owner!, op.owner!);\n return new TableAliasColumn(op, ta);\n }\n if (op instanceof AggregateOperation) {\n return new AggregateOperation(\n this._rewriteOperation(op.element), op.operator, op.displayName,\n op.window ? this._rewriteWindowSpec(op.window) : undefined,\n );\n }\n if (op instanceof WindowFunctionOperation) {\n const el = op.element ? this._rewriteOperation(op.element) : null;\n return new WindowFunctionOperation(el, op.func, op.displayName, op.secondArg, [...op.extraArgs],\n op.window ? this._rewriteWindowSpec(op.window) : undefined);\n }\n if (op instanceof ScalarFunctionOperation) {\n return new ScalarFunctionOperation(this._rewriteOperation(op.element), op.func, op.displayName, op.secondArg, op.extraArgs);\n }\n if (op instanceof DateExtractOperation) {\n return new DateExtractOperation(this._rewriteOperation(op.element), op.part, op.displayName);\n }\n if (op instanceof DateArithmeticOperation) {\n return new DateArithmeticOperation(this._rewriteOperation(op.element), op.n, op.unit, op.isAdd, op.displayName);\n }\n if (op instanceof DateDiffOperation) {\n return new DateDiffOperation(this._rewriteOperation(op.element), (op as DateDiffOperation).other, (op as DateDiffOperation).unit, op.displayName);\n }\n return op;\n }\n\n private processSelect(cols: (Attribute | RelationalOperationElement)[]): void {\n const requiredJoins = new Map<JoinTreeNodeOperation, JoinTreeNodeOperation>();\n\n for (const col of cols) {\n this._collectRequiredJoins(col, requiredJoins);\n }\n for (const node of requiredJoins.values()) {\n this._addJoin(node);\n }\n\n for (const col of cols) {\n if (col instanceof Attribute) {\n const { column, parent: node } = this._resolve(col);\n let ta: TableAlias;\n if (node !== undefined) {\n ta = this._tableAliasForTable(column.owner!, node);\n } else {\n ta = this._tableAliasForTable(column.owner!, column.owner!);\n this._from.add(ta);\n }\n this._select.push(new Alias(new TableAliasColumn(column, ta), col.displayName()));\n } else if (col instanceof WindowFunctionOperation) {\n const rewritten = this._rewriteOperation(col) as WindowFunctionOperation;\n let alias: string;\n if (col.displayName) {\n alias = col.displayName;\n } else if ([WindowFunction.ROW_NUMBER, WindowFunction.RANK, WindowFunction.DENSE_RANK].includes(col.func)) {\n alias = col.func.replace(/_/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase());\n } else if (col.element) {\n alias = col.func + ' ' + findColumn(col).column.name;\n } else {\n alias = col.func;\n }\n this._select.push(new Alias(rewritten, alias));\n } else if (col instanceof AggregateOperation) {\n const colNested = this._resolve(findColumn(col));\n const node = colNested.parent;\n let ta: TableAlias;\n if (node !== undefined) {\n ta = this._tableAliasForTable(colNested.column.owner!, node);\n } else {\n ta = this._tableAliasForTable(colNested.column.owner!, colNested.column.owner!);\n this._from.add(ta);\n }\n const alias = col.displayName ?? col.operator + ' ' + findColumn(col).column.name;\n const rewrittenAgg = new AggregateOperation(\n new TableAliasColumn(colNested.column, ta), col.operator, undefined,\n col.window ? this._rewriteWindowSpec(col.window) : undefined,\n );\n this._select.push(new Alias(rewrittenAgg, alias));\n } else if (col instanceof ScalarFunctionOperation) {\n const colNested = this._resolve(findColumn(col));\n const node = colNested.parent;\n let ta: TableAlias;\n if (node !== undefined) {\n ta = this._tableAliasForTable(colNested.column.owner!, node);\n } else {\n ta = this._tableAliasForTable(colNested.column.owner!, colNested.column.owner!);\n this._from.add(ta);\n }\n const alias = col.displayName ?? col.func + ' ' + findColumn(col).column.name;\n this._select.push(new Alias(\n new ScalarFunctionOperation(new TableAliasColumn(colNested.column, ta), col.func, undefined, col.secondArg, col.extraArgs),\n alias,\n ));\n } else if (col instanceof DateExtractOperation || col instanceof DateArithmeticOperation || col instanceof DateDiffOperation) {\n const colNested = this._resolve(findColumn(col as RelationalOperationElement));\n const node = colNested.parent;\n let ta: TableAlias;\n if (node !== undefined) {\n ta = this._tableAliasForTable(colNested.column.owner!, node);\n } else {\n ta = this._tableAliasForTable(colNested.column.owner!, colNested.column.owner!);\n this._from.add(ta);\n }\n const alias = (col as DateExtractOperation).displayName ?? findColumn(col as RelationalOperationElement).column.name;\n let aliasedOp: RelationalOperationElement;\n if (col instanceof DateExtractOperation) {\n aliasedOp = new DateExtractOperation(new TableAliasColumn(colNested.column, ta), col.part);\n } else if (col instanceof DateArithmeticOperation) {\n aliasedOp = new DateArithmeticOperation(new TableAliasColumn(colNested.column, ta), col.n, col.unit, col.isAdd);\n } else {\n aliasedOp = new DateDiffOperation(new TableAliasColumn(colNested.column, ta), (col as DateDiffOperation).other, (col as DateDiffOperation).unit);\n }\n this._select.push(new Alias(aliasedOp, alias));\n } else if (col instanceof CountAllOperation) {\n const ta = this._tableAliasForTable(col.table, col.table);\n this._from.add(ta);\n this._select.push(new Alias(col, 'Count'));\n }\n }\n }\n\n private _addJoin(node: JoinTreeNodeOperation): void {\n if (this._addedJoinIds.has(node)) return;\n if (node.parent !== undefined) this._addJoin(node.parent);\n this._addedJoinIds.add(node);\n\n const join = node.join;\n const left = join.left;\n const srcTa = this._tableAliasForTable(left.owner!, node.parent ?? left.owner!);\n if (node.parent === undefined) this._from.add(srcTa);\n const sc = new TableAliasColumn(left, srcTa);\n const right = join.right;\n const tc = new TableAliasColumn(right, this._tableAliasForTable(right.owner!, node));\n const queryFilter = this._joinFilters.get(node);\n const filterOp = join.filter !== undefined && queryFilter !== undefined\n ? new LogicalOperation(join.filter as Operation, LogicalOperator.AND, queryFilter)\n : join.filter ?? queryFilter;\n this._join.push(new Join(sc, tc, filterOp));\n }\n\n buildFilter(op: RelationalOperationElement): string {\n if (op instanceof NoOperation) return '';\n if (op instanceof ExistsOperation) {\n const col = op.node.join.right;\n return this.buildFilter(new ColumnWithJoin(col, op.node)) + ' IS NOT NULL';\n }\n if (op instanceof NotExistsOperation) {\n const col = op.node.join.right;\n return this.buildFilter(new ColumnWithJoin(col, op.node)) + ' IS NULL';\n }\n if (op instanceof IsNotNullOperation) return this.buildFilter(op.element) + ' IS NOT NULL';\n if (op instanceof IsNullOperation) return this.buildFilter(op.element) + ' IS NULL';\n if (op instanceof LogicalOperation) {\n let left = this.buildFilter(op.left);\n let right = this.buildFilter(op.right);\n if (op.left instanceof LogicalOperation) left = '(' + left + ')';\n if (op.right instanceof LogicalOperation) right = '(' + right + ')';\n return left + LOGICAL_OPERATOR_STR[op.operator] + right;\n }\n if (op instanceof ComparisonOperation) {\n return this.buildFilter(op.left) + COMPARISON_OPERATOR_STR[op.operator] + this.buildFilter(op.right);\n }\n if (op instanceof ConstantOperation) return constantValueString(op);\n if (op instanceof ColumnWithJoin) {\n const { column, parent: node } = this._resolve(op);\n let ta: TableAlias;\n if (node !== undefined) {\n ta = this._tableAliasForTable(column.owner!, node);\n this._addJoin(node);\n } else {\n ta = this._tableAliasForTable(column.owner!, column.owner!);\n }\n return ta.alias + '.' + column.name;\n }\n if (op instanceof Column) {\n const ta = this._tableAliasForTable(op.owner!, op.owner!);\n return ta.alias + '.' + op.name;\n }\n throw new Error('Unknown operation in buildFilter: ' + op.constructor.name);\n }\n\n private _tableAliasForTable(table: string, key: unknown): TableAlias {\n if (this._tableAliasesByTable.has(key)) {\n return this._tableAliasesByTable.get(key)!;\n }\n const ta = new TableAlias(table, 't' + this._tableAliasIncr++);\n this._tableAliasesByTable.set(key, ta);\n return ta;\n }\n\n buildQueryString(): string {\n const joins = this._join.map(j =>\n ' LEFT OUTER JOIN ' + j.target.tableAlias.table + ' AS ' + j.target.tableAlias.alias +\n ' ON ' + j.source.tableAlias.alias + '.' + j.source.column.name +\n ' = ' + j.target.tableAlias.alias + '.' + j.target.column.name +\n (j.filterOp ? ' AND ' + this.buildFilter(j.filterOp) : ''),\n );\n\n return 'SELECT ' + this._select.map(ca => sqlOperationToString(ca)).join(',') +\n ' FROM ' + Array.from(this._from).map(ta => ta.table + ' AS ' + ta.alias).join(',') +\n joins.join('') +\n this._buildWhere() +\n this._buildGroupBy() +\n this._buildOrderBy() +\n this._buildLimit();\n }\n\n private _buildWhere(): string {\n return this._where.length > 0 ? ' WHERE ' + this._where : '';\n }\n private _buildGroupBy(): string {\n return this._groupByParts.length > 0 ? ' GROUP BY ' + this._groupByParts.join(', ') : '';\n }\n private _buildOrderBy(): string {\n return this._orderByParts.length > 0 ? ' ORDER BY ' + this._orderByParts.join(', ') : '';\n }\n private _buildLimit(): string {\n return this._limit !== undefined ? ' LIMIT ' + this._limit : '';\n }\n}\n\nexport function selectSqlToString(selectOperation: SelectOperation): string {\n const qg = new SQLQueryGenerator();\n qg.generate(selectOperation);\n return qg.buildQueryString();\n}\n\nexport function toSql(\n businessDate: Date | null,\n processingDatetime: Date | null,\n columns: (Attribute | RelationalOperationElement)[],\n table: Table,\n op: RelationalOperationElement,\n orderBy: SortOperation[] = [],\n groupBy: Attribute[] = [],\n limit?: number,\n businessDateTo: Date | null = null,\n): string {\n const selectOp = buildQueryOperation(businessDate, processingDatetime, columns, table, op, orderBy, groupBy, limit, businessDateTo);\n return selectSqlToString(selectOp);\n}\n\nexport { buildQueryOperation };\n"],"mappings":"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","names":[]}
@@ -1,509 +0,0 @@
1
- // src/model/relational.ts
2
- var ComparisonOperator = /* @__PURE__ */ ((ComparisonOperator2) => {
3
- ComparisonOperator2["EQUAL"] = "EQUAL";
4
- ComparisonOperator2["NOT_EQUAL"] = "NOT_EQUAL";
5
- ComparisonOperator2["LESS_THAN"] = "LESS_THAN";
6
- ComparisonOperator2["GREATER_THAN"] = "GREATER_THAN";
7
- ComparisonOperator2["LESS_THAN_OR_EQUAL_TO"] = "LESS_THAN_OR_EQUAL_TO";
8
- ComparisonOperator2["GREATER_THAN_OR_EQUAL_TO"] = "GREATER_THAN_OR_EQUAL_TO";
9
- ComparisonOperator2["LIKE"] = "LIKE";
10
- ComparisonOperator2["NOT_LIKE"] = "NOT_LIKE";
11
- return ComparisonOperator2;
12
- })(ComparisonOperator || {});
13
- var LogicalOperator = /* @__PURE__ */ ((LogicalOperator2) => {
14
- LogicalOperator2["AND"] = "AND";
15
- LogicalOperator2["OR"] = "OR";
16
- return LogicalOperator2;
17
- })(LogicalOperator || {});
18
- var AggregateOperator = /* @__PURE__ */ ((AggregateOperator2) => {
19
- AggregateOperator2["COUNT"] = "COUNT";
20
- AggregateOperator2["SUM"] = "SUM";
21
- AggregateOperator2["MIN"] = "MIN";
22
- AggregateOperator2["MAX"] = "MAX";
23
- AggregateOperator2["AVERAGE"] = "AVERAGE";
24
- return AggregateOperator2;
25
- })(AggregateOperator || {});
26
- var ScalarFunction = /* @__PURE__ */ ((ScalarFunction2) => {
27
- ScalarFunction2["ABS"] = "ABS";
28
- ScalarFunction2["CEILING"] = "CEILING";
29
- ScalarFunction2["FLOOR"] = "FLOOR";
30
- ScalarFunction2["MOD"] = "MOD";
31
- ScalarFunction2["POWER"] = "POWER";
32
- ScalarFunction2["SQRT"] = "SQRT";
33
- ScalarFunction2["ROUND"] = "ROUND";
34
- ScalarFunction2["UPPER"] = "UPPER";
35
- ScalarFunction2["LOWER"] = "LOWER";
36
- ScalarFunction2["TRIM"] = "TRIM";
37
- ScalarFunction2["LTRIM"] = "LTRIM";
38
- ScalarFunction2["RTRIM"] = "RTRIM";
39
- ScalarFunction2["LENGTH"] = "LENGTH";
40
- ScalarFunction2["REVERSE"] = "REVERSE";
41
- ScalarFunction2["LEFT"] = "LEFT";
42
- ScalarFunction2["RIGHT"] = "RIGHT";
43
- ScalarFunction2["REPEAT"] = "REPEAT";
44
- ScalarFunction2["REPLACE"] = "REPLACE";
45
- ScalarFunction2["SUBSTRING"] = "SUBSTRING";
46
- return ScalarFunction2;
47
- })(ScalarFunction || {});
48
- var DatePart = /* @__PURE__ */ ((DatePart2) => {
49
- DatePart2["YEAR"] = "YEAR";
50
- DatePart2["MONTH"] = "MONTH";
51
- DatePart2["DAY"] = "DAY";
52
- DatePart2["HOUR"] = "HOUR";
53
- DatePart2["MINUTE"] = "MINUTE";
54
- DatePart2["SECOND"] = "SECOND";
55
- DatePart2["QUARTER"] = "QUARTER";
56
- DatePart2["WEEK"] = "WEEK";
57
- DatePart2["DOW"] = "DOW";
58
- return DatePart2;
59
- })(DatePart || {});
60
- var SortDirection = /* @__PURE__ */ ((SortDirection2) => {
61
- SortDirection2["ASC"] = "ASC";
62
- SortDirection2["DESC"] = "DESC";
63
- return SortDirection2;
64
- })(SortDirection || {});
65
- var RelationalOperationElement = class {
66
- };
67
- var Operation = class extends RelationalOperationElement {
68
- andOp(other) {
69
- return new LogicalOperation(this, "AND" /* AND */, other);
70
- }
71
- };
72
- var NoOperation = class extends Operation {
73
- andOp(other) {
74
- return other;
75
- }
76
- };
77
- var ConstantOperation = class extends RelationalOperationElement {
78
- };
79
- var IntegerConstantOperation = class extends ConstantOperation {
80
- constructor(value) {
81
- super();
82
- this.value = value;
83
- }
84
- value;
85
- };
86
- var FloatConstantOperation = class extends ConstantOperation {
87
- constructor(value) {
88
- super();
89
- this.value = value;
90
- }
91
- value;
92
- };
93
- var StringConstantOperation = class extends ConstantOperation {
94
- constructor(value) {
95
- super();
96
- this.value = value;
97
- }
98
- value;
99
- };
100
- var DateConstantOperation = class extends ConstantOperation {
101
- constructor(value) {
102
- super();
103
- this.value = value;
104
- }
105
- value;
106
- };
107
- var DateTimeConstantOperation = class extends ConstantOperation {
108
- constructor(value) {
109
- super();
110
- this.value = value;
111
- }
112
- value;
113
- };
114
- var DecimalConstantOperation = class extends ConstantOperation {
115
- constructor(value) {
116
- super();
117
- this.value = value;
118
- }
119
- value;
120
- };
121
- var BooleanConstantOperation = class extends ConstantOperation {
122
- constructor(value) {
123
- super();
124
- this.value = value;
125
- }
126
- value;
127
- };
128
- var UnaryOperation = class extends Operation {
129
- constructor(element) {
130
- super();
131
- this.element = element;
132
- }
133
- element;
134
- };
135
- var BinaryOperation = class extends Operation {
136
- constructor(left, right) {
137
- super();
138
- this.left = left;
139
- this.right = right;
140
- }
141
- left;
142
- right;
143
- };
144
- var IsNullOperation = class extends UnaryOperation {
145
- };
146
- var IsNotNullOperation = class extends UnaryOperation {
147
- };
148
- var ComparisonOperation = class extends BinaryOperation {
149
- constructor(left, operator, right) {
150
- super(left, right);
151
- this.operator = operator;
152
- }
153
- operator;
154
- };
155
- var LogicalOperation = class extends BinaryOperation {
156
- constructor(left, operator, right) {
157
- super(left, right);
158
- this.operator = operator;
159
- }
160
- operator;
161
- };
162
- var WindowSpecification = class {
163
- constructor(partitionBy = [], orderBy = []) {
164
- this.partitionBy = partitionBy;
165
- this.orderBy = orderBy;
166
- }
167
- partitionBy;
168
- orderBy;
169
- };
170
- var AggregateOperation = class _AggregateOperation extends UnaryOperation {
171
- constructor(element, operator, displayName, window) {
172
- super(element);
173
- this.operator = operator;
174
- this.displayName = displayName;
175
- this.window = window;
176
- }
177
- operator;
178
- displayName;
179
- window;
180
- over(partitionBy, orderBy) {
181
- return new _AggregateOperation(
182
- this.element,
183
- this.operator,
184
- this.displayName,
185
- new WindowSpecification(partitionBy ?? [], orderBy ?? [])
186
- );
187
- }
188
- };
189
- var WindowFunction = /* @__PURE__ */ ((WindowFunction2) => {
190
- WindowFunction2["ROW_NUMBER"] = "ROW_NUMBER";
191
- WindowFunction2["RANK"] = "RANK";
192
- WindowFunction2["DENSE_RANK"] = "DENSE_RANK";
193
- WindowFunction2["NTILE"] = "NTILE";
194
- WindowFunction2["LAG"] = "LAG";
195
- WindowFunction2["LEAD"] = "LEAD";
196
- WindowFunction2["FIRST_VALUE"] = "FIRST_VALUE";
197
- WindowFunction2["LAST_VALUE"] = "LAST_VALUE";
198
- WindowFunction2["CUME_DIST"] = "CUME_DIST";
199
- WindowFunction2["PERCENT_RANK"] = "PERCENT_RANK";
200
- return WindowFunction2;
201
- })(WindowFunction || {});
202
- var WindowFunctionOperation = class _WindowFunctionOperation extends UnaryOperation {
203
- constructor(element, func, displayName, secondArg, extraArgs = [], window) {
204
- super(element);
205
- this.func = func;
206
- this.displayName = displayName;
207
- this.secondArg = secondArg;
208
- this.extraArgs = extraArgs;
209
- this.window = window;
210
- }
211
- func;
212
- displayName;
213
- secondArg;
214
- extraArgs;
215
- window;
216
- over(partitionBy, orderBy) {
217
- return new _WindowFunctionOperation(
218
- this.element,
219
- this.func,
220
- this.displayName,
221
- this.secondArg,
222
- [...this.extraArgs],
223
- new WindowSpecification(partitionBy ?? [], orderBy ?? [])
224
- );
225
- }
226
- };
227
- var ScalarFunctionOperation = class extends UnaryOperation {
228
- constructor(element, func, displayName, secondArg, extraArgs = []) {
229
- super(element);
230
- this.func = func;
231
- this.displayName = displayName;
232
- this.secondArg = secondArg;
233
- this.extraArgs = extraArgs;
234
- }
235
- func;
236
- displayName;
237
- secondArg;
238
- extraArgs;
239
- };
240
- var DateExtractOperation = class extends UnaryOperation {
241
- constructor(element, part, displayName) {
242
- super(element);
243
- this.part = part;
244
- this.displayName = displayName;
245
- }
246
- part;
247
- displayName;
248
- };
249
- var DateArithmeticOperation = class extends UnaryOperation {
250
- constructor(element, n, unit, isAdd = true, displayName) {
251
- super(element);
252
- this.n = n;
253
- this.unit = unit;
254
- this.isAdd = isAdd;
255
- this.displayName = displayName;
256
- }
257
- n;
258
- unit;
259
- isAdd;
260
- displayName;
261
- };
262
- var DateDiffOperation = class extends UnaryOperation {
263
- constructor(element, other, unit, displayName) {
264
- super(element);
265
- this.other = other;
266
- this.unit = unit;
267
- this.displayName = displayName;
268
- }
269
- other;
270
- unit;
271
- displayName;
272
- };
273
- var Column = class extends RelationalOperationElement {
274
- constructor(name, type, owner, primaryKey = false) {
275
- super();
276
- this.name = name;
277
- this.type = type;
278
- this.owner = owner;
279
- this.primaryKey = primaryKey;
280
- }
281
- name;
282
- type;
283
- owner;
284
- primaryKey;
285
- table;
286
- };
287
- var ForeignKey = class {
288
- constructor(column, references) {
289
- this.column = column;
290
- this.references = references;
291
- }
292
- column;
293
- references;
294
- };
295
- var DataStore = class {
296
- constructor(name) {
297
- this.name = name;
298
- }
299
- name;
300
- schemas = [];
301
- };
302
- var Database = class extends DataStore {
303
- constructor(name, location) {
304
- super(name);
305
- this.location = location;
306
- }
307
- location;
308
- namespace(schemaName) {
309
- return schemaName;
310
- }
311
- };
312
- var DataCatalog = class extends DataStore {
313
- constructor(name) {
314
- super(name);
315
- }
316
- namespace(schemaName) {
317
- return `${this.name}.${schemaName}`;
318
- }
319
- };
320
- var Schema = class {
321
- constructor(name, datastore) {
322
- this.name = name;
323
- this.datastore = datastore;
324
- datastore?.schemas.push(this);
325
- }
326
- name;
327
- datastore;
328
- tables = [];
329
- };
330
- var Table = class {
331
- constructor(name, columns, schema) {
332
- this.name = name;
333
- this.schema = schema;
334
- for (const col of columns) {
335
- if (this._columnsByName.has(col.name)) {
336
- throw new Error(`Duplicate column name '${col.name}' in table '${name}'`);
337
- }
338
- this._columnsByName.set(col.name, col);
339
- col.table = this;
340
- }
341
- schema?.tables.push(this);
342
- }
343
- name;
344
- schema;
345
- _columnsByName = /* @__PURE__ */ new Map();
346
- foreignKeys = [];
347
- get columns() {
348
- return Array.from(this._columnsByName.values());
349
- }
350
- get qualifiedName() {
351
- if (!this.schema) return this.name;
352
- if (!this.schema.datastore) return `${this.schema.name}.${this.name}`;
353
- return `${this.schema.datastore.namespace(this.schema.name)}.${this.name}`;
354
- }
355
- };
356
- var JoinOperation = class {
357
- constructor(name, target, left, right, filter) {
358
- this.name = name;
359
- this.target = target;
360
- this.left = left;
361
- this.right = right;
362
- this.filter = filter;
363
- }
364
- name;
365
- target;
366
- left;
367
- right;
368
- filter;
369
- /** Property-equality filters on the join target (property id -> value), set by a related finder given a filter. */
370
- filterKwargs = {};
371
- /** Maps property ids to [column, type, table] for `filterKwargs`. */
372
- filterColumnMap = {};
373
- };
374
- var JoinTreeNodeOperation = class {
375
- constructor(join, parent) {
376
- this.join = join;
377
- this.parent = parent;
378
- }
379
- join;
380
- parent;
381
- };
382
- var ColumnWithJoin = class extends RelationalOperationElement {
383
- /**
384
- * `embedded` is an alternate reference to a flat (denormalized) column on the owning table that
385
- * holds the same value without the join; the SQL generator uses it when the join can be elided.
386
- */
387
- constructor(column, parent, embedded) {
388
- super();
389
- this.column = column;
390
- this.parent = parent;
391
- this.embedded = embedded;
392
- }
393
- column;
394
- parent;
395
- embedded;
396
- };
397
- var SortOperation = class {
398
- constructor(column, direction) {
399
- this.column = column;
400
- this.direction = direction;
401
- }
402
- column;
403
- direction;
404
- };
405
- var CountAllOperation = class extends RelationalOperationElement {
406
- constructor(table) {
407
- super();
408
- this.table = table;
409
- }
410
- table;
411
- };
412
- var Alias = class extends RelationalOperationElement {
413
- constructor(element, name) {
414
- super();
415
- this.element = element;
416
- this.name = name;
417
- }
418
- element;
419
- name;
420
- };
421
- var ExistsOperation = class extends RelationalOperationElement {
422
- constructor(node) {
423
- super();
424
- this.node = node;
425
- }
426
- node;
427
- andOp(other) {
428
- return new LogicalOperation(this, "AND" /* AND */, other);
429
- }
430
- };
431
- var NotExistsOperation = class extends RelationalOperationElement {
432
- constructor(node) {
433
- super();
434
- this.node = node;
435
- }
436
- node;
437
- andOp(other) {
438
- return new LogicalOperation(this, "AND" /* AND */, other);
439
- }
440
- };
441
- var SelectOperation = class {
442
- constructor(display, filter, orderBy = [], groupBy = [], limit, table, joinFilters = /* @__PURE__ */ new Map()) {
443
- this.display = display;
444
- this.filter = filter;
445
- this.orderBy = orderBy;
446
- this.groupBy = groupBy;
447
- this.limit = limit;
448
- this.table = table;
449
- this.joinFilters = joinFilters;
450
- }
451
- display;
452
- filter;
453
- orderBy;
454
- groupBy;
455
- limit;
456
- table;
457
- joinFilters;
458
- };
459
-
460
- export {
461
- ComparisonOperator,
462
- LogicalOperator,
463
- AggregateOperator,
464
- ScalarFunction,
465
- DatePart,
466
- SortDirection,
467
- RelationalOperationElement,
468
- Operation,
469
- NoOperation,
470
- ConstantOperation,
471
- IntegerConstantOperation,
472
- FloatConstantOperation,
473
- StringConstantOperation,
474
- DateConstantOperation,
475
- DateTimeConstantOperation,
476
- DecimalConstantOperation,
477
- BooleanConstantOperation,
478
- UnaryOperation,
479
- BinaryOperation,
480
- IsNullOperation,
481
- IsNotNullOperation,
482
- ComparisonOperation,
483
- LogicalOperation,
484
- WindowSpecification,
485
- AggregateOperation,
486
- WindowFunction,
487
- WindowFunctionOperation,
488
- ScalarFunctionOperation,
489
- DateExtractOperation,
490
- DateArithmeticOperation,
491
- DateDiffOperation,
492
- Column,
493
- ForeignKey,
494
- DataStore,
495
- Database,
496
- DataCatalog,
497
- Schema,
498
- Table,
499
- JoinOperation,
500
- JoinTreeNodeOperation,
501
- ColumnWithJoin,
502
- SortOperation,
503
- CountAllOperation,
504
- Alias,
505
- ExistsOperation,
506
- NotExistsOperation,
507
- SelectOperation
508
- };
509
- //# sourceMappingURL=chunk-UYMOE6YU.js.map