From eb2a894cf490fc49fc8169f2903dedc0eb813814 Mon Sep 17 00:00:00 2001 From: comphead Date: Fri, 26 Apr 2024 08:44:39 -0700 Subject: [PATCH 1/9] Coverage: Add a manual test for DF supporting Spark expressions directly --- doc/spark_builtin_expr_df_coverage.txt | 419 ++++++++++++++++++ .../comet/CometExpressionCoverageSuite.scala | 120 ++++- 2 files changed, 530 insertions(+), 9 deletions(-) create mode 100644 doc/spark_builtin_expr_df_coverage.txt diff --git a/doc/spark_builtin_expr_df_coverage.txt b/doc/spark_builtin_expr_df_coverage.txt new file mode 100644 index 0000000000..6f401f0b5c --- /dev/null +++ b/doc/spark_builtin_expr_df_coverage.txt @@ -0,0 +1,419 @@ ++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +|name |details | ++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +|! |{FAILED, [{SELECT ! true;, std_err: SQL error: ParserError("Expected an expression:, found: !")\n}]} | +|% |{PASSED, [{SELECT 2 % 1.8;, OK}]} | +|& |{PASSED, [{SELECT 3 & 5;, OK}]} | +|* |{PASSED, [{SELECT 2 * 3;, OK}]} | +|+ |{PASSED, [{SELECT 1 + 2;, OK}]} | +|- |{PASSED, [{SELECT 2 - 1;, OK}]} | +|/ |{PASSED, [{SELECT 3 / 2;, OK}]} | +|< |{PASSED, [{SELECT 1 < 2;, OK}]} | +|<= |{PASSED, [{SELECT 2 <= 2;, OK}]} | +|<=> |{FAILED, [{SELECT 2 <=> 2;, std_err: This feature is not implemented: Unsupported SQL binary operator Spaceship\n}]} | +|= |{PASSED, [{SELECT 2 = 2;, OK}]} | +|== |{PASSED, [{SELECT 2 == 2;, OK}]} | +|> |{PASSED, [{SELECT 2 > 1;, OK}]} | +|>= |{PASSED, [{SELECT 2 >= 1;, OK}]} | +|^ |{PASSED, [{SELECT 3 ^ 5;, OK}]} | +|abs |{PASSED, [{SELECT abs(-1);, OK}]} | +|acos |{PASSED, [{SELECT acos(1);, OK}]} | +|acosh |{PASSED, [{SELECT acosh(1);, OK}]} | +|add_months |{FAILED, [{SELECT add_months('2016-08-31', 1);, std_err: Error during planning: Invalid function 'add_months'.\nDid you mean 'radians'?\n}]} | +|aes_decrypt |{FAILED, [{SELECT aes_decrypt(unhex('83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94'), '0000111122223333');, std_err: Error during planning: Invalid function 'aes_decrypt'.\nDid you mean 'list_except'?\n}]} | +|aes_encrypt |{FAILED, [{SELECT hex(aes_encrypt('Spark', '0000111122223333'));, std_err: Error during planning: Invalid function 'hex'.\nDid you mean 'exp'?\n}]} | +|aggregate |{FAILED, [{SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|and |{PASSED, [{SELECT true and true;, OK}]} | +|any |{FAILED, [{SELECT any(col) FROM VALUES (true), (false), (false) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'any'.\nDid you mean 'abs'?\n}]} | +|any_value |{FAILED, [{SELECT any_value(col) FROM VALUES (10), (5), (20) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'any_value'.\nDid you mean 'LAST_VALUE'?\n}]} | +|approx_count_distinct |{FAILED, [{SELECT approx_count_distinct(col1) FROM VALUES (1), (1), (2), (2), (3) tab(col1);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'approx_count_distinct'.\nDid you mean 'APPROX_DISTINCT'?\n}]} | +|approx_percentile |{FAILED, [{SELECT approx_percentile(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 0.5")\n}]} | +|array |{FAILED, [{SELECT array(1, 2, 3);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_agg |{PASSED, [{SELECT array_agg(col) FROM VALUES (1), (2), (1) AS tab(col);, OK}]} | +|array_append |{FAILED, [{SELECT array_append(array('b', 'd', 'c', 'a'), 'd');, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | +|array_compact |{FAILED, [{SELECT array_compact(array(1, 2, 3, null));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_contains |{FAILED, [{SELECT array_contains(array(1, 2, 3), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_distinct |{FAILED, [{SELECT array_distinct(array(1, 2, 3, null, 3));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_except |{FAILED, [{SELECT array_except(array(1, 2, 3), array(1, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_insert |{FAILED, [{SELECT array_insert(array(1, 2, 3, 4), 5, 5);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_intersect |{FAILED, [{SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_join |{FAILED, [{SELECT array_join(array('hello', 'world'), ' ');, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'hello'")\n}]} | +|array_max |{FAILED, [{SELECT array_max(array(1, 20, null, 3));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_min |{FAILED, [{SELECT array_min(array(1, 20, null, 3));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_position |{FAILED, [{SELECT array_position(array(3, 2, 1), 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 3")\n}]} | +|array_remove |{FAILED, [{SELECT array_remove(array(1, 2, 3, null, 3), 3);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|array_repeat |{PASSED, [{SELECT array_repeat('123', 2);, OK}]} | +|array_size |{FAILED, [{SELECT array_size(array('b', 'd', 'c', 'a'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | +|array_sort |{FAILED, [{SELECT array_sort(array(5, 6, 1), (left, right) -> case when left < right then -1 when left > right then 1 else 0 end);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 5")\n}]} | +|array_union |{FAILED, [{SELECT array_union(array(1, 2, 3), array(1, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|arrays_overlap |{FAILED, [{SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|arrays_zip |{FAILED, [{SELECT arrays_zip(array(1, 2, 3), array(2, 3, 4));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|ascii |{PASSED, [{SELECT ascii('222');, OK}]} | +|asin |{PASSED, [{SELECT asin(0);, OK}]} | +|asinh |{PASSED, [{SELECT asinh(0);, OK}]} | +|assert_true |{FAILED, [{SELECT assert_true(0 < 1);, std_err: Error during planning: Invalid function 'assert_true'.\nDid you mean 'date_trunc'?\n}]} | +|atan |{PASSED, [{SELECT atan(0);, OK}]} | +|atan2 |{PASSED, [{SELECT atan2(0, 0);, OK}]} | +|atanh |{PASSED, [{SELECT atanh(0);, OK}]} | +|avg |{PASSED, [{SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|base64 |{FAILED, [{SELECT base64('Spark SQL');, std_err: Error during planning: Invalid function 'base64'.\nDid you mean 'asin'?\n}]} | +|bigint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|bin |{FAILED, [{SELECT bin(13);, std_err: Error during planning: Invalid function 'bin'.\nDid you mean 'sin'?\n}]} | +|binary |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|bit_and |{PASSED, [{SELECT bit_and(col) FROM VALUES (3), (5) AS tab(col);, OK}]} | +|bit_count |{FAILED, [{SELECT bit_count(0);, std_err: Error during planning: Invalid function 'bit_count'.\nDid you mean 'COUNT'?\n}]} | +|bit_get |{FAILED, [{SELECT bit_get(11, 0);, std_err: Error during planning: Invalid function 'bit_get'.\nDid you mean 'BIT_AND'?\n}]} | +|bit_length |{PASSED, [{SELECT bit_length('Spark SQL');, OK}]} | +|bit_or |{PASSED, [{SELECT bit_or(col) FROM VALUES (3), (5) AS tab(col);, OK}]} | +|bit_xor |{PASSED, [{SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col);, OK}]} | +|bool_and |{PASSED, [{SELECT bool_and(col) FROM VALUES (true), (true), (true) AS tab(col);, OK}]} | +|bool_or |{PASSED, [{SELECT bool_or(col) FROM VALUES (true), (false), (false) AS tab(col);, OK}]} | +|boolean |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|bround |{FAILED, [{SELECT bround(2.5, 0);, std_err: Error during planning: Invalid function 'bround'.\nDid you mean 'round'?\n}]} | +|btrim |{PASSED, [{SELECT btrim(' SparkSQL ');, OK}]} | +|cardinality |{FAILED, [{SELECT cardinality(array('b', 'd', 'c', 'a'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | +|cast |{PASSED, [{SELECT cast('10' as int);, OK}]} | +|cbrt |{PASSED, [{SELECT cbrt(27.0);, OK}]} | +|ceil |{PASSED, [{SELECT ceil(-0.1);, OK}]} | +|ceiling |{FAILED, [{SELECT ceiling(-0.1);, std_err: Error during planning: Invalid function 'ceiling'.\nDid you mean 'ceil'?\n}]} | +|char |{FAILED, [{SELECT char(65);, std_err: Error during planning: Invalid function 'char'.\nDid you mean 'chr'?\n}]} | +|char_length |{PASSED, [{SELECT char_length('Spark SQL ');, OK}]} | +|character_length |{PASSED, [{SELECT character_length('Spark SQL ');, OK}]} | +|chr |{PASSED, [{SELECT chr(65);, OK}]} | +|coalesce |{PASSED, [{SELECT coalesce(NULL, 1, NULL);, OK}]} | +|collect_list |{FAILED, [{SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'collect_list'.\nDid you mean 'make_list'?\n}]} | +|collect_set |{FAILED, [{SELECT collect_set(col) FROM VALUES (1), (2), (1) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'collect_set'.\nDid you mean 'coalesce'?\n}]} | +|concat |{PASSED, [{SELECT concat('Spark', 'SQL');, OK}]} | +|concat_ws |{PASSED, [{SELECT concat_ws(' ', 'Spark', 'SQL');, OK}]} | +|contains |{FAILED, [{SELECT contains('Spark SQL', 'Spark');, std_err: Error during planning: Invalid function 'contains'.\nDid you mean 'concat'?\n}]} | +|conv |{FAILED, [{SELECT conv('100', 2, 10);, std_err: Error during planning: Invalid function 'conv'.\nDid you mean 'cos'?\n}]} | +|convert_timezone |{FAILED, [{SELECT convert_timezone('Europe/Brussels', 'America/Los_Angeles', timestamp_ntz'2021-12-06 00:00:00');, std_err: SQL error: ParserError("Expected ), found: '2021-12-06 00:00:00'")\n}]} | +|corr |{PASSED, [{SELECT corr(c1, c2) FROM VALUES (3, 2), (3, 3), (6, 4) as tab(c1, c2);, OK}]} | +|cos |{PASSED, [{SELECT cos(0);, OK}]} | +|cosh |{PASSED, [{SELECT cosh(0);, OK}]} | +|cot |{PASSED, [{SELECT cot(1);, OK}]} | +|count |{PASSED, [{SELECT count(*) FROM VALUES (NULL), (5), (5), (20) AS tab(col);, OK}]} | +|count_if |{FAILED, [{SELECT count_if(col % 2 = 0) FROM VALUES (NULL), (0), (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'count_if'.\nDid you mean 'COUNT'?\n}]} | +|count_min_sketch |{FAILED, [{SELECT hex(count_min_sketch(col, 0.5d, 0.5d, 1)) FROM VALUES (1), (2), (1) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected ), found: d")\n}]} | +|covar_pop |{PASSED, [{SELECT covar_pop(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);, OK}]} | +|covar_samp |{PASSED, [{SELECT covar_samp(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);, OK}]} | +|crc32 |{FAILED, [{SELECT crc32('Spark');, std_err: Error during planning: Invalid function 'crc32'.\nDid you mean 'log2'?\n}]} | +|csc |{FAILED, [{SELECT csc(1);, std_err: Error during planning: Invalid function 'csc'.\nDid you mean 'cosh'?\n}]} | +|cume_dist |{PASSED, [{SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | +|curdate |{FAILED, [{SELECT curdate();, std_err: Error during planning: Invalid function 'curdate'.\nDid you mean 'to_date'?\n}]} | +|current_catalog |{FAILED, [{SELECT current_catalog();, std_err: SQL error: ParserError("Expected end of statement, found: (")\n}]} | +|current_database |{FAILED, [{SELECT current_database();, std_err: Error during planning: Invalid function 'current_database'.\nDid you mean 'current_date'?\n}]} | +|current_date |{PASSED, [{SELECT current_date();, OK}]} | +|current_schema |{FAILED, [{SELECT current_schema();, std_err: Error during planning: Invalid function 'current_schema'.\nDid you mean 'current_date'?\n}]} | +|current_timestamp |{FAILED, [{SELECT current_timestamp();, std_err: Error during planning: Invalid function 'current_timestamp'.\nDid you mean 'current_time'?\n}]} | +|current_timezone |{FAILED, [{SELECT current_timezone();, std_err: Error during planning: Invalid function 'current_timezone'.\nDid you mean 'current_time'?\n}]} | +|current_user |{FAILED, [{SELECT current_user();, std_err: SQL error: ParserError("Expected end of statement, found: (")\n}]} | +|date |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|date_add |{FAILED, [{SELECT date_add('2016-07-30', 1);, std_err: Error during planning: Invalid function 'date_add'.\nDid you mean 'datepart'?\n}]} | +|date_diff |{FAILED, [{SELECT date_diff('2009-07-31', '2009-07-30');, std_err: Error during planning: Invalid function 'date_diff'.\nDid you mean 'date_bin'?\n}]} | +|date_format |{PASSED, [{SELECT date_format('2016-04-08', 'y');, OK}]} | +|date_from_unix_date |{FAILED, [{SELECT date_from_unix_date(1);, std_err: Error during planning: Invalid function 'date_from_unix_date'.\nDid you mean 'from_unixtime'?\n}]} | +|date_part |{PASSED, [{SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | +|date_sub |{FAILED, [{SELECT date_sub('2016-07-30', 1);, std_err: Error during planning: Invalid function 'date_sub'.\nDid you mean 'date_bin'?\n}]} | +|date_trunc |{PASSED, [{SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359');, OK}]} | +|dateadd |{FAILED, [{SELECT dateadd('2016-07-30', 1);, std_err: Error during planning: Invalid function 'dateadd'.\nDid you mean 'datepart'?\n}]} | +|datediff |{FAILED, [{SELECT datediff('2009-07-31', '2009-07-30');, std_err: Error during planning: Invalid function 'datediff'.\nDid you mean 'datepart'?\n}]} | +|datepart |{PASSED, [{SELECT datepart('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | +|day |{FAILED, [{SELECT day('2009-07-30');, std_err: Error during planning: Invalid function 'day'.\nDid you mean 'today'?\n}]} | +|dayofmonth |{FAILED, [{SELECT dayofmonth('2009-07-30');, std_err: Error during planning: Invalid function 'dayofmonth'.\nDid you mean 'date_part'?\n}]} | +|dayofweek |{FAILED, [{SELECT dayofweek('2009-07-30');, std_err: Error during planning: Invalid function 'dayofweek'.\nDid you mean 'lower'?\n}]} | +|dayofyear |{FAILED, [{SELECT dayofyear('2016-04-09');, std_err: Error during planning: Invalid function 'dayofyear'.\nDid you mean 'date_part'?\n}]} | +|decimal |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|decode |{FAILED, [{SELECT decode(encode('abc', 'utf-8'), 'utf-8');, std_err: Error during planning: There is no built-in encoding named 'utf-8', currently supported encodings are: base64, hex\n}]} | +|degrees |{PASSED, [{SELECT degrees(3.141592653589793);, OK}]} | +|dense_rank |{FAILED, [{SELECT a, b, dense_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'DENSE_RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tDENSE_RANK()\n}]} | +|div |{FAILED, [{SELECT 3 div 2;, std_err: SQL error: ParserError("No infix parser for token Word(Word { value: \"div\", quote_style: None, keyword: DIV })")\n}]} | +|double |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|e |{FAILED, [{SELECT e();, std_err: Error during planning: Invalid function 'e'.\nDid you mean 'ln'?\n}]} | +|element_at |{FAILED, [{SELECT element_at(array(1, 2, 3), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|elt |{FAILED, [{SELECT elt(1, 'scala', 'java');, std_err: Error during planning: Invalid function 'elt'.\nDid you mean 'left'?\n}]} | +|encode |{FAILED, [{SELECT encode('abc', 'utf-8');, std_err: Error during planning: There is no built-in encoding named 'utf-8', currently supported encodings are: base64, hex\n}]} | +|endswith |{FAILED, [{SELECT endswith('Spark SQL', 'SQL');, std_err: Error during planning: Invalid function 'endswith'.\nDid you mean 'ends_with'?\n}]} | +|equal_null |{FAILED, [{SELECT equal_null(3, 3);, std_err: Error during planning: Invalid function 'equal_null'.\nDid you mean 'ifnull'?\n}]} | +|every |{FAILED, [{SELECT every(col) FROM VALUES (true), (true), (true) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'every'.\nDid you mean 'reverse'?\n}]} | +|exists |{FAILED, [{SELECT exists(array(1, 2, 3), x -> x % 2 == 0);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: array")\n}]} | +|exp |{PASSED, [{SELECT exp(0);, OK}]} | +|explode |{FAILED, [{SELECT explode(array(10, 20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | +|explode_outer |{FAILED, [{SELECT explode_outer(array(10, 20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | +|expm1 |{FAILED, [{SELECT expm1(0);, std_err: Error during planning: Invalid function 'expm1'.\nDid you mean 'exp'?\n}]} | +|extract |{PASSED, [{SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | +|factorial |{PASSED, [{SELECT factorial(5);, OK}]} | +|filter |{FAILED, [{SELECT filter(array(1, 2, 3), x -> x % 2 == 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|find_in_set |{PASSED, [{SELECT find_in_set('ab','abc,b,ab,c,def');, OK}]} | +|first |{FAILED, [{SELECT first(col) FROM VALUES (10), (5), (20) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'first'.\nDid you mean 'digest'?\n}]} | +|first_value |{PASSED, [{SELECT first_value(col) FROM VALUES (10), (5), (20) AS tab(col);, OK}]} | +|flatten |{FAILED, [{SELECT flatten(array(array(1, 2), array(3, 4)));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: array")\n}]} | +|float |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|floor |{PASSED, [{SELECT floor(-0.1);, OK}]} | +|forall |{FAILED, [{SELECT forall(array(1, 2, 3), x -> x % 2 == 0);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|format_number |{FAILED, [{SELECT format_number(12332.123456, 4);, std_err: Error during planning: Invalid function 'format_number'.\nDid you mean 'FIRST_VALUE'?\n}]} | +|format_string |{FAILED, [{SELECT format_string("Hello World %d %s", 100, "days");, std_err: Error during planning: Invalid function 'format_string'.\nDid you mean 'list_to_string'?\n}]} | +|from_csv |{FAILED, [{SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');, std_err: Error during planning: Invalid function 'from_csv'.\nDid you mean 'arrow_cast'?\n}]} | +|from_json |{FAILED, [{SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');, std_err: Error during planning: Invalid function 'from_json'.\nDid you mean 'array_join'?\n}]} | +|from_unixtime |{FAILED, [{SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');, std_err: Error during planning: No function matches the given name and argument types 'from_unixtime(Int64, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tfrom_unixtime(Int64)\n}]} | +|from_utc_timestamp |{FAILED, [{SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul');, std_err: Error during planning: Invalid function 'from_utc_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|get |{FAILED, [{SELECT get(array(1, 2, 3), 0);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|get_json_object |{FAILED, [{SELECT get_json_object('{"a":"b"}', '$.a');, std_err: Error during planning: Invalid function 'get_json_object'.\nDid you mean 'get_field'?\n}]} | +|getbit |{FAILED, [{SELECT getbit(11, 0);, std_err: Error during planning: Invalid function 'getbit'.\nDid you mean 'repeat'?\n}]} | +|greatest |{FAILED, [{SELECT greatest(10, 9, 2, 4, 3);, std_err: Error during planning: Invalid function 'greatest'.\nDid you mean 'repeat'?\n}]} | +|grouping |{FAILED, [{SELECT name, grouping(name), sum(age) FROM VALUES (2, 'Alice'), (5, 'Bob') people(age, name) GROUP BY cube(name);, [MISSING_AGGREGATION] The non-aggregating expression "age" is based on columns which are not participating in the GROUP BY clause.\nAdd the columns or the expression to the GROUP BY, aggregate the expression, or use "any_value(age)" if you do not care which of the values within a group is returned.;\nAggregate [name#79, spark_grouping_id#78L], [age#75, name#79]\n+- Expand [[age#75, name#76, name#77, 0], [age#75, name#76, null, 1]], [age#75, name#76, name#79, spark_grouping_id#78L]\n +- Project [age#75, name#76, name#76 AS name#77]\n +- SubqueryAlias people\n +- LocalRelation [age#75, name#76]\n}]} | +|grouping_id |{FAILED, [{SELECT name, grouping_id(), sum(age), avg(height) FROM VALUES (2, 'Alice', 165), (5, 'Bob', 180) people(age, name, height) GROUP BY cube(name, height);, [MISSING_AGGREGATION] The non-aggregating expression "age" is based on columns which are not participating in the GROUP BY clause.\nAdd the columns or the expression to the GROUP BY, aggregate the expression, or use "any_value(age)" if you do not care which of the values within a group is returned.;\nAggregate [name#245, height#246, spark_grouping_id#244L], [age#239, name#245, height#246]\n+- Expand [[age#239, name#240, height#241, name#242, height#243, 0], [age#239, name#240, height#241, name#242, null, 1], [age#239, name#240, height#241, null, height#243, 2], [age#239, name#240, height#241, null, null, 3]], [age#239, name#240, height#241, name#245, height#246, spark_grouping_id#244L]\n +- Project [age#239, name#240, height#241, name#240 AS name#242, height#241 AS height#243]\n +- SubqueryAlias people\n +- LocalRelation [age#239, name#240, height#241]\n}]}| +|hash |{FAILED, [{SELECT hash('Spark', array(123), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 123")\n}]} | +|hex |{FAILED, [{SELECT hex(17);, std_err: Error during planning: Invalid function 'hex'.\nDid you mean 'exp'?\n}]} | +|histogram_numeric |{FAILED, [{SELECT histogram_numeric(col, 5) FROM VALUES (0), (1), (2), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'histogram_numeric'.\nDid you mean 'list_remove_n'?\n}]} | +|hour |{FAILED, [{SELECT hour('2009-07-30 12:58:59');, std_err: Error during planning: Invalid function 'hour'.\nDid you mean 'CORR'?\n}]} | +|hypot |{FAILED, [{SELECT hypot(3, 4);, std_err: Error during planning: Invalid function 'hypot'.\nDid you mean 'cot'?\n}]} | +|if |{FAILED, [{SELECT if(1 < 2, 'a', 'b');, std_err: Error during planning: Invalid function 'if'.\nDid you mean 'pi'?\n}]} | +|ifnull |{FAILED, [{SELECT ifnull(NULL, array('2'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: '2'")\n}]} | +|ilike |{FAILED, [{SELECT ilike('Spark', '_Park');, std_err: Error during planning: Invalid function 'ilike'.\nDid you mean 'sinh'?\n}]} | +|in |{PASSED, [{SELECT 1 in(1, 2, 3);, OK}]} | +|initcap |{PASSED, [{SELECT initcap('sPark sql');, OK}]} | +|inline |{FAILED, [{SELECT inline(array(struct(1, 'a'), struct(2, 'b')));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n}]} | +|inline_outer |{FAILED, [{SELECT inline_outer(array(struct(1, 'a'), struct(2, 'b')));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n}]} | +|input_file_block_length |{FAILED, [{SELECT input_file_block_length();, std_err: Error during planning: Invalid function 'input_file_block_length'.\nDid you mean 'octet_length'?\n}]} | +|input_file_block_start |{FAILED, [{SELECT input_file_block_start();, std_err: Error during planning: Invalid function 'input_file_block_start'.\nDid you mean 'list_replace_all'?\n}]} | +|input_file_name |{FAILED, [{SELECT input_file_name();, std_err: Error during planning: Invalid function 'input_file_name'.\nDid you mean 'list_replace'?\n}]} | +|instr |{PASSED, [{SELECT instr('SparkSQL', 'SQL');, OK}]} | +|int |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|isnan |{PASSED, [{SELECT isnan(cast('NaN' as double));, OK}]} | +|isnotnull |{FAILED, [{SELECT isnotnull(1);, std_err: Error during planning: Invalid function 'isnotnull'.\nDid you mean 'ifnull'?\n}]} | +|isnull |{FAILED, [{SELECT isnull(1);, std_err: Error during planning: Invalid function 'isnull'.\nDid you mean 'ifnull'?\n}]} | +|java_method |{FAILED, [{SELECT java_method('java.util.UUID', 'randomUUID');, std_err: Error during planning: Invalid function 'java_method'.\nDid you mean 'make_date'?\n}]} | +|json_array_length |{FAILED, [{SELECT json_array_length('[1,2,3,4]');, std_err: Error during planning: Invalid function 'json_array_length'.\nDid you mean 'array_length'?\n}]} | +|json_object_keys |{FAILED, [{SELECT json_object_keys('{}');, std_err: Error during planning: Invalid function 'json_object_keys'.\nDid you mean 'concat_ws'?\n}]} | +|json_tuple |{FAILED, [{SELECT json_tuple('{"a":1, "b":2}', 'a', 'b');, std_err: Error during planning: Invalid function 'json_tuple'.\nDid you mean 'to_date'?\n}]} | +|kurtosis |{FAILED, [{SELECT kurtosis(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'kurtosis'.\nDid you mean 'rtrim'?\n}]} | +|lag |{PASSED, [{SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | +|last |{FAILED, [{SELECT last(col) FROM VALUES (10), (5), (20) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'last'.\nDid you mean 'left'?\n}]} | +|last_day |{FAILED, [{SELECT last_day('2009-01-12');, std_err: Error during planning: Invalid function 'last_day'.\nDid you mean 'list_cat'?\n}]} | +|last_value |{PASSED, [{SELECT last_value(col) FROM VALUES (10), (5), (20) AS tab(col);, OK}]} | +|lcase |{FAILED, [{SELECT lcase('SparkSql');, std_err: Error during planning: Invalid function 'lcase'.\nDid you mean 'lpad'?\n}]} | +|lead |{PASSED, [{SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | +|least |{FAILED, [{SELECT least(10, 9, 2, 4, 3);, std_err: Error during planning: Invalid function 'least'.\nDid you mean 'left'?\n}]} | +|left |{PASSED, [{SELECT left('Spark SQL', 3);, OK}]} | +|len |{FAILED, [{SELECT len('Spark SQL ');, std_err: Error during planning: Invalid function 'len'.\nDid you mean 'ln'?\n}]} | +|length |{PASSED, [{SELECT length('Spark SQL ');, OK}]} | +|levenshtein |{PASSED, [{SELECT levenshtein('kitten', 'sitting');, OK}]} | +|like |{FAILED, [{SELECT like('Spark', '_park');, std_err: Error during planning: Invalid function 'like'.\nDid you mean 'pi'?\n}]} | +|ln |{PASSED, [{SELECT ln(1);, OK}]} | +|localtimestamp |{FAILED, [{SELECT localtimestamp();, std_err: Error during planning: Invalid function 'localtimestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|locate |{FAILED, [{SELECT locate('bar', 'foobarbar');, std_err: Error during planning: Invalid function 'locate'.\nDid you mean 'concat'?\n}]} | +|log |{PASSED, [{SELECT log(10, 100);, OK}]} | +|log10 |{PASSED, [{SELECT log10(10);, OK}]} | +|log1p |{FAILED, [{SELECT log1p(0);, std_err: Error during planning: Invalid function 'log1p'.\nDid you mean 'log10'?\n}]} | +|log2 |{PASSED, [{SELECT log2(2);, OK}]} | +|lower |{PASSED, [{SELECT lower('SparkSql');, OK}]} | +|lpad |{PASSED, [{SELECT lpad('hi', 5, '??');, OK}]} | +|ltrim |{PASSED, [{SELECT ltrim(' SparkSQL ');, OK}]} | +|make_date |{PASSED, [{SELECT make_date(2013, 7, 15);, OK}]} | +|make_dt_interval |{FAILED, [{SELECT make_dt_interval(1, 12, 30, 01.001001);, std_err: Error during planning: Invalid function 'make_dt_interval'.\nDid you mean 'make_date'?\n}]} | +|make_interval |{FAILED, [{SELECT make_interval(100, 11, 1, 1, 12, 30, 01.001001);, std_err: Error during planning: Invalid function 'make_interval'.\nDid you mean 'make_array'?\n}]} | +|make_timestamp |{FAILED, [{SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);, std_err: Error during planning: Invalid function 'make_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|make_timestamp_ltz |{FAILED, [{SELECT make_timestamp_ltz(2014, 12, 28, 6, 30, 45.887);, std_err: Error during planning: Invalid function 'make_timestamp_ltz'.\nDid you mean 'to_timestamp'?\n}]} | +|make_timestamp_ntz |{FAILED, [{SELECT make_timestamp_ntz(2014, 12, 28, 6, 30, 45.887);, std_err: Error during planning: Invalid function 'make_timestamp_ntz'.\nDid you mean 'to_timestamp_nanos'?\n}]} | +|make_ym_interval |{FAILED, [{SELECT make_ym_interval(1, 2);, std_err: Error during planning: Invalid function 'make_ym_interval'.\nDid you mean 'make_date'?\n}]} | +|map |{FAILED, [{SELECT map(1.0, '2', 3.0, '4');, std_err: Error during planning: Invalid function 'map'.\nDid you mean 'MAX'?\n}]} | +|map_concat |{FAILED, [{SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c'));, std_err: Error during planning: Invalid function 'map_concat'.\nDid you mean 'list_concat'?\n}]} | +|map_contains_key |{FAILED, [{SELECT map_contains_key(map(1, 'a', 2, 'b'), 1);, std_err: Error during planning: Invalid function 'map_contains_key'.\nDid you mean 'list_contains'?\n}]} | +|map_entries |{FAILED, [{SELECT map_entries(map(1, 'a', 2, 'b'));, std_err: Error during planning: Invalid function 'map_entries'.\nDid you mean 'make_date'?\n}]} | +|map_filter |{FAILED, [{SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v);, std_err: Error during planning: Invalid function 'map_filter'.\nDid you mean 'make_date'?\n}]} | +|map_from_arrays |{FAILED, [{SELECT map_from_arrays(array(1.0, 3.0), array('2', '4'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1.0")\n}]} | +|map_from_entries |{FAILED, [{SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b')));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n}]} | +|map_keys |{FAILED, [{SELECT map_keys(map(1, 'a', 2, 'b'));, std_err: Error during planning: Invalid function 'map_keys'.\nDid you mean 'make_date'?\n}]} | +|map_values |{FAILED, [{SELECT map_values(map(1, 'a', 2, 'b'));, std_err: Error during planning: Invalid function 'map_values'.\nDid you mean 'LAST_VALUE'?\n}]} | +|map_zip_with |{FAILED, [{SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2));, std_err: Error during planning: Invalid function 'map_zip_with'.\nDid you mean 'ends_with'?\n}]} | +|mask |{FAILED, [{SELECT mask('abcd-EFGH-8765-4321');, std_err: Error during planning: Invalid function 'mask'.\nDid you mean 'MAX'?\n}]} | +|max |{PASSED, [{SELECT max(col) FROM VALUES (10), (50), (20) AS tab(col);, OK}]} | +|max_by |{FAILED, [{SELECT max_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'max_by'.\nDid you mean 'MAX'?\n}]} | +|md5 |{PASSED, [{SELECT md5('Spark');, OK}]} | +|mean |{PASSED, [{SELECT mean(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|median |{PASSED, [{SELECT median(col) FROM VALUES (0), (10) AS tab(col);, OK}]} | +|min |{PASSED, [{SELECT min(col) FROM VALUES (10), (-1), (20) AS tab(col);, OK}]} | +|min_by |{FAILED, [{SELECT min_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'min_by'.\nDid you mean 'MIN'?\n}]} | +|minute |{FAILED, [{SELECT minute('2009-07-30 12:58:59');, std_err: Error during planning: Invalid function 'minute'.\nDid you mean 'instr'?\n}]} | +|mod |{PASSED, [{SELECT 2 % 1.8;, OK}]} | +|mode |{FAILED, [{SELECT mode(col) FROM VALUES (0), (10), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'mode'.\nDid you mean 'md5'?\n}]} | +|monotonically_increasing_id|{FAILED, [{SELECT monotonically_increasing_id();, std_err: Error during planning: Invalid function 'monotonically_increasing_id'.\nDid you mean 'array_prepend'?\n}]} | +|month |{FAILED, [{SELECT month('2016-07-30');, std_err: Error during planning: Invalid function 'month'.\nDid you mean 'sinh'?\n}]} | +|months_between |{FAILED, [{SELECT months_between('1997-02-28 10:30:00', '1996-10-30');, std_err: Error during planning: Invalid function 'months_between'.\nDid you mean 'NTH_VALUE'?\n}]} | +|named_struct |{FAILED, [{SELECT named_struct("a", 1, "b", 2, "c", 3);, std_err: Schema error: No field named a.\n}]} | +|nanvl |{PASSED, [{SELECT nanvl(cast('NaN' as double), 123);, OK}]} | +|negative |{FAILED, [{SELECT negative(1);, std_err: Error during planning: Invalid function 'negative'.\nDid you mean 'nanvl'?\n}]} | +|next_day |{FAILED, [{SELECT next_day('2015-01-14', 'TU');, std_err: Error during planning: Invalid function 'next_day'.\nDid you mean 'today'?\n}]} | +|not |{PASSED, [{SELECT not true;, OK}]} | +|now |{PASSED, [{SELECT now();, OK}]} | +|nth_value |{PASSED, [{SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | +|ntile |{PASSED, [{SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | +|nullif |{PASSED, [{SELECT nullif(2, 2);, OK}]} | +|nvl |{FAILED, [{SELECT nvl(NULL, array('2'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: '2'")\n}]} | +|nvl2 |{PASSED, [{SELECT nvl2(NULL, 2, 1);, OK}]} | +|octet_length |{PASSED, [{SELECT octet_length('Spark SQL');, OK}]} | +|or |{PASSED, [{SELECT true or false;, OK}]} | +|overlay |{PASSED, [{SELECT overlay('Spark SQL' PLACING '_' FROM 6);, OK}]} | +|parse_url |{FAILED, [{SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST');, std_err: Error during planning: Invalid function 'parse_url'.\nDid you mean 'date_part'?\n}]} | +|percent_rank |{FAILED, [{SELECT a, b, percent_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'PERCENT_RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tPERCENT_RANK()\n}]} | +|percentile |{FAILED, [{SELECT percentile(col, 0.3) FROM VALUES (0), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'percentile'.\nDid you mean 'ceil'?\n}]} | +|percentile_approx |{FAILED, [{SELECT percentile_approx(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 0.5")\n}]} | +|pi |{PASSED, [{SELECT pi();, OK}]} | +|pmod |{FAILED, [{SELECT pmod(10, 3);, std_err: Error during planning: Invalid function 'pmod'.\nDid you mean 'pow'?\n}]} | +|posexplode |{FAILED, [{SELECT posexplode(array(10,20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | +|posexplode_outer |{FAILED, [{SELECT posexplode_outer(array(10,20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | +|position |{FAILED, [{SELECT position('bar', 'foobarbar');, std_err: SQL error: ParserError("Position function must include IN keyword")\n}]} | +|positive |{FAILED, [{SELECT positive(1);, std_err: Error during planning: Invalid function 'positive'.\nDid you mean 'position'?\n}]} | +|pow |{PASSED, [{SELECT pow(2, 3);, OK}]} | +|power |{PASSED, [{SELECT power(2, 3);, OK}]} | +|printf |{FAILED, [{SELECT printf("Hello World %d %s", 100, "days");, std_err: Error during planning: Invalid function 'printf'.\nDid you mean 'instr'?\n}]} | +|quarter |{FAILED, [{SELECT quarter('2016-08-31');, std_err: Error during planning: Invalid function 'quarter'.\nDid you mean 'upper'?\n}]} | +|radians |{PASSED, [{SELECT radians(180);, OK}]} | +|raise_error |{FAILED, [{SELECT raise_error('custom error message');, std_err: Error during planning: Invalid function 'raise_error'.\nDid you mean 'iszero'?\n}]} | +|rand |{FAILED, [{SELECT rand();, std_err: Error during planning: Invalid function 'rand'.\nDid you mean 'rpad'?\n}]} | +|randn |{FAILED, [{SELECT randn();, std_err: Error during planning: Invalid function 'randn'.\nDid you mean 'random'?\n}]} | +|random |{PASSED, [{SELECT random();, OK}]} | +|rank |{FAILED, [{SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tRANK()\n}]} | +|reduce |{FAILED, [{SELECT reduce(array(1, 2, 3), 0, (acc, x) -> acc + x);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|reflect |{FAILED, [{SELECT reflect('java.util.UUID', 'randomUUID');, std_err: Error during planning: Invalid function 'reflect'.\nDid you mean 'repeat'?\n}]} | +|regexp |{FAILED, [{SELECT regexp('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n}]} | +|regexp_count |{FAILED, [{SELECT regexp_count('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');, std_err: Error during planning: Invalid function 'regexp_count'.\nDid you mean 'REGR_COUNT'?\n}]} | +|regexp_extract |{FAILED, [{SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);, std_err: Error during planning: Invalid function 'regexp_extract'.\nDid you mean 'regexp_match'?\n}]} | +|regexp_extract_all |{FAILED, [{SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)', 1);, std_err: Error during planning: Invalid function 'regexp_extract_all'.\nDid you mean 'regexp_replace'?\n}]} | +|regexp_instr |{FAILED, [{SELECT regexp_instr('user@spark.apache.org', '@[^.]*');, std_err: Error during planning: Invalid function 'regexp_instr'.\nDid you mean 'regexp_match'?\n}]} | +|regexp_like |{FAILED, [{SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n}]} | +|regexp_replace |{PASSED, [{SELECT regexp_replace('100-200', '(\\d+)', 'num');, OK}]} | +|regexp_substr |{FAILED, [{SELECT regexp_substr('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');, std_err: Error during planning: Invalid function 'regexp_substr'.\nDid you mean 'regexp_like'?\n}]} | +|regr_avgx |{PASSED, [{SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|regr_avgy |{PASSED, [{SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|regr_count |{PASSED, [{SELECT regr_count(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|regr_intercept |{PASSED, [{SELECT regr_intercept(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);, OK}]} | +|regr_r2 |{PASSED, [{SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|regr_slope |{PASSED, [{SELECT regr_slope(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);, OK}]} | +|regr_sxx |{PASSED, [{SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|regr_sxy |{PASSED, [{SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|regr_syy |{PASSED, [{SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | +|repeat |{PASSED, [{SELECT repeat('123', 2);, OK}]} | +|replace |{PASSED, [{SELECT replace('ABCabc', 'abc', 'DEF');, OK}]} | +|reverse |{PASSED, [{SELECT reverse('Spark SQL');, OK}]} | +|right |{PASSED, [{SELECT right('Spark SQL', 3);, OK}]} | +|rint |{FAILED, [{SELECT rint(12.3456);, std_err: Error during planning: Invalid function 'rint'.\nDid you mean 'right'?\n}]} | +|rlike |{FAILED, [{SELECT rlike('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n}]} | +|round |{PASSED, [{SELECT round(2.5, 0);, OK}]} | +|row_number |{PASSED, [{SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | +|rpad |{PASSED, [{SELECT rpad('hi', 5, '??');, OK}]} | +|rtrim |{PASSED, [{SELECT rtrim(' SparkSQL ');, OK}]} | +|schema_of_csv |{FAILED, [{SELECT schema_of_csv('1,abc');, std_err: Error during planning: Invalid function 'schema_of_csv'.\nDid you mean 'concat_ws'?\n}]} | +|schema_of_json |{FAILED, [{SELECT schema_of_json('[{"col":0}]');, std_err: Error during planning: Invalid function 'schema_of_json'.\nDid you mean 'concat_ws'?\n}]} | +|sec |{FAILED, [{SELECT sec(0);, std_err: Error during planning: Invalid function 'sec'.\nDid you mean 'sin'?\n}]} | +|second |{FAILED, [{SELECT second('2009-07-30 12:58:59');, std_err: Error during planning: Invalid function 'second'.\nDid you mean 'decode'?\n}]} | +|sentences |{FAILED, [{SELECT sentences('Hi there! Good morning.');, std_err: Error during planning: Invalid function 'sentences'.\nDid you mean 'degrees'?\n}]} | +|sequence |{FAILED, [{SELECT sequence(1, 5);, std_err: Error during planning: Invalid function 'sequence'.\nDid you mean 'reverse'?\n}]} | +|sha |{FAILED, [{SELECT sha('Spark');, std_err: Error during planning: Invalid function 'sha'.\nDid you mean 'chr'?\n}]} | +|sha1 |{FAILED, [{SELECT sha1('Spark');, std_err: Error during planning: Invalid function 'sha1'.\nDid you mean 'sha512'?\n}]} | +|sha2 |{FAILED, [{SELECT sha2('Spark', 256);, std_err: Error during planning: Invalid function 'sha2'.\nDid you mean 'sha512'?\n}]} | +|shiftleft |{FAILED, [{SELECT shiftleft(2, 1);, std_err: Error during planning: Invalid function 'shiftleft'.\nDid you mean 'left'?\n}]} | +|shiftright |{FAILED, [{SELECT shiftright(4, 1);, std_err: Error during planning: Invalid function 'shiftright'.\nDid you mean 'right'?\n}]} | +|shiftrightunsigned |{FAILED, [{SELECT shiftrightunsigned(4, 1);, std_err: Error during planning: Invalid function 'shiftrightunsigned'.\nDid you mean 'substring_index'?\n}]} | +|shuffle |{FAILED, [{SELECT shuffle(array(1, 20, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|sign |{FAILED, [{SELECT sign(40);, std_err: Error during planning: Invalid function 'sign'.\nDid you mean 'sin'?\n}]} | +|signum |{PASSED, [{SELECT signum(40);, OK}]} | +|sin |{PASSED, [{SELECT sin(0);, OK}]} | +|sinh |{PASSED, [{SELECT sinh(0);, OK}]} | +|size |{FAILED, [{SELECT size(array('b', 'd', 'c', 'a'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | +|skewness |{FAILED, [{SELECT skewness(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'skewness'.\nDid you mean 'degrees'?\n}]} | +|slice |{FAILED, [{SELECT slice(array(1, 2, 3, 4), 2, 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|smallint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|some |{FAILED, [{SELECT some(col) FROM VALUES (true), (false), (false) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'some'.\nDid you mean 'SUM'?\n}]} | +|sort_array |{FAILED, [{SELECT sort_array(array('b', 'd', null, 'c', 'a'), true);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | +|soundex |{FAILED, [{SELECT soundex('Miller');, std_err: Error during planning: Invalid function 'soundex'.\nDid you mean 'round'?\n}]} | +|space |{FAILED, [{SELECT concat(space(2), '1');, std_err: Error during planning: Invalid function 'space'.\nDid you mean 'lpad'?\n}]} | +|spark_partition_id |{FAILED, [{SELECT spark_partition_id();, std_err: Error during planning: Invalid function 'spark_partition_id'.\nDid you mean 'list_position'?\n}]} | +|split |{FAILED, [{SELECT split('oneAtwoBthreeC', '[ABC]');, std_err: Error during planning: Invalid function 'split'.\nDid you mean 'pi'?\n}]} | +|split_part |{PASSED, [{SELECT split_part('11.12.13', '.', 3);, OK}]} | +|sqrt |{PASSED, [{SELECT sqrt(4);, OK}]} | +|stack |{FAILED, [{SELECT stack(2, 1, 2, 3);, std_err: Error during planning: Invalid function 'stack'.\nDid you mean 'tan'?\n}]} | +|startswith |{FAILED, [{SELECT startswith('Spark SQL', 'Spark');, std_err: Error during planning: Invalid function 'startswith'.\nDid you mean 'starts_with'?\n}]} | +|std |{FAILED, [{SELECT std(col) FROM VALUES (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'std'.\nDid you mean 'sin'?\n}]} | +|stddev |{PASSED, [{SELECT stddev(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|stddev_pop |{PASSED, [{SELECT stddev_pop(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|stddev_samp |{PASSED, [{SELECT stddev_samp(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|str_to_map |{FAILED, [{SELECT str_to_map('a:1,b:2,c:3', ',', ':');, std_err: Error during planning: Invalid function 'str_to_map'.\nDid you mean 'date_format'?\n}]} | +|string |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|struct |{PASSED, [{SELECT struct(1, 2, 3);, OK}]} | +|substr |{PASSED, [{SELECT substr('Spark SQL', 5);, OK}]} | +|substring |{FAILED, [{SELECT substring('Spark SQL', 5);, std_err: This feature is not implemented: Unsupported ast node in sqltorel: Substring { expr: Value(SingleQuotedString("Spark SQL")), substring_from: Some(Value(Number("5", false))), substring_for: None, special: true }\n}]} | +|substring_index |{PASSED, [{SELECT substring_index('www.apache.org', '.', 2);, OK}]} | +|sum |{PASSED, [{SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);, OK}]} | +|tan |{PASSED, [{SELECT tan(0);, OK}]} | +|tanh |{PASSED, [{SELECT tanh(0);, OK}]} | +|timestamp |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|timestamp_micros |{FAILED, [{SELECT timestamp_micros(1230219000123123);, std_err: Error during planning: Invalid function 'timestamp_micros'.\nDid you mean 'to_timestamp_micros'?\n}]} | +|timestamp_millis |{FAILED, [{SELECT timestamp_millis(1230219000123);, std_err: Error during planning: Invalid function 'timestamp_millis'.\nDid you mean 'to_timestamp_millis'?\n}]} | +|timestamp_seconds |{FAILED, [{SELECT timestamp_seconds(1230219000);, std_err: Error during planning: Invalid function 'timestamp_seconds'.\nDid you mean 'to_timestamp_seconds'?\n}]} | +|tinyint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | +|to_binary |{FAILED, [{SELECT to_binary('abc', 'utf-8');, std_err: Error during planning: Invalid function 'to_binary'.\nDid you mean 'to_char'?\n}]} | +|to_char |{FAILED, [{SELECT to_char(454, '999');, std_err: Error during planning: No function matches the given name and argument types 'to_char(Int64, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tto_char(Date32, Utf8)\n\tto_char(Date64, Utf8)\n\tto_char(Time32(Millisecond), Utf8)\n\tto_char(Time32(Second), Utf8)\n\tto_char(Time64(Microsecond), Utf8)\n\tto_char(Time64(Nanosecond), Utf8)\n\tto_char(Timestamp(Second, None), Utf8)\n\tto_char(Timestamp(Second, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Millisecond, None), Utf8)\n\tto_char(Timestamp(Millisecond, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Microsecond, None), Utf8)\n\tto_char(Timestamp(Microsecond, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Nanosecond, None), Utf8)\n\tto_char(Timestamp(Nanosecond, Some("+TZ")), Utf8)\n\tto_char(Duration(Second), Utf8)\n\tto_char(Duration(Millisecond), Utf8)\n\tto_char(Duration(Microsecond), Utf8)\n\tto_char(Duration(Nanosecond), Utf8)\n}]} | +|to_csv |{FAILED, [{SELECT to_csv(named_struct('a', 1, 'b', 2));, std_err: Error during planning: Invalid function 'to_csv'.\nDid you mean 'to_char'?\n}]} | +|to_date |{PASSED, [{SELECT to_date('2009-07-30 04:17:52');, OK}]} | +|to_json |{FAILED, [{SELECT to_json(named_struct('a', 1, 'b', 2));, std_err: Error during planning: Invalid function 'to_json'.\nDid you mean 'to_date'?\n}]} | +|to_number |{FAILED, [{SELECT to_number('454', '999');, std_err: Error during planning: Invalid function 'to_number'.\nDid you mean 'to_date'?\n}]} | +|to_timestamp |{PASSED, [{SELECT to_timestamp('2016-12-31 00:12:00');, OK}]} | +|to_timestamp_ltz |{FAILED, [{SELECT to_timestamp_ltz('2016-12-31 00:12:00');, std_err: Error during planning: Invalid function 'to_timestamp_ltz'.\nDid you mean 'to_timestamp'?\n}]} | +|to_timestamp_ntz |{FAILED, [{SELECT to_timestamp_ntz('2016-12-31 00:12:00');, std_err: Error during planning: Invalid function 'to_timestamp_ntz'.\nDid you mean 'to_timestamp_nanos'?\n}]} | +|to_unix_timestamp |{FAILED, [{SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');, std_err: Error during planning: Invalid function 'to_unix_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|to_utc_timestamp |{FAILED, [{SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul');, std_err: Error during planning: Invalid function 'to_utc_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|transform |{FAILED, [{SELECT transform(array(1, 2, 3), x -> x + 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|transform_keys |{FAILED, [{SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|transform_values |{FAILED, [{SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> v + 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|translate |{PASSED, [{SELECT translate('AaBbCc', 'abc', '123');, OK}]} | +|trim |{PASSED, [{SELECT trim(' SparkSQL ');, OK}]} | +|trunc |{FAILED, [{SELECT trunc('2019-08-04', 'week');, std_err: Error during planning: No function matches the given name and argument types 'trunc(Utf8, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\ttrunc(Float32, Int64)\n\ttrunc(Float64, Int64)\n\ttrunc(Float64)\n\ttrunc(Float32)\n}]} | +|try_add |{FAILED, [{SELECT try_add(1, 2);, std_err: Error during planning: Invalid function 'try_add'.\nDid you mean 'rpad'?\n}]} | +|try_avg |{FAILED, [{SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'try_avg'.\nDid you mean 'AVG'?\n}]} | +|try_divide |{FAILED, [{SELECT try_divide(3, 2);, std_err: Error during planning: Invalid function 'try_divide'.\nDid you mean 'to_date'?\n}]} | +|try_element_at |{FAILED, [{SELECT try_element_at(array(1, 2, 3), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|try_multiply |{FAILED, [{SELECT try_multiply(2, 3);, std_err: Error during planning: Invalid function 'try_multiply'.\nDid you mean 'trunc'?\n}]} | +|try_subtract |{FAILED, [{SELECT try_subtract(2, 1);, std_err: Error during planning: Invalid function 'try_subtract'.\nDid you mean 'array_extract'?\n}]} | +|try_sum |{FAILED, [{SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'try_sum'.\nDid you mean 'trim'?\n}]} | +|try_to_binary |{FAILED, [{SELECT try_to_binary('abc', 'utf-8');, std_err: Error during planning: Invalid function 'try_to_binary'.\nDid you mean 'date_bin'?\n}]} | +|try_to_number |{FAILED, [{SELECT try_to_number('454', '999');, std_err: Error during planning: Invalid function 'try_to_number'.\nDid you mean 'array_to_string'?\n}]} | +|try_to_timestamp |{FAILED, [{SELECT try_to_timestamp('2016-12-31 00:12:00');, std_err: Error during planning: Invalid function 'try_to_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|typeof |{FAILED, [{SELECT typeof(1);, std_err: Error during planning: Invalid function 'typeof'.\nDid you mean 'repeat'?\n}]} | +|ucase |{FAILED, [{SELECT ucase('SparkSql');, std_err: Error during planning: Invalid function 'ucase'.\nDid you mean 'acos'?\n}]} | +|unbase64 |{FAILED, [{SELECT unbase64('U3BhcmsgU1FM');, std_err: Error during planning: Invalid function 'unbase64'.\nDid you mean 'asin'?\n}]} | +|unhex |{FAILED, [{SELECT decode(unhex('537061726B2053514C'), 'UTF-8');, std_err: Error during planning: Invalid function 'unhex'.\nDid you mean 'upper'?\n}]} | +|unix_date |{FAILED, [{SELECT unix_date(DATE("1970-01-02"));, std_err: Error during planning: Invalid function 'unix_date'.\nDid you mean 'to_date'?\n}]} | +|unix_micros |{FAILED, [{SELECT unix_micros(TIMESTAMP('1970-01-01 00:00:01Z'));, std_err: Error during planning: Invalid function 'unix_micros'.\nDid you mean 'iszero'?\n}]} | +|unix_millis |{FAILED, [{SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z'));, std_err: Error during planning: Invalid function 'unix_millis'.\nDid you mean 'nullif'?\n}]} | +|unix_seconds |{FAILED, [{SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z'));, std_err: Error during planning: Invalid function 'unix_seconds'.\nDid you mean 'encode'?\n}]} | +|unix_timestamp |{FAILED, [{SELECT unix_timestamp();, std_err: Error during planning: Invalid function 'unix_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | +|upper |{PASSED, [{SELECT upper('SparkSql');, OK}]} | +|url_decode |{FAILED, [{SELECT url_decode('https%3A%2F%2Fspark.apache.org');, std_err: Error during planning: Invalid function 'url_decode'.\nDid you mean 'decode'?\n}]} | +|url_encode |{FAILED, [{SELECT url_encode('https://spark.apache.org');, std_err: Error during planning: Invalid function 'url_encode'.\nDid you mean 'encode'?\n}]} | +|user |{FAILED, [{SELECT user();, std_err: SQL error: ParserError("Expected end of statement, found: (")\n}]} | +|uuid |{PASSED, [{SELECT uuid();, OK}]} | +|var_pop |{PASSED, [{SELECT var_pop(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|var_samp |{PASSED, [{SELECT var_samp(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | +|variance |{FAILED, [{SELECT variance(col) FROM VALUES (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'variance'.\nDid you mean 'range'?\n}]} | +|version |{FAILED, [{SELECT version();, std_err: Error during planning: Invalid function 'version'.\nDid you mean 'asin'?\n}]} | +|weekday |{FAILED, [{SELECT weekday('2009-07-30');, std_err: Error during planning: Invalid function 'weekday'.\nDid you mean 'overlay'?\n}]} | +|weekofyear |{FAILED, [{SELECT weekofyear('2008-02-20');, std_err: Error during planning: Invalid function 'weekofyear'.\nDid you mean 'to_char'?\n}]} | +|when |{PASSED, [{SELECT CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;, OK}]} | +|width_bucket |{FAILED, [{SELECT width_bucket(5.3, 0.2, 10.6, 5);, std_err: Error during planning: Invalid function 'width_bucket'.\nDid you mean 'list_except'?\n}]} | +|xpath |{FAILED, [{SELECT xpath('b1b2b3c1c2','a/b/text()');, std_err: Error during planning: Invalid function 'xpath'.\nDid you mean 'rpad'?\n}]} | +|xpath_boolean |{FAILED, [{SELECT xpath_boolean('1','a/b');, std_err: Error during planning: Invalid function 'xpath_boolean'.\nDid you mean 'date_format'?\n}]} | +|xpath_double |{FAILED, [{SELECT xpath_double('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_double'.\nDid you mean 'date_trunc'?\n}]} | +|xpath_float |{FAILED, [{SELECT xpath_float('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_float'.\nDid you mean 'date_format'?\n}]} | +|xpath_int |{FAILED, [{SELECT xpath_int('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_int'.\nDid you mean 'date_bin'?\n}]} | +|xpath_long |{FAILED, [{SELECT xpath_long('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_long'.\nDid you mean 'date_bin'?\n}]} | +|xpath_number |{FAILED, [{SELECT xpath_number('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_number'.\nDid you mean 'date_bin'?\n}]} | +|xpath_short |{FAILED, [{SELECT xpath_short('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_short'.\nDid you mean 'list_sort'?\n}]} | +|xpath_string |{FAILED, [{SELECT xpath_string('bcc','a/c');, std_err: Error during planning: Invalid function 'xpath_string'.\nDid you mean 'array_to_string'?\n}]} | +|xxhash64 |{FAILED, [{SELECT xxhash64('Spark', array(123), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 123")\n}]} | +|year |{FAILED, [{SELECT year('2016-07-30');, std_err: Error during planning: Invalid function 'year'.\nDid you mean 'VAR'?\n}]} | +|zip_with |{FAILED, [{SELECT zip_with(array(1, 2, 3), array('a', 'b', 'c'), (x, y) -> (y, x));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | +|| |{PASSED, [{SELECT 3 | 5;, OK}]} | +|~ |{FAILED, [{SELECT ~ 0;, std_err: SQL error: ParserError("Expected an expression:, found: ~")\n}]} | ++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index 2011dcd4bf..a3b38e6f94 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -23,10 +23,12 @@ import java.nio.charset.StandardCharsets import java.nio.file.{Files, Paths} import scala.collection.mutable +import scala.sys.process._ import org.scalatest.Ignore import org.scalatest.exceptions.TestFailedException +import org.apache.hadoop.fs.Path import org.apache.spark.sql.CometTestBase import org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanHelper @@ -43,12 +45,14 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH private val rawCoverageFilePath = "doc/spark_builtin_expr_coverage.txt" private val aggCoverageFilePath = "doc/spark_builtin_expr_coverage_agg.txt" + private val rawCoverageFileDatafusionPath = "doc/spark_builtin_expr_df_coverage.txt" - test("Test Spark builtin expressions coverage") { - val queryPattern = """(?i)SELECT (.+?);""".r - val valuesPattern = """(?i)FROM VALUES(.+?);""".r - val selectPattern = """(i?)SELECT(.+?)FROM""".r - val builtinExamplesMap = spark.sessionState.functionRegistry + private val queryPattern = """(?i)SELECT (.+?);""".r + private val valuesPattern = """(?i)FROM VALUES(.+?);""".r + private val selectPattern = """(i?)SELECT(.+?)FROM""".r + + def getExamples(): Map[String, List[String]] = + spark.sessionState.functionRegistry .listFunction() .map(spark.sessionState.catalog.lookupFunctionInfo(_)) .filter(_.getSource.toLowerCase == "built-in") @@ -61,6 +65,15 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH }) .toMap + /** + * Manual test to calculate Spark builtin expressions coverage support by the Comet + * + * The test will update files doc/spark_builtin_expr_coverage.txt, + * doc/spark_builtin_expr_coverage_agg.txt + */ + test("Test Spark builtin expressions coverage") { + val builtinExamplesMap = getExamples() + // key - function name // value - list of result shows if function supported by Comet val resultsMap = new mutable.HashMap[String, CoverageResult]() @@ -81,9 +94,7 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH testSingleLineQuery(s"select * $v", s"$s tbl") case _ => - resultsMap.put( - funcName, - CoverageResult("FAILED", Seq((q, "Cannot parse properly")))) + sys.error("Cannot parse properly") } } else { // Process the simple example like `SELECT cos(0);` @@ -123,7 +134,7 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH Seq(("", "No examples found in spark.sessionState.functionRegistry")))) } - // TODO: convert results into HTML + // TODO: convert results into HTML or .md file resultsMap.toSeq.toDF("name", "details").createOrReplaceTempView("t") val str_agg = showString( spark.sql( @@ -135,6 +146,97 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH val str = showString(spark.sql("select * from t order by 1"), 1000, 0) Files.write(Paths.get(rawCoverageFilePath), str.getBytes(StandardCharsets.UTF_8)) } + + /** + * Manual test to calculate Spark builtin expressions coverage support by the Datafusion + * directly + * + * The test will update files doc/spark_builtin_expr_df_coverage.txt, + * + * Requires to set DATAFUSIONCLI_PATH env variable to valid path to datafusion-cli + */ + test("Test Spark builtin expressions coverage by Datafusion directly") { + val builtinExamplesMap = getExamples() + + // key - function name + // value - list of result shows if function supported by Datafusion + val resultsMap = new mutable.HashMap[String, CoverageResult]() + + builtinExamplesMap.foreach { + case (funcName, q :: _) => + val queryResult = + try { + // Example with predefined values + // e.g. SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col) + if (q.toLowerCase.contains(" from values")) { + val select = selectPattern.findFirstMatchIn(q).map(_.group(0)) + val values = valuesPattern.findFirstMatchIn(q).map(_.group(0)) + (select, values) match { + case (Some(s), Some(v)) => + withTempDir { dir => + val path = new Path(dir.toURI.toString).toUri.getPath + spark.sql(s"select * $v").repartition(1).write.mode("overwrite").parquet(path) + runDatafusionCli(s"""$s '$path/*.parquet'""") + } + + case _ => + sys.error("Cannot parse properly") + } + } else { + // Process the simple example like `SELECT cos(0);` + runDatafusionCli(q) + } + CoverageResult(CoverageResultStatus.Passed.toString, Seq((q, "OK"))) + } catch { + case e: Throwable => + CoverageResult(CoverageResultStatus.Failed.toString, Seq((q, e.getMessage))) + } + resultsMap.put(funcName, queryResult) + + case (funcName, List()) => + resultsMap.put( + funcName, + CoverageResult( + CoverageResultStatus.Skipped.toString, + Seq(("", "No examples found in spark.sessionState.functionRegistry")))) + } + + resultsMap.toSeq.toDF("name", "details").createOrReplaceTempView("t") + val str = showString(spark.sql("select * from t order by 1"), 1000, 0) + Files.write(Paths.get(rawCoverageFileDatafusionPath), str.getBytes(StandardCharsets.UTF_8)) + } + + private def runDatafusionCli(sql: String) = { + + val datafusionCliPath = sys.env.getOrElse( + "DATAFUSIONCLI_PATH", + sys.error("DATAFUSIONCLI_PATH env variable not set")) + + val tempFilePath = Files.createTempFile("temp-", ".sql") + Files.write(tempFilePath, sql.getBytes) + + val command = s"""$datafusionCliPath/datafusion-cli -f $tempFilePath""" + + val stdout = new StringBuilder + val stderr = new StringBuilder + + command.!( + ProcessLogger( + out => stdout.append(out).append("\n"), // stdout + err => stderr.append(err).append("\n") // stderr + )) + + Files.delete(tempFilePath) + + val err = stderr.toString() + val out = stdout.toString() + + if (err.nonEmpty) + sys.error(s"std_err: $err") + + if (out.toLowerCase.contains("error")) + sys.error(s"std_out: $out") + } } case class CoverageResult(result: String, details: Seq[(String, String)]) From 8ed1b57457beaa8258666258d9a0e781d47e6305 Mon Sep 17 00:00:00 2001 From: comphead Date: Thu, 9 May 2024 08:18:41 -0700 Subject: [PATCH 2/9] Update spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala Co-authored-by: advancedxy --- .../org/apache/comet/CometExpressionCoverageSuite.scala | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index a3b38e6f94..45921883f4 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -213,8 +213,9 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH sys.error("DATAFUSIONCLI_PATH env variable not set")) val tempFilePath = Files.createTempFile("temp-", ".sql") + try { Files.write(tempFilePath, sql.getBytes) - + val command = s"""$datafusionCliPath/datafusion-cli -f $tempFilePath""" val stdout = new StringBuilder @@ -225,8 +226,9 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH out => stdout.append(out).append("\n"), // stdout err => stderr.append(err).append("\n") // stderr )) - - Files.delete(tempFilePath) + } finally { + Files.delete(tempFilePath) + } val err = stderr.toString() val out = stdout.toString() From 501d2ecda31845c8b4fb7f772b1c2d3e0016da7a Mon Sep 17 00:00:00 2001 From: comphead Date: Fri, 10 May 2024 10:14:23 -0700 Subject: [PATCH 3/9] Coverage: Add a manual test for DF supporting Spark expressions directly --- doc/spark_builtin_expr_coverage.txt | 419 ------------------ doc/spark_builtin_expr_coverage_agg.txt | 9 - doc/spark_builtin_expr_df_coverage.txt | 419 ------------------ docs/spark_builtin_expr_coverage.txt | 419 ++++++++++++++++++ pom.xml | 2 +- .../comet/CometExpressionCoverageSuite.scala | 192 ++++---- 6 files changed, 508 insertions(+), 952 deletions(-) delete mode 100644 doc/spark_builtin_expr_coverage.txt delete mode 100644 doc/spark_builtin_expr_coverage_agg.txt delete mode 100644 doc/spark_builtin_expr_df_coverage.txt create mode 100644 docs/spark_builtin_expr_coverage.txt diff --git a/doc/spark_builtin_expr_coverage.txt b/doc/spark_builtin_expr_coverage.txt deleted file mode 100644 index 9083a068c1..0000000000 --- a/doc/spark_builtin_expr_coverage.txt +++ /dev/null @@ -1,419 +0,0 @@ -+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|name |details | -+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|! |{PASSED, [{SELECT ! true;, OK}]} | -|% |{PASSED, [{SELECT 2 % 1.8;, OK}]} | -|& |{PASSED, [{SELECT 3 & 5;, OK}]} | -|* |{PASSED, [{SELECT 2 * 3;, OK}]} | -|+ |{PASSED, [{SELECT 1 + 2;, OK}]} | -|- |{PASSED, [{SELECT 2 - 1;, OK}]} | -|/ |{PASSED, [{SELECT 3 / 2;, OK}]} | -|< |{PASSED, [{SELECT 1 < 2;, OK}]} | -|<= |{PASSED, [{SELECT 2 <= 2;, OK}]} | -|<=> |{PASSED, [{SELECT 2 <=> 2;, OK}]} | -|= |{PASSED, [{SELECT 2 = 2;, OK}]} | -|== |{PASSED, [{SELECT 2 == 2;, OK}]} | -|> |{PASSED, [{SELECT 2 > 1;, OK}]} | -|>= |{PASSED, [{SELECT 2 >= 1;, OK}]} | -|^ |{PASSED, [{SELECT 3 ^ 5;, OK}]} | -|abs |{PASSED, [{SELECT abs(-1);, OK}]} | -|acos |{PASSED, [{SELECT acos(1);, OK}]} | -|acosh |{FAILED, [{SELECT acosh(1);, Unsupported}]} | -|add_months |{FAILED, [{SELECT add_months('2016-08-31', 1);, Unsupported}]} | -|aes_decrypt |{FAILED, [{SELECT aes_decrypt(unhex('83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94'), '0000111122223333');, Unsupported}]} | -|aes_encrypt |{FAILED, [{SELECT hex(aes_encrypt('Spark', '0000111122223333'));, Unsupported}]} | -|aggregate |{FAILED, [{SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x);, Unsupported}]} | -|and |{PASSED, [{SELECT true and true;, OK}]} | -|any |{FAILED, [{SELECT any(col) FROM VALUES (true), (false), (false) AS tab(col);, Unsupported}]} | -|any_value |{FAILED, [{SELECT any_value(col) FROM VALUES (10), (5), (20) AS tab(col);, Unsupported}]} | -|approx_count_distinct |{FAILED, [{SELECT approx_count_distinct(col1) FROM VALUES (1), (1), (2), (2), (3) tab(col1);, Unsupported}]} | -|approx_percentile |{FAILED, [{SELECT approx_percentile(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);, Unsupported}]} | -|array |{FAILED, [{SELECT array(1, 2, 3);, Unsupported}]} | -|array_agg |{FAILED, [{SELECT array_agg(col) FROM VALUES (1), (2), (1) AS tab(col);, Unsupported}]} | -|array_append |{FAILED, [{SELECT array_append(array('b', 'd', 'c', 'a'), 'd');, Unsupported}]} | -|array_compact |{FAILED, [{SELECT array_compact(array(1, 2, 3, null));, Unsupported}]} | -|array_contains |{FAILED, [{SELECT array_contains(array(1, 2, 3), 2);, Unsupported}]} | -|array_distinct |{FAILED, [{SELECT array_distinct(array(1, 2, 3, null, 3));, Unsupported}]} | -|array_except |{FAILED, [{SELECT array_except(array(1, 2, 3), array(1, 3, 5));, Unsupported}]} | -|array_insert |{FAILED, [{SELECT array_insert(array(1, 2, 3, 4), 5, 5);, Unsupported}]} | -|array_intersect |{FAILED, [{SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));, Unsupported}]} | -|array_join |{FAILED, [{SELECT array_join(array('hello', 'world'), ' ');, Unsupported}]} | -|array_max |{FAILED, [{SELECT array_max(array(1, 20, null, 3));, Unsupported}]} | -|array_min |{FAILED, [{SELECT array_min(array(1, 20, null, 3));, Unsupported}]} | -|array_position |{FAILED, [{SELECT array_position(array(3, 2, 1), 1);, Unsupported}]} | -|array_remove |{FAILED, [{SELECT array_remove(array(1, 2, 3, null, 3), 3);, Unsupported}]} | -|array_repeat |{FAILED, [{SELECT array_repeat('123', 2);, Unsupported}]} | -|array_size |{FAILED, [{SELECT array_size(array('b', 'd', 'c', 'a'));, Unsupported}]} | -|array_sort |{FAILED, [{SELECT array_sort(array(5, 6, 1), (left, right) -> case when left < right then -1 when left > right then 1 else 0 end);, Unsupported}]} | -|array_union |{FAILED, [{SELECT array_union(array(1, 2, 3), array(1, 3, 5));, Unsupported}]} | -|arrays_overlap |{FAILED, [{SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5));, Unsupported}]} | -|arrays_zip |{FAILED, [{SELECT arrays_zip(array(1, 2, 3), array(2, 3, 4));, Unsupported}]} | -|ascii |{PASSED, [{SELECT ascii('222');, OK}]} | -|asin |{PASSED, [{SELECT asin(0);, OK}]} | -|asinh |{FAILED, [{SELECT asinh(0);, Unsupported}]} | -|assert_true |{FAILED, [{SELECT assert_true(0 < 1);, Unsupported}]} | -|atan |{PASSED, [{SELECT atan(0);, OK}]} | -|atan2 |{PASSED, [{SELECT atan2(0, 0);, OK}]} | -|atanh |{FAILED, [{SELECT atanh(0);, Unsupported}]} | -|avg |{FAILED, [{SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|base64 |{FAILED, [{SELECT base64('Spark SQL');, Unsupported}]} | -|bigint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|bin |{FAILED, [{SELECT bin(13);, Unsupported}]} | -|binary |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|bit_and |{FAILED, [{SELECT bit_and(col) FROM VALUES (3), (5) AS tab(col);, Unsupported}]} | -|bit_count |{FAILED, [{SELECT bit_count(0);, Unsupported}]} | -|bit_get |{FAILED, [{SELECT bit_get(11, 0);, Unsupported}]} | -|bit_length |{PASSED, [{SELECT bit_length('Spark SQL');, OK}]} | -|bit_or |{FAILED, [{SELECT bit_or(col) FROM VALUES (3), (5) AS tab(col);, Unsupported}]} | -|bit_xor |{FAILED, [{SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col);, Unsupported}]} | -|bool_and |{FAILED, [{SELECT bool_and(col) FROM VALUES (true), (true), (true) AS tab(col);, Unsupported}]} | -|bool_or |{FAILED, [{SELECT bool_or(col) FROM VALUES (true), (false), (false) AS tab(col);, Unsupported}]} | -|boolean |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|bround |{FAILED, [{SELECT bround(2.5, 0);, Unsupported}]} | -|btrim |{PASSED, [{SELECT btrim(' SparkSQL ');, OK}]} | -|cardinality |{FAILED, [{SELECT cardinality(array('b', 'd', 'c', 'a'));, Unsupported}]} | -|cast |{PASSED, [{SELECT cast('10' as int);, OK}]} | -|cbrt |{FAILED, [{SELECT cbrt(27.0);, Unsupported}]} | -|ceil |{PASSED, [{SELECT ceil(-0.1);, OK}]} | -|ceiling |{PASSED, [{SELECT ceiling(-0.1);, OK}]} | -|char |{PASSED, [{SELECT char(65);, OK}]} | -|char_length |{PASSED, [{SELECT char_length('Spark SQL ');, OK}]} | -|character_length |{PASSED, [{SELECT character_length('Spark SQL ');, OK}]} | -|chr |{PASSED, [{SELECT chr(65);, OK}]} | -|coalesce |{PASSED, [{SELECT coalesce(NULL, 1, NULL);, OK}]} | -|collect_list |{FAILED, [{SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col);, Unsupported}]} | -|collect_set |{FAILED, [{SELECT collect_set(col) FROM VALUES (1), (2), (1) AS tab(col);, Unsupported}]} | -|concat |{FAILED, [{SELECT concat('Spark', 'SQL');, Unsupported}]} | -|concat_ws |{PASSED, [{SELECT concat_ws(' ', 'Spark', 'SQL');, OK}]} | -|contains |{FAILED, [{SELECT contains('Spark SQL', 'Spark');, Failed on native side}]} | -|conv |{FAILED, [{SELECT conv('100', 2, 10);, Unsupported}]} | -|convert_timezone |{FAILED, [{SELECT convert_timezone('Europe/Brussels', 'America/Los_Angeles', timestamp_ntz'2021-12-06 00:00:00');, Unsupported}]} | -|corr |{FAILED, [{SELECT corr(c1, c2) FROM VALUES (3, 2), (3, 3), (6, 4) as tab(c1, c2);, Unsupported}]} | -|cos |{PASSED, [{SELECT cos(0);, OK}]} | -|cosh |{FAILED, [{SELECT cosh(0);, Unsupported}]} | -|cot |{FAILED, [{SELECT cot(1);, Unsupported}]} | -|count |{FAILED, [{SELECT count(*) FROM VALUES (NULL), (5), (5), (20) AS tab(col);, Unsupported}]} | -|count_if |{FAILED, [{SELECT count_if(col % 2 = 0) FROM VALUES (NULL), (0), (1), (2), (3) AS tab(col);, Unsupported}]} | -|count_min_sketch |{FAILED, [{SELECT hex(count_min_sketch(col, 0.5d, 0.5d, 1)) FROM VALUES (1), (2), (1) AS tab(col);, Unsupported}]} | -|covar_pop |{FAILED, [{SELECT covar_pop(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);, Unsupported}]} | -|covar_samp |{FAILED, [{SELECT covar_samp(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);, Unsupported}]} | -|crc32 |{FAILED, [{SELECT crc32('Spark');, Unsupported}]} | -|csc |{FAILED, [{SELECT csc(1);, Unsupported}]} | -|cume_dist |{FAILED, [{SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|curdate |{PASSED, [{SELECT curdate();, OK}]} | -|current_catalog |{PASSED, [{SELECT current_catalog();, OK}]} | -|current_database |{PASSED, [{SELECT current_database();, OK}]} | -|current_date |{PASSED, [{SELECT current_date();, OK}]} | -|current_schema |{PASSED, [{SELECT current_schema();, OK}]} | -|current_timestamp |{FAILED, [{SELECT current_timestamp();, Failed on something else. Check query manually}]} | -|current_timezone |{PASSED, [{SELECT current_timezone();, OK}]} | -|current_user |{PASSED, [{SELECT current_user();, OK}]} | -|date |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|date_add |{FAILED, [{SELECT date_add('2016-07-30', 1);, Unsupported}]} | -|date_diff |{FAILED, [{SELECT date_diff('2009-07-31', '2009-07-30');, Unsupported}]} | -|date_format |{FAILED, [{SELECT date_format('2016-04-08', 'y');, Unsupported}]} | -|date_from_unix_date |{FAILED, [{SELECT date_from_unix_date(1);, Unsupported}]} | -|date_part |{PASSED, [{SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | -|date_sub |{FAILED, [{SELECT date_sub('2016-07-30', 1);, Unsupported}]} | -|date_trunc |{FAILED, [{SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359');, Failed on native side}]} | -|dateadd |{FAILED, [{SELECT dateadd('2016-07-30', 1);, Unsupported}]} | -|datediff |{FAILED, [{SELECT datediff('2009-07-31', '2009-07-30');, Unsupported}]} | -|datepart |{PASSED, [{SELECT datepart('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | -|day |{FAILED, [{SELECT day('2009-07-30');, Unsupported}]} | -|dayofmonth |{FAILED, [{SELECT dayofmonth('2009-07-30');, Unsupported}]} | -|dayofweek |{FAILED, [{SELECT dayofweek('2009-07-30');, Unsupported}]} | -|dayofyear |{FAILED, [{SELECT dayofyear('2016-04-09');, Unsupported}]} | -|decimal |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|decode |{FAILED, [{SELECT decode(encode('abc', 'utf-8'), 'utf-8');, Unsupported}]} | -|degrees |{FAILED, [{SELECT degrees(3.141592653589793);, Unsupported}]} | -|dense_rank |{FAILED, [{SELECT a, b, dense_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|div |{FAILED, [{SELECT 3 div 2;, Unsupported}]} | -|double |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|e |{FAILED, [{SELECT e();, Unsupported}]} | -|element_at |{FAILED, [{SELECT element_at(array(1, 2, 3), 2);, Unsupported}]} | -|elt |{FAILED, [{SELECT elt(1, 'scala', 'java');, Unsupported}]} | -|encode |{FAILED, [{SELECT encode('abc', 'utf-8');, Unsupported}]} | -|endswith |{FAILED, [{SELECT endswith('Spark SQL', 'SQL');, Failed on native side}]} | -|equal_null |{PASSED, [{SELECT equal_null(3, 3);, OK}]} | -|every |{FAILED, [{SELECT every(col) FROM VALUES (true), (true), (true) AS tab(col);, Unsupported}]} | -|exists |{FAILED, [{SELECT exists(array(1, 2, 3), x -> x % 2 == 0);, Unsupported}]} | -|exp |{PASSED, [{SELECT exp(0);, OK}]} | -|explode |{FAILED, [{SELECT explode(array(10, 20));, Unsupported}]} | -|explode_outer |{FAILED, [{SELECT explode_outer(array(10, 20));, Unsupported}]} | -|expm1 |{FAILED, [{SELECT expm1(0);, Unsupported}]} | -|extract |{PASSED, [{SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | -|factorial |{FAILED, [{SELECT factorial(5);, Unsupported}]} | -|filter |{FAILED, [{SELECT filter(array(1, 2, 3), x -> x % 2 == 1);, Unsupported}]} | -|find_in_set |{FAILED, [{SELECT find_in_set('ab','abc,b,ab,c,def');, Unsupported}]} | -|first |{FAILED, [{SELECT first(col) FROM VALUES (10), (5), (20) AS tab(col);, Unsupported}]} | -|first_value |{FAILED, [{SELECT first_value(col) FROM VALUES (10), (5), (20) AS tab(col);, Unsupported}]} | -|flatten |{FAILED, [{SELECT flatten(array(array(1, 2), array(3, 4)));, Unsupported}]} | -|float |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|floor |{PASSED, [{SELECT floor(-0.1);, OK}]} | -|forall |{FAILED, [{SELECT forall(array(1, 2, 3), x -> x % 2 == 0);, Unsupported}]} | -|format_number |{FAILED, [{SELECT format_number(12332.123456, 4);, Unsupported}]} | -|format_string |{FAILED, [{SELECT format_string("Hello World %d %s", 100, "days");, Unsupported}]} | -|from_csv |{FAILED, [{SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');, Unsupported}]} | -|from_json |{FAILED, [{SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');, Unsupported}]} | -|from_unixtime |{FAILED, [{SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');, Unsupported}]} | -|from_utc_timestamp |{FAILED, [{SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul');, Unsupported}]} | -|get |{PASSED, [{SELECT get(array(1, 2, 3), 0);, OK}]} | -|get_json_object |{FAILED, [{SELECT get_json_object('{"a":"b"}', '$.a');, Unsupported}]} | -|getbit |{FAILED, [{SELECT getbit(11, 0);, Unsupported}]} | -|greatest |{FAILED, [{SELECT greatest(10, 9, 2, 4, 3);, Unsupported}]} | -|grouping |{FAILED, [{SELECT name, grouping(name), sum(age) FROM VALUES (2, 'Alice'), (5, 'Bob') people(age, name) GROUP BY cube(name);, Failed on something else. Check query manually}]} | -|grouping_id |{FAILED, [{SELECT name, grouping_id(), sum(age), avg(height) FROM VALUES (2, 'Alice', 165), (5, 'Bob', 180) people(age, name, height) GROUP BY cube(name, height);, Failed on something else. Check query manually}]}| -|hash |{FAILED, [{SELECT hash('Spark', array(123), 2);, Unsupported}]} | -|hex |{FAILED, [{SELECT hex(17);, Unsupported}]} | -|histogram_numeric |{FAILED, [{SELECT histogram_numeric(col, 5) FROM VALUES (0), (1), (2), (10) AS tab(col);, Unsupported}]} | -|hour |{FAILED, [{SELECT hour('2009-07-30 12:58:59');, Failed on native side}]} | -|hypot |{FAILED, [{SELECT hypot(3, 4);, Unsupported}]} | -|if |{PASSED, [{SELECT if(1 < 2, 'a', 'b');, OK}]} | -|ifnull |{FAILED, [{SELECT ifnull(NULL, array('2'));, Unsupported}]} | -|ilike |{FAILED, [{SELECT ilike('Spark', '_Park');, Failed on native side}]} | -|in |{PASSED, [{SELECT 1 in(1, 2, 3);, OK}]} | -|initcap |{PASSED, [{SELECT initcap('sPark sql');, OK}]} | -|inline |{FAILED, [{SELECT inline(array(struct(1, 'a'), struct(2, 'b')));, Unsupported}]} | -|inline_outer |{FAILED, [{SELECT inline_outer(array(struct(1, 'a'), struct(2, 'b')));, Unsupported}]} | -|input_file_block_length |{FAILED, [{SELECT input_file_block_length();, Unsupported}]} | -|input_file_block_start |{FAILED, [{SELECT input_file_block_start();, Unsupported}]} | -|input_file_name |{FAILED, [{SELECT input_file_name();, Unsupported}]} | -|instr |{PASSED, [{SELECT instr('SparkSQL', 'SQL');, OK}]} | -|int |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|isnan |{FAILED, [{SELECT isnan(cast('NaN' as double));, Unsupported}]} | -|isnotnull |{PASSED, [{SELECT isnotnull(1);, OK}]} | -|isnull |{PASSED, [{SELECT isnull(1);, OK}]} | -|java_method |{FAILED, [{SELECT java_method('java.util.UUID', 'randomUUID');, Unsupported}]} | -|json_array_length |{FAILED, [{SELECT json_array_length('[1,2,3,4]');, Unsupported}]} | -|json_object_keys |{FAILED, [{SELECT json_object_keys('{}');, Unsupported}]} | -|json_tuple |{FAILED, [{SELECT json_tuple('{"a":1, "b":2}', 'a', 'b');, Unsupported}]} | -|kurtosis |{FAILED, [{SELECT kurtosis(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);, Unsupported}]} | -|lag |{FAILED, [{SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|last |{FAILED, [{SELECT last(col) FROM VALUES (10), (5), (20) AS tab(col);, Unsupported}]} | -|last_day |{FAILED, [{SELECT last_day('2009-01-12');, Unsupported}]} | -|last_value |{FAILED, [{SELECT last_value(col) FROM VALUES (10), (5), (20) AS tab(col);, Unsupported}]} | -|lcase |{PASSED, [{SELECT lcase('SparkSql');, OK}]} | -|lead |{FAILED, [{SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|least |{FAILED, [{SELECT least(10, 9, 2, 4, 3);, Unsupported}]} | -|left |{FAILED, [{SELECT left('Spark SQL', 3);, Failed on native side}]} | -|len |{PASSED, [{SELECT len('Spark SQL ');, OK}]} | -|length |{PASSED, [{SELECT length('Spark SQL ');, OK}]} | -|levenshtein |{FAILED, [{SELECT levenshtein('kitten', 'sitting');, Unsupported}]} | -|like |{FAILED, [{SELECT like('Spark', '_park');, Failed on native side}]} | -|ln |{PASSED, [{SELECT ln(1);, OK}]} | -|localtimestamp |{FAILED, [{SELECT localtimestamp();, Failed on native side}]} | -|locate |{FAILED, [{SELECT locate('bar', 'foobarbar');, Unsupported}]} | -|log |{FAILED, [{SELECT log(10, 100);, Unsupported}]} | -|log10 |{PASSED, [{SELECT log10(10);, OK}]} | -|log1p |{FAILED, [{SELECT log1p(0);, Unsupported}]} | -|log2 |{PASSED, [{SELECT log2(2);, OK}]} | -|lower |{PASSED, [{SELECT lower('SparkSql');, OK}]} | -|lpad |{FAILED, [{SELECT lpad('hi', 5, '??');, Unsupported}]} | -|ltrim |{PASSED, [{SELECT ltrim(' SparkSQL ');, OK}]} | -|make_date |{FAILED, [{SELECT make_date(2013, 7, 15);, Unsupported}]} | -|make_dt_interval |{FAILED, [{SELECT make_dt_interval(1, 12, 30, 01.001001);, Unsupported}]} | -|make_interval |{FAILED, [{SELECT make_interval(100, 11, 1, 1, 12, 30, 01.001001);, Unsupported}]} | -|make_timestamp |{FAILED, [{SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);, Unsupported}]} | -|make_timestamp_ltz |{FAILED, [{SELECT make_timestamp_ltz(2014, 12, 28, 6, 30, 45.887);, Unsupported}]} | -|make_timestamp_ntz |{FAILED, [{SELECT make_timestamp_ntz(2014, 12, 28, 6, 30, 45.887);, Unsupported}]} | -|make_ym_interval |{FAILED, [{SELECT make_ym_interval(1, 2);, Unsupported}]} | -|map |{FAILED, [{SELECT map(1.0, '2', 3.0, '4');, Unsupported}]} | -|map_concat |{FAILED, [{SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c'));, Unsupported}]} | -|map_contains_key |{FAILED, [{SELECT map_contains_key(map(1, 'a', 2, 'b'), 1);, Unsupported}]} | -|map_entries |{FAILED, [{SELECT map_entries(map(1, 'a', 2, 'b'));, Unsupported}]} | -|map_filter |{FAILED, [{SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v);, Unsupported}]} | -|map_from_arrays |{FAILED, [{SELECT map_from_arrays(array(1.0, 3.0), array('2', '4'));, Unsupported}]} | -|map_from_entries |{FAILED, [{SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b')));, Unsupported}]} | -|map_keys |{FAILED, [{SELECT map_keys(map(1, 'a', 2, 'b'));, Unsupported}]} | -|map_values |{FAILED, [{SELECT map_values(map(1, 'a', 2, 'b'));, Unsupported}]} | -|map_zip_with |{FAILED, [{SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2));, Unsupported}]} | -|mask |{FAILED, [{SELECT mask('abcd-EFGH-8765-4321');, Unsupported}]} | -|max |{FAILED, [{SELECT max(col) FROM VALUES (10), (50), (20) AS tab(col);, Unsupported}]} | -|max_by |{FAILED, [{SELECT max_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);, Unsupported}]} | -|md5 |{PASSED, [{SELECT md5('Spark');, OK}]} | -|mean |{FAILED, [{SELECT mean(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|median |{FAILED, [{SELECT median(col) FROM VALUES (0), (10) AS tab(col);, Unsupported}]} | -|min |{FAILED, [{SELECT min(col) FROM VALUES (10), (-1), (20) AS tab(col);, Unsupported}]} | -|min_by |{FAILED, [{SELECT min_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);, Unsupported}]} | -|minute |{FAILED, [{SELECT minute('2009-07-30 12:58:59');, Failed on native side}]} | -|mod |{PASSED, [{SELECT 2 % 1.8;, OK}]} | -|mode |{FAILED, [{SELECT mode(col) FROM VALUES (0), (10), (10) AS tab(col);, Unsupported}]} | -|monotonically_increasing_id|{FAILED, [{SELECT monotonically_increasing_id();, Unsupported}]} | -|month |{FAILED, [{SELECT month('2016-07-30');, Unsupported}]} | -|months_between |{FAILED, [{SELECT months_between('1997-02-28 10:30:00', '1996-10-30');, Unsupported}]} | -|named_struct |{FAILED, [{SELECT named_struct("a", 1, "b", 2, "c", 3);, Unsupported}]} | -|nanvl |{FAILED, [{SELECT nanvl(cast('NaN' as double), 123);, Unsupported}]} | -|negative |{PASSED, [{SELECT negative(1);, OK}]} | -|next_day |{FAILED, [{SELECT next_day('2015-01-14', 'TU');, Unsupported}]} | -|not |{PASSED, [{SELECT not true;, OK}]} | -|now |{FAILED, [{SELECT now();, Failed on something else. Check query manually}]} | -|nth_value |{FAILED, [{SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|ntile |{FAILED, [{SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|nullif |{PASSED, [{SELECT nullif(2, 2);, OK}]} | -|nvl |{FAILED, [{SELECT nvl(NULL, array('2'));, Unsupported}]} | -|nvl2 |{PASSED, [{SELECT nvl2(NULL, 2, 1);, OK}]} | -|octet_length |{PASSED, [{SELECT octet_length('Spark SQL');, OK}]} | -|or |{PASSED, [{SELECT true or false;, OK}]} | -|overlay |{FAILED, [{SELECT overlay('Spark SQL' PLACING '_' FROM 6);, Unsupported}]} | -|parse_url |{FAILED, [{SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST');, Unsupported}]} | -|percent_rank |{FAILED, [{SELECT a, b, percent_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|percentile |{FAILED, [{SELECT percentile(col, 0.3) FROM VALUES (0), (10) AS tab(col);, Unsupported}]} | -|percentile_approx |{FAILED, [{SELECT percentile_approx(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);, Unsupported}]} | -|pi |{FAILED, [{SELECT pi();, Unsupported}]} | -|pmod |{FAILED, [{SELECT pmod(10, 3);, Unsupported}]} | -|posexplode |{FAILED, [{SELECT posexplode(array(10,20));, Unsupported}]} | -|posexplode_outer |{FAILED, [{SELECT posexplode_outer(array(10,20));, Unsupported}]} | -|position |{FAILED, [{SELECT position('bar', 'foobarbar');, Unsupported}]} | -|positive |{PASSED, [{SELECT positive(1);, OK}]} | -|pow |{PASSED, [{SELECT pow(2, 3);, OK}]} | -|power |{PASSED, [{SELECT power(2, 3);, OK}]} | -|printf |{FAILED, [{SELECT printf("Hello World %d %s", 100, "days");, Unsupported}]} | -|quarter |{FAILED, [{SELECT quarter('2016-08-31');, Unsupported}]} | -|radians |{FAILED, [{SELECT radians(180);, Unsupported}]} | -|raise_error |{FAILED, [{SELECT raise_error('custom error message');, Unsupported}]} | -|rand |{FAILED, [{SELECT rand();, Unsupported}]} | -|randn |{FAILED, [{SELECT randn();, Unsupported}]} | -|random |{FAILED, [{SELECT random();, Unsupported}]} | -|rank |{FAILED, [{SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|reduce |{FAILED, [{SELECT reduce(array(1, 2, 3), 0, (acc, x) -> acc + x);, Unsupported}]} | -|reflect |{FAILED, [{SELECT reflect('java.util.UUID', 'randomUUID');, Unsupported}]} | -|regexp |{FAILED, [{SELECT regexp('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, Unsupported}]} | -|regexp_count |{FAILED, [{SELECT regexp_count('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');, Unsupported}]} | -|regexp_extract |{FAILED, [{SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);, Unsupported}]} | -|regexp_extract_all |{FAILED, [{SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)', 1);, Unsupported}]} | -|regexp_instr |{FAILED, [{SELECT regexp_instr('user@spark.apache.org', '@[^.]*');, Unsupported}]} | -|regexp_like |{FAILED, [{SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, Unsupported}]} | -|regexp_replace |{FAILED, [{SELECT regexp_replace('100-200', '(\\d+)', 'num');, Unsupported}]} | -|regexp_substr |{FAILED, [{SELECT regexp_substr('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');, Unsupported}]} | -|regr_avgx |{FAILED, [{SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|regr_avgy |{FAILED, [{SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|regr_count |{FAILED, [{SELECT regr_count(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|regr_intercept |{FAILED, [{SELECT regr_intercept(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);, Unsupported}]} | -|regr_r2 |{FAILED, [{SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|regr_slope |{FAILED, [{SELECT regr_slope(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);, Unsupported}]} | -|regr_sxx |{FAILED, [{SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|regr_sxy |{FAILED, [{SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|regr_syy |{FAILED, [{SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, Unsupported}]} | -|repeat |{PASSED, [{SELECT repeat('123', 2);, OK}]} | -|replace |{PASSED, [{SELECT replace('ABCabc', 'abc', 'DEF');, OK}]} | -|reverse |{PASSED, [{SELECT reverse('Spark SQL');, OK}]} | -|right |{FAILED, [{SELECT right('Spark SQL', 3);, Unsupported}]} | -|rint |{FAILED, [{SELECT rint(12.3456);, Unsupported}]} | -|rlike |{FAILED, [{SELECT rlike('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, Unsupported}]} | -|round |{PASSED, [{SELECT round(2.5, 0);, OK}]} | -|row_number |{FAILED, [{SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, Unsupported}]} | -|rpad |{FAILED, [{SELECT rpad('hi', 5, '??');, Unsupported}]} | -|rtrim |{PASSED, [{SELECT rtrim(' SparkSQL ');, OK}]} | -|schema_of_csv |{FAILED, [{SELECT schema_of_csv('1,abc');, Unsupported}]} | -|schema_of_json |{FAILED, [{SELECT schema_of_json('[{"col":0}]');, Unsupported}]} | -|sec |{FAILED, [{SELECT sec(0);, Unsupported}]} | -|second |{FAILED, [{SELECT second('2009-07-30 12:58:59');, Failed on native side}]} | -|sentences |{FAILED, [{SELECT sentences('Hi there! Good morning.');, Unsupported}]} | -|sequence |{FAILED, [{SELECT sequence(1, 5);, Unsupported}]} | -|sha |{FAILED, [{SELECT sha('Spark');, Unsupported}]} | -|sha1 |{FAILED, [{SELECT sha1('Spark');, Unsupported}]} | -|sha2 |{FAILED, [{SELECT sha2('Spark', 256);, Unsupported}]} | -|shiftleft |{PASSED, [{SELECT shiftleft(2, 1);, OK}]} | -|shiftright |{PASSED, [{SELECT shiftright(4, 1);, OK}]} | -|shiftrightunsigned |{FAILED, [{SELECT shiftrightunsigned(4, 1);, Unsupported}]} | -|shuffle |{FAILED, [{SELECT shuffle(array(1, 20, 3, 5));, Unsupported}]} | -|sign |{PASSED, [{SELECT sign(40);, OK}]} | -|signum |{PASSED, [{SELECT signum(40);, OK}]} | -|sin |{PASSED, [{SELECT sin(0);, OK}]} | -|sinh |{FAILED, [{SELECT sinh(0);, Unsupported}]} | -|size |{FAILED, [{SELECT size(array('b', 'd', 'c', 'a'));, Unsupported}]} | -|skewness |{FAILED, [{SELECT skewness(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);, Unsupported}]} | -|slice |{FAILED, [{SELECT slice(array(1, 2, 3, 4), 2, 2);, Unsupported}]} | -|smallint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|some |{FAILED, [{SELECT some(col) FROM VALUES (true), (false), (false) AS tab(col);, Unsupported}]} | -|sort_array |{FAILED, [{SELECT sort_array(array('b', 'd', null, 'c', 'a'), true);, Unsupported}]} | -|soundex |{FAILED, [{SELECT soundex('Miller');, Unsupported}]} | -|space |{FAILED, [{SELECT concat(space(2), '1');, Unsupported}]} | -|spark_partition_id |{FAILED, [{SELECT spark_partition_id();, Unsupported}]} | -|split |{FAILED, [{SELECT split('oneAtwoBthreeC', '[ABC]');, Unsupported}]} | -|split_part |{FAILED, [{SELECT split_part('11.12.13', '.', 3);, Unsupported}]} | -|sqrt |{PASSED, [{SELECT sqrt(4);, OK}]} | -|stack |{FAILED, [{SELECT stack(2, 1, 2, 3);, Unsupported}]} | -|startswith |{FAILED, [{SELECT startswith('Spark SQL', 'Spark');, Failed on native side}]} | -|std |{FAILED, [{SELECT std(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|stddev |{FAILED, [{SELECT stddev(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|stddev_pop |{FAILED, [{SELECT stddev_pop(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|stddev_samp |{FAILED, [{SELECT stddev_samp(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|str_to_map |{FAILED, [{SELECT str_to_map('a:1,b:2,c:3', ',', ':');, Unsupported}]} | -|string |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|struct |{FAILED, [{SELECT struct(1, 2, 3);, Unsupported}]} | -|substr |{FAILED, [{SELECT substr('Spark SQL', 5);, Failed on native side}]} | -|substring |{FAILED, [{SELECT substring('Spark SQL', 5);, Failed on native side}]} | -|substring_index |{FAILED, [{SELECT substring_index('www.apache.org', '.', 2);, Unsupported}]} | -|sum |{FAILED, [{SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);, Unsupported}]} | -|tan |{PASSED, [{SELECT tan(0);, OK}]} | -|tanh |{FAILED, [{SELECT tanh(0);, Unsupported}]} | -|timestamp |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|timestamp_micros |{FAILED, [{SELECT timestamp_micros(1230219000123123);, Unsupported}]} | -|timestamp_millis |{FAILED, [{SELECT timestamp_millis(1230219000123);, Unsupported}]} | -|timestamp_seconds |{FAILED, [{SELECT timestamp_seconds(1230219000);, Unsupported}]} | -|tinyint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|to_binary |{FAILED, [{SELECT to_binary('abc', 'utf-8');, Unsupported}]} | -|to_char |{FAILED, [{SELECT to_char(454, '999');, Unsupported}]} | -|to_csv |{FAILED, [{SELECT to_csv(named_struct('a', 1, 'b', 2));, Unsupported}]} | -|to_date |{PASSED, [{SELECT to_date('2009-07-30 04:17:52');, OK}]} | -|to_json |{FAILED, [{SELECT to_json(named_struct('a', 1, 'b', 2));, Unsupported}]} | -|to_number |{FAILED, [{SELECT to_number('454', '999');, Unsupported}]} | -|to_timestamp |{PASSED, [{SELECT to_timestamp('2016-12-31 00:12:00');, OK}]} | -|to_timestamp_ltz |{PASSED, [{SELECT to_timestamp_ltz('2016-12-31 00:12:00');, OK}]} | -|to_timestamp_ntz |{FAILED, [{SELECT to_timestamp_ntz('2016-12-31 00:12:00');, Failed on native side}]} | -|to_unix_timestamp |{FAILED, [{SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');, Unsupported}]} | -|to_utc_timestamp |{FAILED, [{SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul');, Unsupported}]} | -|transform |{FAILED, [{SELECT transform(array(1, 2, 3), x -> x + 1);, Unsupported}]} | -|transform_keys |{FAILED, [{SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + 1);, Unsupported}]} | -|transform_values |{FAILED, [{SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> v + 1);, Unsupported}]} | -|translate |{PASSED, [{SELECT translate('AaBbCc', 'abc', '123');, OK}]} | -|trim |{PASSED, [{SELECT trim(' SparkSQL ');, OK}]} | -|trunc |{FAILED, [{SELECT trunc('2019-08-04', 'week');, Failed on native side}]} | -|try_add |{PASSED, [{SELECT try_add(1, 2);, OK}]} | -|try_avg |{FAILED, [{SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|try_divide |{PASSED, [{SELECT try_divide(3, 2);, OK}]} | -|try_element_at |{FAILED, [{SELECT try_element_at(array(1, 2, 3), 2);, Unsupported}]} | -|try_multiply |{PASSED, [{SELECT try_multiply(2, 3);, OK}]} | -|try_subtract |{PASSED, [{SELECT try_subtract(2, 1);, OK}]} | -|try_sum |{FAILED, [{SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col);, Unsupported}]} | -|try_to_binary |{FAILED, [{SELECT try_to_binary('abc', 'utf-8');, Unsupported}]} | -|try_to_number |{FAILED, [{SELECT try_to_number('454', '999');, Unsupported}]} | -|try_to_timestamp |{PASSED, [{SELECT try_to_timestamp('2016-12-31 00:12:00');, OK}]} | -|typeof |{FAILED, [{SELECT typeof(1);, Unsupported}]} | -|ucase |{PASSED, [{SELECT ucase('SparkSql');, OK}]} | -|unbase64 |{FAILED, [{SELECT unbase64('U3BhcmsgU1FM');, Unsupported}]} | -|unhex |{FAILED, [{SELECT decode(unhex('537061726B2053514C'), 'UTF-8');, Unsupported}]} | -|unix_date |{FAILED, [{SELECT unix_date(DATE("1970-01-02"));, Unsupported}]} | -|unix_micros |{FAILED, [{SELECT unix_micros(TIMESTAMP('1970-01-01 00:00:01Z'));, Unsupported}]} | -|unix_millis |{FAILED, [{SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z'));, Unsupported}]} | -|unix_seconds |{FAILED, [{SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z'));, Unsupported}]} | -|unix_timestamp |{FAILED, [{SELECT unix_timestamp();, Unsupported}]} | -|upper |{PASSED, [{SELECT upper('SparkSql');, OK}]} | -|url_decode |{FAILED, [{SELECT url_decode('https%3A%2F%2Fspark.apache.org');, Unsupported}]} | -|url_encode |{FAILED, [{SELECT url_encode('https://spark.apache.org');, Unsupported}]} | -|user |{PASSED, [{SELECT user();, OK}]} | -|uuid |{FAILED, [{SELECT uuid();, Unsupported}]} | -|var_pop |{FAILED, [{SELECT var_pop(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|var_samp |{FAILED, [{SELECT var_samp(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|variance |{FAILED, [{SELECT variance(col) FROM VALUES (1), (2), (3) AS tab(col);, Unsupported}]} | -|version |{FAILED, [{SELECT version();, Unsupported}]} | -|weekday |{FAILED, [{SELECT weekday('2009-07-30');, Unsupported}]} | -|weekofyear |{FAILED, [{SELECT weekofyear('2008-02-20');, Unsupported}]} | -|when |{PASSED, [{SELECT CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;, OK}]} | -|width_bucket |{FAILED, [{SELECT width_bucket(5.3, 0.2, 10.6, 5);, Unsupported}]} | -|xpath |{FAILED, [{SELECT xpath('b1b2b3c1c2','a/b/text()');, Unsupported}]} | -|xpath_boolean |{FAILED, [{SELECT xpath_boolean('1','a/b');, Unsupported}]} | -|xpath_double |{FAILED, [{SELECT xpath_double('12', 'sum(a/b)');, Unsupported}]} | -|xpath_float |{FAILED, [{SELECT xpath_float('12', 'sum(a/b)');, Unsupported}]} | -|xpath_int |{FAILED, [{SELECT xpath_int('12', 'sum(a/b)');, Unsupported}]} | -|xpath_long |{FAILED, [{SELECT xpath_long('12', 'sum(a/b)');, Unsupported}]} | -|xpath_number |{FAILED, [{SELECT xpath_number('12', 'sum(a/b)');, Unsupported}]} | -|xpath_short |{FAILED, [{SELECT xpath_short('12', 'sum(a/b)');, Unsupported}]} | -|xpath_string |{FAILED, [{SELECT xpath_string('bcc','a/c');, Unsupported}]} | -|xxhash64 |{FAILED, [{SELECT xxhash64('Spark', array(123), 2);, Unsupported}]} | -|year |{PASSED, [{SELECT year('2016-07-30');, OK}]} | -|zip_with |{FAILED, [{SELECT zip_with(array(1, 2, 3), array('a', 'b', 'c'), (x, y) -> (y, x));, Unsupported}]} | -|| |{PASSED, [{SELECT 3 | 5;, OK}]} | -|~ |{FAILED, [{SELECT ~ 0;, Failed on native side}]} | -+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/doc/spark_builtin_expr_coverage_agg.txt b/doc/spark_builtin_expr_coverage_agg.txt deleted file mode 100644 index 013a84a667..0000000000 --- a/doc/spark_builtin_expr_coverage_agg.txt +++ /dev/null @@ -1,9 +0,0 @@ -+-------+--------------------------------------------------------+---+ -|result |details |cnt| -+-------+--------------------------------------------------------+---+ -|FAILED |Unsupported |282| -|FAILED |Failed on native side |16 | -|FAILED |Failed on something else. Check query manually |4 | -|PASSED |OK |101| -|SKIPPED|No examples found in spark.sessionState.functionRegistry|12 | -+-------+--------------------------------------------------------+---+ diff --git a/doc/spark_builtin_expr_df_coverage.txt b/doc/spark_builtin_expr_df_coverage.txt deleted file mode 100644 index 6f401f0b5c..0000000000 --- a/doc/spark_builtin_expr_df_coverage.txt +++ /dev/null @@ -1,419 +0,0 @@ -+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|name |details | -+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|! |{FAILED, [{SELECT ! true;, std_err: SQL error: ParserError("Expected an expression:, found: !")\n}]} | -|% |{PASSED, [{SELECT 2 % 1.8;, OK}]} | -|& |{PASSED, [{SELECT 3 & 5;, OK}]} | -|* |{PASSED, [{SELECT 2 * 3;, OK}]} | -|+ |{PASSED, [{SELECT 1 + 2;, OK}]} | -|- |{PASSED, [{SELECT 2 - 1;, OK}]} | -|/ |{PASSED, [{SELECT 3 / 2;, OK}]} | -|< |{PASSED, [{SELECT 1 < 2;, OK}]} | -|<= |{PASSED, [{SELECT 2 <= 2;, OK}]} | -|<=> |{FAILED, [{SELECT 2 <=> 2;, std_err: This feature is not implemented: Unsupported SQL binary operator Spaceship\n}]} | -|= |{PASSED, [{SELECT 2 = 2;, OK}]} | -|== |{PASSED, [{SELECT 2 == 2;, OK}]} | -|> |{PASSED, [{SELECT 2 > 1;, OK}]} | -|>= |{PASSED, [{SELECT 2 >= 1;, OK}]} | -|^ |{PASSED, [{SELECT 3 ^ 5;, OK}]} | -|abs |{PASSED, [{SELECT abs(-1);, OK}]} | -|acos |{PASSED, [{SELECT acos(1);, OK}]} | -|acosh |{PASSED, [{SELECT acosh(1);, OK}]} | -|add_months |{FAILED, [{SELECT add_months('2016-08-31', 1);, std_err: Error during planning: Invalid function 'add_months'.\nDid you mean 'radians'?\n}]} | -|aes_decrypt |{FAILED, [{SELECT aes_decrypt(unhex('83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94'), '0000111122223333');, std_err: Error during planning: Invalid function 'aes_decrypt'.\nDid you mean 'list_except'?\n}]} | -|aes_encrypt |{FAILED, [{SELECT hex(aes_encrypt('Spark', '0000111122223333'));, std_err: Error during planning: Invalid function 'hex'.\nDid you mean 'exp'?\n}]} | -|aggregate |{FAILED, [{SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|and |{PASSED, [{SELECT true and true;, OK}]} | -|any |{FAILED, [{SELECT any(col) FROM VALUES (true), (false), (false) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'any'.\nDid you mean 'abs'?\n}]} | -|any_value |{FAILED, [{SELECT any_value(col) FROM VALUES (10), (5), (20) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'any_value'.\nDid you mean 'LAST_VALUE'?\n}]} | -|approx_count_distinct |{FAILED, [{SELECT approx_count_distinct(col1) FROM VALUES (1), (1), (2), (2), (3) tab(col1);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'approx_count_distinct'.\nDid you mean 'APPROX_DISTINCT'?\n}]} | -|approx_percentile |{FAILED, [{SELECT approx_percentile(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 0.5")\n}]} | -|array |{FAILED, [{SELECT array(1, 2, 3);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_agg |{PASSED, [{SELECT array_agg(col) FROM VALUES (1), (2), (1) AS tab(col);, OK}]} | -|array_append |{FAILED, [{SELECT array_append(array('b', 'd', 'c', 'a'), 'd');, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | -|array_compact |{FAILED, [{SELECT array_compact(array(1, 2, 3, null));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_contains |{FAILED, [{SELECT array_contains(array(1, 2, 3), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_distinct |{FAILED, [{SELECT array_distinct(array(1, 2, 3, null, 3));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_except |{FAILED, [{SELECT array_except(array(1, 2, 3), array(1, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_insert |{FAILED, [{SELECT array_insert(array(1, 2, 3, 4), 5, 5);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_intersect |{FAILED, [{SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_join |{FAILED, [{SELECT array_join(array('hello', 'world'), ' ');, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'hello'")\n}]} | -|array_max |{FAILED, [{SELECT array_max(array(1, 20, null, 3));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_min |{FAILED, [{SELECT array_min(array(1, 20, null, 3));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_position |{FAILED, [{SELECT array_position(array(3, 2, 1), 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 3")\n}]} | -|array_remove |{FAILED, [{SELECT array_remove(array(1, 2, 3, null, 3), 3);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|array_repeat |{PASSED, [{SELECT array_repeat('123', 2);, OK}]} | -|array_size |{FAILED, [{SELECT array_size(array('b', 'd', 'c', 'a'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | -|array_sort |{FAILED, [{SELECT array_sort(array(5, 6, 1), (left, right) -> case when left < right then -1 when left > right then 1 else 0 end);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 5")\n}]} | -|array_union |{FAILED, [{SELECT array_union(array(1, 2, 3), array(1, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|arrays_overlap |{FAILED, [{SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|arrays_zip |{FAILED, [{SELECT arrays_zip(array(1, 2, 3), array(2, 3, 4));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|ascii |{PASSED, [{SELECT ascii('222');, OK}]} | -|asin |{PASSED, [{SELECT asin(0);, OK}]} | -|asinh |{PASSED, [{SELECT asinh(0);, OK}]} | -|assert_true |{FAILED, [{SELECT assert_true(0 < 1);, std_err: Error during planning: Invalid function 'assert_true'.\nDid you mean 'date_trunc'?\n}]} | -|atan |{PASSED, [{SELECT atan(0);, OK}]} | -|atan2 |{PASSED, [{SELECT atan2(0, 0);, OK}]} | -|atanh |{PASSED, [{SELECT atanh(0);, OK}]} | -|avg |{PASSED, [{SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|base64 |{FAILED, [{SELECT base64('Spark SQL');, std_err: Error during planning: Invalid function 'base64'.\nDid you mean 'asin'?\n}]} | -|bigint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|bin |{FAILED, [{SELECT bin(13);, std_err: Error during planning: Invalid function 'bin'.\nDid you mean 'sin'?\n}]} | -|binary |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|bit_and |{PASSED, [{SELECT bit_and(col) FROM VALUES (3), (5) AS tab(col);, OK}]} | -|bit_count |{FAILED, [{SELECT bit_count(0);, std_err: Error during planning: Invalid function 'bit_count'.\nDid you mean 'COUNT'?\n}]} | -|bit_get |{FAILED, [{SELECT bit_get(11, 0);, std_err: Error during planning: Invalid function 'bit_get'.\nDid you mean 'BIT_AND'?\n}]} | -|bit_length |{PASSED, [{SELECT bit_length('Spark SQL');, OK}]} | -|bit_or |{PASSED, [{SELECT bit_or(col) FROM VALUES (3), (5) AS tab(col);, OK}]} | -|bit_xor |{PASSED, [{SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col);, OK}]} | -|bool_and |{PASSED, [{SELECT bool_and(col) FROM VALUES (true), (true), (true) AS tab(col);, OK}]} | -|bool_or |{PASSED, [{SELECT bool_or(col) FROM VALUES (true), (false), (false) AS tab(col);, OK}]} | -|boolean |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|bround |{FAILED, [{SELECT bround(2.5, 0);, std_err: Error during planning: Invalid function 'bround'.\nDid you mean 'round'?\n}]} | -|btrim |{PASSED, [{SELECT btrim(' SparkSQL ');, OK}]} | -|cardinality |{FAILED, [{SELECT cardinality(array('b', 'd', 'c', 'a'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | -|cast |{PASSED, [{SELECT cast('10' as int);, OK}]} | -|cbrt |{PASSED, [{SELECT cbrt(27.0);, OK}]} | -|ceil |{PASSED, [{SELECT ceil(-0.1);, OK}]} | -|ceiling |{FAILED, [{SELECT ceiling(-0.1);, std_err: Error during planning: Invalid function 'ceiling'.\nDid you mean 'ceil'?\n}]} | -|char |{FAILED, [{SELECT char(65);, std_err: Error during planning: Invalid function 'char'.\nDid you mean 'chr'?\n}]} | -|char_length |{PASSED, [{SELECT char_length('Spark SQL ');, OK}]} | -|character_length |{PASSED, [{SELECT character_length('Spark SQL ');, OK}]} | -|chr |{PASSED, [{SELECT chr(65);, OK}]} | -|coalesce |{PASSED, [{SELECT coalesce(NULL, 1, NULL);, OK}]} | -|collect_list |{FAILED, [{SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'collect_list'.\nDid you mean 'make_list'?\n}]} | -|collect_set |{FAILED, [{SELECT collect_set(col) FROM VALUES (1), (2), (1) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'collect_set'.\nDid you mean 'coalesce'?\n}]} | -|concat |{PASSED, [{SELECT concat('Spark', 'SQL');, OK}]} | -|concat_ws |{PASSED, [{SELECT concat_ws(' ', 'Spark', 'SQL');, OK}]} | -|contains |{FAILED, [{SELECT contains('Spark SQL', 'Spark');, std_err: Error during planning: Invalid function 'contains'.\nDid you mean 'concat'?\n}]} | -|conv |{FAILED, [{SELECT conv('100', 2, 10);, std_err: Error during planning: Invalid function 'conv'.\nDid you mean 'cos'?\n}]} | -|convert_timezone |{FAILED, [{SELECT convert_timezone('Europe/Brussels', 'America/Los_Angeles', timestamp_ntz'2021-12-06 00:00:00');, std_err: SQL error: ParserError("Expected ), found: '2021-12-06 00:00:00'")\n}]} | -|corr |{PASSED, [{SELECT corr(c1, c2) FROM VALUES (3, 2), (3, 3), (6, 4) as tab(c1, c2);, OK}]} | -|cos |{PASSED, [{SELECT cos(0);, OK}]} | -|cosh |{PASSED, [{SELECT cosh(0);, OK}]} | -|cot |{PASSED, [{SELECT cot(1);, OK}]} | -|count |{PASSED, [{SELECT count(*) FROM VALUES (NULL), (5), (5), (20) AS tab(col);, OK}]} | -|count_if |{FAILED, [{SELECT count_if(col % 2 = 0) FROM VALUES (NULL), (0), (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'count_if'.\nDid you mean 'COUNT'?\n}]} | -|count_min_sketch |{FAILED, [{SELECT hex(count_min_sketch(col, 0.5d, 0.5d, 1)) FROM VALUES (1), (2), (1) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected ), found: d")\n}]} | -|covar_pop |{PASSED, [{SELECT covar_pop(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);, OK}]} | -|covar_samp |{PASSED, [{SELECT covar_samp(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);, OK}]} | -|crc32 |{FAILED, [{SELECT crc32('Spark');, std_err: Error during planning: Invalid function 'crc32'.\nDid you mean 'log2'?\n}]} | -|csc |{FAILED, [{SELECT csc(1);, std_err: Error during planning: Invalid function 'csc'.\nDid you mean 'cosh'?\n}]} | -|cume_dist |{PASSED, [{SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | -|curdate |{FAILED, [{SELECT curdate();, std_err: Error during planning: Invalid function 'curdate'.\nDid you mean 'to_date'?\n}]} | -|current_catalog |{FAILED, [{SELECT current_catalog();, std_err: SQL error: ParserError("Expected end of statement, found: (")\n}]} | -|current_database |{FAILED, [{SELECT current_database();, std_err: Error during planning: Invalid function 'current_database'.\nDid you mean 'current_date'?\n}]} | -|current_date |{PASSED, [{SELECT current_date();, OK}]} | -|current_schema |{FAILED, [{SELECT current_schema();, std_err: Error during planning: Invalid function 'current_schema'.\nDid you mean 'current_date'?\n}]} | -|current_timestamp |{FAILED, [{SELECT current_timestamp();, std_err: Error during planning: Invalid function 'current_timestamp'.\nDid you mean 'current_time'?\n}]} | -|current_timezone |{FAILED, [{SELECT current_timezone();, std_err: Error during planning: Invalid function 'current_timezone'.\nDid you mean 'current_time'?\n}]} | -|current_user |{FAILED, [{SELECT current_user();, std_err: SQL error: ParserError("Expected end of statement, found: (")\n}]} | -|date |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|date_add |{FAILED, [{SELECT date_add('2016-07-30', 1);, std_err: Error during planning: Invalid function 'date_add'.\nDid you mean 'datepart'?\n}]} | -|date_diff |{FAILED, [{SELECT date_diff('2009-07-31', '2009-07-30');, std_err: Error during planning: Invalid function 'date_diff'.\nDid you mean 'date_bin'?\n}]} | -|date_format |{PASSED, [{SELECT date_format('2016-04-08', 'y');, OK}]} | -|date_from_unix_date |{FAILED, [{SELECT date_from_unix_date(1);, std_err: Error during planning: Invalid function 'date_from_unix_date'.\nDid you mean 'from_unixtime'?\n}]} | -|date_part |{PASSED, [{SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | -|date_sub |{FAILED, [{SELECT date_sub('2016-07-30', 1);, std_err: Error during planning: Invalid function 'date_sub'.\nDid you mean 'date_bin'?\n}]} | -|date_trunc |{PASSED, [{SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359');, OK}]} | -|dateadd |{FAILED, [{SELECT dateadd('2016-07-30', 1);, std_err: Error during planning: Invalid function 'dateadd'.\nDid you mean 'datepart'?\n}]} | -|datediff |{FAILED, [{SELECT datediff('2009-07-31', '2009-07-30');, std_err: Error during planning: Invalid function 'datediff'.\nDid you mean 'datepart'?\n}]} | -|datepart |{PASSED, [{SELECT datepart('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | -|day |{FAILED, [{SELECT day('2009-07-30');, std_err: Error during planning: Invalid function 'day'.\nDid you mean 'today'?\n}]} | -|dayofmonth |{FAILED, [{SELECT dayofmonth('2009-07-30');, std_err: Error during planning: Invalid function 'dayofmonth'.\nDid you mean 'date_part'?\n}]} | -|dayofweek |{FAILED, [{SELECT dayofweek('2009-07-30');, std_err: Error during planning: Invalid function 'dayofweek'.\nDid you mean 'lower'?\n}]} | -|dayofyear |{FAILED, [{SELECT dayofyear('2016-04-09');, std_err: Error during planning: Invalid function 'dayofyear'.\nDid you mean 'date_part'?\n}]} | -|decimal |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|decode |{FAILED, [{SELECT decode(encode('abc', 'utf-8'), 'utf-8');, std_err: Error during planning: There is no built-in encoding named 'utf-8', currently supported encodings are: base64, hex\n}]} | -|degrees |{PASSED, [{SELECT degrees(3.141592653589793);, OK}]} | -|dense_rank |{FAILED, [{SELECT a, b, dense_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'DENSE_RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tDENSE_RANK()\n}]} | -|div |{FAILED, [{SELECT 3 div 2;, std_err: SQL error: ParserError("No infix parser for token Word(Word { value: \"div\", quote_style: None, keyword: DIV })")\n}]} | -|double |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|e |{FAILED, [{SELECT e();, std_err: Error during planning: Invalid function 'e'.\nDid you mean 'ln'?\n}]} | -|element_at |{FAILED, [{SELECT element_at(array(1, 2, 3), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|elt |{FAILED, [{SELECT elt(1, 'scala', 'java');, std_err: Error during planning: Invalid function 'elt'.\nDid you mean 'left'?\n}]} | -|encode |{FAILED, [{SELECT encode('abc', 'utf-8');, std_err: Error during planning: There is no built-in encoding named 'utf-8', currently supported encodings are: base64, hex\n}]} | -|endswith |{FAILED, [{SELECT endswith('Spark SQL', 'SQL');, std_err: Error during planning: Invalid function 'endswith'.\nDid you mean 'ends_with'?\n}]} | -|equal_null |{FAILED, [{SELECT equal_null(3, 3);, std_err: Error during planning: Invalid function 'equal_null'.\nDid you mean 'ifnull'?\n}]} | -|every |{FAILED, [{SELECT every(col) FROM VALUES (true), (true), (true) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'every'.\nDid you mean 'reverse'?\n}]} | -|exists |{FAILED, [{SELECT exists(array(1, 2, 3), x -> x % 2 == 0);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: array")\n}]} | -|exp |{PASSED, [{SELECT exp(0);, OK}]} | -|explode |{FAILED, [{SELECT explode(array(10, 20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | -|explode_outer |{FAILED, [{SELECT explode_outer(array(10, 20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | -|expm1 |{FAILED, [{SELECT expm1(0);, std_err: Error during planning: Invalid function 'expm1'.\nDid you mean 'exp'?\n}]} | -|extract |{PASSED, [{SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456');, OK}]} | -|factorial |{PASSED, [{SELECT factorial(5);, OK}]} | -|filter |{FAILED, [{SELECT filter(array(1, 2, 3), x -> x % 2 == 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|find_in_set |{PASSED, [{SELECT find_in_set('ab','abc,b,ab,c,def');, OK}]} | -|first |{FAILED, [{SELECT first(col) FROM VALUES (10), (5), (20) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'first'.\nDid you mean 'digest'?\n}]} | -|first_value |{PASSED, [{SELECT first_value(col) FROM VALUES (10), (5), (20) AS tab(col);, OK}]} | -|flatten |{FAILED, [{SELECT flatten(array(array(1, 2), array(3, 4)));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: array")\n}]} | -|float |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|floor |{PASSED, [{SELECT floor(-0.1);, OK}]} | -|forall |{FAILED, [{SELECT forall(array(1, 2, 3), x -> x % 2 == 0);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|format_number |{FAILED, [{SELECT format_number(12332.123456, 4);, std_err: Error during planning: Invalid function 'format_number'.\nDid you mean 'FIRST_VALUE'?\n}]} | -|format_string |{FAILED, [{SELECT format_string("Hello World %d %s", 100, "days");, std_err: Error during planning: Invalid function 'format_string'.\nDid you mean 'list_to_string'?\n}]} | -|from_csv |{FAILED, [{SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');, std_err: Error during planning: Invalid function 'from_csv'.\nDid you mean 'arrow_cast'?\n}]} | -|from_json |{FAILED, [{SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');, std_err: Error during planning: Invalid function 'from_json'.\nDid you mean 'array_join'?\n}]} | -|from_unixtime |{FAILED, [{SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');, std_err: Error during planning: No function matches the given name and argument types 'from_unixtime(Int64, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tfrom_unixtime(Int64)\n}]} | -|from_utc_timestamp |{FAILED, [{SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul');, std_err: Error during planning: Invalid function 'from_utc_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|get |{FAILED, [{SELECT get(array(1, 2, 3), 0);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|get_json_object |{FAILED, [{SELECT get_json_object('{"a":"b"}', '$.a');, std_err: Error during planning: Invalid function 'get_json_object'.\nDid you mean 'get_field'?\n}]} | -|getbit |{FAILED, [{SELECT getbit(11, 0);, std_err: Error during planning: Invalid function 'getbit'.\nDid you mean 'repeat'?\n}]} | -|greatest |{FAILED, [{SELECT greatest(10, 9, 2, 4, 3);, std_err: Error during planning: Invalid function 'greatest'.\nDid you mean 'repeat'?\n}]} | -|grouping |{FAILED, [{SELECT name, grouping(name), sum(age) FROM VALUES (2, 'Alice'), (5, 'Bob') people(age, name) GROUP BY cube(name);, [MISSING_AGGREGATION] The non-aggregating expression "age" is based on columns which are not participating in the GROUP BY clause.\nAdd the columns or the expression to the GROUP BY, aggregate the expression, or use "any_value(age)" if you do not care which of the values within a group is returned.;\nAggregate [name#79, spark_grouping_id#78L], [age#75, name#79]\n+- Expand [[age#75, name#76, name#77, 0], [age#75, name#76, null, 1]], [age#75, name#76, name#79, spark_grouping_id#78L]\n +- Project [age#75, name#76, name#76 AS name#77]\n +- SubqueryAlias people\n +- LocalRelation [age#75, name#76]\n}]} | -|grouping_id |{FAILED, [{SELECT name, grouping_id(), sum(age), avg(height) FROM VALUES (2, 'Alice', 165), (5, 'Bob', 180) people(age, name, height) GROUP BY cube(name, height);, [MISSING_AGGREGATION] The non-aggregating expression "age" is based on columns which are not participating in the GROUP BY clause.\nAdd the columns or the expression to the GROUP BY, aggregate the expression, or use "any_value(age)" if you do not care which of the values within a group is returned.;\nAggregate [name#245, height#246, spark_grouping_id#244L], [age#239, name#245, height#246]\n+- Expand [[age#239, name#240, height#241, name#242, height#243, 0], [age#239, name#240, height#241, name#242, null, 1], [age#239, name#240, height#241, null, height#243, 2], [age#239, name#240, height#241, null, null, 3]], [age#239, name#240, height#241, name#245, height#246, spark_grouping_id#244L]\n +- Project [age#239, name#240, height#241, name#240 AS name#242, height#241 AS height#243]\n +- SubqueryAlias people\n +- LocalRelation [age#239, name#240, height#241]\n}]}| -|hash |{FAILED, [{SELECT hash('Spark', array(123), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 123")\n}]} | -|hex |{FAILED, [{SELECT hex(17);, std_err: Error during planning: Invalid function 'hex'.\nDid you mean 'exp'?\n}]} | -|histogram_numeric |{FAILED, [{SELECT histogram_numeric(col, 5) FROM VALUES (0), (1), (2), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'histogram_numeric'.\nDid you mean 'list_remove_n'?\n}]} | -|hour |{FAILED, [{SELECT hour('2009-07-30 12:58:59');, std_err: Error during planning: Invalid function 'hour'.\nDid you mean 'CORR'?\n}]} | -|hypot |{FAILED, [{SELECT hypot(3, 4);, std_err: Error during planning: Invalid function 'hypot'.\nDid you mean 'cot'?\n}]} | -|if |{FAILED, [{SELECT if(1 < 2, 'a', 'b');, std_err: Error during planning: Invalid function 'if'.\nDid you mean 'pi'?\n}]} | -|ifnull |{FAILED, [{SELECT ifnull(NULL, array('2'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: '2'")\n}]} | -|ilike |{FAILED, [{SELECT ilike('Spark', '_Park');, std_err: Error during planning: Invalid function 'ilike'.\nDid you mean 'sinh'?\n}]} | -|in |{PASSED, [{SELECT 1 in(1, 2, 3);, OK}]} | -|initcap |{PASSED, [{SELECT initcap('sPark sql');, OK}]} | -|inline |{FAILED, [{SELECT inline(array(struct(1, 'a'), struct(2, 'b')));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n}]} | -|inline_outer |{FAILED, [{SELECT inline_outer(array(struct(1, 'a'), struct(2, 'b')));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n}]} | -|input_file_block_length |{FAILED, [{SELECT input_file_block_length();, std_err: Error during planning: Invalid function 'input_file_block_length'.\nDid you mean 'octet_length'?\n}]} | -|input_file_block_start |{FAILED, [{SELECT input_file_block_start();, std_err: Error during planning: Invalid function 'input_file_block_start'.\nDid you mean 'list_replace_all'?\n}]} | -|input_file_name |{FAILED, [{SELECT input_file_name();, std_err: Error during planning: Invalid function 'input_file_name'.\nDid you mean 'list_replace'?\n}]} | -|instr |{PASSED, [{SELECT instr('SparkSQL', 'SQL');, OK}]} | -|int |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|isnan |{PASSED, [{SELECT isnan(cast('NaN' as double));, OK}]} | -|isnotnull |{FAILED, [{SELECT isnotnull(1);, std_err: Error during planning: Invalid function 'isnotnull'.\nDid you mean 'ifnull'?\n}]} | -|isnull |{FAILED, [{SELECT isnull(1);, std_err: Error during planning: Invalid function 'isnull'.\nDid you mean 'ifnull'?\n}]} | -|java_method |{FAILED, [{SELECT java_method('java.util.UUID', 'randomUUID');, std_err: Error during planning: Invalid function 'java_method'.\nDid you mean 'make_date'?\n}]} | -|json_array_length |{FAILED, [{SELECT json_array_length('[1,2,3,4]');, std_err: Error during planning: Invalid function 'json_array_length'.\nDid you mean 'array_length'?\n}]} | -|json_object_keys |{FAILED, [{SELECT json_object_keys('{}');, std_err: Error during planning: Invalid function 'json_object_keys'.\nDid you mean 'concat_ws'?\n}]} | -|json_tuple |{FAILED, [{SELECT json_tuple('{"a":1, "b":2}', 'a', 'b');, std_err: Error during planning: Invalid function 'json_tuple'.\nDid you mean 'to_date'?\n}]} | -|kurtosis |{FAILED, [{SELECT kurtosis(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'kurtosis'.\nDid you mean 'rtrim'?\n}]} | -|lag |{PASSED, [{SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | -|last |{FAILED, [{SELECT last(col) FROM VALUES (10), (5), (20) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'last'.\nDid you mean 'left'?\n}]} | -|last_day |{FAILED, [{SELECT last_day('2009-01-12');, std_err: Error during planning: Invalid function 'last_day'.\nDid you mean 'list_cat'?\n}]} | -|last_value |{PASSED, [{SELECT last_value(col) FROM VALUES (10), (5), (20) AS tab(col);, OK}]} | -|lcase |{FAILED, [{SELECT lcase('SparkSql');, std_err: Error during planning: Invalid function 'lcase'.\nDid you mean 'lpad'?\n}]} | -|lead |{PASSED, [{SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | -|least |{FAILED, [{SELECT least(10, 9, 2, 4, 3);, std_err: Error during planning: Invalid function 'least'.\nDid you mean 'left'?\n}]} | -|left |{PASSED, [{SELECT left('Spark SQL', 3);, OK}]} | -|len |{FAILED, [{SELECT len('Spark SQL ');, std_err: Error during planning: Invalid function 'len'.\nDid you mean 'ln'?\n}]} | -|length |{PASSED, [{SELECT length('Spark SQL ');, OK}]} | -|levenshtein |{PASSED, [{SELECT levenshtein('kitten', 'sitting');, OK}]} | -|like |{FAILED, [{SELECT like('Spark', '_park');, std_err: Error during planning: Invalid function 'like'.\nDid you mean 'pi'?\n}]} | -|ln |{PASSED, [{SELECT ln(1);, OK}]} | -|localtimestamp |{FAILED, [{SELECT localtimestamp();, std_err: Error during planning: Invalid function 'localtimestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|locate |{FAILED, [{SELECT locate('bar', 'foobarbar');, std_err: Error during planning: Invalid function 'locate'.\nDid you mean 'concat'?\n}]} | -|log |{PASSED, [{SELECT log(10, 100);, OK}]} | -|log10 |{PASSED, [{SELECT log10(10);, OK}]} | -|log1p |{FAILED, [{SELECT log1p(0);, std_err: Error during planning: Invalid function 'log1p'.\nDid you mean 'log10'?\n}]} | -|log2 |{PASSED, [{SELECT log2(2);, OK}]} | -|lower |{PASSED, [{SELECT lower('SparkSql');, OK}]} | -|lpad |{PASSED, [{SELECT lpad('hi', 5, '??');, OK}]} | -|ltrim |{PASSED, [{SELECT ltrim(' SparkSQL ');, OK}]} | -|make_date |{PASSED, [{SELECT make_date(2013, 7, 15);, OK}]} | -|make_dt_interval |{FAILED, [{SELECT make_dt_interval(1, 12, 30, 01.001001);, std_err: Error during planning: Invalid function 'make_dt_interval'.\nDid you mean 'make_date'?\n}]} | -|make_interval |{FAILED, [{SELECT make_interval(100, 11, 1, 1, 12, 30, 01.001001);, std_err: Error during planning: Invalid function 'make_interval'.\nDid you mean 'make_array'?\n}]} | -|make_timestamp |{FAILED, [{SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);, std_err: Error during planning: Invalid function 'make_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|make_timestamp_ltz |{FAILED, [{SELECT make_timestamp_ltz(2014, 12, 28, 6, 30, 45.887);, std_err: Error during planning: Invalid function 'make_timestamp_ltz'.\nDid you mean 'to_timestamp'?\n}]} | -|make_timestamp_ntz |{FAILED, [{SELECT make_timestamp_ntz(2014, 12, 28, 6, 30, 45.887);, std_err: Error during planning: Invalid function 'make_timestamp_ntz'.\nDid you mean 'to_timestamp_nanos'?\n}]} | -|make_ym_interval |{FAILED, [{SELECT make_ym_interval(1, 2);, std_err: Error during planning: Invalid function 'make_ym_interval'.\nDid you mean 'make_date'?\n}]} | -|map |{FAILED, [{SELECT map(1.0, '2', 3.0, '4');, std_err: Error during planning: Invalid function 'map'.\nDid you mean 'MAX'?\n}]} | -|map_concat |{FAILED, [{SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c'));, std_err: Error during planning: Invalid function 'map_concat'.\nDid you mean 'list_concat'?\n}]} | -|map_contains_key |{FAILED, [{SELECT map_contains_key(map(1, 'a', 2, 'b'), 1);, std_err: Error during planning: Invalid function 'map_contains_key'.\nDid you mean 'list_contains'?\n}]} | -|map_entries |{FAILED, [{SELECT map_entries(map(1, 'a', 2, 'b'));, std_err: Error during planning: Invalid function 'map_entries'.\nDid you mean 'make_date'?\n}]} | -|map_filter |{FAILED, [{SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v);, std_err: Error during planning: Invalid function 'map_filter'.\nDid you mean 'make_date'?\n}]} | -|map_from_arrays |{FAILED, [{SELECT map_from_arrays(array(1.0, 3.0), array('2', '4'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1.0")\n}]} | -|map_from_entries |{FAILED, [{SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b')));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n}]} | -|map_keys |{FAILED, [{SELECT map_keys(map(1, 'a', 2, 'b'));, std_err: Error during planning: Invalid function 'map_keys'.\nDid you mean 'make_date'?\n}]} | -|map_values |{FAILED, [{SELECT map_values(map(1, 'a', 2, 'b'));, std_err: Error during planning: Invalid function 'map_values'.\nDid you mean 'LAST_VALUE'?\n}]} | -|map_zip_with |{FAILED, [{SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2));, std_err: Error during planning: Invalid function 'map_zip_with'.\nDid you mean 'ends_with'?\n}]} | -|mask |{FAILED, [{SELECT mask('abcd-EFGH-8765-4321');, std_err: Error during planning: Invalid function 'mask'.\nDid you mean 'MAX'?\n}]} | -|max |{PASSED, [{SELECT max(col) FROM VALUES (10), (50), (20) AS tab(col);, OK}]} | -|max_by |{FAILED, [{SELECT max_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'max_by'.\nDid you mean 'MAX'?\n}]} | -|md5 |{PASSED, [{SELECT md5('Spark');, OK}]} | -|mean |{PASSED, [{SELECT mean(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|median |{PASSED, [{SELECT median(col) FROM VALUES (0), (10) AS tab(col);, OK}]} | -|min |{PASSED, [{SELECT min(col) FROM VALUES (10), (-1), (20) AS tab(col);, OK}]} | -|min_by |{FAILED, [{SELECT min_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'min_by'.\nDid you mean 'MIN'?\n}]} | -|minute |{FAILED, [{SELECT minute('2009-07-30 12:58:59');, std_err: Error during planning: Invalid function 'minute'.\nDid you mean 'instr'?\n}]} | -|mod |{PASSED, [{SELECT 2 % 1.8;, OK}]} | -|mode |{FAILED, [{SELECT mode(col) FROM VALUES (0), (10), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'mode'.\nDid you mean 'md5'?\n}]} | -|monotonically_increasing_id|{FAILED, [{SELECT monotonically_increasing_id();, std_err: Error during planning: Invalid function 'monotonically_increasing_id'.\nDid you mean 'array_prepend'?\n}]} | -|month |{FAILED, [{SELECT month('2016-07-30');, std_err: Error during planning: Invalid function 'month'.\nDid you mean 'sinh'?\n}]} | -|months_between |{FAILED, [{SELECT months_between('1997-02-28 10:30:00', '1996-10-30');, std_err: Error during planning: Invalid function 'months_between'.\nDid you mean 'NTH_VALUE'?\n}]} | -|named_struct |{FAILED, [{SELECT named_struct("a", 1, "b", 2, "c", 3);, std_err: Schema error: No field named a.\n}]} | -|nanvl |{PASSED, [{SELECT nanvl(cast('NaN' as double), 123);, OK}]} | -|negative |{FAILED, [{SELECT negative(1);, std_err: Error during planning: Invalid function 'negative'.\nDid you mean 'nanvl'?\n}]} | -|next_day |{FAILED, [{SELECT next_day('2015-01-14', 'TU');, std_err: Error during planning: Invalid function 'next_day'.\nDid you mean 'today'?\n}]} | -|not |{PASSED, [{SELECT not true;, OK}]} | -|now |{PASSED, [{SELECT now();, OK}]} | -|nth_value |{PASSED, [{SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | -|ntile |{PASSED, [{SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | -|nullif |{PASSED, [{SELECT nullif(2, 2);, OK}]} | -|nvl |{FAILED, [{SELECT nvl(NULL, array('2'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: '2'")\n}]} | -|nvl2 |{PASSED, [{SELECT nvl2(NULL, 2, 1);, OK}]} | -|octet_length |{PASSED, [{SELECT octet_length('Spark SQL');, OK}]} | -|or |{PASSED, [{SELECT true or false;, OK}]} | -|overlay |{PASSED, [{SELECT overlay('Spark SQL' PLACING '_' FROM 6);, OK}]} | -|parse_url |{FAILED, [{SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST');, std_err: Error during planning: Invalid function 'parse_url'.\nDid you mean 'date_part'?\n}]} | -|percent_rank |{FAILED, [{SELECT a, b, percent_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'PERCENT_RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tPERCENT_RANK()\n}]} | -|percentile |{FAILED, [{SELECT percentile(col, 0.3) FROM VALUES (0), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'percentile'.\nDid you mean 'ceil'?\n}]} | -|percentile_approx |{FAILED, [{SELECT percentile_approx(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 0.5")\n}]} | -|pi |{PASSED, [{SELECT pi();, OK}]} | -|pmod |{FAILED, [{SELECT pmod(10, 3);, std_err: Error during planning: Invalid function 'pmod'.\nDid you mean 'pow'?\n}]} | -|posexplode |{FAILED, [{SELECT posexplode(array(10,20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | -|posexplode_outer |{FAILED, [{SELECT posexplode_outer(array(10,20));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n}]} | -|position |{FAILED, [{SELECT position('bar', 'foobarbar');, std_err: SQL error: ParserError("Position function must include IN keyword")\n}]} | -|positive |{FAILED, [{SELECT positive(1);, std_err: Error during planning: Invalid function 'positive'.\nDid you mean 'position'?\n}]} | -|pow |{PASSED, [{SELECT pow(2, 3);, OK}]} | -|power |{PASSED, [{SELECT power(2, 3);, OK}]} | -|printf |{FAILED, [{SELECT printf("Hello World %d %s", 100, "days");, std_err: Error during planning: Invalid function 'printf'.\nDid you mean 'instr'?\n}]} | -|quarter |{FAILED, [{SELECT quarter('2016-08-31');, std_err: Error during planning: Invalid function 'quarter'.\nDid you mean 'upper'?\n}]} | -|radians |{PASSED, [{SELECT radians(180);, OK}]} | -|raise_error |{FAILED, [{SELECT raise_error('custom error message');, std_err: Error during planning: Invalid function 'raise_error'.\nDid you mean 'iszero'?\n}]} | -|rand |{FAILED, [{SELECT rand();, std_err: Error during planning: Invalid function 'rand'.\nDid you mean 'rpad'?\n}]} | -|randn |{FAILED, [{SELECT randn();, std_err: Error during planning: Invalid function 'randn'.\nDid you mean 'random'?\n}]} | -|random |{PASSED, [{SELECT random();, OK}]} | -|rank |{FAILED, [{SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tRANK()\n}]} | -|reduce |{FAILED, [{SELECT reduce(array(1, 2, 3), 0, (acc, x) -> acc + x);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|reflect |{FAILED, [{SELECT reflect('java.util.UUID', 'randomUUID');, std_err: Error during planning: Invalid function 'reflect'.\nDid you mean 'repeat'?\n}]} | -|regexp |{FAILED, [{SELECT regexp('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n}]} | -|regexp_count |{FAILED, [{SELECT regexp_count('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');, std_err: Error during planning: Invalid function 'regexp_count'.\nDid you mean 'REGR_COUNT'?\n}]} | -|regexp_extract |{FAILED, [{SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);, std_err: Error during planning: Invalid function 'regexp_extract'.\nDid you mean 'regexp_match'?\n}]} | -|regexp_extract_all |{FAILED, [{SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)', 1);, std_err: Error during planning: Invalid function 'regexp_extract_all'.\nDid you mean 'regexp_replace'?\n}]} | -|regexp_instr |{FAILED, [{SELECT regexp_instr('user@spark.apache.org', '@[^.]*');, std_err: Error during planning: Invalid function 'regexp_instr'.\nDid you mean 'regexp_match'?\n}]} | -|regexp_like |{FAILED, [{SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n}]} | -|regexp_replace |{PASSED, [{SELECT regexp_replace('100-200', '(\\d+)', 'num');, OK}]} | -|regexp_substr |{FAILED, [{SELECT regexp_substr('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');, std_err: Error during planning: Invalid function 'regexp_substr'.\nDid you mean 'regexp_like'?\n}]} | -|regr_avgx |{PASSED, [{SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|regr_avgy |{PASSED, [{SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|regr_count |{PASSED, [{SELECT regr_count(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|regr_intercept |{PASSED, [{SELECT regr_intercept(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);, OK}]} | -|regr_r2 |{PASSED, [{SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|regr_slope |{PASSED, [{SELECT regr_slope(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);, OK}]} | -|regr_sxx |{PASSED, [{SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|regr_sxy |{PASSED, [{SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|regr_syy |{PASSED, [{SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);, OK}]} | -|repeat |{PASSED, [{SELECT repeat('123', 2);, OK}]} | -|replace |{PASSED, [{SELECT replace('ABCabc', 'abc', 'DEF');, OK}]} | -|reverse |{PASSED, [{SELECT reverse('Spark SQL');, OK}]} | -|right |{PASSED, [{SELECT right('Spark SQL', 3);, OK}]} | -|rint |{FAILED, [{SELECT rint(12.3456);, std_err: Error during planning: Invalid function 'rint'.\nDid you mean 'right'?\n}]} | -|rlike |{FAILED, [{SELECT rlike('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');, std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n}]} | -|round |{PASSED, [{SELECT round(2.5, 0);, OK}]} | -|row_number |{PASSED, [{SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);, OK}]} | -|rpad |{PASSED, [{SELECT rpad('hi', 5, '??');, OK}]} | -|rtrim |{PASSED, [{SELECT rtrim(' SparkSQL ');, OK}]} | -|schema_of_csv |{FAILED, [{SELECT schema_of_csv('1,abc');, std_err: Error during planning: Invalid function 'schema_of_csv'.\nDid you mean 'concat_ws'?\n}]} | -|schema_of_json |{FAILED, [{SELECT schema_of_json('[{"col":0}]');, std_err: Error during planning: Invalid function 'schema_of_json'.\nDid you mean 'concat_ws'?\n}]} | -|sec |{FAILED, [{SELECT sec(0);, std_err: Error during planning: Invalid function 'sec'.\nDid you mean 'sin'?\n}]} | -|second |{FAILED, [{SELECT second('2009-07-30 12:58:59');, std_err: Error during planning: Invalid function 'second'.\nDid you mean 'decode'?\n}]} | -|sentences |{FAILED, [{SELECT sentences('Hi there! Good morning.');, std_err: Error during planning: Invalid function 'sentences'.\nDid you mean 'degrees'?\n}]} | -|sequence |{FAILED, [{SELECT sequence(1, 5);, std_err: Error during planning: Invalid function 'sequence'.\nDid you mean 'reverse'?\n}]} | -|sha |{FAILED, [{SELECT sha('Spark');, std_err: Error during planning: Invalid function 'sha'.\nDid you mean 'chr'?\n}]} | -|sha1 |{FAILED, [{SELECT sha1('Spark');, std_err: Error during planning: Invalid function 'sha1'.\nDid you mean 'sha512'?\n}]} | -|sha2 |{FAILED, [{SELECT sha2('Spark', 256);, std_err: Error during planning: Invalid function 'sha2'.\nDid you mean 'sha512'?\n}]} | -|shiftleft |{FAILED, [{SELECT shiftleft(2, 1);, std_err: Error during planning: Invalid function 'shiftleft'.\nDid you mean 'left'?\n}]} | -|shiftright |{FAILED, [{SELECT shiftright(4, 1);, std_err: Error during planning: Invalid function 'shiftright'.\nDid you mean 'right'?\n}]} | -|shiftrightunsigned |{FAILED, [{SELECT shiftrightunsigned(4, 1);, std_err: Error during planning: Invalid function 'shiftrightunsigned'.\nDid you mean 'substring_index'?\n}]} | -|shuffle |{FAILED, [{SELECT shuffle(array(1, 20, 3, 5));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|sign |{FAILED, [{SELECT sign(40);, std_err: Error during planning: Invalid function 'sign'.\nDid you mean 'sin'?\n}]} | -|signum |{PASSED, [{SELECT signum(40);, OK}]} | -|sin |{PASSED, [{SELECT sin(0);, OK}]} | -|sinh |{PASSED, [{SELECT sinh(0);, OK}]} | -|size |{FAILED, [{SELECT size(array('b', 'd', 'c', 'a'));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | -|skewness |{FAILED, [{SELECT skewness(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'skewness'.\nDid you mean 'degrees'?\n}]} | -|slice |{FAILED, [{SELECT slice(array(1, 2, 3, 4), 2, 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|smallint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|some |{FAILED, [{SELECT some(col) FROM VALUES (true), (false), (false) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'some'.\nDid you mean 'SUM'?\n}]} | -|sort_array |{FAILED, [{SELECT sort_array(array('b', 'd', null, 'c', 'a'), true);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n}]} | -|soundex |{FAILED, [{SELECT soundex('Miller');, std_err: Error during planning: Invalid function 'soundex'.\nDid you mean 'round'?\n}]} | -|space |{FAILED, [{SELECT concat(space(2), '1');, std_err: Error during planning: Invalid function 'space'.\nDid you mean 'lpad'?\n}]} | -|spark_partition_id |{FAILED, [{SELECT spark_partition_id();, std_err: Error during planning: Invalid function 'spark_partition_id'.\nDid you mean 'list_position'?\n}]} | -|split |{FAILED, [{SELECT split('oneAtwoBthreeC', '[ABC]');, std_err: Error during planning: Invalid function 'split'.\nDid you mean 'pi'?\n}]} | -|split_part |{PASSED, [{SELECT split_part('11.12.13', '.', 3);, OK}]} | -|sqrt |{PASSED, [{SELECT sqrt(4);, OK}]} | -|stack |{FAILED, [{SELECT stack(2, 1, 2, 3);, std_err: Error during planning: Invalid function 'stack'.\nDid you mean 'tan'?\n}]} | -|startswith |{FAILED, [{SELECT startswith('Spark SQL', 'Spark');, std_err: Error during planning: Invalid function 'startswith'.\nDid you mean 'starts_with'?\n}]} | -|std |{FAILED, [{SELECT std(col) FROM VALUES (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'std'.\nDid you mean 'sin'?\n}]} | -|stddev |{PASSED, [{SELECT stddev(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|stddev_pop |{PASSED, [{SELECT stddev_pop(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|stddev_samp |{PASSED, [{SELECT stddev_samp(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|str_to_map |{FAILED, [{SELECT str_to_map('a:1,b:2,c:3', ',', ':');, std_err: Error during planning: Invalid function 'str_to_map'.\nDid you mean 'date_format'?\n}]} | -|string |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|struct |{PASSED, [{SELECT struct(1, 2, 3);, OK}]} | -|substr |{PASSED, [{SELECT substr('Spark SQL', 5);, OK}]} | -|substring |{FAILED, [{SELECT substring('Spark SQL', 5);, std_err: This feature is not implemented: Unsupported ast node in sqltorel: Substring { expr: Value(SingleQuotedString("Spark SQL")), substring_from: Some(Value(Number("5", false))), substring_for: None, special: true }\n}]} | -|substring_index |{PASSED, [{SELECT substring_index('www.apache.org', '.', 2);, OK}]} | -|sum |{PASSED, [{SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);, OK}]} | -|tan |{PASSED, [{SELECT tan(0);, OK}]} | -|tanh |{PASSED, [{SELECT tanh(0);, OK}]} | -|timestamp |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|timestamp_micros |{FAILED, [{SELECT timestamp_micros(1230219000123123);, std_err: Error during planning: Invalid function 'timestamp_micros'.\nDid you mean 'to_timestamp_micros'?\n}]} | -|timestamp_millis |{FAILED, [{SELECT timestamp_millis(1230219000123);, std_err: Error during planning: Invalid function 'timestamp_millis'.\nDid you mean 'to_timestamp_millis'?\n}]} | -|timestamp_seconds |{FAILED, [{SELECT timestamp_seconds(1230219000);, std_err: Error during planning: Invalid function 'timestamp_seconds'.\nDid you mean 'to_timestamp_seconds'?\n}]} | -|tinyint |{SKIPPED, [{, No examples found in spark.sessionState.functionRegistry}]} | -|to_binary |{FAILED, [{SELECT to_binary('abc', 'utf-8');, std_err: Error during planning: Invalid function 'to_binary'.\nDid you mean 'to_char'?\n}]} | -|to_char |{FAILED, [{SELECT to_char(454, '999');, std_err: Error during planning: No function matches the given name and argument types 'to_char(Int64, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tto_char(Date32, Utf8)\n\tto_char(Date64, Utf8)\n\tto_char(Time32(Millisecond), Utf8)\n\tto_char(Time32(Second), Utf8)\n\tto_char(Time64(Microsecond), Utf8)\n\tto_char(Time64(Nanosecond), Utf8)\n\tto_char(Timestamp(Second, None), Utf8)\n\tto_char(Timestamp(Second, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Millisecond, None), Utf8)\n\tto_char(Timestamp(Millisecond, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Microsecond, None), Utf8)\n\tto_char(Timestamp(Microsecond, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Nanosecond, None), Utf8)\n\tto_char(Timestamp(Nanosecond, Some("+TZ")), Utf8)\n\tto_char(Duration(Second), Utf8)\n\tto_char(Duration(Millisecond), Utf8)\n\tto_char(Duration(Microsecond), Utf8)\n\tto_char(Duration(Nanosecond), Utf8)\n}]} | -|to_csv |{FAILED, [{SELECT to_csv(named_struct('a', 1, 'b', 2));, std_err: Error during planning: Invalid function 'to_csv'.\nDid you mean 'to_char'?\n}]} | -|to_date |{PASSED, [{SELECT to_date('2009-07-30 04:17:52');, OK}]} | -|to_json |{FAILED, [{SELECT to_json(named_struct('a', 1, 'b', 2));, std_err: Error during planning: Invalid function 'to_json'.\nDid you mean 'to_date'?\n}]} | -|to_number |{FAILED, [{SELECT to_number('454', '999');, std_err: Error during planning: Invalid function 'to_number'.\nDid you mean 'to_date'?\n}]} | -|to_timestamp |{PASSED, [{SELECT to_timestamp('2016-12-31 00:12:00');, OK}]} | -|to_timestamp_ltz |{FAILED, [{SELECT to_timestamp_ltz('2016-12-31 00:12:00');, std_err: Error during planning: Invalid function 'to_timestamp_ltz'.\nDid you mean 'to_timestamp'?\n}]} | -|to_timestamp_ntz |{FAILED, [{SELECT to_timestamp_ntz('2016-12-31 00:12:00');, std_err: Error during planning: Invalid function 'to_timestamp_ntz'.\nDid you mean 'to_timestamp_nanos'?\n}]} | -|to_unix_timestamp |{FAILED, [{SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');, std_err: Error during planning: Invalid function 'to_unix_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|to_utc_timestamp |{FAILED, [{SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul');, std_err: Error during planning: Invalid function 'to_utc_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|transform |{FAILED, [{SELECT transform(array(1, 2, 3), x -> x + 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|transform_keys |{FAILED, [{SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|transform_values |{FAILED, [{SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> v + 1);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|translate |{PASSED, [{SELECT translate('AaBbCc', 'abc', '123');, OK}]} | -|trim |{PASSED, [{SELECT trim(' SparkSQL ');, OK}]} | -|trunc |{FAILED, [{SELECT trunc('2019-08-04', 'week');, std_err: Error during planning: No function matches the given name and argument types 'trunc(Utf8, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\ttrunc(Float32, Int64)\n\ttrunc(Float64, Int64)\n\ttrunc(Float64)\n\ttrunc(Float32)\n}]} | -|try_add |{FAILED, [{SELECT try_add(1, 2);, std_err: Error during planning: Invalid function 'try_add'.\nDid you mean 'rpad'?\n}]} | -|try_avg |{FAILED, [{SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'try_avg'.\nDid you mean 'AVG'?\n}]} | -|try_divide |{FAILED, [{SELECT try_divide(3, 2);, std_err: Error during planning: Invalid function 'try_divide'.\nDid you mean 'to_date'?\n}]} | -|try_element_at |{FAILED, [{SELECT try_element_at(array(1, 2, 3), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|try_multiply |{FAILED, [{SELECT try_multiply(2, 3);, std_err: Error during planning: Invalid function 'try_multiply'.\nDid you mean 'trunc'?\n}]} | -|try_subtract |{FAILED, [{SELECT try_subtract(2, 1);, std_err: Error during planning: Invalid function 'try_subtract'.\nDid you mean 'array_extract'?\n}]} | -|try_sum |{FAILED, [{SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'try_sum'.\nDid you mean 'trim'?\n}]} | -|try_to_binary |{FAILED, [{SELECT try_to_binary('abc', 'utf-8');, std_err: Error during planning: Invalid function 'try_to_binary'.\nDid you mean 'date_bin'?\n}]} | -|try_to_number |{FAILED, [{SELECT try_to_number('454', '999');, std_err: Error during planning: Invalid function 'try_to_number'.\nDid you mean 'array_to_string'?\n}]} | -|try_to_timestamp |{FAILED, [{SELECT try_to_timestamp('2016-12-31 00:12:00');, std_err: Error during planning: Invalid function 'try_to_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|typeof |{FAILED, [{SELECT typeof(1);, std_err: Error during planning: Invalid function 'typeof'.\nDid you mean 'repeat'?\n}]} | -|ucase |{FAILED, [{SELECT ucase('SparkSql');, std_err: Error during planning: Invalid function 'ucase'.\nDid you mean 'acos'?\n}]} | -|unbase64 |{FAILED, [{SELECT unbase64('U3BhcmsgU1FM');, std_err: Error during planning: Invalid function 'unbase64'.\nDid you mean 'asin'?\n}]} | -|unhex |{FAILED, [{SELECT decode(unhex('537061726B2053514C'), 'UTF-8');, std_err: Error during planning: Invalid function 'unhex'.\nDid you mean 'upper'?\n}]} | -|unix_date |{FAILED, [{SELECT unix_date(DATE("1970-01-02"));, std_err: Error during planning: Invalid function 'unix_date'.\nDid you mean 'to_date'?\n}]} | -|unix_micros |{FAILED, [{SELECT unix_micros(TIMESTAMP('1970-01-01 00:00:01Z'));, std_err: Error during planning: Invalid function 'unix_micros'.\nDid you mean 'iszero'?\n}]} | -|unix_millis |{FAILED, [{SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z'));, std_err: Error during planning: Invalid function 'unix_millis'.\nDid you mean 'nullif'?\n}]} | -|unix_seconds |{FAILED, [{SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z'));, std_err: Error during planning: Invalid function 'unix_seconds'.\nDid you mean 'encode'?\n}]} | -|unix_timestamp |{FAILED, [{SELECT unix_timestamp();, std_err: Error during planning: Invalid function 'unix_timestamp'.\nDid you mean 'to_timestamp'?\n}]} | -|upper |{PASSED, [{SELECT upper('SparkSql');, OK}]} | -|url_decode |{FAILED, [{SELECT url_decode('https%3A%2F%2Fspark.apache.org');, std_err: Error during planning: Invalid function 'url_decode'.\nDid you mean 'decode'?\n}]} | -|url_encode |{FAILED, [{SELECT url_encode('https://spark.apache.org');, std_err: Error during planning: Invalid function 'url_encode'.\nDid you mean 'encode'?\n}]} | -|user |{FAILED, [{SELECT user();, std_err: SQL error: ParserError("Expected end of statement, found: (")\n}]} | -|uuid |{PASSED, [{SELECT uuid();, OK}]} | -|var_pop |{PASSED, [{SELECT var_pop(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|var_samp |{PASSED, [{SELECT var_samp(col) FROM VALUES (1), (2), (3) AS tab(col);, OK}]} | -|variance |{FAILED, [{SELECT variance(col) FROM VALUES (1), (2), (3) AS tab(col);, std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'variance'.\nDid you mean 'range'?\n}]} | -|version |{FAILED, [{SELECT version();, std_err: Error during planning: Invalid function 'version'.\nDid you mean 'asin'?\n}]} | -|weekday |{FAILED, [{SELECT weekday('2009-07-30');, std_err: Error during planning: Invalid function 'weekday'.\nDid you mean 'overlay'?\n}]} | -|weekofyear |{FAILED, [{SELECT weekofyear('2008-02-20');, std_err: Error during planning: Invalid function 'weekofyear'.\nDid you mean 'to_char'?\n}]} | -|when |{PASSED, [{SELECT CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;, OK}]} | -|width_bucket |{FAILED, [{SELECT width_bucket(5.3, 0.2, 10.6, 5);, std_err: Error during planning: Invalid function 'width_bucket'.\nDid you mean 'list_except'?\n}]} | -|xpath |{FAILED, [{SELECT xpath('b1b2b3c1c2','a/b/text()');, std_err: Error during planning: Invalid function 'xpath'.\nDid you mean 'rpad'?\n}]} | -|xpath_boolean |{FAILED, [{SELECT xpath_boolean('1','a/b');, std_err: Error during planning: Invalid function 'xpath_boolean'.\nDid you mean 'date_format'?\n}]} | -|xpath_double |{FAILED, [{SELECT xpath_double('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_double'.\nDid you mean 'date_trunc'?\n}]} | -|xpath_float |{FAILED, [{SELECT xpath_float('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_float'.\nDid you mean 'date_format'?\n}]} | -|xpath_int |{FAILED, [{SELECT xpath_int('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_int'.\nDid you mean 'date_bin'?\n}]} | -|xpath_long |{FAILED, [{SELECT xpath_long('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_long'.\nDid you mean 'date_bin'?\n}]} | -|xpath_number |{FAILED, [{SELECT xpath_number('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_number'.\nDid you mean 'date_bin'?\n}]} | -|xpath_short |{FAILED, [{SELECT xpath_short('12', 'sum(a/b)');, std_err: Error during planning: Invalid function 'xpath_short'.\nDid you mean 'list_sort'?\n}]} | -|xpath_string |{FAILED, [{SELECT xpath_string('bcc','a/c');, std_err: Error during planning: Invalid function 'xpath_string'.\nDid you mean 'array_to_string'?\n}]} | -|xxhash64 |{FAILED, [{SELECT xxhash64('Spark', array(123), 2);, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 123")\n}]} | -|year |{FAILED, [{SELECT year('2016-07-30');, std_err: Error during planning: Invalid function 'year'.\nDid you mean 'VAR'?\n}]} | -|zip_with |{FAILED, [{SELECT zip_with(array(1, 2, 3), array('a', 'b', 'c'), (x, y) -> (y, x));, std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n}]} | -|| |{PASSED, [{SELECT 3 | 5;, OK}]} | -|~ |{FAILED, [{SELECT ~ 0;, std_err: SQL error: ParserError("Expected an expression:, found: ~")\n}]} | -+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/docs/spark_builtin_expr_coverage.txt b/docs/spark_builtin_expr_coverage.txt new file mode 100644 index 0000000000..7486e63806 --- /dev/null +++ b/docs/spark_builtin_expr_coverage.txt @@ -0,0 +1,419 @@ ++---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +|name |query |result |cometMessage |datafusionMessage | ++---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +|! |SELECT ! true; |PASSED |OK |std_err: SQL error: ParserError("Expected an expression:, found: !")\n | +|% |SELECT 2 % 1.8; |PASSED |OK |OK | +|& |SELECT 3 & 5; |PASSED |OK |OK | +|* |SELECT 2 * 3; |PASSED |OK |OK | +|+ |SELECT 1 + 2; |PASSED |OK |OK | +|- |SELECT 2 - 1; |PASSED |OK |OK | +|/ |SELECT 3 / 2; |PASSED |OK |OK | +|< |SELECT 1 < 2; |PASSED |OK |OK | +|<= |SELECT 2 <= 2; |PASSED |OK |OK | +|<=> |SELECT 2 <=> 2; |PASSED |OK |std_err: This feature is not implemented: Unsupported SQL binary operator Spaceship\n | +|= |SELECT 2 = 2; |PASSED |OK |OK | +|== |SELECT 2 == 2; |PASSED |OK |OK | +|> |SELECT 2 > 1; |PASSED |OK |OK | +|>= |SELECT 2 >= 1; |PASSED |OK |OK | +|^ |SELECT 3 ^ 5; |PASSED |OK |OK | +|abs |SELECT abs(-1); |PASSED |OK |OK | +|acos |SELECT acos(1); |PASSED |OK |OK | +|acosh |SELECT acosh(1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|add_months |SELECT add_months('2016-08-31', 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'add_months'.\nDid you mean 'acos'?\n | +|aes_decrypt |SELECT aes_decrypt(unhex('83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94'), '0000111122223333'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'aes_decrypt'.\nDid you mean 'list_except'?\n | +|aes_encrypt |SELECT hex(aes_encrypt('Spark', '0000111122223333')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'hex'.\nDid you mean 'exp'?\n | +|aggregate |SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|and |SELECT true and true; |PASSED |OK |OK | +|any |SELECT any(col) FROM VALUES (true), (false), (false) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'any'.\nDid you mean 'abs'?\n | +|any_value |SELECT any_value(col) FROM VALUES (10), (5), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'any_value'.\nDid you mean 'LAST_VALUE'?\n | +|approx_count_distinct |SELECT approx_count_distinct(col1) FROM VALUES (1), (1), (2), (2), (3) tab(col1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'approx_count_distinct'.\nDid you mean 'APPROX_DISTINCT'?\n | +|approx_percentile |SELECT approx_percentile(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 0.5")\n | +|array |SELECT array(1, 2, 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_agg |SELECT array_agg(col) FROM VALUES (1), (2), (1) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|array_append |SELECT array_append(array('b', 'd', 'c', 'a'), 'd'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n | +|array_compact |SELECT array_compact(array(1, 2, 3, null)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_contains |SELECT array_contains(array(1, 2, 3), 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_distinct |SELECT array_distinct(array(1, 2, 3, null, 3)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_except |SELECT array_except(array(1, 2, 3), array(1, 3, 5)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_insert |SELECT array_insert(array(1, 2, 3, 4), 5, 5); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_intersect |SELECT array_intersect(array(1, 2, 3), array(1, 3, 5)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_join |SELECT array_join(array('hello', 'world'), ' '); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'hello'")\n | +|array_max |SELECT array_max(array(1, 20, null, 3)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_min |SELECT array_min(array(1, 20, null, 3)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_position |SELECT array_position(array(3, 2, 1), 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 3")\n | +|array_remove |SELECT array_remove(array(1, 2, 3, null, 3), 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|array_repeat |SELECT array_repeat('123', 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|array_size |SELECT array_size(array('b', 'd', 'c', 'a')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n | +|array_sort |SELECT array_sort(array(5, 6, 1), (left, right) -> case when left < right then -1 when left > right then 1 else 0 end); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 5")\n | +|array_union |SELECT array_union(array(1, 2, 3), array(1, 3, 5)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|arrays_overlap |SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|arrays_zip |SELECT arrays_zip(array(1, 2, 3), array(2, 3, 4)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|ascii |SELECT ascii('222'); |PASSED |OK |OK | +|asin |SELECT asin(0); |PASSED |OK |OK | +|asinh |SELECT asinh(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|assert_true |SELECT assert_true(0 < 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'assert_true'.\nDid you mean 'date_trunc'?\n | +|atan |SELECT atan(0); |PASSED |OK |OK | +|atan2 |SELECT atan2(0, 0); |PASSED |OK |OK | +|atanh |SELECT atanh(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|avg |SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|base64 |SELECT base64('Spark SQL'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'base64'.\nDid you mean 'asinh'?\n | +|bigint | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|bin |SELECT bin(13); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'bin'.\nDid you mean 'sin'?\n | +|binary | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|bit_and |SELECT bit_and(col) FROM VALUES (3), (5) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|bit_count |SELECT bit_count(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'bit_count'.\nDid you mean 'COUNT'?\n | +|bit_get |SELECT bit_get(11, 0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'bit_get'.\nDid you mean 'BIT_AND'?\n | +|bit_length |SELECT bit_length('Spark SQL'); |PASSED |OK |OK | +|bit_or |SELECT bit_or(col) FROM VALUES (3), (5) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|bit_xor |SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|bool_and |SELECT bool_and(col) FROM VALUES (true), (true), (true) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|bool_or |SELECT bool_or(col) FROM VALUES (true), (false), (false) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|boolean | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|bround |SELECT bround(2.5, 0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'bround'.\nDid you mean 'round'?\n | +|btrim |SELECT btrim(' SparkSQL '); |PASSED |OK |OK | +|cardinality |SELECT cardinality(array('b', 'd', 'c', 'a')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n | +|cast |SELECT cast('10' as int); |PASSED |OK |OK | +|cbrt |SELECT cbrt(27.0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|ceil |SELECT ceil(-0.1); |PASSED |OK |OK | +|ceiling |SELECT ceiling(-0.1); |PASSED |OK |std_err: Error during planning: Invalid function 'ceiling'.\nDid you mean 'ceil'?\n | +|char |SELECT char(65); |PASSED |OK |std_err: Error during planning: Invalid function 'char'.\nDid you mean 'chr'?\n | +|char_length |SELECT char_length('Spark SQL '); |PASSED |OK |OK | +|character_length |SELECT character_length('Spark SQL '); |PASSED |OK |OK | +|chr |SELECT chr(65); |PASSED |OK |OK | +|coalesce |SELECT coalesce(NULL, 1, NULL); |PASSED |OK |OK | +|collect_list |SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'collect_list'.\nDid you mean 'make_list'?\n | +|collect_set |SELECT collect_set(col) FROM VALUES (1), (2), (1) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'collect_set'.\nDid you mean 'coalesce'?\n | +|concat |SELECT concat('Spark', 'SQL'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|concat_ws |SELECT concat_ws(' ', 'Spark', 'SQL'); |PASSED |OK |OK | +|contains |SELECT contains('Spark SQL', 'Spark'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'contains'.\nDid you mean 'concat_ws'?\n | +|conv |SELECT conv('100', 2, 10); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'conv'.\nDid you mean 'cot'?\n | +|convert_timezone |SELECT convert_timezone('Europe/Brussels', 'America/Los_Angeles', timestamp_ntz'2021-12-06 00:00:00'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected ), found: '2021-12-06 00:00:00'")\n | +|corr |SELECT corr(c1, c2) FROM VALUES (3, 2), (3, 3), (6, 4) as tab(c1, c2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|cos |SELECT cos(0); |PASSED |OK |OK | +|cosh |SELECT cosh(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|cot |SELECT cot(1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|count |SELECT count(*) FROM VALUES (NULL), (5), (5), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|count_if |SELECT count_if(col % 2 = 0) FROM VALUES (NULL), (0), (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'count_if'.\nDid you mean 'COUNT'?\n | +|count_min_sketch |SELECT hex(count_min_sketch(col, 0.5d, 0.5d, 1)) FROM VALUES (1), (2), (1) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected ), found: d")\n | +|covar_pop |SELECT covar_pop(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|covar_samp |SELECT covar_samp(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|crc32 |SELECT crc32('Spark'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'crc32'.\nDid you mean 'ascii'?\n | +|csc |SELECT csc(1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'csc'.\nDid you mean 'chr'?\n | +|cume_dist |SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|curdate |SELECT curdate(); |PASSED |OK |std_err: Error during planning: Invalid function 'curdate'.\nDid you mean 'to_date'?\n | +|current_catalog |SELECT current_catalog(); |PASSED |OK |std_err: SQL error: ParserError("Expected end of statement, found: (")\n | +|current_database |SELECT current_database(); |PASSED |OK |std_err: Error during planning: Invalid function 'current_database'.\nDid you mean 'current_date'?\n | +|current_date |SELECT current_date(); |PASSED |OK |OK | +|current_schema |SELECT current_schema(); |PASSED |OK |std_err: Error during planning: Invalid function 'current_schema'.\nDid you mean 'current_time'?\n | +|current_timestamp |SELECT current_timestamp(); |FAILED |\nResults do not match for query:\nTimezone: sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]\nTimezone Env: \n\n== Parsed Logical Plan ==\nProject [current_timestamp() AS current_timestamp()#3031, x#3015]\n+- SubqueryAlias tbl\n +- View (`tbl`, [x#3015])\n +- Relation [x#3015] parquet\n\n== Analyzed Logical Plan ==\ncurrent_timestamp(): timestamp, x: string\nProject [current_timestamp() AS current_timestamp()#3031, x#3015]\n+- SubqueryAlias tbl\n +- View (`tbl`, [x#3015])\n +- Relation [x#3015] parquet\n\n== Optimized Logical Plan ==\nProject [2024-05-10 10:13:21.77322 AS current_timestamp()#3031, x#3015]\n+- Relation [x#3015] parquet\n\n== Physical Plan ==\n*(1) ColumnarToRow\n+- CometProject [current_timestamp()#3031, x#3015], [2024-05-10 10:13:21.77322 AS current_timestamp()#3031, x#3015]\n +- CometScan parquet [x#3015] Batched: true, DataFilters: [], Format: CometParquet, Location: InMemoryFileIndex(1 paths)[file:/private/var/folders/6f/_s1vnnd55zgfkx7zlwnrnv0h0000gn/T/spark-62..., PartitionFilters: [], PushedFilters: [], ReadSchema: struct\n\n== Results ==\n\n== Results ==\n!== Correct Answer - 1 == == Spark Answer - 1 ==\n struct struct\n![2024-05-10 10:13:21.749547,dummy] [2024-05-10 10:13:21.77322,dummy]\n \n |std_err: Error during planning: Invalid function 'current_timestamp'.\nDid you mean 'current_time'?\n | +|current_timezone |SELECT current_timezone(); |PASSED |OK |std_err: Error during planning: Invalid function 'current_timezone'.\nDid you mean 'current_time'?\n | +|current_user |SELECT current_user(); |PASSED |OK |std_err: SQL error: ParserError("Expected end of statement, found: (")\n | +|date | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|date_add |SELECT date_add('2016-07-30', 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'date_add'.\nDid you mean 'date_bin'?\n | +|date_diff |SELECT date_diff('2009-07-31', '2009-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'date_diff'.\nDid you mean 'date_bin'?\n | +|date_format |SELECT date_format('2016-04-08', 'y'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|date_from_unix_date |SELECT date_from_unix_date(1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'date_from_unix_date'.\nDid you mean 'from_unixtime'?\n | +|date_part |SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456'); |PASSED |OK |OK | +|date_sub |SELECT date_sub('2016-07-30', 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'date_sub'.\nDid you mean 'date_bin'?\n | +|date_trunc |SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359'); |FAILED |Failed on native side: found CometNativeException | | +|dateadd |SELECT dateadd('2016-07-30', 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'dateadd'.\nDid you mean 'datepart'?\n | +|datediff |SELECT datediff('2009-07-31', '2009-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'datediff'.\nDid you mean 'datepart'?\n | +|datepart |SELECT datepart('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456'); |PASSED |OK |OK | +|day |SELECT day('2009-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'day'.\nDid you mean 'today'?\n | +|dayofmonth |SELECT dayofmonth('2009-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'dayofmonth'.\nDid you mean 'datepart'?\n | +|dayofweek |SELECT dayofweek('2009-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'dayofweek'.\nDid you mean 'degrees'?\n | +|dayofyear |SELECT dayofyear('2016-04-09'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'dayofyear'.\nDid you mean 'to_char'?\n | +|decimal | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|decode |SELECT decode(encode('abc', 'utf-8'), 'utf-8'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: There is no built-in encoding named 'utf-8', currently supported encodings are: base64, hex\n | +|degrees |SELECT degrees(3.141592653589793); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|dense_rank |SELECT a, b, dense_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'DENSE_RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tDENSE_RANK()\n | +|div |SELECT 3 div 2; |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("No infix parser for token Word(Word { value: \"div\", quote_style: None, keyword: DIV })")\n | +|double | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|e |SELECT e(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'e'.\nDid you mean 'exp'?\n | +|element_at |SELECT element_at(array(1, 2, 3), 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|elt |SELECT elt(1, 'scala', 'java'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'elt'.\nDid you mean 'ln'?\n | +|encode |SELECT encode('abc', 'utf-8'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: There is no built-in encoding named 'utf-8', currently supported encodings are: base64, hex\n | +|endswith |SELECT endswith('Spark SQL', 'SQL'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'endswith'.\nDid you mean 'ends_with'?\n | +|equal_null |SELECT equal_null(3, 3); |PASSED |OK |std_err: Error during planning: Invalid function 'equal_null'.\nDid you mean 'ifnull'?\n | +|every |SELECT every(col) FROM VALUES (true), (true), (true) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'every'.\nDid you mean 'reverse'?\n | +|exists |SELECT exists(array(1, 2, 3), x -> x % 2 == 0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: array")\n | +|exp |SELECT exp(0); |PASSED |OK |OK | +|explode |SELECT explode(array(10, 20)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n | +|explode_outer |SELECT explode_outer(array(10, 20)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n | +|expm1 |SELECT expm1(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'expm1'.\nDid you mean 'exp'?\n | +|extract |SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456'); |PASSED |OK |OK | +|factorial |SELECT factorial(5); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|filter |SELECT filter(array(1, 2, 3), x -> x % 2 == 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|find_in_set |SELECT find_in_set('ab','abc,b,ab,c,def'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|first |SELECT first(col) FROM VALUES (10), (5), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'first'.\nDid you mean 'right'?\n | +|first_value |SELECT first_value(col) FROM VALUES (10), (5), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|flatten |SELECT flatten(array(array(1, 2), array(3, 4))); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: array")\n | +|float | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|floor |SELECT floor(-0.1); |PASSED |OK |OK | +|forall |SELECT forall(array(1, 2, 3), x -> x % 2 == 0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|format_number |SELECT format_number(12332.123456, 4); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'format_number'.\nDid you mean 'FIRST_VALUE'?\n | +|format_string |SELECT format_string("Hello World %d %s", 100, "days"); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'format_string'.\nDid you mean 'array_to_string'?\n | +|from_csv |SELECT from_csv('1, 0.8', 'a INT, b DOUBLE'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'from_csv'.\nDid you mean 'arrow_cast'?\n | +|from_json |SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'from_json'.\nDid you mean 'floor'?\n | +|from_unixtime |SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: No function matches the given name and argument types 'from_unixtime(Int64, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tfrom_unixtime(Int64)\n | +|from_utc_timestamp |SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'from_utc_timestamp'.\nDid you mean 'to_timestamp'?\n | +|get |SELECT get(array(1, 2, 3), 0); |PASSED |OK |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|get_json_object |SELECT get_json_object('{"a":"b"}', '$.a'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'get_json_object'.\nDid you mean 'list_pop_back'?\n | +|getbit |SELECT getbit(11, 0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'getbit'.\nDid you mean 'ceil'?\n | +|greatest |SELECT greatest(10, 9, 2, 4, 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'greatest'.\nDid you mean 'repeat'?\n | +|grouping |SELECT name, grouping(name), sum(age) FROM VALUES (2, 'Alice'), (5, 'Bob') people(age, name) GROUP BY cube(name); |FAILED |[MISSING_AGGREGATION] The non-aggregating expression "age" is based on columns which are not participating in the GROUP BY clause.\nAdd the columns or the expression to the GROUP BY, aggregate the expression, or use "any_value(age)" if you do not care which of the values within a group is returned.;\nAggregate [name#2277, spark_grouping_id#2276L], [age#2273, name#2277]\n+- Expand [[age#2273, name#2274, name#2275, 0], [age#2273, name#2274, null, 1]], [age#2273, name#2274, name#2277, spark_grouping_id#2276L]\n +- Project [age#2273, name#2274, name#2274 AS name#2275]\n +- SubqueryAlias people\n +- LocalRelation [age#2273, name#2274]\n | | +|grouping_id |SELECT name, grouping_id(), sum(age), avg(height) FROM VALUES (2, 'Alice', 165), (5, 'Bob', 180) people(age, name, height) GROUP BY cube(name, height);|FAILED |[MISSING_AGGREGATION] The non-aggregating expression "age" is based on columns which are not participating in the GROUP BY clause.\nAdd the columns or the expression to the GROUP BY, aggregate the expression, or use "any_value(age)" if you do not care which of the values within a group is returned.;\nAggregate [name#7432, height#7433, spark_grouping_id#7431L], [age#7426, name#7432, height#7433]\n+- Expand [[age#7426, name#7427, height#7428, name#7429, height#7430, 0], [age#7426, name#7427, height#7428, name#7429, null, 1], [age#7426, name#7427, height#7428, null, height#7430, 2], [age#7426, name#7427, height#7428, null, null, 3]], [age#7426, name#7427, height#7428, name#7432, height#7433, spark_grouping_id#7431L]\n +- Project [age#7426, name#7427, height#7428, name#7427 AS name#7429, height#7428 AS height#7430]\n +- SubqueryAlias people\n +- LocalRelation [age#7426, name#7427, height#7428]\n | | +|hash |SELECT hash('Spark', array(123), 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 123")\n | +|hex |SELECT hex(17); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'hex'.\nDid you mean 'exp'?\n | +|histogram_numeric |SELECT histogram_numeric(col, 5) FROM VALUES (0), (1), (2), (10) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'histogram_numeric'.\nDid you mean 'list_remove_n'?\n | +|hour |SELECT hour('2009-07-30 12:58:59'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'hour'.\nDid you mean 'CORR'?\n | +|hypot |SELECT hypot(3, 4); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'hypot'.\nDid you mean 'pow'?\n | +|if |SELECT if(1 < 2, 'a', 'b'); |PASSED |OK |std_err: Error during planning: Invalid function 'if'.\nDid you mean 'sin'?\n | +|ifnull |SELECT ifnull(NULL, array('2')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: '2'")\n | +|ilike |SELECT ilike('Spark', '_Park'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'ilike'.\nDid you mean 'lpad'?\n | +|in |SELECT 1 in(1, 2, 3); |PASSED |OK |OK | +|initcap |SELECT initcap('sPark sql'); |PASSED |OK |OK | +|inline |SELECT inline(array(struct(1, 'a'), struct(2, 'b'))); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n | +|inline_outer |SELECT inline_outer(array(struct(1, 'a'), struct(2, 'b'))); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n | +|input_file_block_length |SELECT input_file_block_length(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'input_file_block_length'.\nDid you mean 'octet_length'?\n | +|input_file_block_start |SELECT input_file_block_start(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'input_file_block_start'.\nDid you mean 'list_replace_all'?\n | +|input_file_name |SELECT input_file_name(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'input_file_name'.\nDid you mean 'bit_length'?\n | +|instr |SELECT instr('SparkSQL', 'SQL'); |PASSED |OK |OK | +|int | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|isnan |SELECT isnan(cast('NaN' as double)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|isnotnull |SELECT isnotnull(1); |PASSED |OK |std_err: Error during planning: Invalid function 'isnotnull'.\nDid you mean 'ifnull'?\n | +|isnull |SELECT isnull(1); |PASSED |OK |std_err: Error during planning: Invalid function 'isnull'.\nDid you mean 'ifnull'?\n | +|java_method |SELECT java_method('java.util.UUID', 'randomUUID'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'java_method'.\nDid you mean 'make_date'?\n | +|json_array_length |SELECT json_array_length('[1,2,3,4]'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'json_array_length'.\nDid you mean 'array_length'?\n | +|json_object_keys |SELECT json_object_keys('{}'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'json_object_keys'.\nDid you mean 'concat_ws'?\n | +|json_tuple |SELECT json_tuple('{"a":1, "b":2}', 'a', 'b'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'json_tuple'.\nDid you mean 'strpos'?\n | +|kurtosis |SELECT kurtosis(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'kurtosis'.\nDid you mean 'rtrim'?\n | +|lag |SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|last |SELECT last(col) FROM VALUES (10), (5), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'last'.\nDid you mean 'left'?\n | +|last_day |SELECT last_day('2009-01-12'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'last_day'.\nDid you mean 'list_cat'?\n | +|last_value |SELECT last_value(col) FROM VALUES (10), (5), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|lcase |SELECT lcase('SparkSql'); |PASSED |OK |std_err: Error during planning: Invalid function 'lcase'.\nDid you mean 'acos'?\n | +|lead |SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|least |SELECT least(10, 9, 2, 4, 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'least'.\nDid you mean 'left'?\n | +|left |SELECT left('Spark SQL', 3); |FAILED |Failed on native side: found CometNativeException | | +|len |SELECT len('Spark SQL '); |PASSED |OK |std_err: Error during planning: Invalid function 'len'.\nDid you mean 'ln'?\n | +|length |SELECT length('Spark SQL '); |PASSED |OK |OK | +|levenshtein |SELECT levenshtein('kitten', 'sitting'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|like |SELECT like('Spark', '_park'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'like'.\nDid you mean 'lower'?\n | +|ln |SELECT ln(1); |PASSED |OK |OK | +|localtimestamp |SELECT localtimestamp(); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'localtimestamp'.\nDid you mean 'to_timestamp'?\n | +|locate |SELECT locate('bar', 'foobarbar'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'locate'.\nDid you mean 'to_date'?\n | +|log |SELECT log(10, 100); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|log10 |SELECT log10(10); |PASSED |OK |OK | +|log1p |SELECT log1p(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'log1p'.\nDid you mean 'log10'?\n | +|log2 |SELECT log2(2); |PASSED |OK |OK | +|lower |SELECT lower('SparkSql'); |PASSED |OK |OK | +|lpad |SELECT lpad('hi', 5, '??'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|ltrim |SELECT ltrim(' SparkSQL '); |PASSED |OK |OK | +|make_date |SELECT make_date(2013, 7, 15); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|make_dt_interval |SELECT make_dt_interval(1, 12, 30, 01.001001); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'make_dt_interval'.\nDid you mean 'make_date'?\n | +|make_interval |SELECT make_interval(100, 11, 1, 1, 12, 30, 01.001001); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'make_interval'.\nDid you mean 'make_array'?\n | +|make_timestamp |SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'make_timestamp'.\nDid you mean 'to_timestamp'?\n | +|make_timestamp_ltz |SELECT make_timestamp_ltz(2014, 12, 28, 6, 30, 45.887); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'make_timestamp_ltz'.\nDid you mean 'to_timestamp'?\n | +|make_timestamp_ntz |SELECT make_timestamp_ntz(2014, 12, 28, 6, 30, 45.887); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'make_timestamp_ntz'.\nDid you mean 'to_timestamp'?\n | +|make_ym_interval |SELECT make_ym_interval(1, 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'make_ym_interval'.\nDid you mean 'array_intersect'?\n | +|map |SELECT map(1.0, '2', 3.0, '4'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map'.\nDid you mean 'MAX'?\n | +|map_concat |SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_concat'.\nDid you mean 'array_concat'?\n | +|map_contains_key |SELECT map_contains_key(map(1, 'a', 2, 'b'), 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_contains_key'.\nDid you mean 'array_contains'?\n | +|map_entries |SELECT map_entries(map(1, 'a', 2, 'b')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_entries'.\nDid you mean 'make_array'?\n | +|map_filter |SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_filter'.\nDid you mean 'make_date'?\n | +|map_from_arrays |SELECT map_from_arrays(array(1.0, 3.0), array('2', '4')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1.0")\n | +|map_from_entries |SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b'))); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: struct")\n | +|map_keys |SELECT map_keys(map(1, 'a', 2, 'b')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_keys'.\nDid you mean 'make_list'?\n | +|map_values |SELECT map_values(map(1, 'a', 2, 'b')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_values'.\nDid you mean 'LAST_VALUE'?\n | +|map_zip_with |SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'map_zip_with'.\nDid you mean 'starts_with'?\n | +|mask |SELECT mask('abcd-EFGH-8765-4321'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'mask'.\nDid you mean 'MAX'?\n | +|max |SELECT max(col) FROM VALUES (10), (50), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|max_by |SELECT max_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'max_by'.\nDid you mean 'MAX'?\n | +|md5 |SELECT md5('Spark'); |PASSED |OK |OK | +|mean |SELECT mean(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|median |SELECT median(col) FROM VALUES (0), (10) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|min |SELECT min(col) FROM VALUES (10), (-1), (20) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|min_by |SELECT min_by(x, y) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'min_by'.\nDid you mean 'MIN'?\n | +|minute |SELECT minute('2009-07-30 12:58:59'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'minute'.\nDid you mean 'instr'?\n | +|mod |SELECT 2 % 1.8; |PASSED |OK |OK | +|mode |SELECT mode(col) FROM VALUES (0), (10), (10) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'mode'.\nDid you mean 'md5'?\n | +|monotonically_increasing_id|SELECT monotonically_increasing_id(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'monotonically_increasing_id'.\nDid you mean 'array_intersect'?\n | +|month |SELECT month('2016-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'month'.\nDid you mean 'tanh'?\n | +|months_between |SELECT months_between('1997-02-28 10:30:00', '1996-10-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'months_between'.\nDid you mean 'NTH_VALUE'?\n | +|named_struct |SELECT named_struct("a", 1, "b", 2, "c", 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Schema error: No field named a.\n | +|nanvl |SELECT nanvl(cast('NaN' as double), 123); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|negative |SELECT negative(1); |PASSED |OK |std_err: Error during planning: Invalid function 'negative'.\nDid you mean 'nanvl'?\n | +|next_day |SELECT next_day('2015-01-14', 'TU'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'next_day'.\nDid you mean 'today'?\n | +|not |SELECT not true; |PASSED |OK |OK | +|now |SELECT now(); |FAILED |\nResults do not match for query:\nTimezone: sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]\nTimezone Env: \n\n== Parsed Logical Plan ==\nProject [now() AS now()#4526, x#4510]\n+- SubqueryAlias tbl\n +- View (`tbl`, [x#4510])\n +- Relation [x#4510] parquet\n\n== Analyzed Logical Plan ==\nnow(): timestamp, x: string\nProject [now() AS now()#4526, x#4510]\n+- SubqueryAlias tbl\n +- View (`tbl`, [x#4510])\n +- Relation [x#4510] parquet\n\n== Optimized Logical Plan ==\nProject [2024-05-10 10:13:29.302484 AS now()#4526, x#4510]\n+- Relation [x#4510] parquet\n\n== Physical Plan ==\n*(1) ColumnarToRow\n+- CometProject [now()#4526, x#4510], [2024-05-10 10:13:29.302484 AS now()#4526, x#4510]\n +- CometScan parquet [x#4510] Batched: true, DataFilters: [], Format: CometParquet, Location: InMemoryFileIndex(1 paths)[file:/private/var/folders/6f/_s1vnnd55zgfkx7zlwnrnv0h0000gn/T/spark-28..., PartitionFilters: [], PushedFilters: [], ReadSchema: struct\n\n== Results ==\n\n== Results ==\n!== Correct Answer - 1 == == Spark Answer - 1 ==\n struct struct\n![2024-05-10 10:13:29.285019,dummy] [2024-05-10 10:13:29.302484,dummy]\n \n | | +|nth_value |SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|ntile |SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|nullif |SELECT nullif(2, 2); |PASSED |OK |OK | +|nvl |SELECT nvl(NULL, array('2')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: '2'")\n | +|nvl2 |SELECT nvl2(NULL, 2, 1); |PASSED |OK |OK | +|octet_length |SELECT octet_length('Spark SQL'); |PASSED |OK |OK | +|or |SELECT true or false; |PASSED |OK |OK | +|overlay |SELECT overlay('Spark SQL' PLACING '_' FROM 6); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|parse_url |SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'parse_url'.\nDid you mean 'date_part'?\n | +|percent_rank |SELECT a, b, percent_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'PERCENT_RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tPERCENT_RANK()\n | +|percentile |SELECT percentile(col, 0.3) FROM VALUES (0), (10) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'percentile'.\nDid you mean 'current_time'?\n | +|percentile_approx |SELECT percentile_approx(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 0.5")\n | +|pi |SELECT pi(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|pmod |SELECT pmod(10, 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'pmod'.\nDid you mean 'pow'?\n | +|posexplode |SELECT posexplode(array(10,20)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n | +|posexplode_outer |SELECT posexplode_outer(array(10,20)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 10")\n | +|position |SELECT position('bar', 'foobarbar'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Position function must include IN keyword")\n | +|positive |SELECT positive(1); |PASSED |OK |std_err: Error during planning: Invalid function 'positive'.\nDid you mean 'position'?\n | +|pow |SELECT pow(2, 3); |PASSED |OK |OK | +|power |SELECT power(2, 3); |PASSED |OK |OK | +|printf |SELECT printf("Hello World %d %s", 100, "days"); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'printf'.\nDid you mean 'asinh'?\n | +|quarter |SELECT quarter('2016-08-31'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'quarter'.\nDid you mean 'flatten'?\n | +|radians |SELECT radians(180); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|raise_error |SELECT raise_error('custom error message'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'raise_error'.\nDid you mean 'make_array'?\n | +|rand |SELECT rand(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'rand'.\nDid you mean 'tan'?\n | +|randn |SELECT randn(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'randn'.\nDid you mean 'random'?\n | +|random |SELECT random(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|rank |SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: No function matches the given name and argument types 'RANK(Int32)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tRANK()\n | +|reduce |SELECT reduce(array(1, 2, 3), 0, (acc, x) -> acc + x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|reflect |SELECT reflect('java.util.UUID', 'randomUUID'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'reflect'.\nDid you mean 'replace'?\n | +|regexp |SELECT regexp('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n | +|regexp_count |SELECT regexp_count('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'regexp_count'.\nDid you mean 'REGR_COUNT'?\n | +|regexp_extract |SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'regexp_extract'.\nDid you mean 'regexp_match'?\n | +|regexp_extract_all |SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)', 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'regexp_extract_all'.\nDid you mean 'regexp_match'?\n | +|regexp_instr |SELECT regexp_instr('user@spark.apache.org', '@[^.]*'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'regexp_instr'.\nDid you mean 'regexp_like'?\n | +|regexp_like |SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n | +|regexp_replace |SELECT regexp_replace('100-200', '(\\d+)', 'num'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regexp_substr |SELECT regexp_substr('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'regexp_substr'.\nDid you mean 'regexp_like'?\n | +|regr_avgx |SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_avgy |SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_count |SELECT regr_count(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_intercept |SELECT regr_intercept(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_r2 |SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_slope |SELECT regr_slope(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_sxx |SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_sxy |SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|regr_syy |SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|repeat |SELECT repeat('123', 2); |PASSED |OK |OK | +|replace |SELECT replace('ABCabc', 'abc', 'DEF'); |PASSED |OK |OK | +|reverse |SELECT reverse('Spark SQL'); |PASSED |OK |OK | +|right |SELECT right('Spark SQL', 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|rint |SELECT rint(12.3456); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'rint'.\nDid you mean 'sin'?\n | +|rlike |SELECT rlike('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: TokenizerError("unsupported escape char: '\\U'")\n | +|round |SELECT round(2.5, 0); |PASSED |OK |OK | +|row_number |SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|rpad |SELECT rpad('hi', 5, '??'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|rtrim |SELECT rtrim(' SparkSQL '); |PASSED |OK |OK | +|schema_of_csv |SELECT schema_of_csv('1,abc'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'schema_of_csv'.\nDid you mean 'concat_ws'?\n | +|schema_of_json |SELECT schema_of_json('[{"col":0}]'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'schema_of_json'.\nDid you mean 'concat_ws'?\n | +|sec |SELECT sec(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'sec'.\nDid you mean 'sin'?\n | +|second |SELECT second('2009-07-30 12:58:59'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'second'.\nDid you mean 'decode'?\n | +|sentences |SELECT sentences('Hi there! Good morning.'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'sentences'.\nDid you mean 'degrees'?\n | +|sequence |SELECT sequence(1, 5); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'sequence'.\nDid you mean 'coalesce'?\n | +|sha |SELECT sha('Spark'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'sha'.\nDid you mean 'chr'?\n | +|sha1 |SELECT sha1('Spark'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'sha1'.\nDid you mean 'sha512'?\n | +|sha2 |SELECT sha2('Spark', 256); |PASSED |OK |std_err: Error during planning: Invalid function 'sha2'.\nDid you mean 'sha224'?\n | +|shiftleft |SELECT shiftleft(2, 1); |PASSED |OK |std_err: Error during planning: Invalid function 'shiftleft'.\nDid you mean 'left'?\n | +|shiftright |SELECT shiftright(4, 1); |PASSED |OK |std_err: Error during planning: Invalid function 'shiftright'.\nDid you mean 'right'?\n | +|shiftrightunsigned |SELECT shiftrightunsigned(4, 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'shiftrightunsigned'.\nDid you mean 'list_union'?\n | +|shuffle |SELECT shuffle(array(1, 20, 3, 5)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|sign |SELECT sign(40); |PASSED |OK |std_err: Error during planning: Invalid function 'sign'.\nDid you mean 'sin'?\n | +|signum |SELECT signum(40); |PASSED |OK |OK | +|sin |SELECT sin(0); |PASSED |OK |OK | +|sinh |SELECT sinh(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|size |SELECT size(array('b', 'd', 'c', 'a')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n | +|skewness |SELECT skewness(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'skewness'.\nDid you mean 'degrees'?\n | +|slice |SELECT slice(array(1, 2, 3, 4), 2, 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|smallint | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|some |SELECT some(col) FROM VALUES (true), (false), (false) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'some'.\nDid you mean 'SUM'?\n | +|sort_array |SELECT sort_array(array('b', 'd', null, 'c', 'a'), true); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 'b'")\n | +|soundex |SELECT soundex('Miller'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'soundex'.\nDid you mean 'round'?\n | +|space |SELECT concat(space(2), '1'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'space'.\nDid you mean 'lpad'?\n | +|spark_partition_id |SELECT spark_partition_id(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'spark_partition_id'.\nDid you mean 'list_position'?\n | +|split |SELECT split('oneAtwoBthreeC', '[ABC]'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'split'.\nDid you mean 'sqrt'?\n | +|split_part |SELECT split_part('11.12.13', '.', 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|sqrt |SELECT sqrt(4); |PASSED |OK |OK | +|stack |SELECT stack(2, 1, 2, 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'stack'.\nDid you mean 'atanh'?\n | +|startswith |SELECT startswith('Spark SQL', 'Spark'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'startswith'.\nDid you mean 'starts_with'?\n | +|std |SELECT std(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'std'.\nDid you mean 'gcd'?\n | +|stddev |SELECT stddev(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|stddev_pop |SELECT stddev_pop(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|stddev_samp |SELECT stddev_samp(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|str_to_map |SELECT str_to_map('a:1,b:2,c:3', ',', ':'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'str_to_map'.\nDid you mean 'strpos'?\n | +|string | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|struct |SELECT struct(1, 2, 3); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|substr |SELECT substr('Spark SQL', 5); |FAILED |Failed on native side: found CometNativeException | | +|substring |SELECT substring('Spark SQL', 5); |FAILED |Failed on native side: found CometNativeException |std_err: This feature is not implemented: Unsupported ast node in sqltorel: Substring { expr: Value(SingleQuotedString("Spark SQL")), substring_from: Some(Value(Number("5", false))), substring_for: None, special: true }\n | +|substring_index |SELECT substring_index('www.apache.org', '.', 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|sum |SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|tan |SELECT tan(0); |PASSED |OK |OK | +|tanh |SELECT tanh(0); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|timestamp | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|timestamp_micros |SELECT timestamp_micros(1230219000123123); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'timestamp_micros'.\nDid you mean 'to_timestamp_micros'?\n | +|timestamp_millis |SELECT timestamp_millis(1230219000123); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'timestamp_millis'.\nDid you mean 'to_timestamp_millis'?\n | +|timestamp_seconds |SELECT timestamp_seconds(1230219000); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'timestamp_seconds'.\nDid you mean 'to_timestamp_seconds'?\n | +|tinyint | |SKIPPED|No examples found in spark.sessionState.functionRegistry | | +|to_binary |SELECT to_binary('abc', 'utf-8'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'to_binary'.\nDid you mean 'to_char'?\n | +|to_char |SELECT to_char(454, '999'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: No function matches the given name and argument types 'to_char(Int64, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tto_char(Date32, Utf8)\n\tto_char(Date64, Utf8)\n\tto_char(Time32(Millisecond), Utf8)\n\tto_char(Time32(Second), Utf8)\n\tto_char(Time64(Microsecond), Utf8)\n\tto_char(Time64(Nanosecond), Utf8)\n\tto_char(Timestamp(Second, None), Utf8)\n\tto_char(Timestamp(Second, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Millisecond, None), Utf8)\n\tto_char(Timestamp(Millisecond, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Microsecond, None), Utf8)\n\tto_char(Timestamp(Microsecond, Some("+TZ")), Utf8)\n\tto_char(Timestamp(Nanosecond, None), Utf8)\n\tto_char(Timestamp(Nanosecond, Some("+TZ")), Utf8)\n\tto_char(Duration(Second), Utf8)\n\tto_char(Duration(Millisecond), Utf8)\n\tto_char(Duration(Microsecond), Utf8)\n\tto_char(Duration(Nanosecond), Utf8)\n| +|to_csv |SELECT to_csv(named_struct('a', 1, 'b', 2)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'to_csv'.\nDid you mean 'to_hex'?\n | +|to_date |SELECT to_date('2009-07-30 04:17:52'); |PASSED |OK |OK | +|to_json |SELECT to_json(named_struct('a', 1, 'b', 2)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'to_json'.\nDid you mean 'to_hex'?\n | +|to_number |SELECT to_number('454', '999'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'to_number'.\nDid you mean 'to_char'?\n | +|to_timestamp |SELECT to_timestamp('2016-12-31 00:12:00'); |PASSED |OK |OK | +|to_timestamp_ltz |SELECT to_timestamp_ltz('2016-12-31 00:12:00'); |PASSED |OK |std_err: Error during planning: Invalid function 'to_timestamp_ltz'.\nDid you mean 'to_timestamp'?\n | +|to_timestamp_ntz |SELECT to_timestamp_ntz('2016-12-31 00:12:00'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: Invalid function 'to_timestamp_ntz'.\nDid you mean 'to_timestamp_nanos'?\n | +|to_unix_timestamp |SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'to_unix_timestamp'.\nDid you mean 'to_timestamp'?\n | +|to_utc_timestamp |SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'to_utc_timestamp'.\nDid you mean 'to_timestamp'?\n | +|transform |SELECT transform(array(1, 2, 3), x -> x + 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|transform_keys |SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|transform_values |SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> v + 1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|translate |SELECT translate('AaBbCc', 'abc', '123'); |PASSED |OK |OK | +|trim |SELECT trim(' SparkSQL '); |PASSED |OK |OK | +|trunc |SELECT trunc('2019-08-04', 'week'); |FAILED |Failed on native side: found CometNativeException |std_err: Error during planning: No function matches the given name and argument types 'trunc(Utf8, Utf8)'. You might need to add explicit type casts.\n\tCandidate functions:\n\ttrunc(Float32, Int64)\n\ttrunc(Float64, Int64)\n\ttrunc(Float64)\n\ttrunc(Float32)\n | +|try_add |SELECT try_add(1, 2); |PASSED |OK |std_err: Error during planning: Invalid function 'try_add'.\nDid you mean 'rpad'?\n | +|try_avg |SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'try_avg'.\nDid you mean 'AVG'?\n | +|try_divide |SELECT try_divide(3, 2); |PASSED |OK |std_err: Error during planning: Invalid function 'try_divide'.\nDid you mean 'to_date'?\n | +|try_element_at |SELECT try_element_at(array(1, 2, 3), 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|try_multiply |SELECT try_multiply(2, 3); |PASSED |OK |std_err: Error during planning: Invalid function 'try_multiply'.\nDid you mean 'array_union'?\n | +|try_subtract |SELECT try_subtract(2, 1); |PASSED |OK |std_err: Error during planning: Invalid function 'try_subtract'.\nDid you mean 'array_extract'?\n | +|try_sum |SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'try_sum'.\nDid you mean 'trim'?\n | +|try_to_binary |SELECT try_to_binary('abc', 'utf-8'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'try_to_binary'.\nDid you mean 'string_to_array'?\n | +|try_to_number |SELECT try_to_number('454', '999'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'try_to_number'.\nDid you mean 'array_to_string'?\n | +|try_to_timestamp |SELECT try_to_timestamp('2016-12-31 00:12:00'); |PASSED |OK |std_err: Error during planning: Invalid function 'try_to_timestamp'.\nDid you mean 'to_timestamp'?\n | +|typeof |SELECT typeof(1); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'typeof'.\nDid you mean 'repeat'?\n | +|ucase |SELECT ucase('SparkSql'); |PASSED |OK |std_err: Error during planning: Invalid function 'ucase'.\nDid you mean 'acos'?\n | +|unbase64 |SELECT unbase64('U3BhcmsgU1FM'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unbase64'.\nDid you mean 'sha256'?\n | +|unhex |SELECT decode(unhex('537061726B2053514C'), 'UTF-8'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unhex'.\nDid you mean 'upper'?\n | +|unix_date |SELECT unix_date(DATE("1970-01-02")); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unix_date'.\nDid you mean 'to_date'?\n | +|unix_micros |SELECT unix_micros(TIMESTAMP('1970-01-01 00:00:01Z')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unix_micros'.\nDid you mean 'initcap'?\n | +|unix_millis |SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unix_millis'.\nDid you mean 'nullif'?\n | +|unix_seconds |SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z')); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unix_seconds'.\nDid you mean 'decode'?\n | +|unix_timestamp |SELECT unix_timestamp(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'unix_timestamp'.\nDid you mean 'to_timestamp'?\n | +|upper |SELECT upper('SparkSql'); |PASSED |OK |OK | +|url_decode |SELECT url_decode('https%3A%2F%2Fspark.apache.org'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'url_decode'.\nDid you mean 'decode'?\n | +|url_encode |SELECT url_encode('https://spark.apache.org'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'url_encode'.\nDid you mean 'encode'?\n | +|user |SELECT user(); |PASSED |OK |std_err: SQL error: ParserError("Expected end of statement, found: (")\n | +|uuid |SELECT uuid(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|var_pop |SELECT var_pop(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|var_samp |SELECT var_samp(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback | | +|variance |SELECT variance(col) FROM VALUES (1), (2), (3) AS tab(col); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_out: DataFusion CLI v37.1.0\nError: Error during planning: Invalid function 'variance'.\nDid you mean 'range'?\n | +|version |SELECT version(); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'version'.\nDid you mean 'sin'?\n | +|weekday |SELECT weekday('2009-07-30'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'weekday'.\nDid you mean 'today'?\n | +|weekofyear |SELECT weekofyear('2008-02-20'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'weekofyear'.\nDid you mean 'repeat'?\n | +|when |SELECT CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END; |PASSED |OK |OK | +|width_bucket |SELECT width_bucket(5.3, 0.2, 10.6, 5); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'width_bucket'.\nDid you mean 'list_cat'?\n | +|xpath |SELECT xpath('b1b2b3c1c2','a/b/text()'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath'.\nDid you mean 'tanh'?\n | +|xpath_boolean |SELECT xpath_boolean('1','a/b'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_boolean'.\nDid you mean 'date_format'?\n | +|xpath_double |SELECT xpath_double('12', 'sum(a/b)'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_double'.\nDid you mean 'date_format'?\n | +|xpath_float |SELECT xpath_float('12', 'sum(a/b)'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_float'.\nDid you mean 'date_format'?\n | +|xpath_int |SELECT xpath_int('12', 'sum(a/b)'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_int'.\nDid you mean 'date_bin'?\n | +|xpath_long |SELECT xpath_long('12', 'sum(a/b)'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_long'.\nDid you mean 'date_bin'?\n | +|xpath_number |SELECT xpath_number('12', 'sum(a/b)'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_number'.\nDid you mean 'date_bin'?\n | +|xpath_short |SELECT xpath_short('12', 'sum(a/b)'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_short'.\nDid you mean 'list_sort'?\n | +|xpath_string |SELECT xpath_string('bcc','a/c'); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: Error during planning: Invalid function 'xpath_string'.\nDid you mean 'date_trunc'?\n | +|xxhash64 |SELECT xxhash64('Spark', array(123), 2); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 123")\n | +|year |SELECT year('2016-07-30'); |PASSED |OK |std_err: Error during planning: Invalid function 'year'.\nDid you mean 'VAR'?\n | +|zip_with |SELECT zip_with(array(1, 2, 3), array('a', 'b', 'c'), (x, y) -> (y, x)); |FAILED |Unsupported: Expected only Comet native operators but found Spark fallback |std_err: SQL error: ParserError("Expected SELECT, VALUES, or a subquery in the query body, found: 1")\n | +|| |SELECT 3 | 5; |PASSED |OK |OK | +|~ |SELECT ~ 0; |FAILED |Failed on native side: found CometNativeException |std_err: SQL error: ParserError("Expected an expression:, found: ~")\n | ++---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/pom.xml b/pom.xml index 5b054f001e..59e0569ff2 100644 --- a/pom.xml +++ b/pom.xml @@ -899,7 +899,7 @@ under the License. tpcds-kit/** tpcds-sf-1/** tpch/** - doc/*.txt + docs/*.txt diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index 45921883f4..f9ec4bdade 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -25,27 +25,28 @@ import java.nio.file.{Files, Paths} import scala.collection.mutable import scala.sys.process._ -import org.scalatest.Ignore import org.scalatest.exceptions.TestFailedException import org.apache.hadoop.fs.Path import org.apache.spark.sql.CometTestBase import org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanHelper +import org.apache.comet.CoverageResultStatus.CoverageResultStatus + /** * Manual test to calculate Spark builtin expressions coverage support by the Comet * - * The test will update files doc/spark_builtin_expr_coverage.txt, - * doc/spark_builtin_expr_coverage_agg.txt + * The test will update files docs/spark_builtin_expr_coverage.txt, + * docs/spark_builtin_expr_coverage_agg.txt */ -@Ignore +//@Ignore class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanHelper { import testImplicits._ - private val rawCoverageFilePath = "doc/spark_builtin_expr_coverage.txt" - private val aggCoverageFilePath = "doc/spark_builtin_expr_coverage_agg.txt" - private val rawCoverageFileDatafusionPath = "doc/spark_builtin_expr_df_coverage.txt" + private val projectDocFolder = "docs" + private val rawCoverageFilePath = s"$projectDocFolder/spark_builtin_expr_coverage.txt" + private val DATAFUSIONCLI_PATH_ENV_VAR = "DATAFUSIONCLI_PATH" private val queryPattern = """(?i)SELECT (.+?);""".r private val valuesPattern = """(?i)FROM VALUES(.+?);""".r @@ -72,6 +73,7 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH * doc/spark_builtin_expr_coverage_agg.txt */ test("Test Spark builtin expressions coverage") { + testNames val builtinExamplesMap = getExamples() // key - function name @@ -80,6 +82,7 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH builtinExamplesMap.foreach { case (funcName, q :: _) => + var dfMessage: Option[String] = None val queryResult = try { // Example with predefined values @@ -91,8 +94,13 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH val values = valuesPattern.findFirstMatchIn(q).map(_.group(0)) (select, values) match { case (Some(s), Some(v)) => - testSingleLineQuery(s"select * $v", s"$s tbl") + withTempDir { dir => + val path = new Path(dir.toURI.toString).toUri.getPath + spark.sql(s"select * $v").repartition(1).write.mode("overwrite").parquet(path) + dfMessage = runDatafusionCli(s"""$s '$path/*.parquet'""") + } + testSingleLineQuery(s"select * $v", s"$s tbl") case _ => sys.error("Cannot parse properly") } @@ -104,145 +112,114 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH // // ConstantFolding is a operator optimization rule in Catalyst that replaces expressions // that can be statically evaluated with their equivalent literal values. + dfMessage = runDatafusionCli(q) testSingleLineQuery( "select 'dummy' x", s"${q.dropRight(1)}, x from tbl", excludedOptimizerRules = Some("org.apache.spark.sql.catalyst.optimizer.ConstantFolding")) } - CoverageResult(CoverageResultStatus.Passed.toString, Seq((q, "OK"))) + CoverageResult( + q, + CoverageResultStatus.Passed, + CoverageResultDetails( + cometMessage = "OK", + datafusionMessage = dfMessage.getOrElse("OK"))) + } catch { case e: TestFailedException - if e.message.getOrElse("").contains("Expected only Comet native operators") => - CoverageResult(CoverageResultStatus.Failed.toString, Seq((q, "Unsupported"))) + if e.getMessage.contains("Expected only Comet native operators") => + CoverageResult( + q, + CoverageResultStatus.Failed, + CoverageResultDetails( + cometMessage = + "Unsupported: Expected only Comet native operators but found Spark fallback", + datafusionMessage = dfMessage.getOrElse(""))) + case e if e.getMessage.contains("CometNativeException") => CoverageResult( - CoverageResultStatus.Failed.toString, - Seq((q, "Failed on native side"))) - case _ => + q, + CoverageResultStatus.Failed, + CoverageResultDetails( + cometMessage = "Failed on native side: found CometNativeException", + datafusionMessage = dfMessage.getOrElse(""))) + + case e => CoverageResult( - CoverageResultStatus.Failed.toString, - Seq((q, "Failed on something else. Check query manually"))) + q, + CoverageResultStatus.Failed, + CoverageResultDetails( + cometMessage = e.getMessage, + datafusionMessage = dfMessage.getOrElse(""))) } resultsMap.put(funcName, queryResult) + // Function with no examples case (funcName, List()) => resultsMap.put( funcName, CoverageResult( - CoverageResultStatus.Skipped.toString, - Seq(("", "No examples found in spark.sessionState.functionRegistry")))) + "", + CoverageResultStatus.Skipped, + CoverageResultDetails( + cometMessage = "No examples found in spark.sessionState.functionRegistry", + datafusionMessage = ""))) } // TODO: convert results into HTML or .md file resultsMap.toSeq.toDF("name", "details").createOrReplaceTempView("t") - val str_agg = showString( +// val str_agg = showString( +// spark.sql( +// "select result, d._2 as details, count(1) cnt from (select name, t.details.result, explode_outer(t.details.details) as d from t) group by 1, 2 order by 1"), +// 1000, +// 0) +// Files.write(Paths.get(aggCoverageFilePath), str_agg.getBytes(StandardCharsets.UTF_8)) + + val str = showString( spark.sql( - "select result, d._2 as details, count(1) cnt from (select name, t.details.result, explode_outer(t.details.details) as d from t) group by 1, 2 order by 1"), + "select name, details.query, details.result, details.details.cometMessage, details.details.datafusionMessage from t order by 1"), 1000, 0) - Files.write(Paths.get(aggCoverageFilePath), str_agg.getBytes(StandardCharsets.UTF_8)) - - val str = showString(spark.sql("select * from t order by 1"), 1000, 0) Files.write(Paths.get(rawCoverageFilePath), str.getBytes(StandardCharsets.UTF_8)) } - /** - * Manual test to calculate Spark builtin expressions coverage support by the Datafusion - * directly - * - * The test will update files doc/spark_builtin_expr_df_coverage.txt, - * - * Requires to set DATAFUSIONCLI_PATH env variable to valid path to datafusion-cli - */ - test("Test Spark builtin expressions coverage by Datafusion directly") { - val builtinExamplesMap = getExamples() - - // key - function name - // value - list of result shows if function supported by Datafusion - val resultsMap = new mutable.HashMap[String, CoverageResult]() - - builtinExamplesMap.foreach { - case (funcName, q :: _) => - val queryResult = - try { - // Example with predefined values - // e.g. SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col) - if (q.toLowerCase.contains(" from values")) { - val select = selectPattern.findFirstMatchIn(q).map(_.group(0)) - val values = valuesPattern.findFirstMatchIn(q).map(_.group(0)) - (select, values) match { - case (Some(s), Some(v)) => - withTempDir { dir => - val path = new Path(dir.toURI.toString).toUri.getPath - spark.sql(s"select * $v").repartition(1).write.mode("overwrite").parquet(path) - runDatafusionCli(s"""$s '$path/*.parquet'""") - } - - case _ => - sys.error("Cannot parse properly") - } - } else { - // Process the simple example like `SELECT cos(0);` - runDatafusionCli(q) - } - CoverageResult(CoverageResultStatus.Passed.toString, Seq((q, "OK"))) - } catch { - case e: Throwable => - CoverageResult(CoverageResultStatus.Failed.toString, Seq((q, e.getMessage))) - } - resultsMap.put(funcName, queryResult) - - case (funcName, List()) => - resultsMap.put( - funcName, - CoverageResult( - CoverageResultStatus.Skipped.toString, - Seq(("", "No examples found in spark.sessionState.functionRegistry")))) - } - - resultsMap.toSeq.toDF("name", "details").createOrReplaceTempView("t") - val str = showString(spark.sql("select * from t order by 1"), 1000, 0) - Files.write(Paths.get(rawCoverageFileDatafusionPath), str.getBytes(StandardCharsets.UTF_8)) - } - - private def runDatafusionCli(sql: String) = { + // Returns error, None means successful execution + private def runDatafusionCli(sql: String): Option[String] = { val datafusionCliPath = sys.env.getOrElse( - "DATAFUSIONCLI_PATH", - sys.error("DATAFUSIONCLI_PATH env variable not set")) + DATAFUSIONCLI_PATH_ENV_VAR, + return Some(s"$DATAFUSIONCLI_PATH_ENV_VAR env variable not set")) val tempFilePath = Files.createTempFile("temp-", ".sql") - try { - Files.write(tempFilePath, sql.getBytes) - - val command = s"""$datafusionCliPath/datafusion-cli -f $tempFilePath""" - val stdout = new StringBuilder val stderr = new StringBuilder - - command.!( - ProcessLogger( - out => stdout.append(out).append("\n"), // stdout - err => stderr.append(err).append("\n") // stderr - )) - } finally { + try { + Files.write(tempFilePath, sql.getBytes) + + val command = s"""$datafusionCliPath/datafusion-cli -f $tempFilePath""" + command.!( + ProcessLogger( + out => stdout.append(out).append("\n"), // stdout + err => stderr.append(err).append("\n") // stderr + )) + } finally { Files.delete(tempFilePath) - } + } - val err = stderr.toString() - val out = stdout.toString() + val err = stderr.toString + val out = stdout.toString if (err.nonEmpty) - sys.error(s"std_err: $err") + return Some(s"std_err: $err") if (out.toLowerCase.contains("error")) - sys.error(s"std_out: $out") + return Some(s"std_out: $out") + + None } } -case class CoverageResult(result: String, details: Seq[(String, String)]) - object CoverageResultStatus extends Enumeration { type CoverageResultStatus = Value @@ -250,3 +227,10 @@ object CoverageResultStatus extends Enumeration { val Passed: Value = Value("PASSED") val Skipped: Value = Value("SKIPPED") } + +case class CoverageResult( + query: String, + result: CoverageResultStatus, + details: CoverageResultDetails) + +case class CoverageResultDetails(cometMessage: String, datafusionMessage: String) From b068d1b6efcb53ded691f40e43efb150e2107336 Mon Sep 17 00:00:00 2001 From: comphead Date: Fri, 10 May 2024 10:19:35 -0700 Subject: [PATCH 4/9] Coverage: Add a manual test for DF supporting Spark expressions directly --- .../org/apache/comet/CometExpressionCoverageSuite.scala | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index f9ec4bdade..d0f89575ac 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -21,17 +21,14 @@ package org.apache.comet import java.nio.charset.StandardCharsets import java.nio.file.{Files, Paths} - import scala.collection.mutable import scala.sys.process._ - import org.scalatest.exceptions.TestFailedException - import org.apache.hadoop.fs.Path import org.apache.spark.sql.CometTestBase import org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanHelper - import org.apache.comet.CoverageResultStatus.CoverageResultStatus +import org.scalatest.Ignore /** * Manual test to calculate Spark builtin expressions coverage support by the Comet @@ -39,7 +36,7 @@ import org.apache.comet.CoverageResultStatus.CoverageResultStatus * The test will update files docs/spark_builtin_expr_coverage.txt, * docs/spark_builtin_expr_coverage_agg.txt */ -//@Ignore +@Ignore class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanHelper { import testImplicits._ From 03e4401ea89142c4aebc48ed4b056c2cadf3ae08 Mon Sep 17 00:00:00 2001 From: comphead Date: Fri, 10 May 2024 10:19:51 -0700 Subject: [PATCH 5/9] Coverage: Add a manual test for DF supporting Spark expressions directly --- .../scala/org/apache/comet/CometExpressionCoverageSuite.scala | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index d0f89575ac..30b7a93ec7 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -33,8 +33,7 @@ import org.scalatest.Ignore /** * Manual test to calculate Spark builtin expressions coverage support by the Comet * - * The test will update files docs/spark_builtin_expr_coverage.txt, - * docs/spark_builtin_expr_coverage_agg.txt + * The test will update files docs/spark_builtin_expr_coverage.txt */ @Ignore class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanHelper { From 7a68e20c044a2daea86b528d0c51a7389d574f37 Mon Sep 17 00:00:00 2001 From: comphead Date: Fri, 10 May 2024 11:09:33 -0700 Subject: [PATCH 6/9] fmt --- .../org/apache/comet/CometExpressionCoverageSuite.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index 30b7a93ec7..9407926cdd 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -21,14 +21,18 @@ package org.apache.comet import java.nio.charset.StandardCharsets import java.nio.file.{Files, Paths} + import scala.collection.mutable import scala.sys.process._ + +import org.scalatest.Ignore import org.scalatest.exceptions.TestFailedException + import org.apache.hadoop.fs.Path import org.apache.spark.sql.CometTestBase import org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanHelper + import org.apache.comet.CoverageResultStatus.CoverageResultStatus -import org.scalatest.Ignore /** * Manual test to calculate Spark builtin expressions coverage support by the Comet From 0594160b8ced458a0815e9d2412b0253e3dba10d Mon Sep 17 00:00:00 2001 From: comphead Date: Mon, 20 May 2024 16:22:10 -0700 Subject: [PATCH 7/9] fmt --- .../org/apache/comet/CometExpressionCoverageSuite.scala | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index 9407926cdd..5e176b1952 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -169,12 +169,6 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH // TODO: convert results into HTML or .md file resultsMap.toSeq.toDF("name", "details").createOrReplaceTempView("t") -// val str_agg = showString( -// spark.sql( -// "select result, d._2 as details, count(1) cnt from (select name, t.details.result, explode_outer(t.details.details) as d from t) group by 1, 2 order by 1"), -// 1000, -// 0) -// Files.write(Paths.get(aggCoverageFilePath), str_agg.getBytes(StandardCharsets.UTF_8)) val str = showString( spark.sql( @@ -184,7 +178,7 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH Files.write(Paths.get(rawCoverageFilePath), str.getBytes(StandardCharsets.UTF_8)) } - // Returns error, None means successful execution + // Returns execution error, None means successful execution private def runDatafusionCli(sql: String): Option[String] = { val datafusionCliPath = sys.env.getOrElse( From 1895cacb03503707a5678f5058d19beff3fc7e15 Mon Sep 17 00:00:00 2001 From: comphead Date: Mon, 20 May 2024 16:28:24 -0700 Subject: [PATCH 8/9] fmt --- .../scala/org/apache/comet/CometExpressionCoverageSuite.scala | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index 5e176b1952..2bf30c42b4 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -39,7 +39,7 @@ import org.apache.comet.CoverageResultStatus.CoverageResultStatus * * The test will update files docs/spark_builtin_expr_coverage.txt */ -@Ignore +//@Ignore class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanHelper { import testImplicits._ @@ -73,7 +73,6 @@ class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanH * doc/spark_builtin_expr_coverage_agg.txt */ test("Test Spark builtin expressions coverage") { - testNames val builtinExamplesMap = getExamples() // key - function name From 789a04340ad80907298e53189d1eba9c377fe354 Mon Sep 17 00:00:00 2001 From: comphead Date: Mon, 20 May 2024 16:30:39 -0700 Subject: [PATCH 9/9] fmt --- .../scala/org/apache/comet/CometExpressionCoverageSuite.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala index 2bf30c42b4..26c9c8fec7 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -39,7 +39,7 @@ import org.apache.comet.CoverageResultStatus.CoverageResultStatus * * The test will update files docs/spark_builtin_expr_coverage.txt */ -//@Ignore +@Ignore class CometExpressionCoverageSuite extends CometTestBase with AdaptiveSparkPlanHelper { import testImplicits._