mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-08-23 22:48:19 +00:00
0479c05092
* perf: preserve dictionary-encoded query labels Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(client): skip dictionary Flight batches Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(servers): decode dictionary labels in HTTP output Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * test(mito2): support dictionary tags in series scans Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(servers): preserve dictionary child nulls in SQL Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(promql): compare dictionary tags by logical nulls Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): keep dictionary tags within query paths Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * refactor(query): scope PK dictionary encoding to reads Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): preserve pushdown for dictionary labels Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): handle dictionary labels in query operators Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): complete label type matching Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): align dictionary query schemas Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): decode incompatible OR labels Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix(query): preserve dictionary partition pruning Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix: handle dictionary query edge cases Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix: import dictionary downcast macro Signed-off-by: Ruihang Xia <waynestxia@gmail.com> --------- Signed-off-by: Ruihang Xia <waynestxia@gmail.com>
101 lines
2.4 KiB
SQL
101 lines
2.4 KiB
SQL
-- invalid prepare, from
|
|
-- https://github.com/duckdb/duckdb/blob/00a605270719941ca0412ad5d0a14b1bdfbf9eb5/test/sql/prepared/invalid_prepare.test
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
SELECT ?;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
PREPARE stmt FROM 'SELECT ?::int;';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 1;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 'a';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DEALLOCATE stmt;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
PREPARE stmt FROM 'SELECT ?::int WHERE 1=0;';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 1;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 'a';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DEALLOCATE stmt;
|
|
|
|
-- parameter variants, from:
|
|
-- https://github.com/duckdb/duckdb/blob/2360dd00f193b5d0850f9379d0c3794eb2084f36/test/sql/prepared/parameter_variants.test
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
PREPARE stmt FROM 'SELECT CAST(? AS INTEGER), CAST(? AS STRING);';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 1, 'hello';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DEALLOCATE stmt;
|
|
|
|
-- test if placeholder at limit and offset are parsed correctly
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
PREPARE stmt FROM 'SELECT 1 LIMIT ? OFFSET ?;';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 1, 2;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DEALLOCATE stmt;
|
|
|
|
-- test with data
|
|
-- A Mito scan exposes string primary keys as dictionaries, but that physical read type must not
|
|
-- leak into INSERT Values planning.
|
|
CREATE TABLE insert_values_dictionary (
|
|
ts TIMESTAMP TIME INDEX,
|
|
host STRING PRIMARY KEY
|
|
) ENGINE=mito;
|
|
|
|
INSERT INTO insert_values_dictionary VALUES(now(), 'a');
|
|
|
|
SELECT host FROM insert_values_dictionary;
|
|
|
|
SELECT array_agg(host) FROM insert_values_dictionary;
|
|
|
|
DROP TABLE insert_values_dictionary;
|
|
|
|
CREATE TABLE IF NOT EXISTS "cake" (
|
|
`domain` STRING,
|
|
is_expire BOOLEAN NULL,
|
|
ts TIMESTAMP(3),
|
|
TIME INDEX ("ts"),
|
|
PRIMARY KEY ("domain")
|
|
) ENGINE=mito
|
|
WITH(
|
|
append_mode = 'true',
|
|
ttl='7days'
|
|
);
|
|
|
|
INSERT INTO cake(domain, is_expire, ts) VALUES('happy', false, '2025-03-18 12:55:51.758000');
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
PREPARE stmt FROM 'SELECT `cake`.`domain`, `cake`.`is_expire`, `cake`.`ts` FROM `cake` WHERE `cake`.`domain` = ? LIMIT ? OFFSET ?';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 'happy', 42, 0;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DEALLOCATE stmt;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
PREPARE stmt FROM 'SELECT table_name, table_schema FROM information_schema.tables WHERE table_name = ?';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
EXECUTE stmt USING 'cake';
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DEALLOCATE stmt;
|
|
|
|
-- SQLNESS PROTOCOL MYSQL
|
|
DROP TABLE cake;
|