MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / PutExpression

Function PutExpression

pkg/sql/ast/pool.go:862–1123  ·  view source on GitHub ↗

PutExpression returns any Expression to the appropriate pool with iterative cleanup. PutExpression is the primary function for returning expression nodes to their respective pools. It handles all expression types and uses iterative cleanup to prevent stack overflow with deeply nested expression tre

(expr Expression)

Source from the content-addressed store, hash-verified

860//
861// See also: GetBinaryExpression(), GetFunctionCall(), GetIdentifier()
862func PutExpression(expr Expression) {
863 if expr == nil {
864 return
865 }
866
867 // Use a work queue for iterative cleanup instead of recursion
868 workQueue := make([]Expression, 0, 32)
869 workQueue = append(workQueue, expr)
870
871 processed := 0
872 for len(workQueue) > 0 && processed < MaxWorkQueueSize {
873 // Pop from queue
874 current := workQueue[len(workQueue)-1]
875 workQueue = workQueue[:len(workQueue)-1]
876 processed++
877
878 if current == nil {
879 continue
880 }
881
882 // Process and collect child expressions
883 switch e := current.(type) {
884 case *Identifier:
885 e.Name = ""
886 identifierPool.Put(e)
887
888 case *BinaryExpression:
889 if e.Left != nil {
890 workQueue = append(workQueue, e.Left)
891 }
892 if e.Right != nil {
893 workQueue = append(workQueue, e.Right)
894 }
895 e.Left = nil
896 e.Right = nil
897 e.Operator = ""
898 binaryExprPool.Put(e)
899
900 case *LiteralValue:
901 e.Value = nil
902 e.Type = ""
903 literalValuePool.Put(e)
904
905 case *FunctionCall:
906 for i := range e.Arguments {
907 if e.Arguments[i] != nil {
908 workQueue = append(workQueue, e.Arguments[i])
909 }
910 e.Arguments[i] = nil
911 }
912 e.Arguments = e.Arguments[:0]
913 e.Name = ""
914 e.Over = nil
915 e.Distinct = false
916 e.Filter = nil
917 functionCallPool.Put(e)
918
919 case *CaseExpression:

Callers 15

TestPutExpressionFunction · 0.85
PutInsertStatementFunction · 0.85
PutUpdateStatementFunction · 0.85
PutDeleteStatementFunction · 0.85
PutUpdateExpressionFunction · 0.85
PutSelectStatementFunction · 0.85
PutBinaryExpressionFunction · 0.85
PutExpressionSliceFunction · 0.85
PutFunctionCallFunction · 0.85
PutCaseExpressionFunction · 0.85

Calls 1

PutMethod · 0.80

Tested by 4

TestPutExpressionFunction · 0.68
BenchmarkPutExpressionFunction · 0.68