Skip to content

Commit 7eb716f

Browse files
sp basic support
1 parent 0f64bd0 commit 7eb716f

26 files changed

Lines changed: 431 additions & 262 deletions

mysql-test/suite/villagesql/stored_procedure/r/stored_procedure_call_complex.result

Lines changed: 0 additions & 48 deletions
This file was deleted.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
CREATE TABLE t1 (val COMPLEX);
2+
INSERT INTO t1 VALUES ('(1.0,2.0)');
3+
INSERT INTO t1 VALUES ('(3.0,4.0)');
4+
CREATE TABLE t2 (val COMPLEX);
5+
CREATE PROCEDURE p1()
6+
BEGIN
7+
DECLARE v COMPLEX;
8+
DECLARE done INT DEFAULT 0;
9+
DECLARE cur CURSOR FOR SELECT val FROM t1;
10+
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
11+
OPEN cur;
12+
fetch_loop: LOOP
13+
FETCH cur INTO v;
14+
IF done THEN
15+
LEAVE fetch_loop;
16+
END IF;
17+
INSERT INTO t2 VALUES (v);
18+
END LOOP;
19+
CLOSE cur;
20+
END//
21+
CALL p1();
22+
SELECT * FROM t2;
23+
val
24+
(1,2)
25+
(3,4)
26+
DROP PROCEDURE p1;
27+
DROP TABLE t1, t2;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
CREATE TABLE t1 (val COMPLEX);
2+
CREATE PROCEDURE p1()
3+
BEGIN
4+
DECLARE v1 COMPLEX DEFAULT '(0.0,0.0)';
5+
DECLARE v2 COMPLEX;
6+
SET v2 = '(1.0,2.0)';
7+
INSERT INTO t1 VALUES (v1);
8+
INSERT INTO t1 VALUES (v2);
9+
END//
10+
CALL p1();
11+
SELECT * FROM t1;
12+
val
13+
(0,0)
14+
(1,2)
15+
DROP PROCEDURE p1;
16+
DROP TABLE t1;
17+
include/rpl/deprecated/show_binlog_events.inc
18+
Log_name Pos Event_type Server_id End_log_pos Info
19+
# # Query # # use `test`; CREATE TABLE `t1` (
20+
`val` vsql_complex.COMPLEX DEFAULT NULL
21+
)
22+
# # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
23+
BEGIN
24+
DECLARE v1 COMPLEX DEFAULT '(0.0,0.0)';
25+
DECLARE v2 COMPLEX;
26+
SET v2 = '(1.0,2.0)';
27+
INSERT INTO t1 VALUES (v1);
28+
INSERT INTO t1 VALUES (v2);
29+
END
30+
# # Query # # BEGIN
31+
# # Table_map # # table_id: # (test.t1)
32+
# # Write_rows # # table_id: # flags: STMT_END_F
33+
# # Xid # # COMMIT /* XID */
34+
# # Query # # BEGIN
35+
# # Table_map # # table_id: # (test.t1)
36+
# # Write_rows # # table_id: # flags: STMT_END_F
37+
# # Xid # # COMMIT /* XID */
38+
# # Query # # use `test`; DROP PROCEDURE p1
39+
# # Query # # use `test`; DROP TABLE `t1` /* generated by server */
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
CREATE TABLE t1 (val COMPLEX);
2+
CREATE PROCEDURE p1()
3+
BEGIN
4+
DECLARE v COMPLEX;
5+
DECLARE caught INT DEFAULT 0;
6+
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET caught = 1;
7+
# Valid assignment - should succeed.
8+
SET v = '(1.0,2.0)';
9+
INSERT INTO t1 VALUES (v);
10+
# Invalid assignment - handler should catch the error.
11+
SET v = 'not_a_complex_value';
12+
INSERT INTO t1 VALUES (v);
13+
SELECT caught;
14+
END//
15+
CALL p1();
16+
caught
17+
1
18+
SELECT * FROM t1;
19+
val
20+
(1,2)
21+
NULL
22+
DROP PROCEDURE p1;
23+
DROP TABLE t1;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
CREATE TABLE t1 (val COMPLEX);
2+
CREATE PROCEDURE p1(IN input_val COMPLEX)
3+
BEGIN
4+
INSERT INTO t1 VALUES (input_val);
5+
END//
6+
CALL p1('(1.0,2.0)');
7+
SELECT * FROM t1;
8+
val
9+
(1,2)
10+
DROP PROCEDURE p1;
11+
DROP TABLE t1;
12+
include/rpl/deprecated/show_binlog_events.inc
13+
Log_name Pos Event_type Server_id End_log_pos Info
14+
# # Query # # use `test`; CREATE TABLE `t1` (
15+
`val` vsql_complex.COMPLEX DEFAULT NULL
16+
)
17+
# # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(IN input_val COMPLEX)
18+
BEGIN
19+
INSERT INTO t1 VALUES (input_val);
20+
END
21+
# # Query # # BEGIN
22+
# # Table_map # # table_id: # (test.t1)
23+
# # Write_rows # # table_id: # flags: STMT_END_F
24+
# # Xid # # COMMIT /* XID */
25+
# # Query # # use `test`; DROP PROCEDURE p1
26+
# # Query # # use `test`; DROP TABLE `t1` /* generated by server */
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
CREATE PROCEDURE p1(INOUT val COMPLEX)
2+
BEGIN
3+
# Simple pass-through logic for now, assuming string representation
4+
# Ideally this would do math if operations were supported
5+
SET val = '(9.0,9.0)';
6+
END//
7+
SET @my_val = '(1.0,2.0)';
8+
CALL p1(@my_val);
9+
SELECT @my_val;
10+
@my_val
11+
(9,9)
12+
SET @my_val = NULL;
13+
DROP PROCEDURE p1;
14+
include/rpl/deprecated/show_binlog_events.inc
15+
Log_name Pos Event_type Server_id End_log_pos Info
16+
# # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(INOUT val COMPLEX)
17+
BEGIN
18+
# Simple pass-through logic for now, assuming string representation
19+
# Ideally this would do math if operations were supported
20+
SET val = '(9.0,9.0)';
21+
END
22+
# # Query # # use `test`; DROP PROCEDURE p1
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
CREATE PROCEDURE p1(OUT output_val COMPLEX)
2+
BEGIN
3+
SET output_val = '(3.0,4.0)';
4+
END//
5+
CALL p1(@res);
6+
SELECT @res;
7+
@res
8+
(3,4)
9+
DROP PROCEDURE p1;
10+
SET @res = NULL;
11+
include/rpl/deprecated/show_binlog_events.inc
12+
Log_name Pos Event_type Server_id End_log_pos Info
13+
# # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(OUT output_val COMPLEX)
14+
BEGIN
15+
SET output_val = '(3.0,4.0)';
16+
END
17+
# # Query # # use `test`; DROP PROCEDURE p1

