org.hibernate.engine.jdbc.Size Maven / Gradle / Ivy
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.engine.jdbc;
import java.io.Serializable;
/**
* Models size restrictions/requirements on a column's datatype.
*
* IMPL NOTE: since we do not necessarily know the datatype up front, and therefore do not necessarily know
* whether length or precision/scale sizing is needed, we simply account for both here. Additionally LOB
* definitions, by standard, are allowed a "multiplier" consisting of 'K' (Kb), 'M' (Mb) or 'G' (Gb).
*
* @author Steve Ebersole
*/
public class Size implements Serializable {
public static enum LobMultiplier {
NONE( 1 ),
K( NONE.factor * 1024 ),
M( K.factor * 1024 ),
G( M.factor * 1024 );
private long factor;
private LobMultiplier(long factor) {
this.factor = factor;
}
public long getFactor() {
return factor;
}
}
public static final int DEFAULT_LENGTH = 255;
public static final int DEFAULT_PRECISION = 19;
public static final int DEFAULT_SCALE = 2;
private long length = DEFAULT_LENGTH;
private int precision = DEFAULT_PRECISION;
private int scale = DEFAULT_SCALE;
private LobMultiplier lobMultiplier = LobMultiplier.NONE;
public Size() {
}
/**
* Complete constructor.
*
* @param precision numeric precision
* @param scale numeric scale
* @param length type length
* @param lobMultiplier LOB length multiplier
*/
public Size(int precision, int scale, long length, LobMultiplier lobMultiplier) {
this.precision = precision;
this.scale = scale;
this.length = length;
this.lobMultiplier = lobMultiplier;
}
public static Size precision(int precision) {
return new Size( precision, -1, -1, null );
}
public static Size precision(int precision, int scale) {
return new Size( precision, scale, -1, null );
}
public static Size length(long length) {
return new Size( -1, -1, length, null );
}
public static Size length(long length, LobMultiplier lobMultiplier) {
return new Size( -1, -1, length, lobMultiplier );
}
public int getPrecision() {
return precision;
}
public int getScale() {
return scale;
}
public long getLength() {
return length;
}
public LobMultiplier getLobMultiplier() {
return lobMultiplier;
}
public void initialize(Size size) {
this.precision = size.precision;
this.scale = size.scale;
this.length = size.length;
}
public void setPrecision(int precision) {
this.precision = precision;
}
public void setScale(int scale) {
this.scale = scale;
}
public void setLength(long length) {
this.length = length;
}
public void setLobMultiplier(LobMultiplier lobMultiplier) {
this.lobMultiplier = lobMultiplier;
}
}