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); } }