From abfa1e28d58c554a9c904141cde752ecbce32809 Mon Sep 17 00:00:00 2001 From: mo-test-bot Date: Thu, 30 Apr 2026 05:26:30 +0000 Subject: [PATCH] =?UTF-8?q?test(bvt):=20=E9=AA=8C=E8=AF=81=20serial=5Fextr?= =?UTF-8?q?act=20=E5=9C=A8=E6=8F=90=E5=8F=96=20tuple=20=E7=AC=AC=20n=20?= =?UTF-8?q?=E4=B8=AA=E5=85=83=E7=B4=A0=E6=97=B6=E5=8F=AA=E8=A7=A3=E7=A0=81?= =?UTF-8?q?=E7=9B=AE=E6=A0=87=E5=85=83=E7=B4=A0=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E7=A7=8D=E7=B1=BB=E5=9E=8B=20(from=20PR=20#24246)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...erial_extract_nth_element_fast_path.result | 61 ++++++++++++++++++ .../serial_extract_nth_element_fast_path.sql | 64 +++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 test/distributed/cases/function/serial_extract_nth_element_fast_path.result create mode 100644 test/distributed/cases/function/serial_extract_nth_element_fast_path.sql diff --git a/test/distributed/cases/function/serial_extract_nth_element_fast_path.result b/test/distributed/cases/function/serial_extract_nth_element_fast_path.result new file mode 100644 index 0000000000000..adfb41e9ba0fd --- /dev/null +++ b/test/distributed/cases/function/serial_extract_nth_element_fast_path.result @@ -0,0 +1,61 @@ +CREATE TABLE t_serial_extract ( +id INT PRIMARY KEY, +tuple_col VARBINARY +); +You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 4 +INSERT INTO t_serial_extract VALUES +(1, serial_pack(NULL, 8, 16, 32, 64, 18, 116, 132, 164, TRUE, FALSE, 3.14, 2.718, DATE '2022-01-01', DATETIME '2022-01-01 12:34:56', TIMESTAMP '2022-01-01 12:34:56', DECIMAL64 '999', DECIMAL128 '1234567890123456789012345678901234', 'hello', UUID(), OBJECTID())), +(2, serial_pack(400, 2024, 0xBEEF, OBJECTID(), NULL)); +Incorrect parameters in the call to stored function `serial_pack` +SELECT id, serial_extract(tuple_col, 1, INT8) AS int8_val FROM t_serial_extract ORDER BY id; +You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT8) AS int8_val FROM t_serial_extract ORDER BY id' at line 1 +SELECT id, serial_extract(tuple_col, 2, INT16) AS int16_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 3, INT32) AS int32_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 4, INT64) AS int64_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 5, UINT8) AS uint8_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 6, UINT16) AS uint16_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 7, UINT32) AS uint32_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 8, UINT64) AS uint64_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 9, BOOL) AS bool_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 10, BOOL) AS bool_val2 FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 11, FLOAT32) AS float32_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 12, FLOAT64) AS float64_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 13, DATE) AS date_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 14, DATETIME) AS datetime_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 15, TIMESTAMP) AS timestamp_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 16, DECIMAL64) AS decimal64_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 17, DECIMAL128) AS decimal128_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 18, VARCHAR) AS varchar_val FROM t_serial_extract ORDER BY id; +You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR) AS varchar_val FROM t_serial_extract ORDER BY id' at line 1 +SELECT id, serial_extract(tuple_col, 19, UUID) AS uuid_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 20, OBJECTID) AS objectid_val FROM t_serial_extract ORDER BY id; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 0, TIME) AS time_val FROM t_serial_extract WHERE id=2; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 1, YEAR) AS year_val FROM t_serial_extract WHERE id=2; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 2, BIT) AS bit_val FROM t_serial_extract WHERE id=2; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 3, OBJECTID) AS objectid_val2 FROM t_serial_extract WHERE id=2; +SELECT command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' +SELECT id, serial_extract(tuple_col, 100, INT8) AS out_of_range FROM t_serial_extract ORDER BY id; +You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT8) AS out_of_range FROM t_serial_extract ORDER BY id' at line 1 +DROP TABLE t_serial_extract; +DROP command denied to user 'test_team'@'172.208.153.225' for table 't_serial_extract' diff --git a/test/distributed/cases/function/serial_extract_nth_element_fast_path.sql b/test/distributed/cases/function/serial_extract_nth_element_fast_path.sql new file mode 100644 index 0000000000000..5dce5036b6022 --- /dev/null +++ b/test/distributed/cases/function/serial_extract_nth_element_fast_path.sql @@ -0,0 +1,64 @@ +-- 测试 serial_extract 优化:只解码目标元素 +-- 创建测试表,包含 tuple 类型列 +CREATE TABLE t_serial_extract ( + id INT PRIMARY KEY, + tuple_col VARBINARY +); + +-- 插入多种类型的 tuple,覆盖 int、float、bool、date、string、uuid、objectid 等 +INSERT INTO t_serial_extract VALUES + (1, serial_pack(NULL, 8, 16, 32, 64, 18, 116, 132, 164, TRUE, FALSE, 3.14, 2.718, DATE '2022-01-01', DATETIME '2022-01-01 12:34:56', TIMESTAMP '2022-01-01 12:34:56', DECIMAL64 '999', DECIMAL128 '1234567890123456789012345678901234', 'hello', UUID(), OBJECTID())), + (2, serial_pack(400, 2024, 0xBEEF, OBJECTID(), NULL)); + +-- 验证 serial_extract 提取各类型元素 +-- int8 +SELECT id, serial_extract(tuple_col, 1, INT8) AS int8_val FROM t_serial_extract ORDER BY id; +-- int16 +SELECT id, serial_extract(tuple_col, 2, INT16) AS int16_val FROM t_serial_extract ORDER BY id; +-- int32 +SELECT id, serial_extract(tuple_col, 3, INT32) AS int32_val FROM t_serial_extract ORDER BY id; +-- int64 +SELECT id, serial_extract(tuple_col, 4, INT64) AS int64_val FROM t_serial_extract ORDER BY id; +-- uint8 +SELECT id, serial_extract(tuple_col, 5, UINT8) AS uint8_val FROM t_serial_extract ORDER BY id; +-- uint16 +SELECT id, serial_extract(tuple_col, 6, UINT16) AS uint16_val FROM t_serial_extract ORDER BY id; +-- uint32 +SELECT id, serial_extract(tuple_col, 7, UINT32) AS uint32_val FROM t_serial_extract ORDER BY id; +-- uint64 +SELECT id, serial_extract(tuple_col, 8, UINT64) AS uint64_val FROM t_serial_extract ORDER BY id; +-- bool +SELECT id, serial_extract(tuple_col, 9, BOOL) AS bool_val FROM t_serial_extract ORDER BY id; +SELECT id, serial_extract(tuple_col, 10, BOOL) AS bool_val2 FROM t_serial_extract ORDER BY id; +-- float32 +SELECT id, serial_extract(tuple_col, 11, FLOAT32) AS float32_val FROM t_serial_extract ORDER BY id; +-- float64 +SELECT id, serial_extract(tuple_col, 12, FLOAT64) AS float64_val FROM t_serial_extract ORDER BY id; +-- date +SELECT id, serial_extract(tuple_col, 13, DATE) AS date_val FROM t_serial_extract ORDER BY id; +-- datetime +SELECT id, serial_extract(tuple_col, 14, DATETIME) AS datetime_val FROM t_serial_extract ORDER BY id; +-- timestamp +SELECT id, serial_extract(tuple_col, 15, TIMESTAMP) AS timestamp_val FROM t_serial_extract ORDER BY id; +-- decimal64 +SELECT id, serial_extract(tuple_col, 16, DECIMAL64) AS decimal64_val FROM t_serial_extract ORDER BY id; +-- decimal128 +SELECT id, serial_extract(tuple_col, 17, DECIMAL128) AS decimal128_val FROM t_serial_extract ORDER BY id; +-- varchar +SELECT id, serial_extract(tuple_col, 18, VARCHAR) AS varchar_val FROM t_serial_extract ORDER BY id; +-- uuid +SELECT id, serial_extract(tuple_col, 19, UUID) AS uuid_val FROM t_serial_extract ORDER BY id; +-- objectid +SELECT id, serial_extract(tuple_col, 20, OBJECTID) AS objectid_val FROM t_serial_extract ORDER BY id; + +-- 特殊类型:time、year、bit +SELECT id, serial_extract(tuple_col, 0, TIME) AS time_val FROM t_serial_extract WHERE id=2; +SELECT id, serial_extract(tuple_col, 1, YEAR) AS year_val FROM t_serial_extract WHERE id=2; +SELECT id, serial_extract(tuple_col, 2, BIT) AS bit_val FROM t_serial_extract WHERE id=2; +SELECT id, serial_extract(tuple_col, 3, OBJECTID) AS objectid_val2 FROM t_serial_extract WHERE id=2; + +-- 越界/异常:索引超范围 +SELECT id, serial_extract(tuple_col, 100, INT8) AS out_of_range FROM t_serial_extract ORDER BY id; + +-- 清理 +DROP TABLE t_serial_extract;