MCPcopy
hub / github.com/github/gh-ost / BuildRangeComparison

Function BuildRangeComparison

go/sql/builder.go:203–256  ·  view source on GitHub ↗
(columns []string, values []string, args []interface{}, comparisonSign ValueComparisonSign)

Source from the content-addressed store, hash-verified

201}
202
203func BuildRangeComparison(columns []string, values []string, args []interface{}, comparisonSign ValueComparisonSign) (result string, explodedArgs []interface{}, err error) {
204 if len(columns) == 0 {
205 return "", explodedArgs, fmt.Errorf("got 0 columns in BuildRangeComparison")
206 }
207 if len(columns) != len(values) {
208 return "", explodedArgs, fmt.Errorf("got %d columns but %d values in BuildRangeComparison", len(columns), len(values))
209 }
210 if len(columns) != len(args) {
211 return "", explodedArgs, fmt.Errorf("got %d columns but %d args in BuildRangeComparison", len(columns), len(args))
212 }
213 includeEquals := false
214 if comparisonSign == LessThanOrEqualsComparisonSign {
215 comparisonSign = LessThanComparisonSign
216 includeEquals = true
217 }
218 if comparisonSign == GreaterThanOrEqualsComparisonSign {
219 comparisonSign = GreaterThanComparisonSign
220 includeEquals = true
221 }
222 comparisons := []string{}
223
224 for i, column := range columns {
225 value := values[i]
226 rangeComparison, err := BuildValueComparison(column, value, comparisonSign)
227 if err != nil {
228 return "", explodedArgs, err
229 }
230 if i > 0 {
231 equalitiesComparison, err := BuildEqualsComparison(columns[0:i], values[0:i])
232 if err != nil {
233 return "", explodedArgs, err
234 }
235 comparison := fmt.Sprintf("(%s AND %s)", equalitiesComparison, rangeComparison)
236 comparisons = append(comparisons, comparison)
237 explodedArgs = append(explodedArgs, args[0:i]...)
238 explodedArgs = append(explodedArgs, args[i])
239 } else {
240 comparisons = append(comparisons, rangeComparison)
241 explodedArgs = append(explodedArgs, args[i])
242 }
243 }
244
245 if includeEquals {
246 comparison, err := BuildEqualsComparison(columns, values)
247 if err != nil {
248 return "", explodedArgs, err
249 }
250 comparisons = append(comparisons, comparison)
251 explodedArgs = append(explodedArgs, args...)
252 }
253 result = strings.Join(comparisons, " or ")
254 result = fmt.Sprintf("(%s)", result)
255 return result, explodedArgs, nil
256}
257
258func BuildRangePreparedComparison(columns *ColumnList, args []interface{}, comparisonSign ValueComparisonSign) (result string, explodedArgs []interface{}, err error) {
259 values := buildColumnsPreparedValues(columns)

Callers 3

TestBuildRangeComparisonFunction · 0.85
BuildRangeInsertQueryFunction · 0.85

Calls 3

BuildValueComparisonFunction · 0.85
BuildEqualsComparisonFunction · 0.85
ErrorfMethod · 0.65

Tested by 1

TestBuildRangeComparisonFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…