(columns []string, values []string, args []interface{}, comparisonSign ValueComparisonSign)
| 201 | } |
| 202 | |
| 203 | func 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 | |
| 258 | func BuildRangePreparedComparison(columns *ColumnList, args []interface{}, comparisonSign ValueComparisonSign) (result string, explodedArgs []interface{}, err error) { |
| 259 | values := buildColumnsPreparedValues(columns) |
searching dependent graphs…