diff options
author | Eike Stepper | 2012-10-01 09:23:35 +0000 |
---|---|---|
committer | Eike Stepper | 2012-10-01 09:23:35 +0000 |
commit | 2f059db9c19fe63f6b551730b664d453ba09b967 (patch) | |
tree | f687f395fd4e4d3300ea508789aabfb43e52494b /plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo | |
parent | 6ed4654283170b6857405a5e2bb894ddff6b543b (diff) | |
download | cdo-2f059db9c19fe63f6b551730b664d453ba09b967.tar.gz cdo-2f059db9c19fe63f6b551730b664d453ba09b967.tar.xz cdo-2f059db9c19fe63f6b551730b664d453ba09b967.zip |
[390804] Support external targets in CDOView.queryXRefs()
https://bugs.eclipse.org/bugs/show_bug.cgi?id=390804
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo')
2 files changed, 44 insertions, 33 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java index a13172dc2f..df69730c63 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java @@ -136,6 +136,38 @@ public class ExternalReferenceManager extends Lifecycle } } + public long lookupByURI(IDBStoreAccessor accessor, String uri) + { + IPreparedStatementCache statementCache = accessor.getStatementCache(); + PreparedStatement stmt = null; + ResultSet resultSet = null; + + try + { + stmt = statementCache.getPreparedStatement(sqlSelectByURI, ReuseProbability.HIGH); + stmt.setString(1, uri); + + resultSet = stmt.executeQuery(); + + if (resultSet.next()) + { + return resultSet.getLong(1); + } + + // Not found ... + return NULL; + } + catch (SQLException e) + { + throw new DBException(e); + } + finally + { + DBUtil.close(resultSet); + statementCache.releasePreparedStatement(stmt); + } + } + public void rawExport(Connection connection, CDODataOutput out, long fromCommitTime, long toCommitTime) throws IOException { @@ -257,38 +289,6 @@ public class ExternalReferenceManager extends Lifecycle } } - private long lookupByURI(IDBStoreAccessor accessor, String uri) - { - IPreparedStatementCache statementCache = accessor.getStatementCache(); - PreparedStatement stmt = null; - ResultSet resultSet = null; - - try - { - stmt = statementCache.getPreparedStatement(sqlSelectByURI, ReuseProbability.HIGH); - stmt.setString(1, uri); - - resultSet = stmt.executeQuery(); - - if (resultSet.next()) - { - return resultSet.getLong(1); - } - - // Not found ... - return NULL; - } - catch (SQLException e) - { - throw new DBException(e); - } - finally - { - DBUtil.close(resultSet); - statementCache.releasePreparedStatement(stmt); - } - } - private static IDBStoreAccessor getAccessor() { IStoreAccessor accessor = StoreThreadLocal.getAccessor(); diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/LongIDHandler.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/LongIDHandler.java index 6901988385..d1e363683a 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/LongIDHandler.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/LongIDHandler.java @@ -150,7 +150,18 @@ public class LongIDHandler extends Lifecycle implements IIDHandler public void appendCDOID(StringBuilder builder, CDOID id) { - long value = value(id); + long value; + if (id != null && id.isExternal()) + { + IDBStoreAccessor accessor = (IDBStoreAccessor)StoreThreadLocal.getAccessor(); + String uri = CDOIDUtil.getString(id); + value = externalReferenceManager.lookupByURI(accessor, uri); + } + else + { + value = value(id); + } + builder.append(value); } |