@@ -22,8 +22,17 @@ import {
22
22
} from '../parser/join-parser.js'
23
23
import { parseMergeThen , parseMergeWhen } from '../parser/merge-parser.js'
24
24
import { ReferenceExpression } from '../parser/reference-parser.js'
25
- import { ReturningAllRow , ReturningRow } from '../parser/returning-parser.js'
26
- import { parseSelectAll , parseSelectArg } from '../parser/select-parser.js'
25
+ import {
26
+ ReturningAllRow ,
27
+ ReturningCallbackRow ,
28
+ ReturningRow ,
29
+ } from '../parser/returning-parser.js'
30
+ import {
31
+ parseSelectAll ,
32
+ parseSelectArg ,
33
+ SelectCallback ,
34
+ SelectExpression ,
35
+ } from '../parser/select-parser.js'
27
36
import { TableExpression } from '../parser/table-parser.js'
28
37
import { parseTop } from '../parser/top-parser.js'
29
38
import {
@@ -58,10 +67,13 @@ import {
58
67
SelectExpressionFromOutputCallback ,
59
68
SelectExpressionFromOutputExpression ,
60
69
} from './output-interface.js'
70
+ import { MultiTableReturningInterface } from './returning-interface.js'
61
71
import { UpdateQueryBuilder } from './update-query-builder.js'
62
72
63
73
export class MergeQueryBuilder < DB , TT extends keyof DB , O >
64
- implements OutputInterface < DB , TT , O >
74
+ implements
75
+ MultiTableReturningInterface < DB , TT , O > ,
76
+ OutputInterface < DB , TT , O >
65
77
{
66
78
readonly #props: MergeQueryBuilderProps
67
79
@@ -215,6 +227,44 @@ export class MergeQueryBuilder<DB, TT extends keyof DB, O>
215
227
} )
216
228
}
217
229
230
+ returning < SE extends SelectExpression < DB , TT > > (
231
+ selections : ReadonlyArray < SE > ,
232
+ ) : MergeQueryBuilder < DB , TT , ReturningRow < DB , TT , O , SE > >
233
+
234
+ returning < CB extends SelectCallback < DB , TT > > (
235
+ callback : CB ,
236
+ ) : MergeQueryBuilder < DB , TT , ReturningCallbackRow < DB , TT , O , CB > >
237
+
238
+ returning < SE extends SelectExpression < DB , TT > > (
239
+ selection : SE ,
240
+ ) : MergeQueryBuilder < DB , TT , ReturningRow < DB , TT , O , SE > >
241
+
242
+ returning ( args : any ) : any {
243
+ return new MergeQueryBuilder ( {
244
+ ...this . #props,
245
+ queryNode : QueryNode . cloneWithReturning (
246
+ this . #props. queryNode ,
247
+ parseSelectArg ( args ) ,
248
+ ) ,
249
+ } )
250
+ }
251
+
252
+ returningAll < T extends TT > (
253
+ table : T ,
254
+ ) : MergeQueryBuilder < DB , TT , ReturningAllRow < DB , T , O > >
255
+
256
+ returningAll ( ) : MergeQueryBuilder < DB , TT , ReturningAllRow < DB , TT , O > >
257
+
258
+ returningAll ( table ?: any ) : any {
259
+ return new MergeQueryBuilder ( {
260
+ ...this . #props,
261
+ queryNode : QueryNode . cloneWithReturning (
262
+ this . #props. queryNode ,
263
+ parseSelectAll ( table ) ,
264
+ ) ,
265
+ } )
266
+ }
267
+
218
268
output < OE extends OutputExpression < DB , TT > > (
219
269
selections : readonly OE [ ] ,
220
270
) : MergeQueryBuilder <
@@ -274,7 +324,11 @@ export class WheneableMergeQueryBuilder<
274
324
ST extends keyof DB ,
275
325
O ,
276
326
>
277
- implements Compilable < O > , OutputInterface < DB , TT , O > , OperationNodeSource
327
+ implements
328
+ Compilable < O > ,
329
+ MultiTableReturningInterface < DB , TT | ST , O > ,
330
+ OutputInterface < DB , TT , O > ,
331
+ OperationNodeSource
278
332
{
279
333
readonly #props: MergeQueryBuilderProps
280
334
@@ -608,6 +662,54 @@ export class WheneableMergeQueryBuilder<
608
662
return this . #whenNotMatched( [ lhs , op , rhs ] , true , true )
609
663
}
610
664
665
+ returning < SE extends SelectExpression < DB , TT | ST > > (
666
+ selections : ReadonlyArray < SE > ,
667
+ ) : WheneableMergeQueryBuilder < DB , TT , ST , ReturningRow < DB , TT | ST , O , SE > >
668
+
669
+ returning < CB extends SelectCallback < DB , TT | ST > > (
670
+ callback : CB ,
671
+ ) : WheneableMergeQueryBuilder <
672
+ DB ,
673
+ TT ,
674
+ ST ,
675
+ ReturningCallbackRow < DB , TT | ST , O , CB >
676
+ >
677
+
678
+ returning < SE extends SelectExpression < DB , TT | ST > > (
679
+ selection : SE ,
680
+ ) : WheneableMergeQueryBuilder < DB , TT , ST , ReturningRow < DB , TT | ST , O , SE > >
681
+
682
+ returning ( args : any ) : any {
683
+ return new WheneableMergeQueryBuilder ( {
684
+ ...this . #props,
685
+ queryNode : QueryNode . cloneWithReturning (
686
+ this . #props. queryNode ,
687
+ parseSelectArg ( args ) ,
688
+ ) ,
689
+ } )
690
+ }
691
+
692
+ returningAll < T extends TT | ST > (
693
+ table : T ,
694
+ ) : WheneableMergeQueryBuilder < DB , TT , ST , ReturningAllRow < DB , T , O > >
695
+
696
+ returningAll ( ) : WheneableMergeQueryBuilder <
697
+ DB ,
698
+ TT ,
699
+ ST ,
700
+ ReturningAllRow < DB , TT | ST , O >
701
+ >
702
+
703
+ returningAll ( table ?: any ) : any {
704
+ return new WheneableMergeQueryBuilder ( {
705
+ ...this . #props,
706
+ queryNode : QueryNode . cloneWithReturning (
707
+ this . #props. queryNode ,
708
+ parseSelectAll ( table ) ,
709
+ ) ,
710
+ } )
711
+ }
712
+
611
713
output < OE extends OutputExpression < DB , TT > > (
612
714
selections : readonly OE [ ] ,
613
715
) : WheneableMergeQueryBuilder <
@@ -788,9 +890,12 @@ export class WheneableMergeQueryBuilder<
788
890
this . #props. queryId ,
789
891
)
790
892
893
+ const { adapter } = this . #props. executor
894
+ const query = compiledQuery . query as MergeQueryNode
895
+
791
896
if (
792
- ( compiledQuery . query as MergeQueryNode ) . output &&
793
- this . #props . executor . adapter . supportsOutput
897
+ ( query . returning && adapter . supportsReturning ) ||
898
+ ( query . output && adapter . supportsOutput )
794
899
) {
795
900
return result . rows as any
796
901
}
0 commit comments