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

WIP: versioned queries

parent 9b21159d
No related branches found
No related tags found
No related merge requests found
...@@ -198,18 +198,30 @@ POV_LABEL: BEGIN ...@@ -198,18 +198,30 @@ POV_LABEL: BEGIN
IF versioned AND sourceSet = "entities" THEN IF versioned THEN
call createVersionedTmpTable(keepTabl); call createVersionedTmpTable(keepTabl);
#-- generate statement from statement parts #-- generate statement from statement parts
SET @stmtPOVkeepTblStr = CONCAT("INSERT IGNORE INTO `", keepTabl, "` (id, _iversion) SELECT entity_id AS id, _iversion 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, _iversion) SELECT entity_id AS id, _iversion 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 NOT NULL THEN
CONCAT('INSERT IGNORE INTO `', SET @stmtPOVStr = CONCAT('INSERT IGNORE INTO `',
targetSet, targetSet,
'` (id, _iversion) SELECT source.id, source._iversion FROM `', '` (id, _iversion) SELECT source.id, source._iversion FROM `',
keepTabl, keepTabl,
'` AS source')); '` AS source');
ELSE
SET @stmtPOVStr = CONCAT('DELETE FROM `',
sourceSet,
'` WHERE NOT EXISTS (SELECT 1 FROM `',
keepTabl,
'` AS data WHERE data.id=`',
sourceSet,
'`.`id` AND data._iversion=`',
sourceSet,
'`._iversion LIMIT 1)');
END IF;
#-- prepare and execute #-- prepare and execute
PREPARE stmt3 FROM @stmtPOVStr; PREPARE stmt3 FROM @stmtPOVStr;
...@@ -259,8 +271,6 @@ POV_LABEL: BEGIN ...@@ -259,8 +271,6 @@ POV_LABEL: BEGIN
DEALLOCATE PREPARE stmtPOVkeepTbl; DEALLOCATE PREPARE stmtPOVkeepTbl;
END IF; END IF;
/* Question: why select AS and not select INTO? */
SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet; SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet;
......
...@@ -39,7 +39,7 @@ BEGIN ...@@ -39,7 +39,7 @@ BEGIN
')' ')'
); );
SET @stmtTransactionStr = makeStmt(sourceSet,targetSet,data,NULL); SET @stmtTransactionStr = makeStmt(sourceSet,targetSet,data,NULL,FALSE);
PREPARE stmtTransactionFilter from @stmtTransactionStr; PREPARE stmtTransactionFilter from @stmtTransactionStr;
IF userName IS NOT NULL THEN IF userName IS NOT NULL THEN
SET @userName = userName; SET @userName = userName;
......
...@@ -23,15 +23,33 @@ ...@@ -23,15 +23,33 @@
DROP PROCEDURE IF EXISTS db_2_0.calcComplementUnion; DROP PROCEDURE IF EXISTS db_2_0.calcComplementUnion;
-- Apparently this code is not used anymore
DELIMITER // DELIMITER //
CREATE PROCEDURE db_2_0.calcComplementUnion(in targetSet VARCHAR(255), in subResultSet VARCHAR(255), in universe VARCHAR(255)) CREATE PROCEDURE db_2_0.calcComplementUnion(in targetSet VARCHAR(255), in subResultSet VARCHAR(255), in universe VARCHAR(255), in versioned BOOLEAN)
BEGIN BEGIN
SET @stmtComplementUnionStr = CONCAT('INSERT IGNORE INTO `', targetSet, '` SELECT id FROM `',universe, '` AS universe WHERE NOT EXISTS ( SELECT 1 FROM `', subResultSet,'` AS diff WHERE diff.id=universe.id)'); IF versioned AND universe = "entities" THEN
SET @stmtComplementUnionStr = CONCAT(
'INSERT IGNORE INTO `', targetSet,
'` SELECT e.id, _get_head_iversion(e.id) FROM entities as e WHERE NOT EXISTS ( SELECT 1 FROM `',
subResultSet,
'` AS diff WHERE diff.id=e.id AND diff._iversion = _get_head_iversion(e.id)) UNION ALL SELECT e.id, e._iversion FROM archive_entities AS e WHERE NOT EXISTS ( SELECT 1 FROM `',
subResultSet,
'` as diff WHERE e.id = diff.id AND e._iversion = diff._iversion)');
ELSEIF versioned THEN
SET @stmtComplementUnionStr = CONCAT(
'INSERT IGNORE INTO `', targetSet,
'` SELECT id FROM `',universe,
'` AS universe WHERE NOT EXISTS ( SELECT 1 FROM `',
subResultSet,'`
AS diff WHERE diff.id=universe.id AND diff._iversion = universe.id_version)');
ELSE
SET @stmtComplementUnionStr = CONCAT('INSERT IGNORE INTO `', targetSet, '` SELECT id FROM `',universe, '` AS universe WHERE NOT EXISTS ( SELECT 1 FROM `', subResultSet,'` AS diff WHERE diff.id=universe.id)');
END IF;
PREPARE stmtComplementUnion FROM @stmtComplementUnionStr; PREPARE stmtComplementUnion FROM @stmtComplementUnionStr;
EXECUTE stmtComplementUnion; EXECUTE stmtComplementUnion;
DEALLOCATE PREPARE stmtComplementUnion; DEALLOCATE PREPARE stmtComplementUnion;
END; END;
// //
......
...@@ -27,13 +27,17 @@ ...@@ -27,13 +27,17 @@
DROP PROCEDURE IF EXISTS db_2_0.calcDifference; DROP PROCEDURE IF EXISTS db_2_0.calcDifference;
DELIMITER // DELIMITER //
CREATE PROCEDURE db_2_0.calcDifference(in resultSetTable VARCHAR(255), in diff VARCHAR(255)) CREATE PROCEDURE db_2_0.calcDifference(in resultSetTable VARCHAR(255), in diff VARCHAR(255), in versioned BOOLEAN)
BEGIN BEGIN
SET @diffStmtStr = CONCAT('DELETE FROM `', resultSetTable, '` WHERE EXISTS ( SELECT 1 FROM `', diff,'` AS diff WHERE diff.id=`',resultSetTable,'`.`id`)'); IF versioned THEN
SET @diffStmtStr = CONCAT('DELETE FROM `', resultSetTable, '` WHERE EXISTS ( SELECT 1 FROM `', diff,'` AS diff WHERE diff.id=`',resultSetTable,'`.`id` AND diff._iversion=`', resultSetTable, '`.`_iversion`)');
ELSE
SET @diffStmtStr = CONCAT('DELETE FROM `', resultSetTable, '` WHERE EXISTS ( SELECT 1 FROM `', diff,'` AS diff WHERE diff.id=`',resultSetTable,'`.`id`)');
END IF;
PREPARE diffStmt FROM @diffStmtStr; PREPARE diffStmt FROM @diffStmtStr;
EXECUTE diffStmt; EXECUTE diffStmt;
DEALLOCATE PREPARE diffStmt; DEALLOCATE PREPARE diffStmt;
END; END;
// //
......
...@@ -25,9 +25,21 @@ ...@@ -25,9 +25,21 @@
DROP PROCEDURE IF EXISTS db_2_0.calcIntersection; DROP PROCEDURE IF EXISTS db_2_0.calcIntersection;
DELIMITER // DELIMITER //
CREATE PROCEDURE db_2_0.calcIntersection(in resultSetTable VARCHAR(255), in intersectWith VARCHAR(255)) CREATE PROCEDURE db_2_0.calcIntersection(in resultSetTable VARCHAR(255), in intersectWith VARCHAR(255), in versioned BOOLEAN)
BEGIN BEGIN
SET @diffStmtStr = CONCAT('DELETE FROM `', resultSetTable, '` WHERE NOT EXISTS ( SELECT 1 FROM `', intersectWith,'` AS diff WHERE diff.id=`',resultSetTable,'`.`id`)'); IF versioned THEN
SET @diffStmtStr = CONCAT('DELETE FROM `',
resultSetTable,
'` WHERE NOT EXISTS ( SELECT 1 FROM `',
intersectWith,
'` AS diff WHERE diff.id=`',
resultSetTable,
'`.`id` AND diff._iversion=`',
resultSetTable,
'`.`_iversion`)');
ELSE
SET @diffStmtStr = CONCAT('DELETE FROM `', resultSetTable, '` WHERE NOT EXISTS ( SELECT 1 FROM `', intersectWith,'` AS diff WHERE diff.id=`',resultSetTable,'`.`id`)');
END IF;
PREPARE diffStmt FROM @diffStmtStr; PREPARE diffStmt FROM @diffStmtStr;
EXECUTE diffStmt; EXECUTE diffStmt;
......
...@@ -28,11 +28,11 @@ DELIMITER // ...@@ -28,11 +28,11 @@ DELIMITER //
CREATE PROCEDURE db_2_0.calcUnion(in targetSet VARCHAR(255), in sourceSet VARCHAR(255)) CREATE PROCEDURE db_2_0.calcUnion(in targetSet VARCHAR(255), in sourceSet VARCHAR(255))
BEGIN BEGIN
SET @diffStmtStr = CONCAT('INSERT IGNORE INTO `', targetSet, '` (id) SELECT id FROM `',sourceSet,'`'); SET @diffStmtStr = CONCAT('INSERT IGNORE INTO `', targetSet, '` SELECT * FROM `',sourceSet,'`');
PREPARE diffStmt FROM @diffStmtStr; PREPARE diffStmt FROM @diffStmtStr;
EXECUTE diffStmt; EXECUTE diffStmt;
DEALLOCATE PREPARE diffStmt; DEALLOCATE PREPARE diffStmt;
END; END;
// //
......
...@@ -24,15 +24,15 @@ ...@@ -24,15 +24,15 @@
DROP PROCEDURE IF EXISTS db_2_0.finishSubProperty; DROP PROCEDURE IF EXISTS db_2_0.finishSubProperty;
DELIMITER // DELIMITER //
CREATE PROCEDURE db_2_0.finishSubProperty(in sourceSet VARCHAR(255),in targetSet VARCHAR(255), in list VARCHAR(255)) CREATE PROCEDURE db_2_0.finishSubProperty(in sourceSet VARCHAR(255),in targetSet VARCHAR(255), in list VARCHAR(255), in versioned BOOLEAN)
BEGIN BEGIN
DECLARE data VARCHAR(20000) DEFAULT CONCAT('`',list,'`'); DECLARE data VARCHAR(20000) DEFAULT CONCAT('`',list,'`');
SET @finishSubPropertyStmtStr = makeStmt(sourceSet, targetSet, data, NULL); SET @finishSubPropertyStmtStr = makeStmt(sourceSet, targetSet, data, NULL, versioned);
PREPARE finishSubPropertyStmt FROM @finishSubPropertyStmtStr; PREPARE finishSubPropertyStmt FROM @finishSubPropertyStmtStr;
EXECUTE finishSubPropertyStmt; EXECUTE finishSubPropertyStmt;
DEALLOCATE PREPARE finishSubPropertyStmt; DEALLOCATE PREPARE finishSubPropertyStmt;
SELECT @finishSubPropertyStmtStr AS finishSubPropertyStmt; SELECT @finishSubPropertyStmtStr AS finishSubPropertyStmt;
END; END;
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
DROP PROCEDURE IF EXISTS db_2_0.initEmptyTargetSet; DROP PROCEDURE IF EXISTS db_2_0.initEmptyTargetSet;
DELIMITER // DELIMITER //
CREATE PROCEDURE db_2_0.initEmptyTargetSet(in targetSet VARCHAR(255)) CREATE PROCEDURE db_2_0.initEmptyTargetSet(in targetSet VARCHAR(255), in versioned BOOLEAN)
BEGIN BEGIN
DECLARE newTableName VARCHAR(255) DEFAULT targetSet; DECLARE newTableName VARCHAR(255) DEFAULT targetSet;
IF targetSet IS NOT NULL THEN IF targetSet IS NOT NULL THEN
...@@ -36,10 +36,18 @@ BEGIN ...@@ -36,10 +36,18 @@ BEGIN
EXECUTE stmtIsNotEmpty; EXECUTE stmtIsNotEmpty;
DEALLOCATE PREPARE stmtIsNotEmpty; DEALLOCATE PREPARE stmtIsNotEmpty;
IF @isNotEmptyVar IS NOT NULL THEN /*if targetSet is not empty*/ IF @isNotEmptyVar IS NOT NULL THEN /*if targetSet is not empty*/
call createTmpTable(newTableName); IF versioned THEN
call createVersionedTmpTable(newTableName);
ELSE
call createTmpTable(newTableName);
END IF;
END IF; END IF;
ELSE ELSE
call createTmpTable(newTableName); IF versioned THEN
call createVersionedTmpTable(newTableName);
ELSE
call createTmpTable(newTableName);
END IF;
END IF; END IF;
SELECT newTableName AS newTableName; SELECT newTableName AS newTableName;
END; END;
...@@ -49,49 +57,56 @@ DELIMITER ; ...@@ -49,49 +57,56 @@ DELIMITER ;
DROP PROCEDURE IF EXISTS db_2_0.initDisjunctionFilter; DROP PROCEDURE IF EXISTS db_2_0.initDisjunctionFilter;
DELIMITER // DELIMITER //
CREATE PROCEDURE db_2_0.initDisjunctionFilter() CREATE PROCEDURE db_2_0.initDisjunctionFilter(in versioned BOOLEAN)
BEGIN BEGIN
call initEmptyTargetSet(NULL); call initEmptyTargetSet(NULL, versioned);
END; END;
// //
DELIMITER ; DELIMITER ;
DROP PROCEDURE IF EXISTS db_2_0.initNegationFilter; DROP PROCEDURE IF EXISTS db_2_0.initNegationFilter;
DELIMITER // -- Apparently this code is not used anymore
-- DELIMITER //
CREATE PROCEDURE db_2_0.initNegationFilter(in sourceSet VARCHAR(255)) -- CREATE PROCEDURE db_2_0.initNegationFilter(in sourceSet VARCHAR(255), in versioned BOOLEAN)
BEGIN -- BEGIN
DECLARE newTableName VARCHAR(255) DEFAULT NULL; -- DECLARE newTableName VARCHAR(255) DEFAULT NULL;
call createTmpTable(newTableName); -- if versioned THEN
call copyTable(sourceSet, newTableName); -- call createVersionedTmpTable(newTableName);
SELECT newTableName AS newTableName; -- ELSE
END; -- call createTmpTable(newTableName);
// -- END IF;
DELIMITER ; -- call copyTable(sourceSet, newTableName);
-- SELECT newTableName AS newTableName;
-- END;
-- //
-- DELIMITER ;
DROP PROCEDURE IF EXISTS db_2_0.initConjunctionFilter; DROP PROCEDURE IF EXISTS db_2_0.initConjunctionFilter;
DELIMITER // -- Apparently this code is not used anymore
-- DELIMITER //
CREATE PROCEDURE db_2_0.initConjunctionFilter(in sourceSet VARCHAR(255)) -- CREATE PROCEDURE db_2_0.initConjunctionFilter(in sourceSet VARCHAR(255))
BEGIN -- BEGIN
DECLARE newTableName VARCHAR(255) DEFAULT NULL; -- DECLARE newTableName VARCHAR(255) DEFAULT NULL;
call createTmpTable(newTableName); -- call createTmpTable(newTableName);
call copyTable(sourceSet, newTableName); -- call copyTable(sourceSet, newTableName);
SELECT newTableName AS newTableName; -- SELECT newTableName AS newTableName;
END; -- END;
// -- //
DELIMITER ; -- DELIMITER ;
DROP PROCEDURE IF EXISTS db_2_0.finishNegationFilter; DROP PROCEDURE IF EXISTS db_2_0.finishNegationFilter;
DELIMITER // -- Apparently this code is not used anymore
-- DELIMITER //
CREATE PROCEDURE db_2_0.finishNegationFilter(in sourceSet VARCHAR(255), in targetSet VARCHAR(255), in subResultSet VARCHAR(255)) -- CREATE PROCEDURE db_2_0.finishNegationFilter(in sourceSet VARCHAR(255), in targetSet VARCHAR(255), in subResultSet VARCHAR(255), in versioned BOOLEAN)
BEGIN -- BEGIN
IF targetSet IS NULL OR sourceSet = targetSet THEN -- IF targetSet IS NULL OR sourceSet = targetSet THEN
call calcDifference(sourceSet, subResultSet); -- call calcDifference(sourceSet, subResultSet, versioned);
ELSE -- ELSE
call calcComplementUnion(targetSet,subResultSet,sourceSet); -- call calcComplementUnion(targetSet,subResultSet,sourceSet, versioned);
END IF; -- END IF;
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