From 41fb45ac8a46542accc3c0328ba6fc85bbb81894 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Tue, 14 Jun 2022 10:45:21 +0530 Subject: [PATCH 1/6] feat: add functions for arithmetic, rounding, logarithmic, and string transformations --- extensions/functions_arithmetic.yaml | 96 +++++++++++++++++++++++ extensions/functions_comparison.yaml | 8 ++ extensions/functions_logarithmic.yaml | 63 +++++++++++++++ extensions/functions_rounding.yaml | 106 ++++++++++++++++++++++++++ extensions/functions_string.yaml | 23 +++++- 5 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 extensions/functions_logarithmic.yaml create mode 100644 extensions/functions_rounding.yaml diff --git a/extensions/functions_arithmetic.yaml b/extensions/functions_arithmetic.yaml index 00d7f84de..b43366f5a 100644 --- a/extensions/functions_arithmetic.yaml +++ b/extensions/functions_arithmetic.yaml @@ -153,6 +153,40 @@ scalar_functions: - value: fp64 - value: fp64 return: fp64 + - + name: "negate" + description: "Negation of the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i8 + return: i8 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i16 + return: i16 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i64 + return: i64 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: fp64 - name: "modulus" description: "Get the remainder when dividing one value by another." @@ -173,6 +207,68 @@ scalar_functions: - value: i64 - value: i64 return: i64 + - + name: "power" + description: "Take the power with the first value as the base and second as exponent" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i8 + - value: i8 + return: i8 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i16 + - value: i16 + return: i16 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i32 + - value: i32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i64 + - value: i64 + return: i64 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + - value: fp64 + return: fp64 + - + name: "sqrt" + description: "Square root of the value" + impls: + - args: + - value: i8 + return: fp32 + - args: + - value: i16 + return: fp32 + - args: + - value: i32 + return: fp32 + - args: + - value: i64 + return: fp64 + - args: + - value: fp32 + return: fp32 + - args: + - value: fp64 + return: fp64 aggregate_functions: - name: "sum" description: Sum a set of values. diff --git a/extensions/functions_comparison.yaml b/extensions/functions_comparison.yaml index ab7d118d6..76eaa6be7 100644 --- a/extensions/functions_comparison.yaml +++ b/extensions/functions_comparison.yaml @@ -73,4 +73,12 @@ scalar_functions: - value: any1 return: BOOLEAN nullability: DECLARED_OUTPUT + - + name: "is_nan" + description: Whether a value is not a number. + impls: + - args: + - value: any1 + return: BOOLEAN + nullability: DECLARED_OUTPUT diff --git a/extensions/functions_logarithmic.yaml b/extensions/functions_logarithmic.yaml new file mode 100644 index 000000000..25c6c552e --- /dev/null +++ b/extensions/functions_logarithmic.yaml @@ -0,0 +1,63 @@ +%YAML 1.2 +--- +scalar_functions: + - + name: "ln" + description: "Natural logarithm of the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: fp64 + - + name: "log10" + description: "Logarithm to base 10 of the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: fp64 + - + name: "log2" + description: "Logarithm to base 2 of the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: fp64 + - + name: "logb" + description: "Logarithm of the value with the given base" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + - value: fp64 + return: fp64 + + diff --git a/extensions/functions_rounding.yaml b/extensions/functions_rounding.yaml new file mode 100644 index 000000000..429d652bd --- /dev/null +++ b/extensions/functions_rounding.yaml @@ -0,0 +1,106 @@ +%YAML 1.2 +--- +scalar_functions: + - + name: "ceil" + description: "Rounding to the ceiling of the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i8 + return: i8 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i16 + return: i16 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i64 + return: i64 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: i64 + - + name: "floor" + description: "Rounding to the floor of the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i8 + return: i8 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i16 + return: i16 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i64 + return: i64 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: i64 + - + name: "round" + description: "Rounding off the value" + impls: + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i8 + return: i8 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i16 + return: i16 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i32 + return: i32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: i64 + return: i64 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp32 + return: fp32 + - args: + - options: [ SILENT, SATURATE, ERROR ] + required: false + - value: fp64 + return: fp64 + diff --git a/extensions/functions_string.yaml b/extensions/functions_string.yaml index 66b389301..201b24e36 100644 --- a/extensions/functions_string.yaml +++ b/extensions/functions_string.yaml @@ -44,7 +44,8 @@ scalar_functions: - value: i32 - value: i32 return: "string" - - name: starts_with + - + name: starts_with description: Whether this string starts with another string. impls: - args: @@ -163,3 +164,23 @@ scalar_functions: - value: "fixedchar" - value: "varchar" return: "BOOLEAN" + - + name: lower + description: Transforms the string to lower case characters + impls: + - args: + - value: "varchar" + return: "varchar" + - args: + - value: "string" + return: "string" + - + name: upper + description: Transforms the string to upper case characters + impls: + - args: + - value: "varchar" + return: "varchar" + - args: + - value: "string" + return: "string" From e87a1524fbb3d3d0d090d02628fb8a7383ea13a0 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Wed, 29 Jun 2022 10:20:08 +0530 Subject: [PATCH 2/6] feat: sqrt returns in fp64 only --- extensions/functions_arithmetic.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/functions_arithmetic.yaml b/extensions/functions_arithmetic.yaml index b43366f5a..7581fa2c3 100644 --- a/extensions/functions_arithmetic.yaml +++ b/extensions/functions_arithmetic.yaml @@ -253,13 +253,13 @@ scalar_functions: impls: - args: - value: i8 - return: fp32 + return: fp64 - args: - value: i16 - return: fp32 + return: fp64 - args: - value: i32 - return: fp32 + return: fp64 - args: - value: i64 return: fp64 From 5bcf8b1b2b49437366d572b11f6057720606dd39 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Wed, 29 Jun 2022 11:03:22 +0530 Subject: [PATCH 3/6] fix: ceil and floor on floating point only --- extensions/functions_rounding.yaml | 40 ------------------------------ 1 file changed, 40 deletions(-) diff --git a/extensions/functions_rounding.yaml b/extensions/functions_rounding.yaml index 429d652bd..02c055de5 100644 --- a/extensions/functions_rounding.yaml +++ b/extensions/functions_rounding.yaml @@ -5,26 +5,6 @@ scalar_functions: name: "ceil" description: "Rounding to the ceiling of the value" impls: - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i8 - return: i8 - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i16 - return: i16 - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i32 - return: i32 - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i64 - return: i64 - args: - options: [ SILENT, SATURATE, ERROR ] required: false @@ -39,26 +19,6 @@ scalar_functions: name: "floor" description: "Rounding to the floor of the value" impls: - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i8 - return: i8 - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i16 - return: i16 - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i32 - return: i32 - - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - - value: i64 - return: i64 - args: - options: [ SILENT, SATURATE, ERROR ] required: false From 31d8d7250394deb2031888d3cee1114d0f0d9d77 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Wed, 29 Jun 2022 11:13:00 +0530 Subject: [PATCH 4/6] feat: fixedchar in string transformations --- extensions/functions_rounding.yaml | 2 -- extensions/functions_string.yaml | 6 ++++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/extensions/functions_rounding.yaml b/extensions/functions_rounding.yaml index 02c055de5..22e7673ac 100644 --- a/extensions/functions_rounding.yaml +++ b/extensions/functions_rounding.yaml @@ -20,12 +20,10 @@ scalar_functions: description: "Rounding to the floor of the value" impls: - args: - - options: [ SILENT, SATURATE, ERROR ] required: false - value: fp32 return: i32 - args: - - options: [ SILENT, SATURATE, ERROR ] required: false - value: fp64 return: i64 diff --git a/extensions/functions_string.yaml b/extensions/functions_string.yaml index 201b24e36..a0de652d6 100644 --- a/extensions/functions_string.yaml +++ b/extensions/functions_string.yaml @@ -174,6 +174,9 @@ scalar_functions: - args: - value: "string" return: "string" + - args: + - value: "fixedchar" + return: "fixedchar" - name: upper description: Transforms the string to upper case characters @@ -184,3 +187,6 @@ scalar_functions: - args: - value: "string" return: "string" + - args: + - value: "fixedchar" + return: "fixedchar" From 8735b4e4923b5462629882282f60245e5b51f7ac Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Wed, 29 Jun 2022 11:21:39 +0530 Subject: [PATCH 5/6] fix: overflow on floating point negation --- extensions/functions_arithmetic.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/extensions/functions_arithmetic.yaml b/extensions/functions_arithmetic.yaml index 7581fa2c3..45b0b1bb0 100644 --- a/extensions/functions_arithmetic.yaml +++ b/extensions/functions_arithmetic.yaml @@ -178,13 +178,9 @@ scalar_functions: - value: i64 return: i64 - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - value: fp32 return: fp32 - args: - - options: [ SILENT, SATURATE, ERROR ] - required: false - value: fp64 return: fp64 - From 0042b79b85d858757d6d34377998602fd8c6a417 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Wed, 29 Jun 2022 11:28:30 +0530 Subject: [PATCH 6/6] fix: is_nan with only floating points --- extensions/functions_comparison.yaml | 6 ++++-- extensions/functions_rounding.yaml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/extensions/functions_comparison.yaml b/extensions/functions_comparison.yaml index 76eaa6be7..28e164371 100644 --- a/extensions/functions_comparison.yaml +++ b/extensions/functions_comparison.yaml @@ -78,7 +78,9 @@ scalar_functions: description: Whether a value is not a number. impls: - args: - - value: any1 + - value: fp32 + return: BOOLEAN + - args: + - value: fp64 return: BOOLEAN - nullability: DECLARED_OUTPUT diff --git a/extensions/functions_rounding.yaml b/extensions/functions_rounding.yaml index 22e7673ac..c5f56c56b 100644 --- a/extensions/functions_rounding.yaml +++ b/extensions/functions_rounding.yaml @@ -9,7 +9,7 @@ scalar_functions: - options: [ SILENT, SATURATE, ERROR ] required: false - value: fp32 - return: i32 + return: i64 - args: - options: [ SILENT, SATURATE, ERROR ] required: false