MultiDimension

A 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).

Methods
static MultiDimension getInstance()
Get the singleton.
static MultiDimension getInstance()
Get the singleton.
Returns:
the singleton
int compare(long[] a, long[] b)
int compare(long[] a, long[] b)
int deinterleave(int dimensions, long scalar, int dim)
Gets one of the original multi-dimensional values from a scalar value.
int deinterleave(int dimensions, long scalar, int dim)
Gets one of the original multi-dimensional values from a scalar value.
Parameters:
dimensions - the number of dimensions
scalar - the scalar value
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.
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
int getMaxValue(int dimensions)
Get the maximum value for the given dimension count.
int getMaxValue(int dimensions)
Get the maximum value for the given dimension count. For two dimensions, each value must contain at most 32 bit, for 3: 21 bit, 4: 16 bit, 5: 12 bit, 6: 10 bit, 7: 9 bit, 8: 8 bit.
Parameters:
dimensions - the number of dimensions
Returns:
the maximum value
ResultSet getResult(PreparedStatement prep, int[] min, int[] max)
Executes a prepared query that was generated using generatePreparedQuery.
ResultSet getResult(PreparedStatement prep, int[] min, int[] max) throws SQLException
Executes 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.
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 between 0 (including) and the maximum value for the given number of dimensions (getMaxValue, excluding). To normalize values to this range, use the normalize function.
Parameters:
values - the multi-dimensional value
Returns:
the scalar value
long interleave(int x, int y)
Convert the two-dimensional value into a one-dimensional (scalar) value.
long interleave(int x, int y)
Convert the two-dimensional value into a one-dimensional (scalar) value. This is done by interleaving the bits of the values. Each values must be between 0 (including) and the maximum value for the given number of dimensions (getMaxValue, excluding). To normalize values to this range, use the normalize function.
Parameters:
x - the value of the first dimension, normalized
y - the value of the second dimension, normalized
Returns:
the scalar value
int normalize(int dimensions, double value, double min, double max)
Normalize a value so that it is between the minimum and maximum for the given number of dimensions.
int normalize(int dimensions, double value, double min, double max)
Normalize a value so that it is between the minimum and maximum for the given number of dimensions.
Parameters:
dimensions - the number of dimensions
value - the value (must be in the range min..max)
min - the minimum value
max - the maximum value (must be larger than min)
Returns:
the normalized value in the range 0..getMaxValue(dimensions)