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

WIP: versioned backref

parent bb42f8fa
No related branches found
No related tags found
No related merge requests found
......@@ -24,7 +24,7 @@
DROP PROCEDURE IF EXISTS db_2_0.applyBackReference;
DELIMITER //
CREATE PROCEDURE db_2_0.applyBackReference(in sourceSet VARCHAR(255), targetSet VARCHAR(255), in propertiesTable VARCHAR(255), in entitiesTable VARCHAR(255), in subQuery BOOLEAN)
CREATE PROCEDURE db_2_0.applyBackReference(in sourceSet VARCHAR(255), targetSet VARCHAR(255), in propertiesTable VARCHAR(255), in entitiesTable VARCHAR(255), in subQuery BOOLEAN, in versioned BOOLEAN)
BEGIN
DECLARE newTableName VARCHAR(255) DEFAULT NULL;
......@@ -45,11 +45,111 @@ BEGIN
DEALLOCATE PREPARE backRefSubResultSetStmt;
SELECT newTableName as list;
ELSE
IF versioned THEN
IF sourceSet = "entities" THEN
SET @stmtBackRefStr = CONCAT('INSERT IGNORE INTO `',
targetSet,
'` (id, _iversion) SELECT source.id, _get_head_iversion(source.id) FROM entities AS source WHERE EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=source.id AND ( data.value_iversion IS NULL OR data.value_iversion=_get_head_iversion(source.id))',
IF(entitiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
entitiesTable,
'` AS e WHERE e.id=data.entity_id LIMIT 1)')),
IF(propertiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
propertiesTable,
'` AS p WHERE p.id=data.property_id LIMIT 1)')),
') UNION ALL SELECT source.id, source._iversion FROM archive_entities AS source WHERE EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=source.id AND ( data.value_iversion IS NULL OR data.value_iversion=source._iversion)',
IF(entitiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
entitiesTable,
'` AS e WHERE e.id=data.entity_id LIMIT 1)')),
IF(propertiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
propertiesTable,
'` AS p WHERE p.id=data.property_id LIMIT 1)')),
')');
ELSEIF targetSet IS NULL OR sourceSet = targetSet THEN
SET @stmtBackRefStr = CONCAT('DELETE FROM `',
sourceSet,
'` WHERE NOT EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=`',
sourceSet,
'`.`id` AND ( data.value_iversion IS NULL OR data.value_iversion=`',
sourceSet,
'`._iversion)',
IF(entitiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
entitiesTable,
'` AS e WHERE e.id=data.entity_id LIMIT 1)')),
IF(propertiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
propertiesTable,
'` AS p WHERE p.id=data.property_id LIMIT 1)')),
')');
ELSE
SET @stmtBackRefStr = CONCAT('INSERT IGNORE INTO `',
targetSet,
'` (id, _iversion) SELECT source.id, source._iversion FROM `',
sourceSet,
'` AS source WHERE EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=source.id AND ( data.value_iversion IS NULL OR data.value_iversion=_get_head_iversion(source.id))',
IF(entitiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
entitiesTable,
'` AS e WHERE e.id=data.entity_id LIMIT 1)')),
IF(propertiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
propertiesTable,
'` AS p WHERE p.id=data.property_id LIMIT 1)')),
')');
END IF;
ELSE
IF targetSet IS NULL OR sourceSet = targetSet THEN
SET @stmtBackRefStr = CONCAT('DELETE FROM `', sourceSet, '` WHERE NOT EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=`', sourceSet, '`.`id`', IF(entitiesTable IS NULL, '', CONCAT(' AND EXISTS (SELECT 1 FROM `', entitiesTable, '` AS e WHERE e.id=data.entity_id LIMIT 1)')), IF(propertiesTable IS NULL, '', CONCAT(' AND EXISTS (SELECT 1 FROM `', propertiesTable, '` AS p WHERE p.id=data.property_id LIMIT 1)')), ')');
SET @stmtBackRefStr = CONCAT('DELETE FROM `',
sourceSet,
'` WHERE NOT EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=`',
sourceSet,
'`.`id`',
IF(entitiesTable IS NULL,
'',
CONCAT('
AND EXISTS (SELECT 1 FROM `',
entitiesTable,
'` AS e WHERE e.id=data.entity_id LIMIT 1)')),
IF(propertiesTable IS NULL,
'',
CONCAT('
AND EXISTS (SELECT 1 FROM `',
propertiesTable,
'` AS p WHERE p.id=data.property_id LIMIT 1)')),
')');
ELSE
SET @stmtBackRefStr = CONCAT('INSERT IGNORE INTO `', targetSet, '` (id) SELECT id FROM `',sourceSet,'` AS source WHERE EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=source.id', IF(entitiesTable IS NULL, '', CONCAT(' AND EXISTS (SELECT 1 FROM `', entitiesTable, '` AS e WHERE e.id=data.entity_id LIMIT 1)')), IF(propertiesTable IS NULL, '', CONCAT(' AND EXISTS (SELECT 1 FROM `', propertiesTable, '` AS p WHERE p.id=data.property_id LIMIT 1)')), ')');
SET @stmtBackRefStr = CONCAT('INSERT IGNORE INTO `',
targetSet,
'` (id) SELECT id FROM `',
sourceSet,
'` AS source WHERE EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=source.id',
IF(entitiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
entitiesTable,
'` AS e WHERE e.id=data.entity_id LIMIT 1)')),
IF(propertiesTable IS NULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
propertiesTable,
'` AS p WHERE p.id=data.property_id LIMIT 1)')),
')');
END IF;
END IF;
PREPARE stmtBackRef FROM @stmtBackRefStr;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment