@@ -170,29 +170,34 @@ public List<ItemMetadata> getItemsByWorkspaceId(UUID workspaceId)
170170 @ Override
171171 public List <ItemMetadata > getItemsById (Long id ) throws DAOException {
172172 Object [] values = { id };
173-
173+
174174 String query = "WITH RECURSIVE "
175175 + " q AS "
176176 + " ( "
177- + " SELECT i.id as item_id, "
178- + " i.parent_id, i.filename, iv.version, i.client_parent_file_version, "
179- + " i.is_folder, iv.size, iv.status, "
180- + " i.mimetype, iv.checksum, iv.client_name, "
181- + " iv.modified_at, ARRAY[i.id] AS level_array "
177+ + " SELECT i.id AS item_id, i.parent_id, i.client_parent_file_version, "
178+ + " i.filename, iv.id AS version_id, iv.version, i.is_folder, "
179+ + " i.workspace_id, "
180+ + " iv.size, iv.status, i.mimetype, "
181+ + " iv.checksum, iv.device_id, iv.modified_at, "
182+ + " ARRAY[i.id] AS level_array "
182183 + " FROM item i "
183184 + " INNER JOIN item_version iv ON i.id = iv.item_id AND i.latest_version = iv.version "
184185 + " WHERE i.id = ? "
185186 + " UNION ALL "
186- + " SELECT i2.id as item_id, i2.parent_id, i2.client_parent_file_version, "
187- + " i2.filename, iv2.version, i2.is_folder, "
188- + " iv2.size, iv2.status, i2.mimetype, "
189- + " iv2.checksum, iv2.client_name, iv2.modified_at, "
190- + " q.level_array || i2.id "
187+ + " SELECT i2.id AS item_id, i2.parent_id, i2.client_parent_file_version, "
188+ + " i2.filename, iv2.id AS version_id, iv2.version, i2.is_folder, "
189+ + " i2.workspace_id, "
190+ + " iv2.size, iv2.status, i2.mimetype, "
191+ + " iv2.checksum, iv2.device_id, iv2.modified_at, "
192+ + " q.level_array || i2.id "
191193 + " FROM q "
192- + " JOIN item i2 ON i2.parent_id = q.id "
194+ + " JOIN item i2 ON i2.parent_id = q.item_id "
193195 + " INNER JOIN item_version iv2 ON i2.id = iv2.item_id AND i2.latest_version = iv2.version "
194- + " ) " + " SELECT array_upper(level_array, 1) as level, q.* "
195- + " FROM q " + " ORDER BY " + " level_array ASC" ;
196+ + " ) "
197+ + " SELECT array_upper(level_array, 1) as level, q.* "
198+ + " FROM q "
199+ + " ORDER BY "
200+ + " level_array ASC" ;
196201
197202 ResultSet result = null ;
198203 List <ItemMetadata > list = new ArrayList <ItemMetadata >();
@@ -367,10 +372,10 @@ public ItemMetadata findItemVersionsById(Long fileId) throws DAOException {
367372 // TODO: check include_deleted
368373 Object [] values = { fileId };
369374
370- String query = "SELECT i.id AS item_id, i.parent_id, i.client_parent_file_version, i.filename, i.is_folder, i.mimetype, "
371- + " iv.version, iv.size, iv.status, iv.checksum, "
375+ String query = "SELECT i.id AS item_id, i.parent_id, i.client_parent_file_version, i.filename, i.is_folder, i.mimetype, i.workspace_id, "
376+ + " iv.version, iv.size, iv.status, iv.checksum, iv.device_id, "
372377 + " iv.modified_at, '1' AS level, '' AS path FROM item i "
373- + " inner join item_version iv on iv.item_id = i.id where i.id = ? order by iv.version DESC " ;
378+ + " inner join item_version iv on iv.item_id = i.id where i.id = ? ORDER BY iv.version DESC " ;
374379
375380 ResultSet result = null ;
376381
@@ -411,6 +416,60 @@ private boolean resultSetHasRows(ResultSet resultSet) {
411416 }
412417 return hasRows ;
413418 }
414-
419+
420+ @ Override
421+ public List <String > migrateItem (Long itemId , UUID workspaceId ) throws DAOException {
422+
423+ Object [] values = { itemId , workspaceId .toString () };
424+
425+ String query = "WITH RECURSIVE "
426+ + " q AS "
427+ + " ( "
428+ + " SELECT i.* "
429+ + " FROM item i "
430+ + " WHERE i.id = ? "
431+ + " UNION ALL "
432+ + " SELECT i2.* "
433+ + " FROM q "
434+ + " JOIN item i2 ON i2.parent_id = q.id "
435+ + " ) "
436+ + " UPDATE item i3 SET workspace_id = ?::uuid "
437+ + " FROM q "
438+ + " WHERE q.id = i3.id" ;
439+
440+ executeUpdate (query , values );
441+
442+ List <String > chunksToMigrate ;
443+
444+ try {
445+ chunksToMigrate = getChunksToMigrate (itemId );
446+ }catch (SQLException e ){
447+ throw new DAOException (e );
448+ }
449+
450+ return chunksToMigrate ;
451+
452+ }
453+
454+ private List <String > getChunksToMigrate (Long itemId ) throws DAOException , SQLException {
455+
456+ Object [] values = { itemId };
457+
458+ String query = "SELECT get_unique_chunks_to_migrate(?) AS chunks" ;
459+
460+ ResultSet result = executeQuery (query , values );
461+ List <String > chunksList ;
462+
463+ if (result .next ()){
464+ chunksList = DAOUtil .getArrayFromResultSet (result , "chunks" );
465+ }
466+ else {
467+ chunksList = new ArrayList <String >();
468+ }
469+
470+
471+ return chunksList ;
472+
473+ }
415474
416475}
0 commit comments