mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-09-25 14:45:35 +00:00
* feat!: upgrade DataFusion dependencies to 55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * refactor: migrate DataFusion 55 APIs Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: preserve table function planning behavior Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: preserve PostgreSQL query compatibility Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: preserve distributed execution plan behavior Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: cover DataFusion 55 behavior regressions Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: update DataFusion 55 SQLness expectations Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: complete DataFusion 55 test API migration Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: address DataFusion 55 CI regressions Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: address remaining DataFusion 55 regressions Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: adapt latest base code to DataFusion 55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: normalize environment-specific DataFusion 55 plans Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: align final DataFusion 55 expectations Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: isolate DataFusion 55 regression cases Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: preserve empty result schema in timestamp widening Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: preserve JSON source column order Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * chore: use released DataFusion 55 integrations Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: adapt latest execution plan mock to DataFusion 55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: pin DataFusion recursive schema and date repairs Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix(promql): align dictionary temporality match keys Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: retain Greptime DataFusion fork behaviors on version 55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: restore ordinary function error expectations Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: refresh distributed count compatibility plan Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix(query): adapt last-row cast hint to DataFusion 55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: refresh instant last-row empty results for Arrow 59 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * style: simplify DataFusion expression visitor imports Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: restore sorting and PostgreSQL column-order assertions Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix(function): restore primitive numeric coercion signatures Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * refactor(function): share geo integer signature types Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: cover timestamp widening overflow boundaries Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: fix decimal coercion regression imports Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix(function): preserve scalar count_hash NULL state semantics Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: simplify decimal clamp case type inference Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: retain historical count_hash wrapper result Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: restore timestamp widening equality and IN pruning Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: carry upstream aggregate dynamic filter correctness fix Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: carry upstream null and predicate simplification fixes Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: restore baseline JSON ordering expectations Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: restore histogram JSON ordering expectations Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: refresh empty PromQL range result schemas Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: align native timestamp plan with DF55 decimal display Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: refresh native timestamp SQLness results for DF55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: regenerate NULL sample empty result headers for DF55 Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: use DF55 child replacement API in timestamp regressions Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: expose pushed scan dynamic filters to DF55 producers Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: encode string-backed PostgreSQL OID aliases in binary results Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: verify REGPROC binary and text over PostgreSQL protocol Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: register real PostgreSQL catalogs in server fixtures Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: complete DF55 expression inventories for custom query plans Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: correct RangeSelect expression fixture and column identities Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * ci: wait for Kafka WAL helper deployment rollout Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * test: update custom storage empty result headers Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: require exact row counts in scan statistics Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> * fix: suppress deprecated partition_statistics warning in test Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> --------- Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> Co-authored-by: Ning Sun <sunng@protonmail.com>
181 lines
7.3 KiB
Plaintext
181 lines
7.3 KiB
Plaintext
-- String REPLACE function tests
|
|
-- Basic REPLACE function
|
|
SELECT REPLACE('hello world', 'world', 'universe');
|
|
|
|
+-------------------------------------------------------------+
|
|
| replace(Utf8("hello world"),Utf8("world"),Utf8("universe")) |
|
|
+-------------------------------------------------------------+
|
|
| hello universe |
|
|
+-------------------------------------------------------------+
|
|
|
|
SELECT REPLACE('hello world', 'xyz', 'abc');
|
|
|
|
+------------------------------------------------------+
|
|
| replace(Utf8("hello world"),Utf8("xyz"),Utf8("abc")) |
|
|
+------------------------------------------------------+
|
|
| hello world |
|
|
+------------------------------------------------------+
|
|
|
|
SELECT REPLACE('hello hello hello', 'hello', 'hi');
|
|
|
|
+-------------------------------------------------------------+
|
|
| replace(Utf8("hello hello hello"),Utf8("hello"),Utf8("hi")) |
|
|
+-------------------------------------------------------------+
|
|
| hi hi hi |
|
|
+-------------------------------------------------------------+
|
|
|
|
-- REPLACE with empty strings
|
|
SELECT REPLACE('hello world', 'world', '');
|
|
|
|
+-----------------------------------------------------+
|
|
| replace(Utf8("hello world"),Utf8("world"),Utf8("")) |
|
|
+-----------------------------------------------------+
|
|
| hello |
|
|
+-----------------------------------------------------+
|
|
|
|
SELECT REPLACE('hello world', '', 'xyz');
|
|
|
|
+---------------------------------------------------+
|
|
| replace(Utf8("hello world"),Utf8(""),Utf8("xyz")) |
|
|
+---------------------------------------------------+
|
|
| hello world |
|
|
+---------------------------------------------------+
|
|
|
|
SELECT REPLACE('', 'xyz', 'abc');
|
|
|
|
+-------------------------------------------+
|
|
| replace(Utf8(""),Utf8("xyz"),Utf8("abc")) |
|
|
+-------------------------------------------+
|
|
| |
|
|
+-------------------------------------------+
|
|
|
|
-- Case sensitive replacement
|
|
SELECT REPLACE('Hello World', 'hello', 'hi');
|
|
|
|
+-------------------------------------------------------+
|
|
| replace(Utf8("Hello World"),Utf8("hello"),Utf8("hi")) |
|
|
+-------------------------------------------------------+
|
|
| Hello World |
|
|
+-------------------------------------------------------+
|
|
|
|
SELECT REPLACE('Hello World', 'Hello', 'Hi');
|
|
|
|
+-------------------------------------------------------+
|
|
| replace(Utf8("Hello World"),Utf8("Hello"),Utf8("Hi")) |
|
|
+-------------------------------------------------------+
|
|
| Hi World |
|
|
+-------------------------------------------------------+
|
|
|
|
-- NULL handling
|
|
SELECT REPLACE(NULL, 'world', 'universe');
|
|
|
|
+----------------------------------------------+
|
|
| replace(NULL,Utf8("world"),Utf8("universe")) |
|
|
+----------------------------------------------+
|
|
| |
|
|
+----------------------------------------------+
|
|
|
|
SELECT REPLACE('hello world', NULL, 'universe');
|
|
|
|
+----------------------------------------------------+
|
|
| replace(Utf8("hello world"),NULL,Utf8("universe")) |
|
|
+----------------------------------------------------+
|
|
| |
|
|
+----------------------------------------------------+
|
|
|
|
SELECT REPLACE('hello world', 'world', NULL);
|
|
|
|
+-------------------------------------------------+
|
|
| replace(Utf8("hello world"),Utf8("world"),NULL) |
|
|
+-------------------------------------------------+
|
|
| |
|
|
+-------------------------------------------------+
|
|
|
|
-- Test with table data
|
|
CREATE TABLE replace_test(s VARCHAR, old_str VARCHAR, new_str VARCHAR, ts TIMESTAMP TIME INDEX);
|
|
|
|
Affected Rows: 0
|
|
|
|
INSERT INTO replace_test VALUES
|
|
('hello world', 'world', 'universe', 1000),
|
|
('programming language', 'language', 'paradigm', 2000),
|
|
('test test test', 'test', 'exam', 3000),
|
|
('no match here', 'xyz', 'abc', 4000);
|
|
|
|
Affected Rows: 4
|
|
|
|
SELECT s, old_str, new_str, REPLACE(s, old_str, new_str) FROM replace_test ORDER BY ts;
|
|
|
|
+----------------------+----------+----------+-------------------------------------------------------------------+
|
|
| s | old_str | new_str | replace(replace_test.s,replace_test.old_str,replace_test.new_str) |
|
|
+----------------------+----------+----------+-------------------------------------------------------------------+
|
|
| hello world | world | universe | hello universe |
|
|
| programming language | language | paradigm | programming paradigm |
|
|
| test test test | test | exam | exam exam exam |
|
|
| no match here | xyz | abc | no match here |
|
|
+----------------------+----------+----------+-------------------------------------------------------------------+
|
|
|
|
-- Unicode replacement
|
|
SELECT REPLACE('hello 世界', '世界', 'world');
|
|
|
|
+--------------------------------------------------------+
|
|
| replace(Utf8("hello 世界"),Utf8("世界"),Utf8("world")) |
|
|
+--------------------------------------------------------+
|
|
| hello world |
|
|
+--------------------------------------------------------+
|
|
|
|
SELECT REPLACE('café shop', 'é', 'e');
|
|
|
|
+------------------------------------------------+
|
|
| replace(Utf8("café shop"),Utf8("é"),Utf8("e")) |
|
|
+------------------------------------------------+
|
|
| cafe shop |
|
|
+------------------------------------------------+
|
|
|
|
SELECT REPLACE('🚀 rocket 🚀', '🚀', '✈️');
|
|
|
|
+-----------------------------------------------------+
|
|
| replace(Utf8("🚀 rocket 🚀"),Utf8("🚀"),Utf8("✈️")) |
|
|
+-----------------------------------------------------+
|
|
| ✈️ rocket ✈️ |
|
|
+-----------------------------------------------------+
|
|
|
|
-- Multiple character replacement
|
|
SELECT REPLACE('hello-world-test', '-', '_');
|
|
|
|
+-------------------------------------------------------+
|
|
| replace(Utf8("hello-world-test"),Utf8("-"),Utf8("_")) |
|
|
+-------------------------------------------------------+
|
|
| hello_world_test |
|
|
+-------------------------------------------------------+
|
|
|
|
SELECT REPLACE('abc::def::ghi', '::', '-->');
|
|
|
|
+-------------------------------------------------------+
|
|
| replace(Utf8("abc::def::ghi"),Utf8("::"),Utf8("-->")) |
|
|
+-------------------------------------------------------+
|
|
| abc-->def-->ghi |
|
|
+-------------------------------------------------------+
|
|
|
|
-- Overlapping patterns
|
|
SELECT REPLACE('ababab', 'ab', 'xy');
|
|
|
|
+-----------------------------------------------+
|
|
| replace(Utf8("ababab"),Utf8("ab"),Utf8("xy")) |
|
|
+-----------------------------------------------+
|
|
| xyxyxy |
|
|
+-----------------------------------------------+
|
|
|
|
SELECT REPLACE('aaa', 'aa', 'b');
|
|
|
|
+-------------------------------------------+
|
|
| replace(Utf8("aaa"),Utf8("aa"),Utf8("b")) |
|
|
+-------------------------------------------+
|
|
| ba |
|
|
+-------------------------------------------+
|
|
|
|
DROP TABLE replace_test;
|
|
|
|
Affected Rows: 0
|
|
|