From 55092bede1a3293fbe35b87cf1c716f8e0f9f96f Mon Sep 17 00:00:00 2001 From: Yao Zongyou Date: Wed, 26 Jun 2019 02:05:37 +0800 Subject: [PATCH] add timestamp compare support (#7832) --- pkg/s3select/sql/value.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pkg/s3select/sql/value.go b/pkg/s3select/sql/value.go index d2983be37..501a47b3e 100644 --- a/pkg/s3select/sql/value.go +++ b/pkg/s3select/sql/value.go @@ -340,6 +340,12 @@ func (v *Value) compareOp(op string, a *Value) (res bool, err error) { return boolCompare(op, boolV, boolA) } + timestampV, ok1t := v.ToTimestamp() + timestampA, ok2t := a.ToTimestamp() + if ok1t && ok2t { + return timestampCompare(op, timestampV, timestampA), nil + } + return false, errCmpMismatchedTypes } @@ -721,6 +727,25 @@ func boolCompare(op string, left, right bool) (bool, error) { } } +func timestampCompare(op string, left, right time.Time) bool { + switch op { + case opLt: + return left.Before(right) + case opLte: + return left.Before(right) || left.Equal(right) + case opGt: + return left.After(right) + case opGte: + return left.After(right) || left.Equal(right) + case opEq: + return left.Equal(right) + case opIneq: + return !left.Equal(right) + } + // This case does not happen + return false +} + func isValidArithOperator(op string) bool { switch op { case opPlus: