DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`nest_child_add`(
	 vTable VARCHAR(45)
	,vChild VARCHAR(45)
	,vFatherId INT
)
BEGIN
	DECLARE vMyLeft INT;

	SET vTable = util.quoteIdentifier(vTable);

	DROP TEMPORARY TABLE IF EXISTS aux;
	CREATE TEMPORARY TABLE aux
		SELECT 0 as lft;

	EXECUTE IMMEDIATE CONCAT(
		'UPDATE aux 
			SET lft = (SELECT lft 
				FROM ', vTable, 
				' WHERE id = ?)')
		USING vFatherId;
	
	SELECT lft INTO vMyLeft FROM aux;
	DROP TEMPORARY TABLE aux;

	EXECUTE IMMEDIATE CONCAT(
		'UPDATE ', vTable, ' 
			SET rgt = rgt + 2 
			WHERE rgt > ? 
			ORDER BY rgt DESC')
		USING vMyLeft;
	
	EXECUTE IMMEDIATE CONCAT(
		'UPDATE ', vTable, ' 
			SET lft = lft + 2
			WHERE lft > ? 
			ORDER BY lft DESC')
		USING vMyLeft;
	
	EXECUTE IMMEDIATE CONCAT(
		'INSERT INTO ', vTable, ' (name, lft, rgt)
			VALUES(?, ? + 1, ? + 2)')
		USING vChild,
			vMyLeft,
			vMyLeft;
	
END$$
DELIMITER ;
