org.h2.value

## Class DataType

- java.lang.Object
- - org.h2.value.DataType

    public class DataType
    extends java.lang.Object

This class contains meta data information about data types, and can convert between Java objects and Values.

### Field Summary

Fields
`boolean` `caseSensitive` If this data type is case sensitive.
`long` `defaultPrecision` The default precision.
`int` `defaultScale` The default scale.
`long` `maxPrecision` The maximum supported precision.
`int` `maxScale` The highest possible scale.
`long` `minPrecision` The minimum supported precision.
`int` `minScale` The lowest possible scale.
`java.lang.String` `params` The list of parameters used in the column definition.
`java.lang.String` `prefix` The prefix required for the SQL literal representation.
`boolean` `specialPrecisionScale` If precision and scale have non-standard default values.
`int` `sqlType` The SQL type.
`java.lang.String` `suffix` The suffix required for the SQL literal representation.
`boolean` `supportsPrecision` If the precision parameter is supported.
`boolean` `supportsScale` If the scale parameter is supported.
`int` `type` The value type of this data type.

### Constructor Summary

Constructors
Constructor and Description
`DataType()`

### Method Summary

All Methods Static Methods Concrete Methods
`static long` `addPrecision(long p1, long p2)` Performs saturated addition of precision values.
`static boolean` `areStableComparable(TypeInfo type1, TypeInfo type2)` Returns whether values of the specified data types have session-independent compare results.
`static int` `convertSQLTypeToValueType(int sqlType)` Convert a SQL type to a value type.
`static int` `convertSQLTypeToValueType(int sqlType, java.lang.String sqlTypeName)` Convert a SQL type to a value type using SQL type name, in order to manage SQL type extension mechanism.
`static int` `convertSQLTypeToValueType(java.sql.SQLType sqlType)` Convert a SQL type to a value type.
`static int` `convertTypeToSQLType(TypeInfo type)` Convert a value type to a SQL type.
`static DataType` `createDate(int maxPrecision, int precision, java.lang.String prefix, boolean supportsScale, int scale, int maxScale)` Create a date-time data type.
`static DataType` `createNumeric(int precision, int scale)` Create a numeric data type without parameters.
`static DataType` `getDataType(int type)` Get the data type object for the given value type.
`static java.lang.Object` `getDefaultForPrimitiveType(java.lang.Class<?> clazz)` Get the default value in the form of a Java object for the given Java class.
`static DataType` `getTypeByName(java.lang.String s, Mode mode)` Get a data type object from a type name.
`static int` `getValueTypeFromResultSet(java.sql.ResultSetMetaData meta, int columnIndex)` Get the SQL type from the result set meta data for the given column.
`static boolean` `hasTotalOrdering(int type)` Check if the given type has total ordering.
`static boolean` `isBinaryColumn(java.sql.ResultSetMetaData meta, int column)` Check whether the specified column needs the binary representation.
`static boolean` `isBinaryStringOrSpecialBinaryType(int type)` Check if the given value type is a binary string type or a compatible special data type such as Java object, UUID, geometry object, or JSON.
`static boolean` `isBinaryStringType(int type)` Check if the given value type is a binary string type.
`static boolean` `isCharacterStringType(int type)` Check if the given value type is a character string type.
`static boolean` `isDateTimeType(int type)` Check if the given value type is a date-time type (TIME, DATE, TIMESTAMP, TIMESTAMP_TZ).
`static boolean` `isIndexable(TypeInfo type)` Returns whether columns with the specified data type may have an index.
`static boolean` `isIntervalType(int type)` Check if the given value type is an interval type.
`static boolean` `isLargeObject(int type)` Check if the given value type is a large object (BLOB or CLOB).
`static boolean` `isNumericType(int type)` Check if the given value type is a numeric type.
`static boolean` `isStringType(int type)` Check if the given value type is a String (VARCHAR,...).
`static boolean` `isYearMonthIntervalType(int type)` Check if the given value type is a year-month interval type.
`static java.lang.String` `sqlTypeToString(java.sql.SQLType sqlType)` Convert a SQL type to a debug string.

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

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

### Field Detail

#### type

    public int type

The value type of this data type.

#### sqlType

    public int sqlType

The SQL type.

#### minPrecision

    public long minPrecision

The minimum supported precision.

#### maxPrecision

    public long maxPrecision

The maximum supported precision.

#### minScale

    public int minScale

The lowest possible scale.

#### maxScale

    public int maxScale

The highest possible scale.

#### prefix

    public java.lang.String prefix

The prefix required for the SQL literal representation.

#### suffix

    public java.lang.String suffix

The suffix required for the SQL literal representation.

#### params

    public java.lang.String params

The list of parameters used in the column definition.

#### caseSensitive

    public boolean caseSensitive

If this data type is case sensitive.

#### supportsPrecision

    public boolean supportsPrecision

If the precision parameter is supported.

#### supportsScale

    public boolean supportsScale

If the scale parameter is supported.

#### defaultPrecision

    public long defaultPrecision

The default precision.

#### defaultScale

    public int defaultScale

The default scale.

#### specialPrecisionScale

    public boolean specialPrecisionScale

If precision and scale have non-standard default values.

### Constructor Detail

#### DataType

    public DataType()

### Method Detail

#### createNumeric

    public static DataType createNumeric(int precision,
                                         int scale)

Create a numeric data type without parameters.

Parameters:
  `precision` - precision
  `scale` - scale
Returns:
  data type

#### createDate

    public static DataType createDate(int maxPrecision,
                                      int precision,
                                      java.lang.String prefix,
                                      boolean supportsScale,
                                      int scale,
                                      int maxScale)

Create a date-time data type.

