@@ -2,7 +2,7 @@ import { SyntaxKind, NodeFlags, TypeNode, factory } from "typescript";
22
33// import { writeFileSync, STDIO } from "javy/fs";
44
5- import { Parameter , Column } from "../gen/plugin/codegen_pb" ;
5+ import { Parameter , Column , Query } from "../gen/plugin/codegen_pb" ;
66import { argName , colName } from "./utlis" ;
77
88export function columnType ( column ?: Column ) : TypeNode {
@@ -165,7 +165,8 @@ export function columnType(column?: Column): TypeNode {
165165 ] ) ;
166166}
167167
168- export function preamble ( queries : unknown ) {
168+ export function preamble ( queries : Query [ ] ) {
169+ const hasExecLastIdCmd = queries . some ( ( query ) => query . cmd === ":execlastid" ) ;
169170 return [
170171 factory . createImportDeclaration (
171172 undefined ,
@@ -178,6 +179,15 @@ export function preamble(queries: unknown) {
178179 undefined ,
179180 factory . createIdentifier ( "RowDataPacket" )
180181 ) ,
182+ ...( hasExecLastIdCmd
183+ ? [
184+ factory . createImportSpecifier (
185+ false ,
186+ undefined ,
187+ factory . createIdentifier ( "ResultSetHeader" )
188+ ) ,
189+ ]
190+ : [ ] ) ,
181191 ] )
182192 ) ,
183193 factory . createStringLiteral ( "mysql2/promise" ) ,
@@ -611,10 +621,114 @@ export function oneDecl(
611621 ) ;
612622}
613623
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+
614727export default {
615728 columnType,
616729 preamble,
617730 execDecl,
618731 manyDecl,
619732 oneDecl,
733+ execlastidDecl,
620734} ;
0 commit comments