@@ -151,6 +151,26 @@ func (q Query) AddArgs(args *pyast.Arguments) {
151151 }
152152}
153153
154+ func (q Query ) ArgNodes () []* pyast.Node {
155+ args := []* pyast.Node {}
156+ i := 1
157+ for _ , a := range q .Args {
158+ if a .isEmpty () {
159+ continue
160+ }
161+ if a .IsStruct () {
162+ for _ , f := range a .Struct .Fields {
163+ args = append (args , typeRefNode (a .Name , f .Name ))
164+ i ++
165+ }
166+ } else {
167+ args = append (args , poet .Name (a .Name ))
168+ i ++
169+ }
170+ }
171+ return args
172+ }
173+
154174func (q Query ) ArgDictNode () * pyast.Node {
155175 dict := & pyast.Dict {}
156176 i := 1
@@ -612,11 +632,9 @@ func typeRefNode(base string, parts ...string) *pyast.Node {
612632 return n
613633}
614634
615- func connMethodNode (method , name string , arg * pyast.Node ) * pyast.Node {
635+ func connMethodNode (method , name string , params ... * pyast.Node ) * pyast.Node {
616636 args := []* pyast.Node {poet .Name (name )}
617- if arg != nil {
618- args = append (args , arg )
619- }
637+ args = append (args , params ... )
620638 return & pyast.Node {
621639 Node : & pyast.Node_Call {
622640 Call : & pyast.Call {
@@ -869,7 +887,7 @@ func buildQueryTree(ctx *pyTmplCtx, i *importer, source string) *pyast.Node {
869887
870888 switch q .Cmd {
871889 case ":one" :
872- fetchrow := connMethodNode ("fetchrow" , q .ConstantName , q .ArgDictNode () )
890+ fetchrow := connMethodNode ("fetchrow" , q .ConstantName , q .ArgNodes () ... )
873891 f .Body = append (f .Body ,
874892 assignNode ("row" , poet .Await (fetchrow )),
875893 poet .Node (
@@ -896,7 +914,7 @@ func buildQueryTree(ctx *pyTmplCtx, i *importer, source string) *pyast.Node {
896914 )
897915 f .Returns = subscriptNode ("Optional" , q .Ret .Annotation ())
898916 case ":many" :
899- cursor := connMethodNode ("cursor" , q .ConstantName , q .ArgDictNode () )
917+ cursor := connMethodNode ("cursor" , q .ConstantName , q .ArgNodes () ... )
900918 f .Body = append (f .Body ,
901919 poet .Node (
902920 & pyast.AsyncFor {
@@ -914,7 +932,7 @@ func buildQueryTree(ctx *pyTmplCtx, i *importer, source string) *pyast.Node {
914932 )
915933 f .Returns = subscriptNode ("AsyncIterator" , q .Ret .Annotation ())
916934 case ":exec" :
917- exec := connMethodNode ("execute" , q .ConstantName , q .ArgDictNode () )
935+ exec := connMethodNode ("execute" , q .ConstantName , q .ArgNodes () ... )
918936 f .Body = append (f .Body , poet .Await (exec ))
919937 f .Returns = poet .Constant (nil )
920938 default :
0 commit comments