// Path: src/main/java/org/mentabean/BeanException.java
// public class BeanException extends RuntimeException {
// 
// 	private static final long serialVersionUID = -6402197033079197979L;
// 	
// 	protected final Throwable rootCause;
// 
// 	public BeanException() {
// 		super();
// 		this.rootCause = null;
// 	}
// 
// 	public BeanException(Throwable e) {
// 		super(getMsg(e), e);
// 		Throwable root = getRootCause(e);
// 		this.setStackTrace(root.getStackTrace());
// 
// 		this.rootCause = root == this ? null : root;
// 	}
// 
// 	public BeanException(String msg) {
// 		super(msg);
// 
// 		this.rootCause = null;
// 	}
// 
// 	public BeanException(String msg, Throwable e) {
// 
// 		super(msg, e);
// 		Throwable root = getRootCause(e);
// 		this.setStackTrace(root.getStackTrace());
// 
// 		this.rootCause = root == this ? null : root;
// 	}
// 
// 	private static String getMsg(Throwable t) {
// 
// 		Throwable root = getRootCause(t);
// 
// 		String msg = root.getMessage();
// 
// 		if (msg == null || msg.length() == 0) {
// 
// 			msg = t.getMessage();
// 
// 			if (msg == null || msg.length() == 0) {
// 				return root.getClass().getName();
// 			}
// 		}
// 
// 		return msg;
// 	}
// 
// 	private static Throwable getRootCause(Throwable t) {
// 
// 		Throwable root = t.getCause();
// 
// 		if (root == null) {
// 			return t;
// 		}
// 
// 		while (root.getCause() != null) {
// 
// 			root = root.getCause();
// 		}
// 
// 		return root;
// 
// 	}
// 
// 	@Override
// 	public Throwable getCause() {
// 
// 		return rootCause;
// 	}
// }
// 
// Path: src/main/java/org/mentabean/DBType.java
// public interface DBType<E> {
// 
// 	/**
// 	 * Do what you have to do to get and return this database type from a result set.
// 	 * 
// 	 * @param rset
// 	 *            The result set
// 	 * @param index
// 	 *            The index in the result set
// 	 * @return The value from the result set
// 	 * @throws SQLException
// 	 */
// 	public E getFromResultSet(ResultSet rset, int index) throws SQLException;
// 
// 	/**
// 	 * Do what you have to do to bind a value to a prepared statement.
// 	 * 
// 	 * @param stmt
// 	 *            The prepared statement
// 	 * @param index
// 	 *            The index in the prepared statement
// 	 * @param value
// 	 *            The value to be bound to the prepared statement
// 	 * @throws SQLException
// 	 */
// 	public void bindToStmt(PreparedStatement stmt, int index, E value) throws SQLException;
// 
// 	/**
// 	 * Do what you have to do to get and return this database type from a result set.
// 	 * 
// 	 * @param rset
// 	 *            The result set
// 	 * @param field
// 	 *            The name of the field in the result set
// 	 * @return The value from the result set
// 	 * @throws SQLException
// 	 */
// 	public E getFromResultSet(ResultSet rset, String field) throws SQLException;
// 
// 	/**
// 	 * Return the java type representing this database type.
// 	 * 
// 	 * @return The java type of this database type.
// 	 */
// 	public Class<? extends Object> getTypeClass();
// 
// 	/**
// 	 * Returns whether this type can be NULL in the database. This is used by the session.createTable() method.
// 	 * 
// 	 * @return true if field can be NULL in the database.
// 	 */
// 	public boolean canBeNull();
// 
// 	/**
// 	 * Return the best ANSI type for this database type. This is used by the session.createTable() method.
// 	 * 
// 	 * @return the ANSI type for this database type.
// 	 */
// 	public String getAnsiType();
// 
// }


