@Override public void addLinks(String sourceId, List<String> targetIds, Session session) { if (targetIds == null) { return; } SQLSession sqlSession = (SQLSession) session; for (String targetId : targetIds) { addLink(sourceId, targetId, sqlSession, true); } }
@Override public void addLinks(String sourceId, List<String> targetIds) { if (targetIds == null) { return; } try (SQLSession session = getSQLSession()) { addLinks(sourceId, targetIds, session); } }
@Override public List<String> getTargetIdsForSource(String sourceId) { return getIdsFor(targetColumn, sourceColumn, sourceId); }
@Override public void setTargetIdsForSource(String sourceId, List<String> targetIds) { try (SQLSession session = getSQLSession()) { setTargetIdsForSource(sourceId, targetIds, session); } }
@Override public void removeLinksForTarget(String targetId) { try (SQLSession session = getSQLSession()) { removeLinksForTarget(targetId, session); } }
@Override public void removeLinksForSource(String sourceId) { try (SQLSession session = getSQLSession()) { removeLinksForSource(sourceId, session); } }
@Override public void setSourceIdsForTarget(String targetId, List<String> sourceIds) { try (SQLSession session = getSQLSession()) { setSourceIdsForTarget(targetId, sourceIds, session); } }
@Override public void removeLinksForSource(String sourceId, Session session) { SQLSession sqlSession = (SQLSession) session; removeLinksFor(sourceColumn, sourceId, sqlSession); }
protected SQLSession getSQLSession() { return (SQLSession) getSourceDirectory().getSession(); }
@Override public void initializeReferences() { try (Connection connection = getConnection()) { for (Reference reference : getReferences()) { if (reference instanceof TableReference) { ((TableReference) reference).initialize(connection); } } } catch (SQLException e) { throw new DirectoryException(e); } }
public void addLink(String sourceId, String targetId, SQLSession session, boolean checkExisting) { // OG: the following query should have avoided the round trips but // does not work for some reason that might be related to a bug in the // JDBC driver: // "INSERT INTO %s (%s, %s) (SELECT ?, ? FROM %s WHERE %s = ? AND %s = // ? HAVING COUNT(*) = 0)", tableName, sourceColumn, targetColumn, // tableName, sourceColumn, targetColumn // first step: check that this link does not exist yet if (checkExisting && exists(sourceId, targetId, session)) { return; } // second step: add the link // "INSERT INTO %s (%s, %s) VALUES (?, ?)", tableName, sourceColumn, targetColumn Insert insert = new Insert(table); insert.addColumn(table.getColumn(sourceColumn)); insert.addColumn(table.getColumn(targetColumn)); String insertSql = insert.getStatement(); if (session.logger.isLogEnabled()) { session.logger.logSQL(insertSql, Arrays.<Serializable> asList(sourceId, targetId)); } try (PreparedStatement ps = session.sqlConnection.prepareStatement(insertSql)) { ps.setString(1, sourceId); ps.setString(2, targetId); ps.execute(); } catch (SQLException e) { throw new DirectoryException(String.format("error adding link from %s to %s", sourceId, targetId), e); } }
protected List<String> getIdsFor(String valueColumn, String filterColumn, String filterValue) { try (SQLSession session = getSQLSession()) { // "SELECT %s FROM %s WHERE %s = ?", table.getColumn(valueColumn), tableName, filterColumn Select select = new Select(table); select.setWhat(table.getColumn(valueColumn).getQuotedName()); select.setFrom(table.getQuotedName()); select.setWhere(table.getColumn(filterColumn).getQuotedName() + " = ?"); String sql = select.getStatement(); if (session.logger.isLogEnabled()) { session.logger.logSQL(sql, Collections.<Serializable> singleton(filterValue)); } List<String> ids = new LinkedList<String>(); try (PreparedStatement ps = session.sqlConnection.prepareStatement(sql)) { ps.setString(1, filterValue); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { ids.add(rs.getString(valueColumn)); } return ids; } } catch (SQLException e) { throw new DirectoryException("error fetching reference values: ", e); } } }
@Override public void removeLinksForTarget(String targetId, Session session) { SQLSession sqlSession = (SQLSession) session; removeLinksFor(targetColumn, targetId, sqlSession); }
protected void initialize(Connection connection) { SQLDirectory directory = (SQLDirectory) getSourceDirectory(); Dialect dialect = directory.getDialect(); boolean nativeCase = directory.useNativeCase();
@Override public void addLinks(List<String> sourceIds, String targetId) { if (sourceIds == null) { return; } try (SQLSession session = getSQLSession()) { addLinks(sourceIds, targetId, session); } }
@Override public void addLinks(List<String> sourceIds, String targetId, Session session) { if (sourceIds == null) { return; } SQLSession sqlSession = (SQLSession) session; for (String sourceId : sourceIds) { addLink(sourceId, targetId, sqlSession, true); } }
@Override public List<String> getSourceIdsForTarget(String targetId) { return getIdsFor(sourceColumn, targetColumn, targetId); }