Skip to content

Instantly share code, notes, and snippets.

@livingstonef
Created September 26, 2012 21:12
Show Gist options
  • Save livingstonef/3790616 to your computer and use it in GitHub Desktop.
Save livingstonef/3790616 to your computer and use it in GitHub Desktop.
EAV Validation
DROP PROCEDURE IF EXISTS `property_value_validate`;
DELIMITER //
CREATE PROCEDURE `property_value_validate`(IN _property_id INT, IN _value_data LONGTEXT)
BEGIN
DECLARE _validationFails CONDITION FOR SQLSTATE '99001';
DECLARE _dataType INT;
DECLARE _dataTypeRegExp VARCHAR(255);
SET _dataType = (SELECT DISTINCT `property_datatype` FROM `properties` WHERE `property_id`= _property_id );
SET _dataTypeRegExp = (SELECT DISTINCT `datatype_validate` FROM `property_datatypes` WHERE `datatype_name`= _dataType );
IF (_dataTypeRegExp IS NOT NULL) THEN
IF (_value_data NOT REGEXP _dataTypeRegExp) THEN
SIGNAL _validationFails SET MESSAGE_TEXT= "The inserted value fails the property datatype validation rule";
END IF;
END IF;
END//
DELIMITER ;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment