Skip to content
Snippets Groups Projects
Commit c2da7cf0 authored by Daniel's avatar Daniel
Browse files

Merge branch 'dev' into f-caosctl-backup

parents 38057dfb 8ad27d47
No related branches found
No related tags found
No related merge requests found
......@@ -23,10 +23,6 @@ variables:
CI_REGISTRY_IMAGE: $CI_REGISTRY/caosdb-mysqlbackend-testenv:latest
# When using dind, it's wise to use the overlayfs driver for
# improved performance.
DOCKER_DRIVER: overlay2
services:
- docker:19.03-dind
image: $CI_REGISTRY_IMAGE
stages:
......@@ -39,20 +35,20 @@ trigger_build:
stage: deploy
script:
- /usr/bin/curl -X POST
-F token=8f29e5eeb7db2123d9c2bb84634da2
-F token=$DEPLOY_TRIGGER_TOKEN
-F "variables[MYSQLBACKEND]=$CI_COMMIT_REF_NAME"
-F "variables[TriggerdBy]=MYSQLBACKEND"
-F "variables[TriggerdByHash]=$CI_COMMIT_SHORT_SHA"
-F ref=master https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
-F ref=dev https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
# Build a docker image in which tests for this repository can run
build-testenv:
tags: [ docker ]
tags: [ cached-dind ]
image: docker:19.03
stage: setup
script:
- cd .docker
- docker login -u testuser -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker login -u indiscale -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
# use here general latest or specific branch latest...
- docker pull $CI_REGISTRY_IMAGE || true
- docker build
......
......@@ -50,7 +50,7 @@ delimiter //
CREATE PROCEDURE db_2_0.updateLinCon(in sig_from BIGINT, in sig_to BIGINT, in new_a DECIMAL(65,30), in new_b_dividend BIGINT, in new_b_divisor BIGINT, in new_c DECIMAL(65,30))
BEGIN
UPDATE units_ling_con SET signature_to=sig_to, a=new_a, b_dividend=new_b_dividend, b_divisor=new_b_divisor, c=new_c where signature_from=sig_from;
UPDATE units_lin_con SET signature_to=sig_to, a=new_a, b_dividend=new_b_dividend, b_divisor=new_b_divisor, c=new_c where signature_from=sig_from;
END;
//
......
......@@ -38,7 +38,7 @@ BEGIN
EXECUTE createBackRefSubQueryTable;
DEALLOCATE PREPARE createBackRefSubQueryTable;
SET @backRefSubResultSetStmtStr = CONCAT('INSERT 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(propertiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',propertiesTable,'` AS p WHERE p.id=data.property_id LIMIT 1)')), IF(entitiesTable IS NULL,'',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)', IF(propertiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',propertiesTable,'` AS p WHERE p.id=data.property_id LIMIT 1)')), IF(entitiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',entitiesTable,'` AS e WHERE e.id=data.entity_id LIMIT 1)')));
PREPARE backRefSubResultSetStmt FROM @backRefSubResultSetStmtStr;
EXECUTE backRefSubResultSetStmt;
......
......@@ -21,10 +21,37 @@
* ** end header
*/
/* Documentation including (?) has to be checked by an expert. */
/* Question: What is datetime dot notation? */
DROP PROCEDURE IF EXISTS db_2_0.applyPOV;
DELIMITER //
CREATE PROCEDURE db_2_0.applyPOV(in sourceSet VARCHAR(255), in targetSet VARCHAR(255), in propertiesTable VARCHAR(255), in refIdsTable VARCHAR(255), in o CHAR(4), in vText VARCHAR(255), in vInt INT, in vDouble DOUBLE, in unit_sig BIGINT, in vDoubleStdUnit DOUBLE, in stdUnit_sig BIGINT, in vDateTime VARCHAR(255), in vDateTimeDotNotation VARCHAR(255), in agg CHAR(3), in pname VARCHAR(255))
CREATE PROCEDURE db_2_0.applyPOV(in sourceSet VARCHAR(255), /* (?) Name of the table that the POV will be applied to. This can be a temporary table. */
in targetSet VARCHAR(255), /* (?) Name of the result table of this POV. */
in propertiesTable VARCHAR(255),
in refIdsTable VARCHAR(255),
in o CHAR(4), /* The operator for this operation. can be one of:
0 check for "equals NULL"
!0 check for "not NULL"
-> check whether a reference exists
( (?) check for datetime intervals
!( (?) check for being outside of datetime intervals
other operators (all SQL operators (?))
these other operators can be used either with or without an aggregation
to use an aggregation set agg to non-zero
all SQL aggregations can be used
*/
in vText VARCHAR(255), /* (?) the text value to be checked against using operator o */
in vInt INT, /* the integer value to be checked against using operator o */
in vDouble DOUBLE, /* the double value to be checked against using operator o */
in unit_sig BIGINT,
in vDoubleStdUnit DOUBLE,
in stdUnit_sig BIGINT,
in vDateTime VARCHAR(255),
in vDateTimeDotNotation VARCHAR(255),
in agg CHAR(3), /* an SQL aggregate function or NULL when no aggregation should be used */
in pname VARCHAR(255)) /* name of the property, this name is only used for reporting more meaningful warnings */
POV_LABEL: BEGIN
DECLARE data TEXT DEFAULT NULL; /*data subselect statement string*/
DECLARE sTextData VARCHAR(20000) DEFAULT NULL; /*SELECT PREFIX for data subselect plus WHERE CLAUSE for text_data*/
......@@ -51,15 +78,33 @@ POV_LABEL: BEGIN
SET vText = NULL;
SET sTextData = 'SELECT domain_id, entity_id, property_id FROM `null_data` AS subdata';
/* Question: in !0 the query is explicitly checked for NOT NULL. Aren't these NULL entries forgotten here? */
ELSEIF o = '!0' THEN
#-- special case: property IS NOT NULL
#-- generate statement parts
SET vText = NULL;
/* Union of the following tables:
text_data
enum_data
integer_data
date_data
datetime_data
reference_data
double_data
Notes:
SELECT DISTINCT -> No duplicate values
UNION ALL -> Allow also duplicate values
*/
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 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
#-- find aggregated value (min/max...)
......@@ -148,6 +193,8 @@ POV_LABEL: BEGIN
DEALLOCATE PREPARE stmt3;
DEALLOCATE PREPARE stmtPOVkeepTbl;
/* Question: why select AS and not select INTO? */
SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet;
......
......@@ -28,27 +28,39 @@ DELIMITER //
CREATE PROCEDURE db_2_0.initSubEntity(in e_id INT UNSIGNED, in ename VARCHAR(255), in tableName VARCHAR(255))
BEGIN
DECLARE ecount INT DEFAULT 0;
SET @stmtStr = CONCAT('INSERT IGNORE INTO `', tableName, '` (id) SELECT id FROM entities WHERE name = ? UNION ALL SELECT entity_id FROM name_data WHERE value=? AND domain_id=0;');
DECLARE ecount INT DEFAULT 0;
DECLARE op VARCHAR(255) DEFAULT '=';
IF LOCATE("%", ename) > 0 THEN
SET op = "LIKE";
END IF;
SET @stmtStr = CONCAT('INSERT IGNORE INTO `',
tableName,
'` (id) SELECT id FROM entities WHERE name ',
op,
' ? UNION ALL SELECT entity_id FROM name_data WHERE value ',
op,
' ? AND domain_id=0;');
PREPARE stmt FROM @stmtStr;
SET @ename = ename;
SET @ename = ename;
EXECUTE stmt USING @ename, @ename;
SET ecount = ROW_COUNT();
DEALLOCATE PREPARE stmt;
DEALLOCATE PREPARE stmt;
IF e_id IS NOT NULL THEN
SET @stmtStr = CONCAT('INSERT IGNORE INTO `', tableName, '` (id) VALUES (', e_id, ')');
PREPARE stmt FROM @stmtStr;
EXECUTE stmt;
SET ecount = ecount + ROW_COUNT();
DEALLOCATE PREPARE stmt;
DEALLOCATE PREPARE stmt;
END IF;
IF ecount > 0 THEN
call getChildren(tableName);
END IF;
END;
//
//
DELIMITER ;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment