From 471c49cb3c27b83d490facdeb983e05c64c3e53e Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Thu, 19 Mar 2020 23:44:59 +0100
Subject: [PATCH] EHN: versioning phase 3

---
 .../caosdb/server/database/DatabaseUtils.java |  9 ++--
 .../MySQL/MySQLUpdateSparseEntity.java        | 42 +++++++++----------
 2 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/src/main/java/caosdb/server/database/DatabaseUtils.java b/src/main/java/caosdb/server/database/DatabaseUtils.java
index 29b8c04c..3c48b9c8 100644
--- a/src/main/java/caosdb/server/database/DatabaseUtils.java
+++ b/src/main/java/caosdb/server/database/DatabaseUtils.java
@@ -217,12 +217,9 @@ public class DatabaseUtils {
     ret.datatype = bytes2UTF8(rs.getBytes("Datatype"));
     ret.collection = bytes2UTF8(rs.getBytes("Collection"));
 
-    final String path = bytes2UTF8(rs.getBytes("FilePath"));
-    if (!rs.wasNull()) {
-      ret.filePath = path;
-      ret.fileSize = rs.getLong("FileSize");
-      ret.fileHash = bytes2UTF8(rs.getBytes("FileHash"));
-    }
+    ret.filePath = bytes2UTF8(rs.getBytes("FilePath"));
+    ret.fileSize = rs.getLong("FileSize");
+    ret.fileHash = bytes2UTF8(rs.getBytes("FileHash"));
 
     ret.version = bytes2UTF8(rs.getBytes("Version"));
     ret.versionSeconds = rs.getLong("VersionSeconds");
diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
index 5daa0cea..50070478 100644
--- a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
+++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
@@ -41,14 +41,30 @@ public class MySQLUpdateSparseEntity extends MySQLTransaction implements UpdateS
   }
 
   public static final String STMT_UPDATE_ENTITY = "call updateEntity(?,?,?,?,?,?,?)";
-  public static final String STMT_UPDATE_FILE_PROPS =
-      "INSERT INTO files (hash, size, path, file_id) VALUES (unhex(?),?,?,?) ON DUPLICATE KEY UPDATE hash=unhex(?), size=?, path=?;";
+  public static final String STMT_UPDATE_FILE_PROPS = "call setFileProperties(?,?,?,?)";
 
   @Override
   public void execute(final SparseEntity spe) throws TransactionException {
     try {
-      final PreparedStatement updateEntityStmt = prepareStatement(STMT_UPDATE_ENTITY);
+      // file properties;
+      final PreparedStatement updateFilePropsStmt = prepareStatement(STMT_UPDATE_FILE_PROPS);
+      updateFilePropsStmt.setInt(1, spe.id);
+      if (spe.filePath != null) {
+        updateFilePropsStmt.setString(2, spe.filePath);
+        updateFilePropsStmt.setLong(3, spe.fileSize);
+        if (spe.fileHash != null) {
+          updateFilePropsStmt.setString(4, spe.fileHash);
+        } else {
+          updateFilePropsStmt.setNull(4, Types.VARCHAR);
+        }
+      } else {
+        updateFilePropsStmt.setNull(2, Types.VARCHAR);
+        updateFilePropsStmt.setNull(3, Types.BIGINT);
+        updateFilePropsStmt.setNull(4, Types.VARCHAR);
+      }
+      updateFilePropsStmt.execute();
 
+      final PreparedStatement updateEntityStmt = prepareStatement(STMT_UPDATE_ENTITY);
       // very sparse entity
       updateEntityStmt.setInt(1, spe.id);
       updateEntityStmt.setString(2, spe.name);
@@ -67,26 +83,6 @@ public class MySQLUpdateSparseEntity extends MySQLTransaction implements UpdateS
         spe.version = DatabaseUtils.bytes2UTF8(rs.getBytes("Version"));
       }
 
-      // file properties;
-      if (spe.filePath != null) {
-        final PreparedStatement updateFilePropsStmt = prepareStatement(STMT_UPDATE_FILE_PROPS);
-        if (spe.fileHash != null) {
-          updateFilePropsStmt.setString(1, spe.fileHash);
-          updateFilePropsStmt.setString(5, spe.fileHash);
-        } else {
-          updateFilePropsStmt.setNull(1, Types.VARCHAR);
-          updateFilePropsStmt.setNull(5, Types.VARCHAR);
-        }
-        updateFilePropsStmt.setLong(2, spe.fileSize);
-        updateFilePropsStmt.setLong(6, spe.fileSize);
-
-        updateFilePropsStmt.setString(3, spe.filePath);
-        updateFilePropsStmt.setString(7, spe.filePath);
-
-        updateFilePropsStmt.setInt(4, spe.id);
-
-        updateFilePropsStmt.execute();
-      }
     } catch (final SQLIntegrityConstraintViolationException e) {
       throw new IntegrityException(e);
     } catch (final SQLException e) {
-- 
GitLab