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/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 2011dcd4bf..26c9c8fec7 100644 --- a/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometExpressionCoverageSuite.scala @@ -23,32 +23,37 @@ 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 + /** * 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 */ @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 projectDocFolder = "docs" + private val rawCoverageFilePath = s"$projectDocFolder/spark_builtin_expr_coverage.txt" + private val DATAFUSIONCLI_PATH_ENV_VAR = "DATAFUSIONCLI_PATH" - 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,12 +66,22 @@ 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]() builtinExamplesMap.foreach { case (funcName, q :: _) => + var dfMessage: Option[String] = None val queryResult = try { // Example with predefined values @@ -78,12 +93,15 @@ 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 _ => - resultsMap.put( - funcName, - CoverageResult("FAILED", Seq((q, "Cannot parse properly")))) + sys.error("Cannot parse properly") } } else { // Process the simple example like `SELECT cos(0);` @@ -93,51 +111,107 @@ 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 + // TODO: convert results into HTML or .md file resultsMap.toSeq.toDF("name", "details").createOrReplaceTempView("t") - val str_agg = showString( + + 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)) } -} -case class CoverageResult(result: String, details: Seq[(String, String)]) + // Returns execution error, None means successful execution + private def runDatafusionCli(sql: String): Option[String] = { + + val datafusionCliPath = sys.env.getOrElse( + DATAFUSIONCLI_PATH_ENV_VAR, + return Some(s"$DATAFUSIONCLI_PATH_ENV_VAR env variable not set")) + + val tempFilePath = Files.createTempFile("temp-", ".sql") + val stdout = new StringBuilder + val stderr = new StringBuilder + 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 + + if (err.nonEmpty) + return Some(s"std_err: $err") + + if (out.toLowerCase.contains("error")) + return Some(s"std_out: $out") + + None + } +} object CoverageResultStatus extends Enumeration { type CoverageResultStatus = Value @@ -146,3 +220,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)