Skip to content
Snippets Groups Projects
Select Git revision
  • 7b8e2d8d69f2cb49184d6643141f61cc79437a70
  • main default protected
  • dev protected
  • f-fix-accent-sensitivity
  • f-filesystem-import
  • f-update-acl
  • f-filesystem-link
  • f-filesystem-directory
  • f-filesystem-core
  • f-filesystem-cleanup
  • f-string-ids
  • f-filesystem-main
  • f-multipart-encoding
  • f-trigger-advanced-user-tools
  • f-real-rename-test-pylibsolo2
  • f-real-rename-test-pylibsolo
  • f-real-rename-test
  • f-linkahead-rename
  • f-reference-record
  • f-xml-serialization
  • f-xfail-server-181
  • linkahead-pylib-v0.18.0
  • linkahead-control-v0.16.0
  • linkahead-pylib-v0.17.0
  • linkahead-mariadbbackend-v8.0.0
  • linkahead-server-v0.13.0
  • caosdb-pylib-v0.15.0
  • caosdb-pylib-v0.14.0
  • caosdb-pylib-v0.13.2
  • caosdb-server-v0.12.1
  • caosdb-pylib-v0.13.1
  • caosdb-pylib-v0.12.0
  • caosdb-server-v0.10.0
  • caosdb-pylib-v0.11.1
  • caosdb-pylib-v0.11.0
  • caosdb-server-v0.9.0
  • caosdb-pylib-v0.10.0
  • caosdb-server-v0.8.1
  • caosdb-pylib-v0.8.0
  • caosdb-server-v0.8.0
  • caosdb-pylib-v0.7.2
41 results

test_query_version.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    makeStmt.sql 3.07 KiB
    /*
     * ** header v3.0
     * This file is a part of the CaosDB Project.
     *
     * Copyright (C) 2018 Research Group Biomedical Physics,
     * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU Affero General Public License as
     * published by the Free Software Foundation, either version 3 of the
     * License, or (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU Affero General Public License for more details.
     *
     * You should have received a copy of the GNU Affero General Public License
     * along with this program. If not, see <https://www.gnu.org/licenses/>.
     *
     * ** end header
     */
    DROP FUNCTION IF EXISTS db_2_0.makeStmt;
    DELIMITER //
    
    /**
     * Create and return a statement string which generalizes the source -> target procedure.
     *
     * Parameters
     * ----------
     *
     * sourceSet : table
     * The source table.
     *
     * targetSet : table
     * The table into which the results shall be copied.  If `NULL`, delete all non-matching rows from
     * `sourceSet`.
     *
     * data : table
     * Table whose IDs are a whitelist for which IDs shall be copied from `sourceSet` to `targetSet`.
     *
     * properties : table
     * Table with a whitelist of properties.  If not `NULL`, the `property_id` of `data` must be an ID
     * in `properties`.
     * TODO Add documentation about the `id2` meaning of `properties`.
     *
     * versiones : boolean
     * If `True` and if `sourceSet` is the `entities` table, the ID and version are copied directly from
     * `data` to `targetSet`, which must not be `NULL`.  Property filtering is done as usual.
     */
    CREATE FUNCTION db_2_0.makeStmt(sourceSet VARCHAR(255), targetSet VARCHAR(255), data VARCHAR(20000),
                                    properties VARCHAR(20000), versioned BOOLEAN)
    RETURNS VARCHAR(20000) NO SQL
    BEGIN
            IF sourceSet = "entities" AND versioned THEN
                RETURN CONCAT('INSERT IGNORE INTO `',
                    targetSet,
                    '` (id, _iversion) SELECT entity_id, _iversion FROM ',
                    data,
                    IF(properties IS NULL, '',
                        CONCAT(' AS data JOIN `', properties, '` AS prop ON (data.property_id = prop.id) WHERE ',
                               'data.entity_id = prop.id2 OR prop.id2 = 0')));
            END IF;
            RETURN CONCAT(
                IF(targetSet IS NULL,
                    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 ')),
                IF(properties IS NULL,
                    CONCAT(data,' as data WHERE '),
                    CONCAT('`',properties,'` as prop JOIN ',data,' as data ON (data.property_id=prop.id) WHERE ',
                           '(data.entity_id=prop.id2 OR prop.id2=0) AND ')),
                'data.entity_id=`', sourceSet, '`.`id` LIMIT 1)'
            );
    
    END;
    //
    DELIMITER ;