@@ -10,6 +10,7 @@ import (
1010 "github.com/stackql/any-sdk/anysdk"
1111
1212 "github.com/stackql/any-sdk/pkg/logging"
13+ "github.com/stackql/any-sdk/pkg/streaming"
1314 "github.com/stackql/stackql/internal/stackql/acid/txn_context"
1415 "github.com/stackql/stackql/internal/stackql/astanalysis/routeanalysis"
1516 "github.com/stackql/stackql/internal/stackql/handler"
@@ -912,15 +913,19 @@ func (pgb *standardPlanGraphBuilder) handleInsert(pbi planbuilderinput.PlanBuild
912913 )
913914 bldrInput .SetDependencyNode (selectPrimitiveNode )
914915 bldrInput .SetCommentDirectives (primitiveGenerator .GetPrimitiveComposer ().GetCommentDirectives ())
915- bldrInput .SetIsAwait (primitiveGenerator .GetPrimitiveComposer ().IsAwait ())
916+ isAwait := primitiveGenerator .GetPrimitiveComposer ().IsAwait ()
917+ bldrInput .SetIsAwait (isAwait )
916918 bldrInput .SetParserNode (node )
917919 bldrInput .SetAnnotatedAST (pbi .GetAnnotatedAST ())
918920 bldrInput .SetTxnCtrlCtrs (pbi .GetTxnCtrlCtrs ())
919921 isPhysicalTable := tbl .IsPhysicalTable ()
920922 if isPhysicalTable {
921923 bldrInput .SetIsTargetPhysicalTable (true )
922924 }
923- var bldr primitivebuilder.Builder
925+ //nolint:stylecheck // not in the mood
926+ var bldr primitivebuilder.Builder = primitivebuilder .NewInsertOrUpdate (
927+ bldrInput ,
928+ )
924929 if len (node .SelectExprs ) > 0 {
925930 // Two cases:
926931 // 1. Synchronous. Equivalent to select.
@@ -939,16 +944,30 @@ func (pgb *standardPlanGraphBuilder) handleInsert(pbi planbuilderinput.PlanBuild
939944 return rcErr
940945 }
941946 bldrInput .SetTableInsertionContainer (rc )
942- bldr = primitivebuilder .NewSingleAcquireAndSelect (
947+ //nolint:stylecheck // not in the mood
948+ var returningBldr primitivebuilder.Builder = primitivebuilder .NewSingleAcquireAndSelect (
943949 bldrInput ,
944950 primitiveGenerator .GetPrimitiveComposer ().GetInsertPreparedStatementCtx (),
945951 primitiveGenerator .GetPrimitiveComposer ().GetSelectPreparedStatementCtx (),
946952 nil ,
947953 )
948- } else {
949- bldr = primitivebuilder .NewInsertOrUpdate (
950- bldrInput ,
951- )
954+ if ! isAwait {
955+ bldr = returningBldr
956+ } else {
957+ rhsBldr := primitivebuilder .NewSingleSelect (
958+ pgb .planGraphHolder ,
959+ handlerCtx ,
960+ primitiveGenerator .GetPrimitiveComposer ().GetSelectPreparedStatementCtx (),
961+ []tableinsertioncontainer.TableInsertionContainer {rc },
962+ nil ,
963+ streaming .NewNopMapStream (),
964+ )
965+ bldr = primitivebuilder .NewDependencySubDAGBuilder (
966+ pgb .planGraphHolder ,
967+ []primitivebuilder.Builder {bldr },
968+ rhsBldr ,
969+ )
970+ }
952971 }
953972 err = bldr .Build ()
954973 if err != nil {
0 commit comments