package com.tesora.dve.resultset;
/*
* #%L
* Tesora Inc.
* Database Virtualization Engine
* %%
* Copyright (C) 2011 - 2014 Tesora Inc.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import java.sql.Types;
import com.tesora.dve.db.mysql.common.ColumnAttributes;
public class ColumnMetadata {
private String dbName = null;
private String tableName = null;
private String name;
private String aliasName;
private int dataType;
private byte nativeTypeId;
private String typeName; // simple name like decimal
private String es_universe; // enum/set universe
private int size = 0;
private int hashPosition = 0;
private int precision = 0;
private int scale = 0;
int flags = 0;
boolean defaultFlags = false;
private String defaultValue = "";
private Integer orderInTable;
private int nativeTypeFlags;
public ColumnMetadata() {
}
public ColumnMetadata(String name, int flags, int size, String nativeTypeName, int dataType) {
this(name, flags, dataType, nativeTypeName);
this.size = size;
}
public ColumnMetadata(String name, int flags, int dataType, String nativeTypeName) {
this.name = name;
this.dataType = dataType;
this.typeName = nativeTypeName;
this.flags = flags;
this.defaultFlags = true;
}
public String getDbName() {
return dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getName() {
return name;
}
public String getQueryName() {
if ( usingAlias() )
return getAliasName();
return getName();
}
public void setName(String name) {
this.name = name;
}
public boolean usingAlias() {
return ( getAliasName() != null && !getAliasName().equals(getName()) );
}
public String getAliasName() {
return aliasName;
}
public void setAliasName(String aliasName) {
this.aliasName = aliasName;
}
public int getDataType() {
return dataType;
}
public void setDataType(int dataType) {
this.dataType = dataType;
}
public byte getNativeTypeId() {
return nativeTypeId;
}
public void setNativeTypeId(byte nativeTypeId) {
this.nativeTypeId = nativeTypeId;
}
public String getTypeName() {
return typeName;
}
public String getFullTypeName() {
// so typeName is just the name
// we need to figure out if we also need to add the size
StringBuilder buf = new StringBuilder();
buf.append(typeName);
if (ColumnAttributes.isSet(flags, ColumnAttributes.SIZED_TYPE)) {
buf.append("(").append(size).append(")");
} else if (ColumnAttributes.isSet(flags, ColumnAttributes.PS_TYPE)) {
buf.append("(").append(precision).append(",").append(scale).append(")");
}
if (es_universe != null)
buf.append("(").append(es_universe).append(")");
if (ColumnAttributes.isSet(flags, ColumnAttributes.UNSIGNED))
buf.append(" unsigned");
if (ColumnAttributes.isSet(flags, ColumnAttributes.ZEROFILL))
buf.append(" zerofill");
return buf.toString();
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public String getESUniverse() {
return es_universe;
}
public void setESUniverse(String v) {
es_universe = v;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getHashPosition() {
return hashPosition;
}
public void setHashPosition(int hashPosition) {
this.hashPosition = hashPosition;
}
public int getPrecision() {
return precision;
}
public void setPrecision(int precision) {
this.precision = precision;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
}
public boolean isNullable() {
return !ColumnAttributes.isSet(flags, ColumnAttributes.NOT_NULLABLE);
}
public void setNullable(boolean nullable) {
this.flags = ColumnAttributes.set(flags, ColumnAttributes.NOT_NULLABLE, !nullable);
}
public boolean hasDefault() {
return ColumnAttributes.isSet(flags, ColumnAttributes.HAS_DEFAULT_VALUE);
}
public void setHasDefault(boolean hasDefault) {
this.flags = ColumnAttributes.set(flags, ColumnAttributes.HAS_DEFAULT_VALUE, hasDefault);
}
public boolean isAutoGenerated() {
return ColumnAttributes.isSet(flags, ColumnAttributes.AUTO_INCREMENT);
}
public void setAutoGenerated(boolean autoGenerated) {
this.flags = ColumnAttributes.set(flags, ColumnAttributes.AUTO_INCREMENT, autoGenerated);
}
public void setFlags(int v) {
this.flags = v;
}
public int getFlags() {
return flags;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public boolean getOnUpdate() {
return ColumnAttributes.isSet(flags, ColumnAttributes.ONUPDATE);
}
public void setOnUpdate(boolean onUpdate) {
flags = ColumnAttributes.set(flags, ColumnAttributes.ONUPDATE, onUpdate);
}
public Integer getOrderInTable() {
return orderInTable;
}
public void setOrderInTable(Integer orderInTable) {
this.orderInTable = orderInTable;
}
public int getNativeTypeFlags() {
return nativeTypeFlags;
}
public void setNativeTypeFlags(int nativeTypeFlags) {
this.nativeTypeFlags = nativeTypeFlags;
}
@Override
public String toString() {
return "ColumnMetadata [dbName=" + dbName + ", tableName=" + tableName + ", name=" + name + ", aliasName=" + aliasName
+ ", dataType=" + dataType + ", columntype=" + getFullTypeName() + "/" + nativeTypeId + "]";
}
public boolean isBinaryType() {
return dataType == Types.LONGVARBINARY || dataType == Types.BLOB ||
dataType == Types.BINARY || dataType == Types.VARBINARY;
}
public boolean isStringType() {
return dataType == Types.VARCHAR || dataType == Types.CHAR;
}
public Boolean isKeyPart() {
return isPrimaryKey() || isUniqueKey() || isNonUniqueKey();
}
public Boolean isPrimaryKey() {
return ColumnAttributes.isSet(flags, ColumnAttributes.PRIMARY_KEY_PART);
}
public void primaryKey() {
flags = ColumnAttributes.set(flags, ColumnAttributes.PRIMARY_KEY_PART);
flags = ColumnAttributes.clear(flags, ColumnAttributes.UNIQUE_KEY_PART);
flags = ColumnAttributes.clear(flags, ColumnAttributes.KEY_PART);
}
public Boolean isUniqueKey() {
return ColumnAttributes.isSet(flags, ColumnAttributes.UNIQUE_KEY_PART);
}
public void uniqueKey() {
flags = ColumnAttributes.set(flags, ColumnAttributes.UNIQUE_KEY_PART);
flags = ColumnAttributes.clear(flags, ColumnAttributes.PRIMARY_KEY_PART);
flags = ColumnAttributes.clear(flags, ColumnAttributes.KEY_PART);
}
public Boolean isNonUniqueKey() {
return ColumnAttributes.isSet(flags, ColumnAttributes.KEY_PART);
}
public void nonUniqueKey() {
flags = ColumnAttributes.set(flags, ColumnAttributes.KEY_PART);
flags = ColumnAttributes.clear(flags, ColumnAttributes.PRIMARY_KEY_PART);
flags = ColumnAttributes.clear(flags, ColumnAttributes.UNIQUE_KEY_PART);
}
public boolean isUnsigned() {
return ColumnAttributes.isSet(flags, ColumnAttributes.UNSIGNED);
}
public void setUnsigned(boolean v) {
flags = ColumnAttributes.set(flags, ColumnAttributes.UNSIGNED, v);
}
}