MultiDimensionA tool to help an application execute multi-dimensional range queries. The algorithm used is database independent, the only requirement is that the engine supports a range index (for example b-tree).
int deinterleave(long scalar, int dimensions, int dim)Gets one of the original multi-dimensional values from a scalar value.Parameters:
scalar - the scalar value
dimensions - the number of dimensions
dim - the dimension of the returned value (starting from 0)
Returns:
the value
String generatePreparedQuery(String table, String scalarColumn, String[] columns)Generates an optimized multi-dimensional range query. The query contains parameters. It can only be used with the H2 database.Parameters:
table - the table name
columns - the list of columns
scalarColumn - the column name of the computed scalar column
Returns:
the query
String generateQuery(String table, String scalarColumn, String[] columns, int[] min, int[] max)Generates an optimized multi-dimensional range query. This query is database independent, however the performance is not as good as when using generatePreparedQueryParameters:
table - the table name
columns - the list of columns
min - the lower values
max - the upper values
scalarColumn - the column name of the computed scalar column
Returns:
the query
static MultiDimension getInstance()Get the singleton.Returns:
the singleton
ResultSet getResult(PreparedStatement prep, int[] min, int[] max) throws SQLExceptionExecutes a prepared query that was generated using generatePreparedQuery.Parameters:
prep - the prepared statement
min - the lower values
max - the upper values
Returns:
the result set
long interleave(int[] values)Convert the multi-dimensional value into a one-dimensional (scalar) value. This is done by interleaving the bits of the values. Each values must be bigger or equal to 0. The maximum value is dependent on the number of dimensions. For two keys, it is 32 bit, for 3: 21 bit, 4: 16 bit, 5: 12 bit, 6: 10 bit, 7: 9 bit, 8: 8 bit.Parameters:
values - the multi-dimensional value
Returns:
the scalar value
|