11import { invariant } from '@zenstackhq/common-helpers' ;
22import {
33 AliasNode ,
4+ BinaryOperationNode ,
45 CaseWhenBuilder ,
56 ColumnNode ,
67 ColumnUpdateNode ,
@@ -10,20 +11,21 @@ import {
1011 FromNode ,
1112 IdentifierNode ,
1213 InsertQueryNode ,
14+ type OperationNode ,
1315 OperationNodeTransformer ,
1416 PrimitiveValueListNode ,
1517 ReferenceNode ,
1618 ReturningNode ,
1719 SelectAllNode ,
1820 SelectionNode ,
1921 SelectQueryNode ,
22+ type SimpleReferenceExpressionNode ,
2023 TableNode ,
2124 UpdateQueryNode ,
2225 ValueListNode ,
2326 ValueNode ,
2427 ValuesNode ,
25- type OperationNode ,
26- type SimpleReferenceExpressionNode ,
28+ WhereNode ,
2729} from 'kysely' ;
2830import type { EnumDef , EnumField , FieldDef , ModelDef , SchemaDef } from '../../schema' ;
2931import {
@@ -183,6 +185,38 @@ export class QueryNameMapper extends OperationNodeTransformer {
183185 return ColumnNode . create ( mappedName ) ;
184186 }
185187
188+ protected override transformWhere ( node : WhereNode ) : WhereNode {
189+ if (
190+ BinaryOperationNode . is ( node . where ) &&
191+ ReferenceNode . is ( node . where . leftOperand ) &&
192+ ColumnNode . is ( node . where . leftOperand . column ) &&
193+ node . where . leftOperand . table &&
194+ TableNode . is ( node . where . leftOperand . table ) &&
195+ // where: { enumColumn: Enum.VALUE }
196+ ( ValueNode . is ( node . where . rightOperand ) ||
197+ // where: { enumColumn: { in: [Enum.VALUE] } }
198+ PrimitiveValueListNode . is ( node . where . rightOperand ) )
199+ ) {
200+ const tableName = node . where . leftOperand . table . table . identifier . name ;
201+ const columnNode = node . where . leftOperand . column ;
202+ const valueNode = node . where . rightOperand ;
203+
204+ let resultValue : OperationNode = valueNode ;
205+
206+ if ( ValueNode . is ( valueNode ) ) {
207+ resultValue = this . processEnumMappingForValue ( tableName , columnNode , valueNode ) as OperationNode ;
208+ } else if ( PrimitiveValueListNode . is ( valueNode ) ) {
209+ resultValue = PrimitiveValueListNode . create (
210+ this . processEnumMappingForValues ( tableName , [ columnNode ] , valueNode . values ) ,
211+ ) ;
212+ }
213+
214+ return WhereNode . create ( BinaryOperationNode . create ( node . where . leftOperand , node . where . operator , resultValue ) ) ;
215+ }
216+
217+ return super . transformWhere ( node ) ;
218+ }
219+
186220 protected override transformUpdateQuery ( node : UpdateQueryNode ) {
187221 if ( ! node . table ) {
188222 return super . transformUpdateQuery ( node ) ;
0 commit comments