mysql-test/suite/villagesql/stored_procedure/r/stored_procedure_parameter_validation.result

Lines changed: 0 additions & 24 deletions
This file was deleted.

mysql-test/suite/villagesql/stored_procedure/t/stored_procedure_call_complex.test

Lines changed: 0 additions & 76 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Test cursor FETCH into a COMPLEX variable in a Stored Procedure
2+
3+
--source include/villagesql/install_complex_extension.inc
4+
5+
CREATE TABLE t1 (val COMPLEX);
6+
INSERT INTO t1 VALUES ('(1.0,2.0)');
7+
INSERT INTO t1 VALUES ('(3.0,4.0)');
8+
9+
CREATE TABLE t2 (val COMPLEX);
10+
11+
delimiter //;
12+
CREATE PROCEDURE p1()
13+
BEGIN
14+
DECLARE v COMPLEX;
15+
DECLARE done INT DEFAULT 0;
16+
DECLARE cur CURSOR FOR SELECT val FROM t1;
17+
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
18+
19+
OPEN cur;
20+
fetch_loop: LOOP
21+
FETCH cur INTO v;
22+
IF done THEN
23+
LEAVE fetch_loop;
24+
END IF;
25+
INSERT INTO t2 VALUES (v);
26+
END LOOP;
27+
CLOSE cur;
28+
END//
29+
delimiter ;//
30+
31+
CALL p1();
32+
SELECT * FROM t2;
33+
34+
DROP PROCEDURE p1;
35+
DROP TABLE t1, t2;
36+
37+
--source include/villagesql/uninstall_complex_extension.inc

0 commit comments

Comments
 (0)