Parameters:
  `maxPrecision` - maximum supported precision
  `precision` - default precision
  `prefix` - the prefix for SQL literal representation
  `supportsScale` - whether the scale parameter is supported
  `scale` - default scale
  `maxScale` - highest possible scale
Returns:
  data type

#### getDataType

    public static DataType getDataType(int type)

Get the data type object for the given value type.

Parameters:
  `type` - the value type
Returns:
  the data type object

#### convertTypeToSQLType

    public static int convertTypeToSQLType(TypeInfo type)

Convert a value type to a SQL type.

Parameters:
  `type` - the type
Returns:
  the SQL type

#### convertSQLTypeToValueType

    public static int convertSQLTypeToValueType(int sqlType,
                                                java.lang.String sqlTypeName)

Convert a SQL type to a value type using SQL type name, in order to manage SQL type extension mechanism.

Parameters:
  `sqlType` - the SQL type
  `sqlTypeName` - the SQL type name
Returns:
  the value type

#### getValueTypeFromResultSet

    public static int getValueTypeFromResultSet(java.sql.ResultSetMetaData meta,
                                                int columnIndex)
                                         throws java.sql.SQLException

Get the SQL type from the result set meta data for the given column. This method uses the SQL type and type name.

Parameters:
  `meta` - the meta data
  `columnIndex` - the column index (1, 2,...)
Returns:
  the value type
Throws:
  `java.sql.SQLException` - on failure

#### isBinaryColumn

    public static boolean isBinaryColumn(java.sql.ResultSetMetaData meta,
                                         int column)
                                  throws java.sql.SQLException

Check whether the specified column needs the binary representation.

Parameters:
  `meta` - metadata
  `column` - column index
Returns:
  `true` if column needs the binary representation, `false` otherwise
Throws:
  `java.sql.SQLException` - on SQL exception

#### convertSQLTypeToValueType

    public static int convertSQLTypeToValueType(java.sql.SQLType sqlType)

Convert a SQL type to a value type.

Parameters:
  `sqlType` - the SQL type
Returns:
  the value type

#### convertSQLTypeToValueType

    public static int convertSQLTypeToValueType(int sqlType)

Convert a SQL type to a value type.

Parameters:
  `sqlType` - the SQL type
Returns:
  the value type

#### sqlTypeToString

    public static java.lang.String sqlTypeToString(java.sql.SQLType sqlType)

Convert a SQL type to a debug string.

Parameters:
  `sqlType` - the SQL type
Returns:
  the textual representation

#### getTypeByName

    public static DataType getTypeByName(java.lang.String s,
                                         Mode mode)

Get a data type object from a type name.

Parameters:
  `s` - the type name
  `mode` - database mode
Returns:
  the data type object

#### isIndexable

    public static boolean isIndexable(TypeInfo type)

Returns whether columns with the specified data type may have an index.

Parameters:
  `type` - the data type
Returns:
  whether an index is allowed

#### areStableComparable

    public static boolean areStableComparable(TypeInfo type1,
                                              TypeInfo type2)

Returns whether values of the specified data types have session-independent compare results.

Parameters:
  `type1` - the first data type
  `type2` - the second data type
Returns:
  are values have session-independent compare results

#### isDateTimeType

    public static boolean isDateTimeType(int type)

Check if the given value type is a date-time type (TIME, DATE, TIMESTAMP, TIMESTAMP_TZ).

Parameters:
  `type` - the value type
Returns:
  true if the value type is a date-time type

#### isIntervalType

    public static boolean isIntervalType(int type)

Check if the given value type is an interval type.

Parameters:
  `type` - the value type
Returns:
  true if the value type is an interval type

#### isYearMonthIntervalType

    public static boolean isYearMonthIntervalType(int type)

Check if the given value type is a year-month interval type.

Parameters:
  `type` - the value type
Returns:
  true if the value type is a year-month interval type

#### isLargeObject

    public static boolean isLargeObject(int type)

Check if the given value type is a large object (BLOB or CLOB).

Parameters:
  `type` - the value type
Returns:
  true if the value type is a lob type

#### isNumericType

    public static boolean isNumericType(int type)

Check if the given value type is a numeric type.

Parameters:
  `type` - the value type
Returns:
  true if the value type is a numeric type

#### isBinaryStringType

    public static boolean isBinaryStringType(int type)

Check if the given value type is a binary string type.

Parameters:
  `type` - the value type
Returns:
  true if the value type is a binary string type

#### isCharacterStringType

    public static boolean isCharacterStringType(int type)

Check if the given value type is a character string type.

Parameters:
  `type` - the value type
Returns:
  true if the value type is a character string type

#### isStringType

    public static boolean isStringType(int type)

Check if the given value type is a String (VARCHAR,...).

Parameters:
  `type` - the value type
Returns:
  true if the value type is a String type

#### isBinaryStringOrSpecialBinaryType

    public static boolean isBinaryStringOrSpecialBinaryType(int type)

Check if the given value type is a binary string type or a compatible special data type such as Java object, UUID, geometry object, or JSON.

Parameters:
  `type` - the value type
Returns:
  true if the value type is a binary string type or a compatible special data type

#### hasTotalOrdering

    public static boolean hasTotalOrdering(int type)

Check if the given type has total ordering.

Parameters:
  `type` - the value type
Returns:
  true if the value type has total ordering

#### addPrecision

    public static long addPrecision(long p1,
                                    long p2)

Performs saturated addition of precision values.

Parameters:
  `p1` - the first summand
  `p2` - the second summand
Returns:
  the sum of summands, or `Long.MAX_VALUE` if either argument is negative or sum is out of range

#### getDefaultForPrimitiveType

    public static java.lang.Object getDefaultForPrimitiveType(java.lang.Class<?> clazz)

Get the default value in the form of a Java object for the given Java class.

Parameters:
  `clazz` - the Java class
Returns:
  the default object