MCPcopy Create free account
hub / github.com/bytebase/bytebase / getAffectedRowsFromOceanBaseQueryPlan

Function getAffectedRowsFromOceanBaseQueryPlan

backend/plugin/db/mysql/stats.go:99–131  ·  view source on GitHub ↗
(planString string)

Source from the content-addressed store, hash-verified

97}
98
99func getAffectedRowsFromOceanBaseQueryPlan(planString string) (int64, error) {
100 var planValue map[string]json.RawMessage
101 if err := json.Unmarshal([]byte(planString), &planValue); err != nil {
102 return 0, errors.Wrapf(err, "failed to parse query plan from string: %+v", planString)
103 }
104 if len(planValue) == 0 {
105 return 0, nil
106 }
107 queryPlan := oceanBaseQueryPlan{}
108 if err := queryPlan.Unmarshal(planValue); err != nil {
109 return 0, errors.Wrapf(err, "failed to parse query plan from map: %+v", planValue)
110 }
111 if queryPlan.Operator != "" {
112 return queryPlan.EstRows, nil
113 }
114 count := int64(-1)
115 for k, v := range planValue {
116 if !strings.HasPrefix(k, "CHILD_") {
117 continue
118 }
119 child := oceanBaseQueryPlan{}
120 if err := child.Unmarshal(v); err != nil {
121 return 0, errors.Wrapf(err, "failed to parse field '%s', value: %+v", k, v)
122 }
123 if child.Operator != "" && child.EstRows > count {
124 count = child.EstRows
125 }
126 }
127 if count >= 0 {
128 return count, nil
129 }
130 return 0, nil
131}
132
133// oceanBaseQueryPlan represents the query plan of OceanBase.
134type oceanBaseQueryPlan struct {

Callers 1

Calls 1

UnmarshalMethod · 0.95

Tested by

no test coverage detected