| // 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 overloads defines the internal overload identifiers for function and |
| // operator overloads. |
| package overloads |
| |
| // Boolean logic overloads |
| const ( |
| Conditional = "conditional" |
| LogicalAnd = "logical_and" |
| LogicalOr = "logical_or" |
| LogicalNot = "logical_not" |
| NotStrictlyFalse = "not_strictly_false" |
| Equals = "equals" |
| NotEquals = "not_equals" |
| LessBool = "less_bool" |
| LessInt64 = "less_int64" |
| LessInt64Double = "less_int64_double" |
| LessInt64Uint64 = "less_int64_uint64" |
| LessUint64 = "less_uint64" |
| LessUint64Double = "less_uint64_double" |
| LessUint64Int64 = "less_uint64_int64" |
| LessDouble = "less_double" |
| LessDoubleInt64 = "less_double_int64" |
| LessDoubleUint64 = "less_double_uint64" |
| LessString = "less_string" |
| LessBytes = "less_bytes" |
| LessTimestamp = "less_timestamp" |
| LessDuration = "less_duration" |
| LessEqualsBool = "less_equals_bool" |
| LessEqualsInt64 = "less_equals_int64" |
| LessEqualsInt64Double = "less_equals_int64_double" |
| LessEqualsInt64Uint64 = "less_equals_int64_uint64" |
| LessEqualsUint64 = "less_equals_uint64" |
| LessEqualsUint64Double = "less_equals_uint64_double" |
| LessEqualsUint64Int64 = "less_equals_uint64_int64" |
| LessEqualsDouble = "less_equals_double" |
| LessEqualsDoubleInt64 = "less_equals_double_int64" |
| LessEqualsDoubleUint64 = "less_equals_double_uint64" |
| LessEqualsString = "less_equals_string" |
| LessEqualsBytes = "less_equals_bytes" |
| LessEqualsTimestamp = "less_equals_timestamp" |
| LessEqualsDuration = "less_equals_duration" |
| GreaterBool = "greater_bool" |
| GreaterInt64 = "greater_int64" |
| GreaterInt64Double = "greater_int64_double" |
| GreaterInt64Uint64 = "greater_int64_uint64" |
| GreaterUint64 = "greater_uint64" |
| GreaterUint64Double = "greater_uint64_double" |
| GreaterUint64Int64 = "greater_uint64_int64" |
| GreaterDouble = "greater_double" |
| GreaterDoubleInt64 = "greater_double_int64" |
| GreaterDoubleUint64 = "greater_double_uint64" |
| GreaterString = "greater_string" |
| GreaterBytes = "greater_bytes" |
| GreaterTimestamp = "greater_timestamp" |
| GreaterDuration = "greater_duration" |
| GreaterEqualsBool = "greater_equals_bool" |
| GreaterEqualsInt64 = "greater_equals_int64" |
| GreaterEqualsInt64Double = "greater_equals_int64_double" |
| GreaterEqualsInt64Uint64 = "greater_equals_int64_uint64" |
| GreaterEqualsUint64 = "greater_equals_uint64" |
| GreaterEqualsUint64Double = "greater_equals_uint64_double" |
| GreaterEqualsUint64Int64 = "greater_equals_uint64_int64" |
| GreaterEqualsDouble = "greater_equals_double" |
| GreaterEqualsDoubleInt64 = "greater_equals_double_int64" |
| GreaterEqualsDoubleUint64 = "greater_equals_double_uint64" |
| GreaterEqualsString = "greater_equals_string" |
| GreaterEqualsBytes = "greater_equals_bytes" |
| GreaterEqualsTimestamp = "greater_equals_timestamp" |
| GreaterEqualsDuration = "greater_equals_duration" |
| ) |
| |
| // Math overloads |
| const ( |
| AddInt64 = "add_int64" |
| AddUint64 = "add_uint64" |
| AddDouble = "add_double" |
| AddString = "add_string" |
| AddBytes = "add_bytes" |
| AddList = "add_list" |
| AddTimestampDuration = "add_timestamp_duration" |
| AddDurationTimestamp = "add_duration_timestamp" |
| AddDurationDuration = "add_duration_duration" |
| SubtractInt64 = "subtract_int64" |
| SubtractUint64 = "subtract_uint64" |
| SubtractDouble = "subtract_double" |
| SubtractTimestampTimestamp = "subtract_timestamp_timestamp" |
| SubtractTimestampDuration = "subtract_timestamp_duration" |
| SubtractDurationDuration = "subtract_duration_duration" |
| MultiplyInt64 = "multiply_int64" |
| MultiplyUint64 = "multiply_uint64" |
| MultiplyDouble = "multiply_double" |
| DivideInt64 = "divide_int64" |
| DivideUint64 = "divide_uint64" |
| DivideDouble = "divide_double" |
| ModuloInt64 = "modulo_int64" |
| ModuloUint64 = "modulo_uint64" |
| NegateInt64 = "negate_int64" |
| NegateDouble = "negate_double" |
| ) |
| |
| // Index overloads |
| const ( |
| IndexList = "index_list" |
| IndexMap = "index_map" |
| IndexMessage = "index_message" // TODO: introduce concept of types.Message |
| ) |
| |
| // In operators |
| const ( |
| DeprecatedIn = "in" |
| InList = "in_list" |
| InMap = "in_map" |
| InMessage = "in_message" // TODO: introduce concept of types.Message |
| ) |
| |
| // Size overloads |
| const ( |
| Size = "size" |
| SizeString = "size_string" |
| SizeBytes = "size_bytes" |
| SizeList = "size_list" |
| SizeMap = "size_map" |
| SizeStringInst = "string_size" |
| SizeBytesInst = "bytes_size" |
| SizeListInst = "list_size" |
| SizeMapInst = "map_size" |
| ) |
| |
| // String function names. |
| const ( |
| Contains = "contains" |
| EndsWith = "endsWith" |
| Matches = "matches" |
| StartsWith = "startsWith" |
| ) |
| |
| // Extension function overloads with complex behaviors that need to be referenced in runtime and static analysis cost computations. |
| const ( |
| ExtQuoteString = "strings_quote" |
| ) |
| |
| // String function overload names. |
| const ( |
| ContainsString = "contains_string" |
| EndsWithString = "ends_with_string" |
| MatchesString = "matches_string" |
| StartsWithString = "starts_with_string" |
| ) |
| |
| // Extension function overloads with complex behaviors that need to be referenced in runtime and static analysis cost computations. |
| const ( |
| ExtFormatString = "string_format" |
| ) |
| |
| // Time-based functions. |
| const ( |
| TimeGetFullYear = "getFullYear" |
| TimeGetMonth = "getMonth" |
| TimeGetDayOfYear = "getDayOfYear" |
| TimeGetDate = "getDate" |
| TimeGetDayOfMonth = "getDayOfMonth" |
| TimeGetDayOfWeek = "getDayOfWeek" |
| TimeGetHours = "getHours" |
| TimeGetMinutes = "getMinutes" |
| TimeGetSeconds = "getSeconds" |
| TimeGetMilliseconds = "getMilliseconds" |
| ) |
| |
| // Timestamp overloads for time functions without timezones. |
| const ( |
| TimestampToYear = "timestamp_to_year" |
| TimestampToMonth = "timestamp_to_month" |
| TimestampToDayOfYear = "timestamp_to_day_of_year" |
| TimestampToDayOfMonthZeroBased = "timestamp_to_day_of_month" |
| TimestampToDayOfMonthOneBased = "timestamp_to_day_of_month_1_based" |
| TimestampToDayOfWeek = "timestamp_to_day_of_week" |
| TimestampToHours = "timestamp_to_hours" |
| TimestampToMinutes = "timestamp_to_minutes" |
| TimestampToSeconds = "timestamp_to_seconds" |
| TimestampToMilliseconds = "timestamp_to_milliseconds" |
| ) |
| |
| // Timestamp overloads for time functions with timezones. |
| const ( |
| TimestampToYearWithTz = "timestamp_to_year_with_tz" |
| TimestampToMonthWithTz = "timestamp_to_month_with_tz" |
| TimestampToDayOfYearWithTz = "timestamp_to_day_of_year_with_tz" |
| TimestampToDayOfMonthZeroBasedWithTz = "timestamp_to_day_of_month_with_tz" |
| TimestampToDayOfMonthOneBasedWithTz = "timestamp_to_day_of_month_1_based_with_tz" |
| TimestampToDayOfWeekWithTz = "timestamp_to_day_of_week_with_tz" |
| TimestampToHoursWithTz = "timestamp_to_hours_with_tz" |
| TimestampToMinutesWithTz = "timestamp_to_minutes_with_tz" |
| TimestampToSecondsWithTz = "timestamp_to_seconds_tz" |
| TimestampToMillisecondsWithTz = "timestamp_to_milliseconds_with_tz" |
| ) |
| |
| // Duration overloads for time functions. |
| const ( |
| DurationToHours = "duration_to_hours" |
| DurationToMinutes = "duration_to_minutes" |
| DurationToSeconds = "duration_to_seconds" |
| DurationToMilliseconds = "duration_to_milliseconds" |
| ) |
| |
| // Type conversion methods and overloads |
| const ( |
| TypeConvertInt = "int" |
| TypeConvertUint = "uint" |
| TypeConvertDouble = "double" |
| TypeConvertBool = "bool" |
| TypeConvertString = "string" |
| TypeConvertBytes = "bytes" |
| TypeConvertTimestamp = "timestamp" |
| TypeConvertDuration = "duration" |
| TypeConvertType = "type" |
| TypeConvertDyn = "dyn" |
| ) |
| |
| // Int conversion functions. |
| const ( |
| IntToInt = "int64_to_int64" |
| UintToInt = "uint64_to_int64" |
| DoubleToInt = "double_to_int64" |
| StringToInt = "string_to_int64" |
| TimestampToInt = "timestamp_to_int64" |
| DurationToInt = "duration_to_int64" |
| ) |
| |
| // Uint conversion functions. |
| const ( |
| UintToUint = "uint64_to_uint64" |
| IntToUint = "int64_to_uint64" |
| DoubleToUint = "double_to_uint64" |
| StringToUint = "string_to_uint64" |
| ) |
| |
| // Double conversion functions. |
| const ( |
| DoubleToDouble = "double_to_double" |
| IntToDouble = "int64_to_double" |
| UintToDouble = "uint64_to_double" |
| StringToDouble = "string_to_double" |
| ) |
| |
| // Bool conversion functions. |
| const ( |
| BoolToBool = "bool_to_bool" |
| StringToBool = "string_to_bool" |
| ) |
| |
| // Bytes conversion functions. |
| const ( |
| BytesToBytes = "bytes_to_bytes" |
| StringToBytes = "string_to_bytes" |
| ) |
| |
| // String conversion functions. |
| const ( |
| StringToString = "string_to_string" |
| BoolToString = "bool_to_string" |
| IntToString = "int64_to_string" |
| UintToString = "uint64_to_string" |
| DoubleToString = "double_to_string" |
| BytesToString = "bytes_to_string" |
| TimestampToString = "timestamp_to_string" |
| DurationToString = "duration_to_string" |
| ) |
| |
| // Timestamp conversion functions |
| const ( |
| TimestampToTimestamp = "timestamp_to_timestamp" |
| StringToTimestamp = "string_to_timestamp" |
| IntToTimestamp = "int64_to_timestamp" |
| ) |
| |
| // Convert duration from string |
| const ( |
| DurationToDuration = "duration_to_duration" |
| StringToDuration = "string_to_duration" |
| ) |
| |
| // Convert to dyn |
| const ( |
| ToDyn = "to_dyn" |
| ) |
| |
| // Comprehensions helper methods, not directly accessible via a developer. |
| const ( |
| Iterator = "@iterator" |
| HasNext = "@hasNext" |
| Next = "@next" |
| ) |
| |
| // IsTypeConversionFunction returns whether the input function is a standard library type |
| // conversion function. |
| func IsTypeConversionFunction(function string) bool { |
| switch function { |
| case TypeConvertBool, |
| TypeConvertBytes, |
| TypeConvertDouble, |
| TypeConvertDuration, |
| TypeConvertDyn, |
| TypeConvertInt, |
| TypeConvertString, |
| TypeConvertTimestamp, |
| TypeConvertType, |
| TypeConvertUint: |
| return true |
| default: |
| return false |
| } |
| } |