SET@backRefSubResultSetStmtStr=CONCAT('INSERT IGNORE INTO `',newTableName,'` (id,entity_id) SELECT entity_id AS id, value AS entity_id FROM `reference_data` AS data WHERE EXISTS (SELECT 1 FROM `',sourceSet,'` AS source WHERE source.id=data.value LIMIT 1)',IF(propertiesTableISNULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',propertiesTable,'` AS p WHERE p.id=data.property_id LIMIT 1)')),IF(entitiesTableISNULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',entitiesTable,'` AS e WHERE e.id=data.entity_id LIMIT 1)')));
SET@backRefSubResultSetStmtStr=CONCAT('INSERT IGNORE INTO `',
newTableName,
'` (id,entity_id) SELECT entity_id AS id, value AS entity_id FROM `reference_data` AS data ',
'WHERE EXISTS (SELECT 1 FROM `',
sourceSet,
'` AS source WHERE source.id=data.value LIMIT 1)',
-- Find any referenced entity, current or archived
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))',
'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(entitiesTableISNULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
...
...
@@ -61,7 +122,11 @@ BEGIN
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)',
') UNION ALL ',
-- and archived entities
'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(entitiesTableISNULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
...
...
@@ -98,7 +163,9 @@ BEGIN
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))',
'` 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(entitiesTableISNULL,
'',
CONCAT(' AND EXISTS (SELECT 1 FROM `',
...
...
@@ -115,6 +182,7 @@ BEGIN
ELSE
-- unversioned queries
IFtargetSetISNULLORsourceSet=targetSetTHEN
-- delete from sourceSet
SET@stmtBackRefStr=CONCAT('DELETE FROM `',
sourceSet,
'` WHERE NOT EXISTS (SELECT 1 FROM `reference_data` AS data WHERE data.value=`',