Loading src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +17 −24 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import it.inaf.oats.vospace.DeleteNodeController; import it.inaf.oats.vospace.datamodel.NodeProperties; import it.inaf.oats.vospace.datamodel.NodeUtils; import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.exception.NodeNotFoundException; import java.sql.Array; import net.ivoa.xml.vospace.v2.Node; import java.sql.PreparedStatement; Loading Loading @@ -93,17 +92,22 @@ public class NodeDAO { public Optional<Node> listNode(String path) { String sql = "SELECT os.vos_path, n.node_id, type, async_trans, sticky, busy_state, creator_id, group_read, group_write,\n" + "is_public, content_length, created_on, last_modified, accept_views, provide_views\n" String sql = "SELECT (CASE WHEN c.path = n.path THEN ? ELSE (? || ? || c.name) END) AS vos_path, c.node_id, c.name,\n" + "c.type, c.async_trans, c.sticky, c.busy_state, c.creator_id, c.group_read, c.group_write,\n" + "c.is_public, c.content_length, c.created_on, c.last_modified, c.accept_views, c.provide_views\n" + "FROM node n\n" + "JOIN node_vos_path os ON n.node_id = os.node_id\n" + "WHERE n.path ~ (" + getFirstLevelChildrenSelector(path) + ")::lquery\n" + "OR os.vos_path = ? ORDER BY vos_path"; + "JOIN node c ON c.path ~ (n.path::varchar || ? || '*{1}')::lquery OR c.path = n.path\n" + "WHERE n.node_id = id_from_vos_path(?)\n" + "ORDER BY vos_path"; List<Node> parentAndChildren = jdbcTemplate.query(conn -> { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, path); ps.setString(2, path); int i = 0; ps.setString(++i, path); ps.setString(++i, path); ps.setString(++i, "/".equals(path) ? "" : "/"); ps.setString(++i, "/".equals(path) ? "" : "."); ps.setString(++i, path); return ps; }, (row, index) -> { return getNodeFromResultSet(row); Loading Loading @@ -161,16 +165,6 @@ public class NodeDAO { return newNode; } private String getFirstLevelChildrenSelector(String path) { String select = "(SELECT path FROM node WHERE node_id = (SELECT node_id FROM node_vos_path WHERE vos_path = ?))::varchar || '"; if (!"/".equals(path)) { select += "."; } select += "*{1}'"; return select; } private String getAllLevelsChildrenSelector(String path) { String select = "(SELECT path FROM node WHERE node_id = (SELECT node_id FROM node_vos_path WHERE vos_path = ?))::varchar || '"; Loading Loading @@ -561,10 +555,9 @@ public class NodeDAO { private Map<String, List<String>> getPermissionsFromDB(String vosPath) { String sql = "SELECT group_read, group_write " + "FROM node n JOIN node_vos_path p ON n.node_id = p.node_id " + "WHERE p.vos_path = ?"; + "FROM node n WHERE node_id = id_from_vos_path(?)"; return jdbcTemplate.query(sql, new Object[]{vosPath}, rs -> { return jdbcTemplate.query(sql, new Object[]{vosPath}, new int[]{Types.VARCHAR}, rs -> { if (!rs.next()) { throw new InternalFaultException("No records found for " + vosPath); } Loading Loading @@ -640,9 +633,9 @@ public class NodeDAO { String path = nodeURI.replaceAll("vos://[^/]+", ""); String parentPath = NodeUtils.getParentPath(path); String sql = "SELECT path, relative_path from " + "node n join node_vos_path p on n.node_id = p.node_id " + "where p.vos_path = ?"; String sql = "SELECT path, relative_path " + "FROM node n " + "WHERE node_id = id_from_vos_path(?)"; List<NodePaths> paths = jdbcTemplate.query(conn -> { PreparedStatement ps = conn.prepareStatement(sql); Loading Loading
src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +17 −24 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import it.inaf.oats.vospace.DeleteNodeController; import it.inaf.oats.vospace.datamodel.NodeProperties; import it.inaf.oats.vospace.datamodel.NodeUtils; import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.exception.NodeNotFoundException; import java.sql.Array; import net.ivoa.xml.vospace.v2.Node; import java.sql.PreparedStatement; Loading Loading @@ -93,17 +92,22 @@ public class NodeDAO { public Optional<Node> listNode(String path) { String sql = "SELECT os.vos_path, n.node_id, type, async_trans, sticky, busy_state, creator_id, group_read, group_write,\n" + "is_public, content_length, created_on, last_modified, accept_views, provide_views\n" String sql = "SELECT (CASE WHEN c.path = n.path THEN ? ELSE (? || ? || c.name) END) AS vos_path, c.node_id, c.name,\n" + "c.type, c.async_trans, c.sticky, c.busy_state, c.creator_id, c.group_read, c.group_write,\n" + "c.is_public, c.content_length, c.created_on, c.last_modified, c.accept_views, c.provide_views\n" + "FROM node n\n" + "JOIN node_vos_path os ON n.node_id = os.node_id\n" + "WHERE n.path ~ (" + getFirstLevelChildrenSelector(path) + ")::lquery\n" + "OR os.vos_path = ? ORDER BY vos_path"; + "JOIN node c ON c.path ~ (n.path::varchar || ? || '*{1}')::lquery OR c.path = n.path\n" + "WHERE n.node_id = id_from_vos_path(?)\n" + "ORDER BY vos_path"; List<Node> parentAndChildren = jdbcTemplate.query(conn -> { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, path); ps.setString(2, path); int i = 0; ps.setString(++i, path); ps.setString(++i, path); ps.setString(++i, "/".equals(path) ? "" : "/"); ps.setString(++i, "/".equals(path) ? "" : "."); ps.setString(++i, path); return ps; }, (row, index) -> { return getNodeFromResultSet(row); Loading Loading @@ -161,16 +165,6 @@ public class NodeDAO { return newNode; } private String getFirstLevelChildrenSelector(String path) { String select = "(SELECT path FROM node WHERE node_id = (SELECT node_id FROM node_vos_path WHERE vos_path = ?))::varchar || '"; if (!"/".equals(path)) { select += "."; } select += "*{1}'"; return select; } private String getAllLevelsChildrenSelector(String path) { String select = "(SELECT path FROM node WHERE node_id = (SELECT node_id FROM node_vos_path WHERE vos_path = ?))::varchar || '"; Loading Loading @@ -561,10 +555,9 @@ public class NodeDAO { private Map<String, List<String>> getPermissionsFromDB(String vosPath) { String sql = "SELECT group_read, group_write " + "FROM node n JOIN node_vos_path p ON n.node_id = p.node_id " + "WHERE p.vos_path = ?"; + "FROM node n WHERE node_id = id_from_vos_path(?)"; return jdbcTemplate.query(sql, new Object[]{vosPath}, rs -> { return jdbcTemplate.query(sql, new Object[]{vosPath}, new int[]{Types.VARCHAR}, rs -> { if (!rs.next()) { throw new InternalFaultException("No records found for " + vosPath); } Loading Loading @@ -640,9 +633,9 @@ public class NodeDAO { String path = nodeURI.replaceAll("vos://[^/]+", ""); String parentPath = NodeUtils.getParentPath(path); String sql = "SELECT path, relative_path from " + "node n join node_vos_path p on n.node_id = p.node_id " + "where p.vos_path = ?"; String sql = "SELECT path, relative_path " + "FROM node n " + "WHERE node_id = id_from_vos_path(?)"; List<NodePaths> paths = jdbcTemplate.query(conn -> { PreparedStatement ps = conn.prepareStatement(sql); Loading