Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 142 additions & 0 deletions mysql-test/main/ps-local.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
SET NAMES utf8mb3;
PREPARE LOCAL spvar FROM 'SELECT 1';
ERROR 42000: Undeclared variable: spvar
EXECUTE LOCAL spvar;
ERROR 42000: Undeclared variable: spvar
DEALLOCATE PREPARE LOCAL spvar;
ERROR 42000: Undeclared variable: spvar
OPEN c0 FOR LOCAL spvar;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'OPEN c0 FOR LOCAL spvar' at line 1
CREATE OR REPLACE PROCEDURE p1()
BEGIN
DECLARE `` TEXT DEFAULT 'stmt';
PREPARE LOCAL `` FROM 'CREATE TABLE t1 (a INT)';
EXECUTE LOCAL ``;
DEALLOCATE PREPARE LOCAL ``;
DROP TABLE t1;
END;
$$
CALL p1;
DROP PROCEDURE p1;
SET sql_mode=ORACLE;
CREATE PROCEDURE p1 AS
c0 SYS_REFCURSOR;
v0 TEXT;
`` TEXT := 'stmt';
BEGIN
PREPARE LOCAL `` FROM 'SELECT 1';
OPEN c0 FOR LOCAL ``;
FETCH c0 INTO v0;
SELECT v0;
CLOSE c0;
DEALLOCATE PREPARE LOCAL ``;
END;
$$
CALL p1;
v0
1
DROP PROCEDURE p1;
SET sql_mode=DEFAULT;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar TEXT DEFAULT '';
PREPARE LOCAL spvar FROM 'CREATE TABLE t1 (a INT)';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
DROP TABLE t1;
END;
$$
CALL p1;
DROP PROCEDURE p1;
SET sql_mode=ORACLE;
CREATE PROCEDURE p1 AS
c0 SYS_REFCURSOR;
v0 TEXT;
spvar TEXT := '';
BEGIN
PREPARE LOCAL spvar FROM 'SELECT 1';
OPEN c0 FOR LOCAL spvar;
FETCH c0 INTO v0;
SELECT v0;
CLOSE c0;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
CALL p1;
v0
1
DROP PROCEDURE p1;
SET sql_mode=DEFAULT;
SET sql_mode=ORACLE;
CREATE PROCEDURE p1 AS
TYPE rec0_t IS RECORD (a INT, b INT);
TYPE cur0_t IS REF CURSOR RETURN rec0_t;
c0 cur0_t;
ps_name VARCHAR(32) DEFAULT 'stmt';
BEGIN
PREPARE stmt FROM 'SELECT 1,2';
OPEN c0 FOR LOCAL ps_name;
END;
$$
ERROR HY000: Incorrect usage of c0 and OPEN..FOR LOCAL ps_name_variable
SET sql_mode=DEFAULT;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
CALL p1;
c0
1
DROP PROCEDURE p1;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE stmt FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
CALL p1;
c0
1
DROP PROCEDURE p1;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE stmt;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
CALL p1;
c0
1
DROP PROCEDURE p1;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE stmt;
END;
$$
CALL p1;
c0
1
DROP PROCEDURE p1;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) CHARACTER SET latin1 DEFAULT 'àçé';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
CALL p1;
c0
1
DROP PROCEDURE p1;
191 changes: 191 additions & 0 deletions mysql-test/main/ps-local.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
SET NAMES utf8mb3;

# LOCAL outside of a stored routine

--error ER_SP_UNDECLARED_VAR
PREPARE LOCAL spvar FROM 'SELECT 1';

--error ER_SP_UNDECLARED_VAR
EXECUTE LOCAL spvar;

--error ER_SP_UNDECLARED_VAR
DEALLOCATE PREPARE LOCAL spvar;

--error ER_PARSE_ERROR
OPEN c0 FOR LOCAL spvar;


# Empty LOCAL variable name: EXECUTE

DELIMITER $$;
CREATE OR REPLACE PROCEDURE p1()
BEGIN
DECLARE `` TEXT DEFAULT 'stmt';
PREPARE LOCAL `` FROM 'CREATE TABLE t1 (a INT)';
EXECUTE LOCAL ``;
DEALLOCATE PREPARE LOCAL ``;
DROP TABLE t1;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;


# Empty LOCAL variable name: CURSOR

SET sql_mode=ORACLE;
DELIMITER $$;
CREATE PROCEDURE p1 AS
c0 SYS_REFCURSOR;
v0 TEXT;
`` TEXT := 'stmt';
BEGIN
PREPARE LOCAL `` FROM 'SELECT 1';
OPEN c0 FOR LOCAL ``;
FETCH c0 INTO v0;
SELECT v0;
CLOSE c0;
DEALLOCATE PREPARE LOCAL ``;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
SET sql_mode=DEFAULT;


# LOCAL variable evaluates to an empty PS name: EXECUTE
# We support this because we also support PREPARE `` FROM '...';

DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar TEXT DEFAULT '';
PREPARE LOCAL spvar FROM 'CREATE TABLE t1 (a INT)';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
DROP TABLE t1;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;


# LOCAL variable evaluates to an empty PS name: CURSOR

SET sql_mode=ORACLE;
DELIMITER $$;
CREATE PROCEDURE p1 AS
c0 SYS_REFCURSOR;
v0 TEXT;
spvar TEXT := '';
BEGIN
PREPARE LOCAL spvar FROM 'SELECT 1';
OPEN c0 FOR LOCAL spvar;
FETCH c0 INTO v0;
SELECT v0;
CLOSE c0;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
SET sql_mode=DEFAULT;


# OPEN strict_cursor_variable FROM LOCAL ps_name_variable -- not supported
SET sql_mode=ORACLE;
DELIMITER $$;
--error ER_WRONG_USAGE
CREATE PROCEDURE p1 AS
TYPE rec0_t IS RECORD (a INT, b INT);
TYPE cur0_t IS REF CURSOR RETURN rec0_t;
c0 cur0_t;
ps_name VARCHAR(32) DEFAULT 'stmt';
BEGIN
PREPARE stmt FROM 'SELECT 1,2';
OPEN c0 FOR LOCAL ps_name;
END;
$$
DELIMITER ;$$
SET sql_mode=DEFAULT;


# PREPARE extended; EXECUTE extended; DEALLOCATE extended;

DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;

# PREPARE simple; EXECUTE extended; DEALLOCATE extended;

DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE stmt FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;

# PREPARE extended; EXECUTE simple; DEALLOCATE extended;

DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE stmt;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;

# PREPARE extended; EXECUTE extended; DEALLOCATE simple;

DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) DEFAULT 'stmt';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE stmt;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;


# Extended name with non-ASCII characters

DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE spvar VARCHAR(32) CHARACTER SET latin1 DEFAULT 'àçé';
PREPARE LOCAL spvar FROM 'SELECT 1 AS c0';
EXECUTE LOCAL spvar;
DEALLOCATE PREPARE LOCAL spvar;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
Loading
Loading