Package org.h2.tools

# Class MultiDimension

java.lang.Object
org.h2.tools.MultiDimension

All Implemented Interfaces:
  `Comparator<long[]>`

public class MultiDimension extends Object implements Comparator<long[]>
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).

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`MultiDimension()`
Protected constructor

## Method Summary

Modifier and Type
Method
Description
`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.
`String`
`generatePreparedQuery(String table, String scalarColumn, String[] columns)`
Generates an optimized multi-dimensional range query.
`static MultiDimension`
`getInstance()`
Get the singleton.
`int`
`getMaxValue(int dimensions)`
Get the maximum value for the given dimension count.
`ResultSet`
`getResult(PreparedStatement prep, int[] min, int[] max)`
Executes a prepared query that was generated using generatePreparedQuery.
`long`
`interleave(int... values)`
Convert the multi-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.
`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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface java.util.Comparator

`equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong`

## Constructor Details

### MultiDimension

protected MultiDimension()
Protected constructor

## Method Details

### getInstance

public static MultiDimension getInstance()
Get the singleton.

Returns:
  the singleton

### normalize

public 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)

### getMaxValue

public 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

### interleave

public 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

### interleave

public 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

### deinterleave

public 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

### generatePreparedQuery

public 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
  `scalarColumn` - the column name of the computed scalar column
  `columns` - the list of columns
Returns:
  the query

### getResult

public 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
Throws:
  `SQLException` - on failure

### compare

public int compare(long[] a, long[] b)

Specified by:
  `compare` in interface `Comparator<long[]>`