MCPcopy
hub / github.com/dosco/graphjin / execute

Method execute

core/gstate.go:658–912  ·  view source on GitHub ↗
(c context.Context, conn *sql.Conn)

Source from the content-addressed store, hash-verified

656}
657
658func (s *gstate) execute(c context.Context, conn *sql.Conn) (err error) {
659
660 if err = s.validateAndUpdateVars(c); err != nil {
661 return
662 }
663
664 if s.cs.st.qc != nil {
665 for i := range s.cs.st.qc.Selects {
666 if msg := s.cs.st.qc.Selects[i].PartitionFilterRequired; msg != "" {
667 return errors.New(msg)
668 }
669 }
670 }
671
672 var args args
673 if args, err = s.argList(c); err != nil {
674 return
675 }
676
677 cs := s.cs
678 dbType := s.getTargetDBCtx().dbtype
679
680 // Use Dialect to check for multi-statement scripts (e.g., SQLite)
681 dialect := s.getTargetPsqlCompiler().GetDialect()
682 parts := dialect.SplitQuery(cs.st.sql)
683
684 if len(parts) > 1 {
685 // Multi-statement script execution
686 c1, span := s.gj.spanStart(c, "Execute Script")
687 defer span.End()
688
689 argIdx := 0
690 for i, stmt := range parts {
691 // Count parameters (?) in this statement to slice arguments
692 nParams := strings.Count(stmt, "?")
693 var stmtArgs []interface{}
694
695 if nParams > 0 {
696 if argIdx+nParams > len(args.values) {
697 span.Error(fmt.Errorf("script: not enough arguments for statement %d", i))
698 return fmt.Errorf("script: not enough arguments")
699 }
700 stmtArgs = args.values[argIdx : argIdx+nParams]
701 argIdx += nParams
702 }
703
704 stmt, stmtArgs, err = prepareQueryArgsForDB(s.getTargetDBCtx().dbtype, stmt, stmtArgs)
705 if err != nil {
706 span.Error(err)
707 return err
708 }
709
710 upperStmt := strings.ToUpper(strings.TrimSpace(stmt))
711
712 isReturning := strings.Contains(upperStmt, "RETURNING")
713 isSelect := (strings.HasPrefix(upperStmt, "SELECT") && !strings.Contains(upperStmt, " INTO ")) || strings.HasPrefix(upperStmt, "WITH")
714
715 // Check for @gj_ids hint

Callers 1

compileAndExecuteMethod · 0.95

Calls 15

validateAndUpdateVarsMethod · 0.95
argListMethod · 0.95
getTargetDBCtxMethod · 0.95
getTargetPsqlCompilerMethod · 0.95
txMethod · 0.95
CloseMethod · 0.95
NextMethod · 0.95
dbFragmentKeyMethod · 0.95
fragmentCacheGetMethod · 0.95
fragmentCacheSetMethod · 0.95
prepareQueryArgsForDBFunction · 0.85

Tested by

no test coverage detected