Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-10-01 09:23:35 +0000
committerEike Stepper2012-10-01 09:23:35 +0000
commit2f059db9c19fe63f6b551730b664d453ba09b967 (patch)
treef687f395fd4e4d3300ea508789aabfb43e52494b /plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo
parent6ed4654283170b6857405a5e2bb894ddff6b543b (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ExternalReferenceManager.java64
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/LongIDHandler.java13
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);
}

Back to the top