On 02/02/14 18:29, Milorad Tosic wrote:
Hi,
I need to post process ResultSet such that few new columns are
custom computed by my code and inserted into the ResultSet.
> For example, let's have the following result set:
| a | b |
| 1 | 2 |
I would like to return the following resultset instead (that would contain sum
c = a + b)
| a | b | c |
| 1 | 2 | 3 |
where c is computed by my Java code and appended to the ResultSet originally
obtained as a result of the initial query.
Any advice how this could be done in Jena?
NOTE: I am aware of the possibility to change the original query but that is
not an option.
You can write your own ResultSet implementation (it's an interface).
There are implementations in the code base that may help you.
One way is to use a wrapped pattern - have a new ResultSet
implementation that uses an underlying one passed in the constructor.
On each .hasNext/.next call, create a new QuerySolution with the
additional variable/value. It's need to copy the QuerySolution in the
general case.
Or turn the ResultSet into a list, and calculate a new list then use
ResultSetStream.
Yet another way is to work at the Binding level - BindingFactory.
binding(Binding parent, Var var, Node node) or QueryIterAssign (which is
what BIND uses)
Andy