#
/** @author Professor Tom DeDonno @date 7/2013 and 8/2015 function testFruitExistence( msg Text, fid smallint ) returns TEXT string if fruit is or is not in table:fruit procedure testTransaction( ) does major deletes in table:fruit and table:orders prints out initial fruit count, fruit count after delete, fruit count after rollback procedure testTransaction2( fid smallint ) logs operations to table:myError deletes fruit fID, print fruit count, then rollback, print fruit count */ #if pma generates out of synce, just import twice or drop first drop function if exists `testFruitExistence`; drop Procedure if exists `testTransaction`; drop procedure if exists `testTransaction2`; # will use one delimiter for all three routines delimiter $$ create function `testFruitExistence`( msg TEXT, fID smallint unsigned ) RETURNS TEXT DETERMINISTIC READS SQL DATA BEGIN declare str TEXT; select concat( msg, " fruitID:", fID, " is ", if( fID=(select fruitID from fruit where fruitID=fID), " in ", " not in " ), " table fruit" ) into str; return str; END $$ /* Essay 11 test testTransaction in phpMyAdmim, what does the UNION query do? what does the delete do? why are none of the deletes maintained after select testTransaction( ) */ /** as of MySQL 5.5 you cannot have transactions inside functions or triggers */ CREATE Procedure `testTransaction`() DETERMINISTIC READS SQL DATA BEGIN declare str TEXT; start transaction; set str = concat( "Start: ", (select count( fruitID ) from fruit) ); # does this delete orderLine entries and how? delete from `orders` where shipDate is null; delete from fruit where fruitID not in (select fruitID from `inventoryQuantity` UNION (select fruitID from orderLine) ); set str = concat( str, " After Delete: ", (select count( fruitID ) from fruit) ); rollback; set str = concat( str, " After rollback: ", ( select count( fruitID ) from fruit) ); select str; END $$ /** Essay 12 test the procedure testTransaction2 using phpMyAdmin, make the following calls testTransaction2( 6 ), and testTransaction2( 2 ) how is the field myDate being set in myError? why does 2 or 6 fail? if phpMyAdmin creates a new session on each submit, how does the calls to this procedure work as a single session? */ create procedure `testTransaction2`( fID smallint unsigned ) DETERMINISTIC READS SQL DATA BEGIN insert into myError (location, msg ) VALUES ( "testTransaction2", testFruitExistence( "before Start Transaction:", fID ) ); start transaction; delete from `fruit` where fruitID = fID; insert into myError (location, msg ) VALUES ( "testTransaction2 inside transaction", testFruitExistence( concat( "fruitID ", fID, " deleted"), fID ) ); rollback; #rollback, cancel all changes from the last transaction insert into myError (location, msg ) VALUES ( "testTransaction2", testFruitExistence( concat( "After Rollback fruitID ", fID, " back in"), fID ) ); END $$ # delimiter ; /** Essay13 list the signature of each function and procedure in your database, a signatures consists of the function/procedure name, its arguments and types, its return value (for function only) and a short comment on what it does */