Fix result set parsing when coord-sort is present.
This commit is contained in:
parent
afa1c2f0b6
commit
4df01b1945
|
@ -144,21 +144,7 @@ public class SearchQueryExecutor implements ISearchQueryExecutor {
|
||||||
if (myResultSet == null || !myResultSet.hasNext()) {
|
if (myResultSet == null || !myResultSet.hasNext()) {
|
||||||
myNext = NO_MORE;
|
myNext = NO_MORE;
|
||||||
} else {
|
} else {
|
||||||
Object nextRow = Objects.requireNonNull(myResultSet.next());
|
myNext = getNextPid(myResultSet);
|
||||||
// We should typically get two columns back, the first is the partition ID and the second
|
|
||||||
// is the resource ID. But if we're doing a count query, we'll get a single column in an array
|
|
||||||
// or maybe even just a single non array value depending on how the platform handles it.
|
|
||||||
if (nextRow instanceof Number) {
|
|
||||||
myNext = ((Number) nextRow).longValue();
|
|
||||||
} else {
|
|
||||||
Object[] nextRowAsArray = (Object[]) nextRow;
|
|
||||||
if (nextRowAsArray.length == 1) {
|
|
||||||
myNext = (Long) nextRowAsArray[0];
|
|
||||||
} else {
|
|
||||||
Integer nextPartitionId = (Integer) nextRowAsArray[0];
|
|
||||||
myNext = (Long) nextRowAsArray[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -169,6 +155,40 @@ public class SearchQueryExecutor implements ISearchQueryExecutor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long getNextPid(ScrollableResultsIterator<Object> theResultSet) {
|
||||||
|
Object nextRow = Objects.requireNonNull(theResultSet.next());
|
||||||
|
// We should typically get two columns back, the first is the partition ID and the second
|
||||||
|
// is the resource ID. But if we're doing a count query, we'll get a single column in an array
|
||||||
|
// or maybe even just a single non array value depending on how the platform handles it.
|
||||||
|
if (nextRow instanceof Number) {
|
||||||
|
return ((Number) nextRow).longValue();
|
||||||
|
} else {
|
||||||
|
Object[] nextRowAsArray = (Object[]) nextRow;
|
||||||
|
if (nextRowAsArray.length == 1) {
|
||||||
|
return (Long) nextRowAsArray[0];
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
// TODO MB add a strategy object to GeneratedSql to describe the result set.
|
||||||
|
// or make SQE generic
|
||||||
|
// Comment to reviewer: this will be cleaner with the next
|
||||||
|
// merge from ja_20240718_pk_schema_selector
|
||||||
|
|
||||||
|
// We have some cases to distinguish:
|
||||||
|
// - res_id
|
||||||
|
// - count
|
||||||
|
// - partition_id, res_id
|
||||||
|
// - res_id, coord-dist
|
||||||
|
// - partition_id, res_id, coord-dist
|
||||||
|
// Assume res_id is first Long in row, and is in first two columns
|
||||||
|
if (nextRowAsArray[0] instanceof Long) {
|
||||||
|
return (long) nextRowAsArray[0];
|
||||||
|
} else {
|
||||||
|
return (long) nextRowAsArray[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static SearchQueryExecutor emptyExecutor() {
|
public static SearchQueryExecutor emptyExecutor() {
|
||||||
return NO_VALUE_EXECUTOR;
|
return NO_VALUE_EXECUTOR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue