2023-05-29 21:03:29 +00:00
|
|
|
// Copyright 2018 Google LLC
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
package checker
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/google/cel-go/checker/decls"
|
|
|
|
"github.com/google/cel-go/common/operators"
|
|
|
|
"github.com/google/cel-go/common/overloads"
|
|
|
|
|
|
|
|
exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
standardDeclarations []*exprpb.Decl
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
// Some shortcuts we use when building declarations.
|
|
|
|
paramA := decls.NewTypeParamType("A")
|
|
|
|
typeParamAList := []string{"A"}
|
|
|
|
listOfA := decls.NewListType(paramA)
|
|
|
|
paramB := decls.NewTypeParamType("B")
|
|
|
|
typeParamABList := []string{"A", "B"}
|
|
|
|
mapOfAB := decls.NewMapType(paramA, paramB)
|
|
|
|
|
|
|
|
var idents []*exprpb.Decl
|
|
|
|
for _, t := range []*exprpb.Type{
|
|
|
|
decls.Int, decls.Uint, decls.Bool,
|
|
|
|
decls.Double, decls.Bytes, decls.String} {
|
|
|
|
idents = append(idents,
|
|
|
|
decls.NewVar(FormatCheckedType(t), decls.NewTypeType(t)))
|
|
|
|
}
|
|
|
|
idents = append(idents,
|
|
|
|
decls.NewVar("list", decls.NewTypeType(listOfA)),
|
|
|
|
decls.NewVar("map", decls.NewTypeType(mapOfAB)),
|
|
|
|
decls.NewVar("null_type", decls.NewTypeType(decls.Null)),
|
|
|
|
decls.NewVar("type", decls.NewTypeType(decls.NewTypeType(nil))))
|
|
|
|
|
|
|
|
standardDeclarations = append(standardDeclarations, idents...)
|
|
|
|
standardDeclarations = append(standardDeclarations, []*exprpb.Decl{
|
|
|
|
// Booleans
|
|
|
|
decls.NewFunction(operators.Conditional,
|
|
|
|
decls.NewParameterizedOverload(overloads.Conditional,
|
|
|
|
[]*exprpb.Type{decls.Bool, paramA, paramA}, paramA,
|
|
|
|
typeParamAList)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.LogicalAnd,
|
|
|
|
decls.NewOverload(overloads.LogicalAnd,
|
|
|
|
[]*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.LogicalOr,
|
|
|
|
decls.NewOverload(overloads.LogicalOr,
|
|
|
|
[]*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.LogicalNot,
|
|
|
|
decls.NewOverload(overloads.LogicalNot,
|
|
|
|
[]*exprpb.Type{decls.Bool}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.NotStrictlyFalse,
|
|
|
|
decls.NewOverload(overloads.NotStrictlyFalse,
|
|
|
|
[]*exprpb.Type{decls.Bool}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Equals,
|
|
|
|
decls.NewParameterizedOverload(overloads.Equals,
|
|
|
|
[]*exprpb.Type{paramA, paramA}, decls.Bool,
|
|
|
|
typeParamAList)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.NotEquals,
|
|
|
|
decls.NewParameterizedOverload(overloads.NotEquals,
|
|
|
|
[]*exprpb.Type{paramA, paramA}, decls.Bool,
|
|
|
|
typeParamAList)),
|
|
|
|
|
|
|
|
// Algebra.
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Subtract,
|
|
|
|
decls.NewOverload(overloads.SubtractInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.SubtractUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.SubtractDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Double),
|
|
|
|
decls.NewOverload(overloads.SubtractTimestampTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Duration),
|
|
|
|
decls.NewOverload(overloads.SubtractTimestampDuration,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Duration}, decls.Timestamp),
|
|
|
|
decls.NewOverload(overloads.SubtractDurationDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Duration}, decls.Duration)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Multiply,
|
|
|
|
decls.NewOverload(overloads.MultiplyInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.MultiplyUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.MultiplyDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Double)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Divide,
|
|
|
|
decls.NewOverload(overloads.DivideInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.DivideUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.DivideDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Double)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Modulo,
|
|
|
|
decls.NewOverload(overloads.ModuloInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.ModuloUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Add,
|
|
|
|
decls.NewOverload(overloads.AddInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.AddUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.AddDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Double),
|
|
|
|
decls.NewOverload(overloads.AddString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.String),
|
|
|
|
decls.NewOverload(overloads.AddBytes,
|
|
|
|
[]*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bytes),
|
|
|
|
decls.NewParameterizedOverload(overloads.AddList,
|
|
|
|
[]*exprpb.Type{listOfA, listOfA}, listOfA,
|
|
|
|
typeParamAList),
|
|
|
|
decls.NewOverload(overloads.AddTimestampDuration,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Duration}, decls.Timestamp),
|
|
|
|
decls.NewOverload(overloads.AddDurationTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Timestamp}, decls.Timestamp),
|
|
|
|
decls.NewOverload(overloads.AddDurationDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Duration}, decls.Duration)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Negate,
|
|
|
|
decls.NewOverload(overloads.NegateInt64,
|
|
|
|
[]*exprpb.Type{decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.NegateDouble,
|
|
|
|
[]*exprpb.Type{decls.Double}, decls.Double)),
|
|
|
|
|
|
|
|
// Index.
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Index,
|
|
|
|
decls.NewParameterizedOverload(overloads.IndexList,
|
|
|
|
[]*exprpb.Type{listOfA, decls.Int}, paramA,
|
|
|
|
typeParamAList),
|
|
|
|
decls.NewParameterizedOverload(overloads.IndexMap,
|
|
|
|
[]*exprpb.Type{mapOfAB, paramA}, paramB,
|
|
|
|
typeParamABList)),
|
|
|
|
|
|
|
|
// Collections.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.Size,
|
|
|
|
decls.NewInstanceOverload(overloads.SizeStringInst,
|
|
|
|
[]*exprpb.Type{decls.String}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.SizeBytesInst,
|
|
|
|
[]*exprpb.Type{decls.Bytes}, decls.Int),
|
|
|
|
decls.NewParameterizedInstanceOverload(overloads.SizeListInst,
|
|
|
|
[]*exprpb.Type{listOfA}, decls.Int, typeParamAList),
|
|
|
|
decls.NewParameterizedInstanceOverload(overloads.SizeMapInst,
|
|
|
|
[]*exprpb.Type{mapOfAB}, decls.Int, typeParamABList),
|
|
|
|
decls.NewOverload(overloads.SizeString,
|
|
|
|
[]*exprpb.Type{decls.String}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.SizeBytes,
|
|
|
|
[]*exprpb.Type{decls.Bytes}, decls.Int),
|
|
|
|
decls.NewParameterizedOverload(overloads.SizeList,
|
|
|
|
[]*exprpb.Type{listOfA}, decls.Int, typeParamAList),
|
|
|
|
decls.NewParameterizedOverload(overloads.SizeMap,
|
|
|
|
[]*exprpb.Type{mapOfAB}, decls.Int, typeParamABList)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.In,
|
|
|
|
decls.NewParameterizedOverload(overloads.InList,
|
|
|
|
[]*exprpb.Type{paramA, listOfA}, decls.Bool,
|
|
|
|
typeParamAList),
|
|
|
|
decls.NewParameterizedOverload(overloads.InMap,
|
|
|
|
[]*exprpb.Type{paramA, mapOfAB}, decls.Bool,
|
|
|
|
typeParamABList)),
|
|
|
|
|
|
|
|
// Deprecated 'in()' function.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.DeprecatedIn,
|
|
|
|
decls.NewParameterizedOverload(overloads.InList,
|
|
|
|
[]*exprpb.Type{paramA, listOfA}, decls.Bool,
|
|
|
|
typeParamAList),
|
|
|
|
decls.NewParameterizedOverload(overloads.InMap,
|
|
|
|
[]*exprpb.Type{paramA, mapOfAB}, decls.Bool,
|
|
|
|
typeParamABList)),
|
|
|
|
|
|
|
|
// Conversions to type.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertType,
|
|
|
|
decls.NewParameterizedOverload(overloads.TypeConvertType,
|
|
|
|
[]*exprpb.Type{paramA}, decls.NewTypeType(paramA), typeParamAList)),
|
|
|
|
|
|
|
|
// Conversions to int.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertInt,
|
|
|
|
decls.NewOverload(overloads.IntToInt, []*exprpb.Type{decls.Int}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.UintToInt, []*exprpb.Type{decls.Uint}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.DoubleToInt, []*exprpb.Type{decls.Double}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.StringToInt, []*exprpb.Type{decls.String}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.TimestampToInt, []*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewOverload(overloads.DurationToInt, []*exprpb.Type{decls.Duration}, decls.Int)),
|
|
|
|
|
|
|
|
// Conversions to uint.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertUint,
|
|
|
|
decls.NewOverload(overloads.UintToUint, []*exprpb.Type{decls.Uint}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.IntToUint, []*exprpb.Type{decls.Int}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.DoubleToUint, []*exprpb.Type{decls.Double}, decls.Uint),
|
|
|
|
decls.NewOverload(overloads.StringToUint, []*exprpb.Type{decls.String}, decls.Uint)),
|
|
|
|
|
|
|
|
// Conversions to double.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertDouble,
|
|
|
|
decls.NewOverload(overloads.DoubleToDouble, []*exprpb.Type{decls.Double}, decls.Double),
|
|
|
|
decls.NewOverload(overloads.IntToDouble, []*exprpb.Type{decls.Int}, decls.Double),
|
|
|
|
decls.NewOverload(overloads.UintToDouble, []*exprpb.Type{decls.Uint}, decls.Double),
|
|
|
|
decls.NewOverload(overloads.StringToDouble, []*exprpb.Type{decls.String}, decls.Double)),
|
|
|
|
|
|
|
|
// Conversions to bool.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertBool,
|
|
|
|
decls.NewOverload(overloads.BoolToBool, []*exprpb.Type{decls.Bool}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.StringToBool, []*exprpb.Type{decls.String}, decls.Bool)),
|
|
|
|
|
|
|
|
// Conversions to string.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertString,
|
|
|
|
decls.NewOverload(overloads.StringToString, []*exprpb.Type{decls.String}, decls.String),
|
|
|
|
decls.NewOverload(overloads.BoolToString, []*exprpb.Type{decls.Bool}, decls.String),
|
|
|
|
decls.NewOverload(overloads.IntToString, []*exprpb.Type{decls.Int}, decls.String),
|
|
|
|
decls.NewOverload(overloads.UintToString, []*exprpb.Type{decls.Uint}, decls.String),
|
|
|
|
decls.NewOverload(overloads.DoubleToString, []*exprpb.Type{decls.Double}, decls.String),
|
|
|
|
decls.NewOverload(overloads.BytesToString, []*exprpb.Type{decls.Bytes}, decls.String),
|
|
|
|
decls.NewOverload(overloads.TimestampToString, []*exprpb.Type{decls.Timestamp}, decls.String),
|
|
|
|
decls.NewOverload(overloads.DurationToString, []*exprpb.Type{decls.Duration}, decls.String)),
|
|
|
|
|
|
|
|
// Conversions to bytes.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertBytes,
|
|
|
|
decls.NewOverload(overloads.BytesToBytes, []*exprpb.Type{decls.Bytes}, decls.Bytes),
|
|
|
|
decls.NewOverload(overloads.StringToBytes, []*exprpb.Type{decls.String}, decls.Bytes)),
|
|
|
|
|
|
|
|
// Conversions to timestamps.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertTimestamp,
|
|
|
|
decls.NewOverload(overloads.TimestampToTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Timestamp),
|
|
|
|
decls.NewOverload(overloads.StringToTimestamp,
|
|
|
|
[]*exprpb.Type{decls.String}, decls.Timestamp),
|
|
|
|
decls.NewOverload(overloads.IntToTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Int}, decls.Timestamp)),
|
|
|
|
|
|
|
|
// Conversions to durations.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertDuration,
|
|
|
|
decls.NewOverload(overloads.DurationToDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration}, decls.Duration),
|
|
|
|
decls.NewOverload(overloads.StringToDuration,
|
|
|
|
[]*exprpb.Type{decls.String}, decls.Duration),
|
|
|
|
decls.NewOverload(overloads.IntToDuration,
|
|
|
|
[]*exprpb.Type{decls.Int}, decls.Duration)),
|
|
|
|
|
|
|
|
// Conversions to Dyn.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TypeConvertDyn,
|
|
|
|
decls.NewParameterizedOverload(overloads.ToDyn,
|
|
|
|
[]*exprpb.Type{paramA}, decls.Dyn,
|
|
|
|
typeParamAList)),
|
|
|
|
|
|
|
|
// String functions.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.Contains,
|
|
|
|
decls.NewInstanceOverload(overloads.ContainsString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool)),
|
|
|
|
decls.NewFunction(overloads.EndsWith,
|
|
|
|
decls.NewInstanceOverload(overloads.EndsWithString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool)),
|
|
|
|
decls.NewFunction(overloads.Matches,
|
2023-08-17 05:15:28 +00:00
|
|
|
decls.NewOverload(overloads.Matches,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool),
|
2023-05-29 21:03:29 +00:00
|
|
|
decls.NewInstanceOverload(overloads.MatchesString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool)),
|
|
|
|
decls.NewFunction(overloads.StartsWith,
|
|
|
|
decls.NewInstanceOverload(overloads.StartsWithString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool)),
|
|
|
|
|
|
|
|
// Date/time functions.
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetFullYear,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToYear,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToYearWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetMonth,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToMonth,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToMonthWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetDayOfYear,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfYear,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfYearWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetDayOfMonth,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfMonthZeroBased,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfMonthZeroBasedWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetDate,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfMonthOneBased,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfMonthOneBasedWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetDayOfWeek,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfWeek,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToDayOfWeekWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetHours,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToHours,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToHoursWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.DurationToHours,
|
|
|
|
[]*exprpb.Type{decls.Duration}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetMinutes,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToMinutes,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToMinutesWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.DurationToMinutes,
|
|
|
|
[]*exprpb.Type{decls.Duration}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetSeconds,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToSeconds,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToSecondsWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.DurationToSeconds,
|
|
|
|
[]*exprpb.Type{decls.Duration}, decls.Int)),
|
|
|
|
|
|
|
|
decls.NewFunction(overloads.TimeGetMilliseconds,
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToMilliseconds,
|
|
|
|
[]*exprpb.Type{decls.Timestamp}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.TimestampToMillisecondsWithTz,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.String}, decls.Int),
|
|
|
|
decls.NewInstanceOverload(overloads.DurationToMilliseconds,
|
|
|
|
[]*exprpb.Type{decls.Duration}, decls.Int)),
|
|
|
|
|
|
|
|
// Relations.
|
|
|
|
decls.NewFunction(operators.Less,
|
|
|
|
decls.NewOverload(overloads.LessBool,
|
|
|
|
[]*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessInt64Double,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessInt64Uint64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessUint64Double,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessUint64Int64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessDoubleInt64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessDoubleUint64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessBytes,
|
|
|
|
[]*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.LessEquals,
|
|
|
|
decls.NewOverload(overloads.LessEqualsBool,
|
|
|
|
[]*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsInt64Double,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsInt64Uint64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsUint64Double,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsUint64Int64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsDoubleInt64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsDoubleUint64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsBytes,
|
|
|
|
[]*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.LessEqualsDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.Greater,
|
|
|
|
decls.NewOverload(overloads.GreaterBool,
|
|
|
|
[]*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterInt64Double,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterInt64Uint64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterUint64Double,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterUint64Int64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterDoubleInt64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterDoubleUint64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterBytes,
|
|
|
|
[]*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)),
|
|
|
|
|
|
|
|
decls.NewFunction(operators.GreaterEquals,
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsBool,
|
|
|
|
[]*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsInt64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsInt64Double,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsInt64Uint64,
|
|
|
|
[]*exprpb.Type{decls.Int, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsUint64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsUint64Double,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsUint64Int64,
|
|
|
|
[]*exprpb.Type{decls.Uint, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsDouble,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Double}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsDoubleInt64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Int}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsDoubleUint64,
|
|
|
|
[]*exprpb.Type{decls.Double, decls.Uint}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsString,
|
|
|
|
[]*exprpb.Type{decls.String, decls.String}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsBytes,
|
|
|
|
[]*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsTimestamp,
|
|
|
|
[]*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool),
|
|
|
|
decls.NewOverload(overloads.GreaterEqualsDuration,
|
|
|
|
[]*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)),
|
|
|
|
}...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// StandardDeclarations returns the Decls for all functions and constants in the evaluator.
|
|
|
|
func StandardDeclarations() []*exprpb.Decl {
|
|
|
|
return standardDeclarations
|
|
|
|
}
|