MCPcopy Create free account
hub / github.com/rilldata/rill / writeBinaryConditionInner

Method writeBinaryConditionInner

runtime/metricsview/astexpr.go:341–399  ·  view source on GitHub ↗
(left, right *Expression, leftOverride string, op Operator)

Source from the content-addressed store, hash-verified

339}
340
341func (b *sqlExprBuilder) writeBinaryConditionInner(left, right *Expression, leftOverride string, op Operator) error {
342 var joiner string
343 switch op {
344 case OperatorEq:
345 joiner = " = "
346 case OperatorNeq:
347 joiner = " != "
348 case OperatorLt:
349 joiner = " < "
350 case OperatorLte:
351 joiner = " <= "
352 case OperatorGt:
353 joiner = " > "
354 case OperatorGte:
355 joiner = " >= "
356 case OperatorIlike:
357 return b.writeILikeCondition(left, right, leftOverride, false)
358 case OperatorNilike:
359 return b.writeILikeCondition(left, right, leftOverride, true)
360 case OperatorIn:
361 return b.writeInCondition(left, right, leftOverride, false)
362 case OperatorNin:
363 return b.writeInCondition(left, right, leftOverride, true)
364 default:
365 return fmt.Errorf("invalid binary condition operator %q", op)
366 }
367
368 b.writeByte('(')
369
370 if leftOverride != "" {
371 b.writeParenthesizedString(leftOverride)
372 } else {
373 err := b.writeExpression(left)
374 if err != nil {
375 return err
376 }
377 }
378 if hasNilValue(right) {
379 // Special cases:
380 // "dim = NULL" should be written as "dim IS NULL"
381 // "dim != NULL" should be written as "dim IS NOT NULL"
382 if op == OperatorEq {
383 b.writeString(" IS NULL)")
384 return nil
385 } else if op == OperatorNeq {
386 b.writeString(" IS NOT NULL)")
387 return nil
388 }
389 }
390 b.writeString(joiner)
391 err := b.writeExpression(right)
392 if err != nil {
393 return err
394 }
395
396 b.writeByte(')')
397
398 return nil

Callers 1

writeBinaryConditionMethod · 0.95

Calls 8

writeILikeConditionMethod · 0.95
writeInConditionMethod · 0.95
writeByteMethod · 0.95
writeExpressionMethod · 0.95
writeStringMethod · 0.95
hasNilValueFunction · 0.85
ErrorfMethod · 0.65

Tested by

no test coverage detected