Skip to content
Snippets Groups Projects
Unverified Commit aafdc254 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

Merge branch 'f-server-side-scripting' into merge_docker_sss

parents d16d64d7 5305096d
Branches
Tags
No related merge requests found
......@@ -32,36 +32,36 @@ POV_LABEL: BEGIN
DECLARE sIntData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for integer_data*/
DECLARE sDoubleData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for double_data*/
DECLARE sDatetimeData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for datetime_data*/
DECLARE sNullData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for null_data*/
DECLARE sNullData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for null_data*/
DECLARE sDateData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for date_data*/
DECLARE sRefData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for reference_data*/
DECLARE aggValue VARCHAR(255) DEFAULT NULL;
DECLARE aggValue VARCHAR(255) DEFAULT NULL;
DECLARE aggValueWhereClause VARCHAR(20000) DEFAULT NULL;
DECLARE distinctUnits INT DEFAULT 0;
DECLARE usedStdUnit BIGINT DEFAULT NULL;
DECLARE keepTabl VARCHAR(255) DEFAULT NULL;
DECLARE keepTabl VARCHAR(255) DEFAULT NULL;
IF o = '->' THEN
#-- special case: pure reference property
#-- special case: pure reference property
call applyRefPOV(sourceSet,targetSet, propertiesTable, refIdsTable);
LEAVE POV_LABEL;
ELSEIF o = '0' THEN
#-- special case: property IS NULL
#-- generate statement parts
SET vText = NULL;
SET sTextData = 'SELECT domain_id, entity_id, property_id FROM `null_data` AS subdata';
ELSEIF o = '!0' THEN
#-- special case: property IS NOT NULL
#-- generate statement parts
SET vText = NULL;
LEAVE POV_LABEL;
ELSEIF o = '0' THEN
#-- special case: property IS NULL
#-- generate statement parts
SET vText = NULL;
SET sTextData = 'SELECT domain_id, entity_id, property_id FROM `null_data` AS subdata';
ELSEIF o = '!0' THEN
#-- special case: property IS NOT NULL
#-- generate statement parts
SET vText = NULL;
SET sTextData = 'SELECT DISTINCT domain_id, entity_id, property_id FROM `text_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `enum_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `integer_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `double_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `reference_data` AS subdata WHERE subdata.value IS NOT NULL';
ELSEIF o = "(" or o = "!(" THEN
SET sTextData = IF(vText IS NULL,' SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data`', IF(vDateTimeDotNotation IS NULL, NULL, CONCAT(' SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data` AS subdata WHERE ',getDateWhereClause(vDateTimeDotNotation,o))));
SET sDatetimeData = IF(vText IS NULL,' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data`', IF(vDateTime IS NULL, NULL, CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data` AS subdata WHERE ',getDateTimeWhereClause(vDateTime,o))));
SET vText = NULL;
ELSEIF agg IS NOT NULL THEN
ELSEIF agg IS NOT NULL THEN
#-- find aggregated value (min/max...)
#-- construct where clause
......@@ -69,7 +69,7 @@ POV_LABEL: BEGIN
SET aggValueWhereClause = CONCAT(IF(aggValueWhereClause IS NULL, '', aggValueWhereClause), getAggValueWhereClause(sourceSet, propertiesTable));
#-- construct statement
SET @aggValueStmtStr = CONCAT('SELECT ',agg,'(subdata.value), ', agg, '(convert_unit(subdata.unit_sig,subdata.value)), COUNT(DISTINCT standard_unit(subdata.unit_sig)), max(standard_unit(subdata.unit_sig)) INTO @sAggValue, @sAggValueConvert, @distinctUnits, @StdUnitSig FROM (SELECT entity_id, property_id, value, unit_sig FROM `integer_data` UNION SELECT entity_id, property_id, value, unit_sig FROM `double_data`) AS subdata WHERE ', aggValueWhereClause);
SET @aggValueStmtStr = CONCAT('SELECT ',agg,'(subdata.value), ', agg, '(convert_unit(subdata.unit_sig,subdata.value)), COUNT(DISTINCT standard_unit(subdata.unit_sig)), max(standard_unit(subdata.unit_sig)) INTO @sAggValue, @sAggValueConvert, @distinctUnits, @StdUnitSig FROM (SELECT entity_id, property_id, value, unit_sig FROM `integer_data` UNION SELECT entity_id, property_id, value, unit_sig FROM `double_data`) AS subdata WHERE ', aggValueWhereClause);
#-- run statement
PREPARE stmtAggValueStmt FROM @aggValueStmtStr;
......@@ -97,7 +97,7 @@ POV_LABEL: BEGIN
SET vText = NULL;
ELSE
#-- generate statement parts
#-- generate statement parts
SET sTextData = IF(vText IS NULL, 'SELECT DISTINCT domain_id, entity_id, property_id FROM `text_data`', CONCAT('SELECT DISTINCT domain_id, entity_id, property_id FROM `text_data` AS subdata WHERE subdata.value ',o,' ?'));
SET sEnumData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `enum_data`', CONCAT(' UNION SELECT DISTINCT domain_id, entity_id, property_id FROM `enum_data` AS subdata WHERE subdata.value ', o, ' ?'));
SET sIntData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT subdata.domain_id, subdata.entity_id, subdata.property_id FROM `integer_data` AS subdata', IF(vInt IS NULL AND vDoubleStdUnit IS NULL, NULL, CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `integer_data` AS subdata WHERE ', getDoubleWhereClause(vInt, unit_sig, vDoubleStdUnit, stdUnit_sig, o))));
......@@ -105,18 +105,18 @@ POV_LABEL: BEGIN
SET sDatetimeData = IF(vText IS NULL,' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data`', IF(vDateTime IS NULL, NULL, CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data` AS subdata WHERE ',getDateTimeWhereClause(vDateTime,o))));
SET sDateData = IF(vText IS NULL,' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data`', IF(vDateTimeDotNotation IS NULL, NULL, CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data` AS subdata WHERE ',getDateWhereClause(vDateTimeDotNotation,o))));
SET sRefData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `reference_data`', IF(refIdsTable IS NULL, NULL, CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `reference_data` AS subdata WHERE EXISTS (SELECT 1 FROM `', refIdsTable, '` AS refIdsTable WHERE subdata.value=refIdsTable.id LIMIT 1)')));
SET sNullData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `null_data`', NULL);
END IF;
SET sNullData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `null_data`', NULL);
END IF;
SET data = CONCAT('(',sTextData,
IF(sEnumData IS NULL, '', sEnumData),
IF(sEnumData IS NULL, '', sEnumData),
IF(sDoubleData IS NULL, '', sDoubleData),
IF(sIntData IS NULL, '', sIntData),
IF(sDatetimeData IS NULL, '', sDatetimeData),
IF(sDateData IS NULL, '', sDateData),
IF(sRefData IS NULL, '', sRefData),
IF(sNullData IS NULL, '', sNullData),
IF(sNullData IS NULL, '', sNullData),
')'
);
......@@ -124,20 +124,20 @@ POV_LABEL: BEGIN
call createTmpTable(keepTabl);
#-- generate statement from statement parts
SET @stmtPOVkeepTblStr = CONCAT("INSERT IGNORE INTO `", keepTabl, "` (id) SELECT DISTINCT entity_id AS id FROM ", data, " as data", IF(propertiesTable IS NULL, '', CONCAT(' WHERE EXISTS (Select 1 from `', propertiesTable, '` AS prop WHERE prop.id = data.property_id AND (prop.id2=data.entity_id OR prop.id2=0))')));
SET @stmtPOVStr = CONCAT(
SET @stmtPOVkeepTblStr = CONCAT("INSERT IGNORE INTO `", keepTabl, "` (id) SELECT DISTINCT entity_id AS id FROM ", data, " as data", IF(propertiesTable IS NULL, '', CONCAT(' WHERE EXISTS (Select 1 from `', propertiesTable, '` AS prop WHERE prop.id = data.property_id AND (prop.id2=data.entity_id OR prop.id2=0))')));
SET @stmtPOVStr = CONCAT(
IF(targetSet IS NULL,
CONCAT('DELETE FROM `',sourceSet,'` WHERE NOT EXISTS (SELECT 1 FROM `'),
CONCAT('DELETE FROM `',sourceSet,'` WHERE NOT EXISTS (SELECT 1 FROM `'),
CONCAT('INSERT IGNORE INTO `',targetSet,'` (id) SELECT id FROM `',sourceSet,'` WHERE EXISTS (SELECT 1 FROM `')),
keepTabl,
keepTabl,
'` AS data WHERE data.id=`', sourceSet, '`.`id` LIMIT 1)'
);
);
#-- prepare and execute
PREPARE stmt3 FROM @stmtPOVStr;
PREPARE stmtPOVkeepTbl FROM @stmtPOVkeepTblStr;
PREPARE stmtPOVkeepTbl FROM @stmtPOVkeepTblStr;
IF vText IS NULL THEN
EXECUTE stmtPOVkeepTbl;
ELSE
......@@ -145,8 +145,8 @@ POV_LABEL: BEGIN
EXECUTE stmtPOVkeepTbl USING @vText, @vText;
END IF;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
DEALLOCATE PREPARE stmtPOVkeepTbl;
DEALLOCATE PREPARE stmt3;
DEALLOCATE PREPARE stmtPOVkeepTbl;
SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet;
......
......@@ -27,11 +27,11 @@ DELIMITER //
CREATE FUNCTION db_2_0.getDoubleWhereClause(value DOUBLE, unit_sig BIGINT, valueStdUnit DECIMAL(65,30), stdUnit_sig BIGINT, o CHAR(4)) RETURNS VARCHAR(20000) DETERMINISTIC
BEGIN
RETURN IF(unit_sig IS NULL AND value IS NOT NULL,
CONCAT('subdata.value', o, '\'', value, '\''), #-- without unit but value must not be NULL
CONCAT('subdata.value ', o, ' \'', value, '\''), #-- without unit but value must not be NULL
CONCAT(
IF(value IS NULL, '', #-- value is NULL, but valueStdUnit might not be NULL
CONCAT('(subdata.unit_sig=', unit_sig, ' AND subdata.value', o, '\'', value, '\') OR ')),
IF(unit_sig = stdUnit_sig,'',CONCAT('(subdata.unit_sig=', stdUnit_sig,' AND subdata.value', o, '\'', valueStdUnit, '\') OR ')),'(standard_unit(subdata.unit_sig)=', stdUnit_sig,' AND convert_unit(subdata.unit_sig,subdata.value)', o, valueStdUnit, ')')); #-- with unit and non-null valueStdUnit
CONCAT('(subdata.unit_sig=', unit_sig, ' AND subdata.value ', o, ' \'', value, '\') OR ')),
IF(unit_sig = stdUnit_sig,'',CONCAT('(subdata.unit_sig=', stdUnit_sig,' AND subdata.value ', o, ' \'', valueStdUnit, '\') OR ')),'(standard_unit(subdata.unit_sig)=', stdUnit_sig,' AND convert_unit(subdata.unit_sig,subdata.value) ', o, ' ', valueStdUnit, ')')); #-- with unit and non-null valueStdUnit
END;
//
DELIMITER ;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment