diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java index c2e28cd39929f71e874fb4a69c38261ed290b18a..611535a946eaaef79c898911b5b5cd67278ca7b0 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java @@ -24,6 +24,7 @@ package org.caosdb.server.database.backend.implementation.MySQL; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.Types; import java.util.LinkedList; import java.util.List; import org.caosdb.server.database.access.Access; @@ -42,29 +43,24 @@ public class MySQLGetIDByName extends MySQLTransaction implements GetIDByNameImp * Therefore {@link #STMT_AND_ROLE}, {@link #STMT_NOT_ROLE}, and {@link #STMT_LIMIT} can as * additional conditions. */ - public static final String STMT_GET_ID_BY_NAME = - "Select n.entity_id AS id " - + "FROM name_data AS n JOIN entities AS e " - + "ON (n.domain_id=0 AND n.property_id=20 AND e.id = n.entity_id)" - + "WHERE n.value=?"; - - public static final String STMT_AND_ROLE = " AND e.role=?"; - public static final String STMT_NOT_ROLE = " AND e.role!='ROLE'"; - public static final String STMT_LIMIT = " LIMIT "; + public static final String STMT_GET_ID_BY_NAME = "call getIdByName(?, ?, ?)"; @Override public List<EntityID> execute(final String name, final String role, final String limit) throws TransactionException { try { - final String stmtStr = - STMT_GET_ID_BY_NAME - + (role != null ? STMT_AND_ROLE : STMT_NOT_ROLE) - + (limit != null ? STMT_LIMIT + limit : ""); - final PreparedStatement stmt = prepareStatement(stmtStr); + final PreparedStatement stmt = prepareStatement(STMT_GET_ID_BY_NAME); stmt.setString(1, name); if (role != null) { stmt.setString(2, role); + } else { + stmt.setNull(2, Types.VARCHAR); + } + if (limit != null) { + stmt.setString(3, limit); + } else { + stmt.setNull(3, Types.VARCHAR); } try (ResultSet rs = stmt.executeQuery()) { final List<EntityID> ret = new LinkedList<>(); diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java index c4cb7cf98e5da51f98d71b4c5f6fc91e6961892e..e9ca7fd19a69a23139cd8aed0ea7644b7184d61e 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java @@ -19,18 +19,13 @@ public class MySQLInsertEntityDatatype extends MySQLTransaction * Inserts atomic data types of properties into the data_type table. Has two parameters, the * property_id and the data type name. */ - public static final String STMT_INSERT_ENTITY_DATATYPE = - "INSERT INTO data_type (domain_id, entity_id, property_id, datatype) " - + "SELECT 0, 0, ?, " - + "( SELECT entity_id FROM name_data WHERE domain_id = 0 AND property_id = 20 AND value = ? LIMIT 1);"; + public static final String STMT_INSERT_ENTITY_DATATYPE = "call insertEntityDataType(?, ?)"; /** * Inserts collection data types of properties into the data_type table. Has two parameters, the * property_id and the type of collection (e.g. 'LIST'). */ - public static final String STMT_INSERT_ENTITY_COLLECTION = - "INSERT INTO collection_type (domain_id, entity_id, property_id, collection) " - + "SELECT 0, 0, ?, ?;"; + public static final String STMT_INSERT_ENTITY_COLLECTION = "call insertEntityCollection(?, ?)"; @Override public void execute(final SparseEntity entity) { diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java index 1b945acf566db938f12847f758636dbfddeac3d1..6e4295005a5daeaed1b1efec5adfaebe8b21a34a 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java @@ -40,8 +40,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS } public static final String STMT_INSERT_SPARSE_ENTITY = "call insertEntity(?,?,?,?)"; - public static final String STMT_INSERT_FILE_PROPERTIES = - "INSERT INTO files (file_id, hash, size, path) VALUES (?, unhex(?), ?, ?);"; + public static final String STMT_INSERT_FILE_PROPERTIES = "call insertFile(?, ?, ?, ?)"; @Override public void execute(final SparseEntity entity) { diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java index 7da810c3d8f50ab739dd72a65551b45449b4d183..f7f32deae429487ee8588a2d54a2bfe735453a5a 100644 --- a/src/main/java/org/caosdb/server/query/Query.java +++ b/src/main/java/org/caosdb/server/query/Query.java @@ -610,7 +610,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac if (this.entity != null) { return sourceStrategy(initQuery(versioned)); } else if (this.role == Role.ENTITY && this.filter == null) { - return "entities"; + return "entity_ids"; } else { return targetStrategy(initQuery(versioned)); } @@ -629,11 +629,9 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac */ private String generateSelectStatementForResultSet( final String resultSetTableName, final boolean versioned) { - // TODO remove the entities.role part when - // https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/245 is resolved - if (resultSetTableName.equals("entities")) { + if (resultSetTableName.equals("entity_ids")) { final String baseStatement = - "SELECT entities.id, entity_acl.acl FROM entities INNER JOIN entity_acl ON entity_acl.id=entities.acl WHERE entities.role!='DOMAIN'"; + "SELECT (SELECT id FROM entity_ids WHERE internal_id = entities.id) as id, entity_acl.acl FROM entities INNER JOIN entity_acl ON entity_acl.id=entities.acl WHERE entities.role!='DOMAIN'"; if (!versioned) { return baseStatement + ";"; } @@ -643,7 +641,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac + ") AS tmp JOIN entity_version ON entity_version.entity_id=tmp.id;"); } else { if (!versioned) { - return (" SELECT tmp.id, entity_acl.acl FROM " + return (" SELECT (SELECT id FROM entity_ids WHERE internal_id = tmp.id) AS id, entity_acl.acl FROM " + " (SELECT results.id AS id, entities.acl AS acl_id FROM `" + resultSetTableName + "` AS results JOIN entities ON results.id=entities.id WHERE entities.role!='DOMAIN') AS tmp" @@ -651,7 +649,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac + ";"; } // if versioned, the statement is surrounded with another SELECT and JOIN - return ("SELECT tmp2.id, acl, version FROM( SELECT tmp.id, entity_acl.acl, tmp._iversion AS _iversion FROM " + return ("SELECT (SELECT id FROM entity_ids WHERE internal_id = tmp2.id) AS id, acl, version FROM (SELECT tmp.id, entity_acl.acl, tmp._iversion AS _iversion FROM " + " (SELECT results.id AS id, entities.acl AS acl_id, results._iversion AS _iversion FROM `" + resultSetTableName + "` AS results JOIN entities ON results.id=entities.id) AS tmp"