class DB2Database extends AbstractDb2Database {

	@Override
	public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
		return conn.getDatabaseProductName().startsWith("DB2")
				&& !StringUtil.startsWith(conn.getDatabaseProductVersion(), "DSN");
	}

	@Override
	public String getShortName() {
		return "db2";
	}

	/**
	 * Checks if the database supports boolean data type columns. This is true for versions >= 11.1.1.1.
	 *
	 * @return true if boolean data type columns are supported, false otherwise
	 */
	public boolean supportsBooleanDataType() {
		if (getConnection() == null)
			return false; /// assume not;
		try {

			final Integer fixPack = getDb2FixPack();

			if (fixPack == null)
				throw new DatabaseException("Error getting fix pack number");

			return getDatabaseMajorVersion() > 11
                                || getDatabaseMajorVersion() == 11 && ( getDatabaseMinorVersion() == 1 && fixPack.intValue() >= 1 || getDatabaseMinorVersion() > 1 );

		} catch (final DatabaseException e) {
			return false; // assume not
		}
	}

	private Integer getDb2FixPack() {<FILL_FUNCTION_BODY>}

	@Override
	protected String getDefaultDatabaseProductName() {
		return "DB2/LUW";
	}

	@Override
	public boolean supportsCreateIfNotExists(Class<? extends DatabaseObject> type) {
		return type.isAssignableFrom(Table.class);
	}

	@Override
	public boolean supportsDatabaseChangeLogHistory() {
		return true;
	}
}

		if (getConnection() == null || getConnection() instanceof OfflineConnection)
			return null;
		try {
			return Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForObject(
					new RawSqlStatement("SELECT fixpack_num FROM TABLE (sysproc.env_get_inst_info()) as INSTANCEINFO"),
					Integer.class);
		} catch (final Exception e) {
			Scope.getCurrentScope().getLog(getClass()).info("Error getting fix pack number", e);
		}
		return null;
	
<methods>public void <init>() ,public java.lang.String generatePrimaryKeyName(java.lang.String) ,public java.lang.String getDateLiteral(java.lang.String) ,public java.lang.String getDefaultCatalogName() ,public java.lang.String getDefaultDriver(java.lang.String) ,public java.lang.Integer getDefaultPort() ,public java.lang.String getJdbcCatalogName(liquibase.CatalogAndSchema) ,public java.lang.String getJdbcSchemaName(liquibase.CatalogAndSchema) ,public int getMaxFractionalDigitsForTimestamp() ,public int getPriority() ,public liquibase.CatalogAndSchema.CatalogAndSchemaCase getSchemaAndCatalogCase() ,public liquibase.CatalogAndSchema getSchemaFromJdbcInfo(java.lang.String, java.lang.String) ,public java.lang.String getViewDefinition(liquibase.CatalogAndSchema, java.lang.String) throws liquibase.exception.DatabaseException,public boolean isSystemObject(liquibase.structure.DatabaseObject) ,public boolean jdbcCallsCatalogsSchemas() ,public java.util.Date parseDate(java.lang.String) throws liquibase.exception.DateParseException,public boolean supports(Class<? extends liquibase.structure.DatabaseObject>) ,public boolean supportsCatalogs() ,public boolean supportsInitiallyDeferrableColumns() ,public boolean supportsSchemas() ,public boolean supportsTablespaces() <variables>private static final int MAX_DB2_TIMESTAMP_FRACTIONAL_DIGITS