@@ -2,7 +2,7 @@ import { SyntaxKind, NodeFlags, TypeNode, factory } from "typescript";
2
2
3
3
// import { writeFileSync, STDIO } from "javy/fs";
4
4
5
- import { Parameter , Column } from "../gen/plugin/codegen_pb" ;
5
+ import { Parameter , Column , Query } from "../gen/plugin/codegen_pb" ;
6
6
import { argName , colName } from "./utlis" ;
7
7
8
8
export function columnType ( column ?: Column ) : TypeNode {
@@ -165,7 +165,8 @@ export function columnType(column?: Column): TypeNode {
165
165
] ) ;
166
166
}
167
167
168
- export function preamble ( queries : unknown ) {
168
+ export function preamble ( queries : Query [ ] ) {
169
+ const hasExecLastIdCmd = queries . some ( ( query ) => query . cmd === ":execlastid" ) ;
169
170
return [
170
171
factory . createImportDeclaration (
171
172
undefined ,
@@ -178,6 +179,15 @@ export function preamble(queries: unknown) {
178
179
undefined ,
179
180
factory . createIdentifier ( "RowDataPacket" )
180
181
) ,
182
+ ...( hasExecLastIdCmd
183
+ ? [
184
+ factory . createImportSpecifier (
185
+ false ,
186
+ undefined ,
187
+ factory . createIdentifier ( "ResultSetHeader" )
188
+ ) ,
189
+ ]
190
+ : [ ] ) ,
181
191
] )
182
192
) ,
183
193
factory . createStringLiteral ( "mysql2/promise" ) ,
@@ -611,10 +621,114 @@ export function oneDecl(
611
621
) ;
612
622
}
613
623
624
+ export function execlastidDecl (
625
+ funcName : string ,
626
+ queryName : string ,
627
+ argIface : string | undefined ,
628
+ params : Parameter [ ]
629
+ ) {
630
+ const funcParams = funcParamsDecl ( argIface , params ) ;
631
+
632
+ return factory . createFunctionDeclaration (
633
+ [
634
+ factory . createToken ( SyntaxKind . ExportKeyword ) ,
635
+ factory . createToken ( SyntaxKind . AsyncKeyword ) ,
636
+ ] ,
637
+ undefined ,
638
+ factory . createIdentifier ( funcName ) ,
639
+ undefined ,
640
+ funcParams ,
641
+ factory . createTypeReferenceNode ( factory . createIdentifier ( "Promise" ) , [
642
+ factory . createTypeReferenceNode ( "number" , undefined ) ,
643
+ ] ) ,
644
+ factory . createBlock (
645
+ [
646
+ factory . createVariableStatement (
647
+ undefined ,
648
+ factory . createVariableDeclarationList (
649
+ [
650
+ factory . createVariableDeclaration (
651
+ factory . createArrayBindingPattern ( [
652
+ factory . createBindingElement (
653
+ undefined ,
654
+ undefined ,
655
+ factory . createIdentifier ( "result" ) ,
656
+ undefined
657
+ ) ,
658
+ ] ) ,
659
+ undefined ,
660
+ undefined ,
661
+ factory . createAwaitExpression (
662
+ factory . createCallExpression (
663
+ factory . createPropertyAccessExpression (
664
+ factory . createIdentifier ( "client" ) ,
665
+ factory . createIdentifier ( "query" )
666
+ ) ,
667
+ [
668
+ factory . createTypeReferenceNode (
669
+ factory . createIdentifier ( "ResultSetHeader" ) ,
670
+ undefined
671
+ ) ,
672
+ ] ,
673
+ [
674
+ factory . createObjectLiteralExpression (
675
+ [
676
+ factory . createPropertyAssignment (
677
+ factory . createIdentifier ( "sql" ) ,
678
+ factory . createIdentifier ( queryName )
679
+ ) ,
680
+ factory . createPropertyAssignment (
681
+ factory . createIdentifier ( "values" ) ,
682
+ factory . createArrayLiteralExpression (
683
+ params . map ( ( param , i ) =>
684
+ factory . createPropertyAccessExpression (
685
+ factory . createIdentifier ( "args" ) ,
686
+ factory . createIdentifier (
687
+ argName ( i , param . column )
688
+ )
689
+ )
690
+ ) ,
691
+ false
692
+ )
693
+ ) ,
694
+ ] ,
695
+ true
696
+ ) ,
697
+ ]
698
+ )
699
+ )
700
+ ) ,
701
+ ] ,
702
+ NodeFlags . Const |
703
+ // NodeFlags.Constant |
704
+ NodeFlags . AwaitContext |
705
+ // NodeFlags.Constant |
706
+ NodeFlags . ContextFlags |
707
+ NodeFlags . TypeExcludesFlags
708
+ )
709
+ ) ,
710
+ factory . createReturnStatement (
711
+ factory . createBinaryExpression (
712
+ factory . createPropertyAccessChain (
713
+ factory . createIdentifier ( "result" ) ,
714
+ factory . createToken ( SyntaxKind . QuestionDotToken ) ,
715
+ factory . createIdentifier ( "insertId" )
716
+ ) ,
717
+ factory . createToken ( SyntaxKind . QuestionQuestionToken ) ,
718
+ factory . createNumericLiteral ( 0 )
719
+ )
720
+ ) ,
721
+ ] ,
722
+ true
723
+ )
724
+ ) ;
725
+ }
726
+
614
727
export default {
615
728
columnType,
616
729
preamble,
617
730
execDecl,
618
731
manyDecl,
619
732
oneDecl,
733
+ execlastidDecl,
620
734
} ;
0 commit comments