fix: mysql prepare limit&offset param (#5734)

* fix: prepare limit&offset param

* test: sqlness

* chore: per review

* chore: per review
This commit is contained in:
discord9
2025-03-19 15:49:26 +08:00
committed by GitHub
parent a19441bed8
commit cd730e0486
4 changed files with 157 additions and 9 deletions

View File

@@ -70,3 +70,62 @@ DEALLOCATE stmt;
affected_rows: 0
-- test if placeholder at limit and offset are parsed correctly
-- SQLNESS PROTOCOL MYSQL
PREPARE stmt FROM 'SELECT 1 LIMIT ? OFFSET ?;';
affected_rows: 0
-- SQLNESS PROTOCOL MYSQL
EXECUTE stmt USING 1, 2;
affected_rows: 0
-- SQLNESS PROTOCOL MYSQL
DEALLOCATE stmt;
affected_rows: 0
-- test with data
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'
);
Affected Rows: 0
INSERT INTO cake(domain, is_expire, ts) VALUES('happy', false, '2025-03-18 12:55:51.758000');
Affected Rows: 1
-- SQLNESS PROTOCOL MYSQL
PREPARE stmt FROM 'SELECT `cake`.`domain`, `cake`.`is_expire`, `cake`.`ts` FROM `cake` WHERE `cake`.`domain` = ? LIMIT ? OFFSET ?';
affected_rows: 0
-- SQLNESS PROTOCOL MYSQL
EXECUTE stmt USING 'happy', 42, 0;
+--------+-----------+----------------------------+
| domain | is_expire | ts |
+--------+-----------+----------------------------+
| happy | 0 | 2025-03-18 12:55:51.758000 |
+--------+-----------+----------------------------+
-- SQLNESS PROTOCOL MYSQL
DEALLOCATE stmt;
affected_rows: 0
-- SQLNESS PROTOCOL MYSQL
DROP TABLE cake;
affected_rows: 0

View File

@@ -37,3 +37,40 @@ 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
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
DROP TABLE cake;