+ * Note that the direct value retrieval in this implementation only supports
+ * String-type literals - nothing else!
+ *
+ * This implementation is mainly intended for optimizing database indexing
+ * performance.
+ */
public class DirectQuerySupportImpl implements DirectQuerySupport {
private static final Logger LOGGER = LoggerFactory.getLogger(DirectQuerySupportImpl.class);
public class DirectQuerySupportImpl implements DirectQuerySupport {
private static final Logger LOGGER = LoggerFactory.getLogger(DirectQuerySupportImpl.class);
@@ -559,6+566,7 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
}
}
+ @SuppressWarnings("unchecked")
private <T> void getValue4(final ReadGraphImpl graph, final ClusterImpl containerCluster, final int subject, final ForPossibleRelatedValueProcedure<T> procedure) {
Object result = null;
private <T> void getValue4(final ReadGraphImpl graph, final ClusterImpl containerCluster, final int subject, final ForPossibleRelatedValueProcedure<T> procedure) {
Object result = null;
@@ -653,6+661,7 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
}
}
+ @SuppressWarnings("unchecked")
private <C, T> void getValue4(final ReadGraphImpl graph, final ClusterImpl containerCluster, final int subject, final C context, final ForPossibleRelatedValueContextProcedure<C, T> procedure) {
Object result = null;
private <C, T> void getValue4(final ReadGraphImpl graph, final ClusterImpl containerCluster, final int subject, final C context, final ForPossibleRelatedValueContextProcedure<C, T> procedure) {
Object result = null;
@@ -891,7+900,8 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
@@ -922,7+933,8 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
if(bytes == null) {
procedure.execute(graph, context, null);
} else {
if(bytes == null) {
procedure.execute(graph, context, null);
} else {
- T value = (T)utf(bytes);
+ @SuppressWarnings("unchecked")
+ T value = (T)utf(bytes, 0);
procedure.execute(graph, context, value);
}
} catch (DatabaseException e) {
procedure.execute(graph, context, value);
}
} catch (DatabaseException e) {
@@ -934,38+946,42 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
}
private <T> void getDirectValue4(final ReadGraphImpl graph, final ClusterSmall cluster, final int subject, final ForPossibleRelatedValueProcedure<T> procedure) {
}
private <T> void getDirectValue4(final ReadGraphImpl graph, final ClusterSmall cluster, final int subject, final ForPossibleRelatedValueProcedure<T> procedure) {
+ try {
+ // Note: this code avoids creating an intermediate byte[]
+ // to store the encoded string bytes and reads the UTF string
+ // from the value table byte[] directly into String instead.
- ResourceTableSmall rt = cluster.resourceTable;
- ValueTableSmall vt = cluster.valueTable;
-
- byte[] bs = vt.table;
- long[] ls = rt.table;
+ ResourceTableSmall rt = cluster.resourceTable;
+ ValueTableSmall vt = cluster.valueTable;
- int index = ((subject&0xFFFF) << 1) - 1 + rt.offset;