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

BUG: empty space with like in POV filter

parent 810efcf4
No related branches found
No related tags found
No related merge requests found
...@@ -32,36 +32,36 @@ POV_LABEL: BEGIN ...@@ -32,36 +32,36 @@ POV_LABEL: BEGIN
DECLARE sIntData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for integer_data*/ DECLARE sIntData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for integer_data*/
DECLARE sDoubleData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for double_data*/ DECLARE sDoubleData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for double_data*/
DECLARE sDatetimeData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for datetime_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 sDateData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for date_data*/
DECLARE sRefData VARCHAR(20000) DEFAULT NULL; /*WHERE CLAUSE for reference_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 aggValueWhereClause VARCHAR(20000) DEFAULT NULL;
DECLARE distinctUnits INT DEFAULT 0; DECLARE distinctUnits INT DEFAULT 0;
DECLARE usedStdUnit BIGINT DEFAULT NULL; DECLARE usedStdUnit BIGINT DEFAULT NULL;
DECLARE keepTabl VARCHAR(255) DEFAULT NULL; DECLARE keepTabl VARCHAR(255) DEFAULT NULL;
IF o = '->' THEN IF o = '->' THEN
#-- special case: pure reference property #-- special case: pure reference property
call applyRefPOV(sourceSet,targetSet, propertiesTable, refIdsTable); call applyRefPOV(sourceSet,targetSet, propertiesTable, refIdsTable);
LEAVE POV_LABEL; LEAVE POV_LABEL;
ELSEIF o = '0' THEN ELSEIF o = '0' THEN
#-- special case: property IS NULL #-- special case: property IS NULL
#-- generate statement parts #-- generate statement parts
SET vText = NULL; SET vText = NULL;
SET sTextData = 'SELECT domain_id, entity_id, property_id FROM `null_data` AS subdata'; SET sTextData = 'SELECT domain_id, entity_id, property_id FROM `null_data` AS subdata';
ELSEIF o = '!0' THEN ELSEIF o = '!0' THEN
#-- special case: property IS NOT NULL #-- special case: property IS NOT NULL
#-- generate statement parts #-- generate statement parts
SET vText = NULL; 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'; 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 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 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 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; SET vText = NULL;
ELSEIF agg IS NOT NULL THEN ELSEIF agg IS NOT NULL THEN
#-- find aggregated value (min/max...) #-- find aggregated value (min/max...)
#-- construct where clause #-- construct where clause
...@@ -69,7 +69,7 @@ POV_LABEL: BEGIN ...@@ -69,7 +69,7 @@ POV_LABEL: BEGIN
SET aggValueWhereClause = CONCAT(IF(aggValueWhereClause IS NULL, '', aggValueWhereClause), getAggValueWhereClause(sourceSet, propertiesTable)); SET aggValueWhereClause = CONCAT(IF(aggValueWhereClause IS NULL, '', aggValueWhereClause), getAggValueWhereClause(sourceSet, propertiesTable));
#-- construct statement #-- 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 #-- run statement
PREPARE stmtAggValueStmt FROM @aggValueStmtStr; PREPARE stmtAggValueStmt FROM @aggValueStmtStr;
...@@ -97,7 +97,7 @@ POV_LABEL: BEGIN ...@@ -97,7 +97,7 @@ POV_LABEL: BEGIN
SET vText = NULL; SET vText = NULL;
ELSE 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 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 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)))); 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 ...@@ -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 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 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 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); SET sNullData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `null_data`', NULL);
END IF; END IF;
SET data = CONCAT('(',sTextData, SET data = CONCAT('(',sTextData,
IF(sEnumData IS NULL, '', sEnumData), IF(sEnumData IS NULL, '', sEnumData),
IF(sDoubleData IS NULL, '', sDoubleData), IF(sDoubleData IS NULL, '', sDoubleData),
IF(sIntData IS NULL, '', sIntData), IF(sIntData IS NULL, '', sIntData),
IF(sDatetimeData IS NULL, '', sDatetimeData), IF(sDatetimeData IS NULL, '', sDatetimeData),
IF(sDateData IS NULL, '', sDateData), IF(sDateData IS NULL, '', sDateData),
IF(sRefData IS NULL, '', sRefData), IF(sRefData IS NULL, '', sRefData),
IF(sNullData IS NULL, '', sNullData), IF(sNullData IS NULL, '', sNullData),
')' ')'
); );
...@@ -124,20 +124,20 @@ POV_LABEL: BEGIN ...@@ -124,20 +124,20 @@ POV_LABEL: BEGIN
call createTmpTable(keepTabl); call createTmpTable(keepTabl);
#-- generate statement from statement parts #-- 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 @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 @stmtPOVStr = CONCAT(
IF(targetSet IS NULL, 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 `')), 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)' '` AS data WHERE data.id=`', sourceSet, '`.`id` LIMIT 1)'
); );
#-- prepare and execute #-- prepare and execute
PREPARE stmt3 FROM @stmtPOVStr; PREPARE stmt3 FROM @stmtPOVStr;
PREPARE stmtPOVkeepTbl FROM @stmtPOVkeepTblStr; PREPARE stmtPOVkeepTbl FROM @stmtPOVkeepTblStr;
IF vText IS NULL THEN IF vText IS NULL THEN
EXECUTE stmtPOVkeepTbl; EXECUTE stmtPOVkeepTbl;
ELSE ELSE
...@@ -145,8 +145,8 @@ POV_LABEL: BEGIN ...@@ -145,8 +145,8 @@ POV_LABEL: BEGIN
EXECUTE stmtPOVkeepTbl USING @vText, @vText; EXECUTE stmtPOVkeepTbl USING @vText, @vText;
END IF; END IF;
EXECUTE stmt3; EXECUTE stmt3;
DEALLOCATE PREPARE stmt3; DEALLOCATE PREPARE stmt3;
DEALLOCATE PREPARE stmtPOVkeepTbl; DEALLOCATE PREPARE stmtPOVkeepTbl;
SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet; SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet;
......
...@@ -27,11 +27,11 @@ DELIMITER // ...@@ -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 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 BEGIN
RETURN IF(unit_sig IS NULL AND value IS NOT NULL, 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( CONCAT(
IF(value IS NULL, '', #-- value is NULL, but valueStdUnit might not be NULL 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 ')), 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 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; END;
// //
DELIMITER ; DELIMITER ;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment