219 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			MySQL
		
	
	
	
		
		
			
		
	
	
			219 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			MySQL
		
	
	
	
|  | ##============================================================================
 | ||
|  | ## Notes
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | # Test case for Bug#11230
 | ||
|  | 
 | ||
|  | # The point of this test is to make sure that '#', '-- ' and '/* ... */'
 | ||
|  | # comments, as well as empty lines, are sent from the client to the server.
 | ||
|  | # This is to ensure better error reporting, and to keep comments in the code
 | ||
|  | # for stored procedures / functions / triggers (Bug#11230).
 | ||
|  | # As a result, be careful when editing comments in this script, they do
 | ||
|  | # matter.
 | ||
|  | #
 | ||
|  | # Also, note that this is a script for **mysql**, not mysqltest.
 | ||
|  | # This is critical, as the mysqltest client interprets comments differently.
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Setup
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | ## See mysql_comments.test for initial cleanup
 | ||
|  | 
 | ||
|  | # Test tables
 | ||
|  | #
 | ||
|  | # t1 is reused throughout the file, and dropped at the end.
 | ||
|  | #
 | ||
|  | drop table if exists t1;
 | ||
|  | create table t1 (
 | ||
|  |   id   char(16) not null default '',
 | ||
|  |   data int not null
 | ||
|  | );
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Comments outside statements
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | # Ignored 1a
 | ||
|  | -- Ignored 1b
 | ||
|  | /*
 | ||
|  |    Ignored 1c
 | ||
|  | */
 | ||
|  | 
 | ||
|  | select 1;
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Comments inside statements
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | select # comment 1a
 | ||
|  | # comment 2a
 | ||
|  | -- comment 2b
 | ||
|  | /*
 | ||
|  |    comment 2c
 | ||
|  | */
 | ||
|  | 2
 | ||
|  | ; # not strictly inside, but on same line
 | ||
|  | # ignored
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Comments inside functions
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | drop function if exists foofct ;
 | ||
|  | 
 | ||
|  | create function foofct (x char(20))
 | ||
|  | returns char(20)
 | ||
|  | /* not inside the body yet */
 | ||
|  | return
 | ||
|  | -- comment 1a
 | ||
|  | # comment 1b
 | ||
|  | /* comment 1c */
 | ||
|  | x; # after body, on same line
 | ||
|  | 
 | ||
|  | select foofct("call 1");
 | ||
|  | 
 | ||
|  | show create function foofct;
 | ||
|  | drop function foofct;
 | ||
|  | 
 | ||
|  | delimiter |
 | ||
|  | 
 | ||
|  | create function foofct(x char(20))
 | ||
|  | returns char(20)
 | ||
|  | begin
 | ||
|  |   -- comment 1a
 | ||
|  |   # comment 1b
 | ||
|  |   /*
 | ||
|  |      comment 1c
 | ||
|  |   */
 | ||
|  | 
 | ||
|  |   -- empty line below
 | ||
|  | 
 | ||
|  |   -- empty line above
 | ||
|  |   return x;
 | ||
|  | end|
 | ||
|  | 
 | ||
|  | delimiter ;
 | ||
|  | 
 | ||
|  | select foofct("call 2");
 | ||
|  | 
 | ||
|  | show create function foofct;
 | ||
|  | drop function foofct;
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Comments inside stored procedures
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | # Empty statement
 | ||
|  | drop procedure if exists empty;
 | ||
|  | create procedure empty()
 | ||
|  | begin
 | ||
|  | end;
 | ||
|  | 
 | ||
|  | call empty();
 | ||
|  | show create procedure empty;
 | ||
|  | drop procedure empty;
 | ||
|  | 
 | ||
|  | drop procedure if exists foosp;
 | ||
|  | 
 | ||
|  | ## These comments are before the create, and will be lost
 | ||
|  | # Comment 1a
 | ||
|  | -- Comment 1b
 | ||
|  | /*
 | ||
|  |    Comment 1c
 | ||
|  |  */
 | ||
|  | create procedure foosp()
 | ||
|  | /* Comment not quiet in the body yet */
 | ||
|  |   insert into test.t1
 | ||
|  | ## These comments are part of the procedure body, and should be kept.
 | ||
|  | # Comment 2a
 | ||
|  | -- Comment 2b
 | ||
|  | /* Comment 2c */
 | ||
|  |   -- empty line below
 | ||
|  | 
 | ||
|  |   -- empty line above
 | ||
|  |   values ("foo", 42); # comment 3, still part of the body
 | ||
|  | ## After the ';', therefore not part of the body
 | ||
|  | # comment 4a
 | ||
|  | -- Comment 4b
 | ||
|  | /*
 | ||
|  |    Comment 4c
 | ||
|  |  */
 | ||
|  | 
 | ||
|  | call foosp();
 | ||
|  | select * from t1;
 | ||
|  | delete from t1;
 | ||
|  | show create procedure foosp;
 | ||
|  | drop procedure foosp;
 | ||
|  | 
 | ||
|  | drop procedure if exists nicesp;
 | ||
|  | 
 | ||
|  | delimiter |
 | ||
|  | 
 | ||
|  | create procedure nicesp(a int)
 | ||
|  | begin
 | ||
|  |   -- declare some variables here
 | ||
|  |   declare b int;
 | ||
|  |   declare c float;
 | ||
|  | 
 | ||
|  |   -- do more stuff here
 | ||
|  |   -- commented nicely and so on
 | ||
|  | 
 | ||
|  |   -- famous last words ...
 | ||
|  | end|
 | ||
|  | 
 | ||
|  | delimiter ;
 | ||
|  | 
 | ||
|  | show create procedure nicesp;
 | ||
|  | drop procedure nicesp;
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Comments inside triggers
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | drop trigger if exists t1_empty;
 | ||
|  | 
 | ||
|  | create trigger t1_empty after delete on t1
 | ||
|  | for each row
 | ||
|  | begin
 | ||
|  | end;
 | ||
|  | 
 | ||
|  | show create trigger t1_empty;
 | ||
|  | 
 | ||
|  | drop trigger if exists t1_bi;
 | ||
|  | 
 | ||
|  | delimiter |
 | ||
|  | 
 | ||
|  | create trigger t1_bi before insert on t1
 | ||
|  | for each row
 | ||
|  | begin
 | ||
|  | # comment 1a
 | ||
|  | -- comment 1b
 | ||
|  | /*
 | ||
|  |    comment 1c
 | ||
|  | */
 | ||
|  |   -- declare some variables here
 | ||
|  |   declare b int;
 | ||
|  |   declare c float;
 | ||
|  | 
 | ||
|  |   -- do more stuff here
 | ||
|  |   -- commented nicely and so on
 | ||
|  | 
 | ||
|  |   -- famous last words ...
 | ||
|  |   set NEW.data := 12;
 | ||
|  | end|
 | ||
|  | 
 | ||
|  | delimiter ;
 | ||
|  | 
 | ||
|  | show create trigger t1_bi;
 | ||
|  | 
 | ||
|  | # also make sure the trigger still works
 | ||
|  | insert into t1(id) value ("trig");
 | ||
|  | select * from t1;
 | ||
|  | 
 | ||
|  | ##============================================================================
 | ||
|  | ## Cleanup
 | ||
|  | ##============================================================================
 | ||
|  | 
 | ||
|  | drop table t1;
 |