import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.mentabean.BeanException;
import org.mentabean.DBType;
	@Override
	public String getAnsiType() {
		return "smallint";
	}

	private static Method getFromIdMethod(Class<? extends Enum<?>> enumType) {

		try {

			return enumType.getMethod("fromId", int.class);
		} catch (Exception e) {

			throw new BeanException("Cannot find fromId(int) method from enum class: " + enumType, e);
		}
	}

	private static Method getGetIdMethod(Class<? extends Enum<?>> enumType) {

		try {

			return enumType.getMethod("getId", (Class[]) null);
		} catch (Exception e) {

			throw new BeanException("Cannot find getId() method from enum class: " + enumType, e);
		}
	}

	private Enum<?> fromId(int id) {
		try {
			return (Enum<?>) fromIdMethod.invoke(null, id);
// Path: src/main/java/org/mentabean/BeanException.java
// public class BeanException extends RuntimeException {
// 
// 	private static final long serialVersionUID = -6402197033079197979L;
// 	
// 	protected final Throwable rootCause;
// 
// 	public BeanException() {
// 		super();
// 		this.rootCause = null;
// 	}
// 
// 	public BeanException(Throwable e) {
// 		super(getMsg(e), e);
// 		Throwable root = getRootCause(e);
// 		this.setStackTrace(root.getStackTrace());
// 
// 		this.rootCause = root == this ? null : root;
// 	}
// 
// 	public BeanException(String msg) {
// 		super(msg);
// 
// 		this.rootCause = null;
// 	}
// 
// 	public BeanException(String msg, Throwable e) {
// 
// 		super(msg, e);
// 		Throwable root = getRootCause(e);
// 		this.setStackTrace(root.getStackTrace());
// 
// 		this.rootCause = root == this ? null : root;
// 	}
// 
// 	private static String getMsg(Throwable t) {
// 
// 		Throwable root = getRootCause(t);
// 
// 		String msg = root.getMessage();
// 
// 		if (msg == null || msg.length() == 0) {
// 
// 			msg = t.getMessage();
// 
// 			if (msg == null || msg.length() == 0) {
// 				return root.getClass().getName();
// 			}
// 		}
// 
// 		return msg;
// 	}
// 
// 	private static Throwable getRootCause(Throwable t) {
// 
// 		Throwable root = t.getCause();
// 
// 		if (root == null) {
// 			return t;
// 		}
// 
// 		while (root.getCause() != null) {
// 
// 			root = root.getCause();
// 		}
// 
// 		return root;
// 
// 	}
// 
// 	@Override
// 	public Throwable getCause() {
// 
// 		return rootCause;
// 	}
// }
// 
// Path: src/main/java/org/mentabean/DBType.java
// public interface DBType<E> {
// 
// 	/**
// 	 * Do what you have to do to get and return this database type from a result set.
// 	 * 
// 	 * @param rset
// 	 *            The result set
// 	 * @param index
// 	 *            The index in the result set
// 	 * @return The value from the result set
// 	 * @throws SQLException
// 	 */
// 	public E getFromResultSet(ResultSet rset, int index) throws SQLException;
// 
// 	/**
// 	 * Do what you have to do to bind a value to a prepared statement.
// 	 * 
// 	 * @param stmt
// 	 *            The prepared statement
// 	 * @param index
// 	 *            The index in the prepared statement
// 	 * @param value
// 	 *            The value to be bound to the prepared statement
// 	 * @throws SQLException
// 	 */
// 	public void bindToStmt(PreparedStatement stmt, int index, E value) throws SQLException;
// 
// 	/**
// 	 * Do what you have to do to get and return this database type from a result set.
// 	 * 
// 	 * @param rset
// 	 *            The result set
// 	 * @param field
// 	 *            The name of the field in the result set
// 	 * @return The value from the result set
// 	 * @throws SQLException
// 	 */
// 	public E getFromResultSet(ResultSet rset, String field) throws SQLException;
// 
// 	/**
// 	 * Return the java type representing this database type.
// 	 * 
// 	 * @return The java type of this database type.
// 	 */
// 	public Class<? extends Object> getTypeClass();
// 
// 	/**
// 	 * Returns whether this type can be NULL in the database. This is used by the session.createTable() method.
// 	 * 
// 	 * @return true if field can be NULL in the database.
// 	 */
// 	public boolean canBeNull();
// 
// 	/**
// 	 * Return the best ANSI type for this database type. This is used by the session.createTable() method.
// 	 * 
// 	 * @return the ANSI type for this database type.
// 	 */
// 	public String getAnsiType();
// 
// }


// Path: src/main/java/org/mentabean/type/EnumIdType.java
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.mentabean.BeanException;
import org.mentabean.DBType;

	@Override
	public String getAnsiType() {
		return "smallint";
	}

	private static Method getFromIdMethod(Class<? extends Enum<?>> enumType) {

		try {

			return enumType.getMethod("fromId", int.class);
		} catch (Exception e) {

			throw new BeanException("Cannot find fromId(int) method from enum class: " + enumType, e);
		}
	}

	private static Method getGetIdMethod(Class<? extends Enum<?>> enumType) {

		try {

			return enumType.getMethod("getId", (Class[]) null);
		} catch (Exception e) {

			throw new BeanException("Cannot find getId() method from enum class: " + enumType, e);
		}
	}

	private Enum<?> fromId(int id) {
		try {
			return (Enum<?>) fromIdMethod.invoke(null, id);
		} catch (Exception e) {