Skip to content

Commit 833a377

Browse files
committed
clean up filter parsers
1 parent ac343c3 commit 833a377

File tree

6 files changed

+49
-51
lines changed

6 files changed

+49
-51
lines changed

src/operation-node/join-node.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,17 @@ export const JoinNode = freeze({
4848
})
4949
},
5050

51-
cloneWithOn(
52-
joinNode: JoinNode,
53-
op: 'And' | 'Or',
54-
on: JoinNodeOnNode
55-
): JoinNode {
51+
cloneWithOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode {
52+
return freeze({
53+
...joinNode,
54+
on: joinNode.on ? AndNode.create(joinNode.on, on) : on,
55+
})
56+
},
57+
58+
cloneWithOrOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode {
5659
return freeze({
5760
...joinNode,
58-
on: joinNode.on
59-
? op === 'And'
60-
? AndNode.create(joinNode.on, on)
61-
: OrNode.create(joinNode.on, on)
62-
: on,
61+
on: joinNode.on ? OrNode.create(joinNode.on, on) : on,
6362
})
6463
},
6564
})

src/operation-node/query-node.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,24 @@ export const QueryNode = freeze({
5656

5757
cloneWithWhere<T extends FilterableQueryNode>(
5858
node: T,
59-
op: 'And' | 'Or',
6059
filter: WhereChildNode
6160
): T {
6261
return freeze({
6362
...node,
6463
where: node.where
65-
? WhereNode.cloneWithFilter(node.where, op, filter)
64+
? WhereNode.cloneWithFilter(node.where, 'And', filter)
65+
: WhereNode.create(filter),
66+
})
67+
},
68+
69+
cloneWithOrWhere<T extends FilterableQueryNode>(
70+
node: T,
71+
filter: WhereChildNode
72+
): T {
73+
return freeze({
74+
...node,
75+
where: node.where
76+
? WhereNode.cloneWithFilter(node.where, 'Or', filter)
6677
: WhereNode.create(filter),
6778
})
6879
},

src/operation-node/select-query-node.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,24 @@ export const SelectQueryNode = freeze({
140140

141141
cloneWithHaving(
142142
selectNode: SelectQueryNode,
143-
op: 'And' | 'Or',
144143
filter: HavingNodeChild
145144
): SelectQueryNode {
146145
return freeze({
147146
...selectNode,
148147
having: selectNode.having
149-
? HavingNode.cloneWithFilter(selectNode.having, op, filter)
148+
? HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
149+
: HavingNode.create(filter),
150+
})
151+
},
152+
153+
cloneWithOrHaving(
154+
selectNode: SelectQueryNode,
155+
filter: HavingNodeChild
156+
): SelectQueryNode {
157+
return freeze({
158+
...selectNode,
159+
having: selectNode.having
160+
? HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
150161
: HavingNode.create(filter),
151162
})
152163
},

src/query-builder/expression-builder.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
parseTableExpressionOrList,
55
TableExpression,
66
QueryBuilderWithTable,
7+
TableExpressionOrList,
78
} from '../parser/table-parser.js'
89
import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js'
910
import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js'
@@ -103,7 +104,7 @@ export class ExpressionBuilder<DB, TB extends keyof DB> {
103104
from: F
104105
): QueryBuilderWithTable<DB, TB, {}, F>
105106

106-
subQuery(table: any): any {
107+
subQuery(table: TableExpressionOrList<DB, TB>): any {
107108
return new QueryBuilder({
108109
queryId: createQueryId(),
109110
executor: this.#props.executor,

src/query-builder/join-builder.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ export class JoinBuilder<DB, TB extends keyof DB>
4444
...this.#props,
4545
joinNode: JoinNode.cloneWithOn(
4646
this.#props.joinNode,
47-
'And',
4847
parseOnFilter(this.#props.parseContext, args)
4948
),
5049
})
@@ -69,9 +68,8 @@ export class JoinBuilder<DB, TB extends keyof DB>
6968
orOn(...args: any[]): JoinBuilder<DB, TB> {
7069
return new JoinBuilder({
7170
...this.#props,
72-
joinNode: JoinNode.cloneWithOn(
71+
joinNode: JoinNode.cloneWithOrOn(
7372
this.#props.joinNode,
74-
'Or',
7573
parseOnFilter(this.#props.parseContext, args)
7674
),
7775
})
@@ -92,7 +90,6 @@ export class JoinBuilder<DB, TB extends keyof DB>
9290
...this.#props,
9391
joinNode: JoinNode.cloneWithOn(
9492
this.#props.joinNode,
95-
'And',
9693
parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)
9794
),
9895
})
@@ -111,9 +108,8 @@ export class JoinBuilder<DB, TB extends keyof DB>
111108
): JoinBuilder<DB, TB> {
112109
return new JoinBuilder({
113110
...this.#props,
114-
joinNode: JoinNode.cloneWithOn(
111+
joinNode: JoinNode.cloneWithOrOn(
115112
this.#props.joinNode,
116-
'Or',
117113
parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)
118114
),
119115
})
@@ -130,7 +126,6 @@ export class JoinBuilder<DB, TB extends keyof DB>
130126
...this.#props,
131127
joinNode: JoinNode.cloneWithOn(
132128
this.#props.joinNode,
133-
'And',
134129
parseExistFilter(this.#props.parseContext, arg)
135130
),
136131
})
@@ -147,7 +142,6 @@ export class JoinBuilder<DB, TB extends keyof DB>
147142
...this.#props,
148143
joinNode: JoinNode.cloneWithOn(
149144
this.#props.joinNode,
150-
'And',
151145
parseNotExistFilter(this.#props.parseContext, arg)
152146
),
153147
})
@@ -162,9 +156,8 @@ export class JoinBuilder<DB, TB extends keyof DB>
162156
orOnExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB> {
163157
return new JoinBuilder({
164158
...this.#props,
165-
joinNode: JoinNode.cloneWithOn(
159+
joinNode: JoinNode.cloneWithOrOn(
166160
this.#props.joinNode,
167-
'Or',
168161
parseExistFilter(this.#props.parseContext, arg)
169162
),
170163
})
@@ -179,9 +172,8 @@ export class JoinBuilder<DB, TB extends keyof DB>
179172
orOnNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB> {
180173
return new JoinBuilder({
181174
...this.#props,
182-
joinNode: JoinNode.cloneWithOn(
175+
joinNode: JoinNode.cloneWithOrOn(
183176
this.#props.joinNode,
184-
'Or',
185177
parseNotExistFilter(this.#props.parseContext, arg)
186178
),
187179
})

src/query-builder/query-builder.ts

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
306306
...this.#props,
307307
queryNode: QueryNode.cloneWithWhere(
308308
this.#props.queryNode,
309-
'And',
310309
parseWhereFilter(this.#props.parseContext, args)
311310
),
312311
})
@@ -374,7 +373,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
374373
...this.#props,
375374
queryNode: QueryNode.cloneWithWhere(
376375
this.#props.queryNode,
377-
'And',
378376
parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)
379377
),
380378
})
@@ -460,9 +458,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
460458

461459
return new QueryBuilder({
462460
...this.#props,
463-
queryNode: QueryNode.cloneWithWhere(
461+
queryNode: QueryNode.cloneWithOrWhere(
464462
this.#props.queryNode,
465-
'Or',
466463
parseWhereFilter(this.#props.parseContext, args)
467464
),
468465
})
@@ -483,9 +480,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
483480

484481
return new QueryBuilder({
485482
...this.#props,
486-
queryNode: QueryNode.cloneWithWhere(
483+
queryNode: QueryNode.cloneWithOrWhere(
487484
this.#props.queryNode,
488-
'Or',
489485
parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)
490486
),
491487
})
@@ -557,7 +553,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
557553
...this.#props,
558554
queryNode: QueryNode.cloneWithWhere(
559555
this.#props.queryNode,
560-
'And',
561556
parseExistFilter(this.#props.parseContext, arg)
562557
),
563558
})
@@ -573,7 +568,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
573568
...this.#props,
574569
queryNode: QueryNode.cloneWithWhere(
575570
this.#props.queryNode,
576-
'And',
577571
parseNotExistFilter(this.#props.parseContext, arg)
578572
),
579573
})
@@ -587,9 +581,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
587581

588582
return new QueryBuilder({
589583
...this.#props,
590-
queryNode: QueryNode.cloneWithWhere(
584+
queryNode: QueryNode.cloneWithOrWhere(
591585
this.#props.queryNode,
592-
'Or',
593586
parseExistFilter(this.#props.parseContext, arg)
594587
),
595588
})
@@ -603,9 +596,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
603596

604597
return new QueryBuilder({
605598
...this.#props,
606-
queryNode: QueryNode.cloneWithWhere(
599+
queryNode: QueryNode.cloneWithOrWhere(
607600
this.#props.queryNode,
608-
'Or',
609601
parseNotExistFilter(this.#props.parseContext, arg)
610602
),
611603
})
@@ -632,7 +624,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
632624
...this.#props,
633625
queryNode: SelectQueryNode.cloneWithHaving(
634626
this.#props.queryNode,
635-
'And',
636627
parseHavingFilter(this.#props.parseContext, args)
637628
),
638629
})
@@ -653,7 +644,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
653644
...this.#props,
654645
queryNode: SelectQueryNode.cloneWithHaving(
655646
this.#props.queryNode,
656-
'And',
657647
parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)
658648
),
659649
})
@@ -678,9 +668,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
678668

679669
return new QueryBuilder({
680670
...this.#props,
681-
queryNode: SelectQueryNode.cloneWithHaving(
671+
queryNode: SelectQueryNode.cloneWithOrHaving(
682672
this.#props.queryNode,
683-
'Or',
684673
parseHavingFilter(this.#props.parseContext, args)
685674
),
686675
})
@@ -699,9 +688,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
699688

700689
return new QueryBuilder({
701690
...this.#props,
702-
queryNode: SelectQueryNode.cloneWithHaving(
691+
queryNode: SelectQueryNode.cloneWithOrHaving(
703692
this.#props.queryNode,
704-
'Or',
705693
parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)
706694
),
707695
})
@@ -718,7 +706,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
718706
...this.#props,
719707
queryNode: SelectQueryNode.cloneWithHaving(
720708
this.#props.queryNode,
721-
'And',
722709
parseExistFilter(this.#props.parseContext, arg)
723710
),
724711
})
@@ -735,7 +722,6 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
735722
...this.#props,
736723
queryNode: SelectQueryNode.cloneWithHaving(
737724
this.#props.queryNode,
738-
'And',
739725
parseNotExistFilter(this.#props.parseContext, arg)
740726
),
741727
})
@@ -750,9 +736,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
750736

751737
return new QueryBuilder({
752738
...this.#props,
753-
queryNode: SelectQueryNode.cloneWithHaving(
739+
queryNode: SelectQueryNode.cloneWithOrHaving(
754740
this.#props.queryNode,
755-
'Or',
756741
parseExistFilter(this.#props.parseContext, arg)
757742
),
758743
})
@@ -767,9 +752,8 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
767752

768753
return new QueryBuilder({
769754
...this.#props,
770-
queryNode: SelectQueryNode.cloneWithHaving(
755+
queryNode: SelectQueryNode.cloneWithOrHaving(
771756
this.#props.queryNode,
772-
'Or',
773757
parseNotExistFilter(this.#props.parseContext, arg)
774758
),
775759
})

0 commit comments

Comments
 (0)