package asandatabasebrowser.model;

import java.util.ArrayList;

/**
 * カラム情報<<entity>>
 */
public class ColumnInfo implements IColumnInfo {
	public String tableCatalog;		// テーブルカタログ (null の可能性がある) 
	public String tableSchema;		// テーブルスキーマ (null の可能性がある) 
	public String tableName;		// テーブル名 
	public String columnName;		// 列名 
	public short  dataType;			// java.sql.Types からの SQL の型 
	public String typeName;			// データソース依存の型名。UDT の場合、型名は完全指定 
	public int    columnSize;		// 列サイズ。char や date の型については最大文字数、numeric や decimal の型については精度 
	public int    decimalDigits;	// 小数点以下の桁数 
	public int    numPrecRadix;		// 基数 (通常は、10 または 2 のどちらか) 
	public int    nullable;			// NULL は許されるか
									// columnNoNulls - NULL 値を許さない可能性がある 
									// columnNullable - 必ず NULL 値を許す 
									// columnNullableUnknown - NULL 値を許すかどうかは不明 
	public String remarks;			// コメント記述列 (null の可能性がある) 
	public String columnDefault;	// デフォルト値 (null の可能性がある) 
	public int	  sqlDataType;		// 未使用
	public int 	  sqlDatetimeSub;	// 未使用
	public int    charOctetLength;	// char の型については列の最大バイト数 
	public int    ordinalPosition;	// テーブル中の列のインデックス (1 から始まる) 
	public String isNullable;		// "NO" は、列は決して NULL 値を許さないことを意味する。
									// "YES" は NULL 値を許す可能性があることを意味する。
									// 空の文字列は不明であることを意味する 
	public String scopeCatalog;		// 参照属性のスコープであるテーブルのカタログ (DATA_TYPE が REF でない場合は null) 
	public String scopeSchema;		// 参照属性のスコープであるテーブルのスキーマ (DATA_TYPE が REF でない場合は null) 
	public String scopeTable;		// 参照属性のスコープであるテーブル名 (DATA_TYPE が REF でない場合は null) 
	public short  sourceDataType;	// 個別の型またはユーザ生成 Ref 型、java.sql.Types の SQL 型のソースの型 
									// (DATA_TYPE が DISTINCT またはユーザ生成 REF でない場合は null) 
	public ArrayList others;
	/** カラム情報を生成する。for JDK1.4later */
	public ColumnInfo(
				String tableCatalog,
				String tableSchema,
				String tableName,
				String columnName,
				short  dataType,
				String typeName,
				int    columnSize,
				int    decimalDigits,
				int    numPrecRadix,
				int    nullable,
				String remarks,
				String columnDefault,
				int	   sqlDataType,
				int    sqlDatetimeSub,
				int    charOctetLength,
				int    ordinalPosition,
				String isNullable,
				ArrayList others
		) {
		this.tableCatalog		= tableCatalog;
		this.tableSchema		= tableSchema;
		this.tableName			= tableName;
		this.columnName			= columnName;
		this.dataType			= dataType;
		this.typeName			= typeName;
		this.columnSize			= columnSize;
		this.decimalDigits		= decimalDigits;
		this.numPrecRadix		= numPrecRadix;
		this.nullable			= nullable;
		this.remarks			= remarks;
		this.columnDefault		= columnDefault;
		this.sqlDataType 		= sqlDataType;		// 未使用
		this.sqlDatetimeSub 	= sqlDatetimeSub;	// 未使用
		this.charOctetLength	= charOctetLength;
		this.ordinalPosition	= ordinalPosition;
		this.isNullable			= isNullable;
		this.others = others;
	}
	/** カラム情報を生成する。for JDK1.4later */
	public ColumnInfo(
				String tableCatalog,
				String tableSchema,
				String tableName,
				String columnName,
				short  dataType,
				String typeName,
				int    columnSize,
				int    decimalDigits,
				int    numPrecRadix,
				int    nullable,
				String remarks,
				String columnDefault,
				int    charOctetLength,
				int    ordinalPosition,
				String isNullable,
				String scopeCatalog,
				String scopeSchema,
				String scopeTable,
				short  sourceDataType
		) {
		this.tableCatalog		= tableCatalog;
		this.tableSchema		= tableSchema;
		this.tableName			= tableName;
		this.columnName			= columnName;
		this.dataType			= dataType;
		this.typeName			= typeName;
		this.columnSize			= columnSize;
		this.decimalDigits		= decimalDigits;
		this.numPrecRadix		= numPrecRadix;
		this.nullable			= nullable;
		this.remarks			= remarks;
		this.columnDefault		= columnDefault;
		this.charOctetLength	= charOctetLength;
		this.ordinalPosition	= ordinalPosition;
		this.isNullable			= isNullable;
		this.scopeCatalog		= scopeCatalog;
		this.scopeSchema		= scopeSchema;
		this.scopeTable			= scopeTable;
		this.sourceDataType		= sourceDataType;
	}
	/**  for JDK1.3 */
	public ColumnInfo(
				String tableCatalog,
				String tableSchema,
				String tableName,
				String columnName,
				short  dataType,
				String typeName,
				int    columnSize,
				int    decimalDigits,
				int    numPrecRadix,
				int    nullable,
				String remarks,
				String columnDefault,
				int    charOctetLength,
				int    ordinalPosition,
				String isNullable) {
		this(tableCatalog, tableSchema, tableName, columnName,
			dataType, typeName, columnSize, decimalDigits, numPrecRadix,
			nullable, remarks, columnDefault, charOctetLength, ordinalPosition, isNullable,
			null, null, null, (short)-9999);
	}
	public String toString() { return columnName; }
	public String detail() {
		return  "tableCatalog       ="+tableCatalog+"\n"+
				"tableSchema        ="+tableSchema+"\n"+
				"tableName          ="+tableName+"\n"+
				"columnName         ="+columnName+"\n"+
				"dataType           ="+dataType+"\n"+
				"typeName           ="+typeName+"\n"+
				"columnSize         ="+columnSize+"\n"+
				"decimalDigits      ="+decimalDigits+"\n"+
				"numPrecRadix       ="+numPrecRadix+"\n"+
				"nullable           ="+nullable+"\n"+
				"remarks            ="+remarks+"\n"+
				"columnDefault      ="+columnDefault+"\n"+
				"charOctetLength    ="+charOctetLength+"\n"+
				"ordinalPosition    ="+ordinalPosition+"\n"+
				"isNullable         ="+isNullable+"\n"+
				"scopeCatalog       ="+scopeCatalog+"\n"+
				"scopeSchema        ="+scopeSchema+"\n"+
				"scopeTable         ="+scopeTable+"\n"+
				"sourceDataType     ="+sourceDataType+"\n";
	}
//	/**
//	 * 型の文字列を返す。
//	 * "DECIMAL(7,2)" "VARCHAR2(80)" "SMALLINT NOT NULL" など
//	 * @return
//	 */
//	public String getTypeStr() {
//        String typestr = typeName;
//        if (columnSize != 0) {
//			typestr += "("+columnSize+
//			(decimalDigits != 0 ? (", "+decimalDigits) : "")
//			+")";
//		}
//		typestr += "YES".equals(isNullable) ? "" : " NOT NULL";
//		return typestr;
//	}
}


