class FirebirdDatabase extends AbstractJdbcDatabase {

    public FirebirdDatabase() {
        super.setCurrentDateTimeFunction("CURRENT_TIMESTAMP");
        super.sequenceNextValueFunction="NEXT VALUE FOR %s";
    }

    @Override
    public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
        return conn.getDatabaseProductName().startsWith("Firebird");
    }

    @Override
    public String getDefaultDriver(String url) {
        if (url.startsWith("jdbc:firebirdsql")) {
            return "org.firebirdsql.jdbc.FBDriver";
        }
        return null;
    }

    @Override
    public int getPriority() {
        return PRIORITY_DEFAULT;
    }
    
    @Override
    public String getShortName() {
        return "firebird";
    }

    @Override
    public Integer getDefaultPort() {
        return 3050;
    }

    @Override
    protected String getDefaultDatabaseProductName() {
        return "Firebird";
    }

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

    @Override
    public boolean supportsInitiallyDeferrableColumns() {
        return false;
    }

    @Override
    public boolean supportsTablespaces() {
        return false;
    }


    @Override
    public boolean supportsDDLInTransaction() {
        return false;
    }

    @Override
    public boolean isSystemObject(DatabaseObject example) {<FILL_FUNCTION_BODY>}

    @Override
    public boolean supportsAutoIncrement() {
        return false;
    }

    @Override
    public boolean supports(Class<? extends DatabaseObject> object) {
        if (Schema.class.isAssignableFrom(object)) {
            return false;
        }
        if (Catalog.class.isAssignableFrom(object)) {
            return false;
        }
        return super.supports(object);
    }

    @Override
    public boolean supportsSchemas() {
        return false;
    }

    @Override
    public boolean supportsCatalogs() {
        return false;
    }

    @Override
    public boolean supportsDropTableCascadeConstraints() {
        return false;
    }

    @Override
    public String correctObjectName(String objectName, Class<? extends DatabaseObject> objectType) {
        if (objectName == null) {
            return null;
        }
        return objectName.toUpperCase(Locale.US).trim();
    }

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

    @Override
    public String getConnectionCatalogName() {
        return "DEFAULT";
    }
}

        if ((example instanceof Table) && example.getName().startsWith("RDB$")) {
            return true;
        }
        return super.isSystemObject(example);    //To change body of overridden methods use File | Settings | File Templates.
    
<methods>public non-sealed void <init>() ,public final void addReservedWords(Collection<java.lang.String>) ,public void close() throws liquibase.exception.DatabaseException,public void commit() throws liquibase.exception.DatabaseException,public java.lang.String correctObjectName(java.lang.String, Class<? extends liquibase.structure.DatabaseObject>) ,public liquibase.CatalogAndSchema correctSchema(java.lang.String, java.lang.String) ,public liquibase.CatalogAndSchema correctSchema(liquibase.CatalogAndSchema) ,public boolean createsIndexesForForeignKeys() ,public boolean dataTypeIsNotModifiable(java.lang.String) ,public boolean disableForeignKeyChecks() throws liquibase.exception.DatabaseException,public boolean doesTagExist(java.lang.String) throws liquibase.exception.DatabaseException,public void dropDatabaseObjects(liquibase.CatalogAndSchema) throws liquibase.exception.LiquibaseException,public void enableForeignKeyChecks() throws liquibase.exception.DatabaseException,public boolean equals(java.lang.Object) ,public java.lang.String escapeColumnName(java.lang.String, java.lang.String, java.lang.String, java.lang.String) ,public java.lang.String escapeColumnName(java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean) ,public java.lang.String escapeColumnNameList(java.lang.String) ,public java.lang.String escapeConstraintName(java.lang.String) ,public java.lang.String escapeDataTypeName(java.lang.String) ,public java.lang.String escapeIndexName(java.lang.String, java.lang.String, java.lang.String) ,public java.lang.String escapeObjectName(java.lang.String, java.lang.String, java.lang.String, Class<? extends liquibase.structure.DatabaseObject>) ,public java.lang.String escapeObjectName(java.lang.String, Class<? extends liquibase.structure.DatabaseObject>) ,public java.lang.String escapeSequenceName(java.lang.String, java.lang.String, java.lang.String) ,public java.lang.String escapeStringForDatabase(java.lang.String) ,public java.lang.String escapeTableName(java.lang.String, java.lang.String, java.lang.String) ,public java.lang.String escapeViewName(java.lang.String, java.lang.String, java.lang.String) ,public void execute(liquibase.statement.SqlStatement[], List<liquibase.sql.visitor.SqlVisitor>) throws liquibase.exception.LiquibaseException,public void executeRollbackStatements(liquibase.statement.SqlStatement[], List<liquibase.sql.visitor.SqlVisitor>) throws liquibase.exception.LiquibaseException,public void executeRollbackStatements(liquibase.change.Change, List<liquibase.sql.visitor.SqlVisitor>) throws liquibase.exception.LiquibaseException,public void executeStatements(liquibase.change.Change, liquibase.changelog.DatabaseChangeLog, List<liquibase.sql.visitor.SqlVisitor>) throws liquibase.exception.LiquibaseException,public java.lang.String generateDatabaseFunctionValue(liquibase.statement.DatabaseFunction) ,public java.lang.String generatePrimaryKeyName(java.lang.String) ,public java.lang.Object get(java.lang.String) ,public boolean getAutoCommitMode() ,public java.lang.String getAutoIncrementClause(java.math.BigInteger, java.math.BigInteger, java.lang.String, java.lang.Boolean) ,public transient java.lang.String getConcatSql(java.lang.String[]) ,public liquibase.database.DatabaseConnection getConnection() ,public liquibase.structure.DatabaseObject[] getContainingObjects() ,public java.lang.String getCurrentDateTimeFunction() ,public int getDataTypeMaxParameters(java.lang.String) ,public java.lang.String getDatabaseChangeLogLockTableName() ,public java.lang.String getDatabaseChangeLogTableName() ,public int getDatabaseMajorVersion() throws liquibase.exception.DatabaseException,public int getDatabaseMinorVersion() throws liquibase.exception.DatabaseException,public java.lang.String getDatabaseProductName() ,public java.lang.String getDatabaseProductVersion() throws liquibase.exception.DatabaseException,public List<liquibase.statement.DatabaseFunction> getDateFunctions() ,public java.lang.String getDateLiteral(java.lang.String) ,public java.lang.String getDateLiteral(java.sql.Date) ,public java.lang.String getDateLiteral(java.util.Date) ,public java.lang.String getDateTimeLiteral(java.sql.Timestamp) ,public java.lang.String getDefaultCatalogName() ,public int getDefaultFractionalDigitsForTimestamp() ,public java.lang.Integer getDefaultScaleForNativeDataType(java.lang.String) ,public liquibase.CatalogAndSchema getDefaultSchema() ,public java.lang.String getDefaultSchemaName() ,public java.lang.Integer getFetchSize() ,public java.lang.String getJdbcCatalogName(liquibase.CatalogAndSchema) ,public final java.lang.String getJdbcCatalogName(liquibase.structure.core.Schema) ,public java.lang.String getJdbcSchemaName(liquibase.CatalogAndSchema) ,public final java.lang.String getJdbcSchemaName(liquibase.structure.core.Schema) ,public java.lang.String getLineComment() ,public java.lang.String getLiquibaseCatalogName() ,public java.lang.String getLiquibaseSchemaName() ,public java.lang.String getLiquibaseTablespaceName() ,public int getMaxFractionalDigitsForTimestamp() ,public java.lang.String getName() ,public liquibase.database.ObjectQuotingStrategy getObjectQuotingStrategy() ,public boolean getOutputDefaultCatalog() ,public boolean getOutputDefaultSchema() ,public liquibase.changelog.RanChangeSet getRanChangeSet(liquibase.changelog.ChangeSet) throws liquibase.exception.DatabaseException, liquibase.exception.DatabaseHistoryException,public List<liquibase.changelog.RanChangeSet> getRanChangeSetList() throws liquibase.exception.DatabaseException,public java.util.Date getRanDate(liquibase.changelog.ChangeSet) throws liquibase.exception.DatabaseException, liquibase.exception.DatabaseHistoryException,public liquibase.changelog.ChangeSet.RunStatus getRunStatus(liquibase.changelog.ChangeSet) throws liquibase.exception.DatabaseException, liquibase.exception.DatabaseHistoryException,public liquibase.CatalogAndSchema.CatalogAndSchemaCase getSchemaAndCatalogCase() ,public liquibase.CatalogAndSchema getSchemaFromJdbcInfo(java.lang.String, java.lang.String) ,public java.lang.String getSystemSchema() ,public java.lang.String getTimeLiteral(java.sql.Time) ,public java.lang.String getViewDefinition(liquibase.CatalogAndSchema, java.lang.String) throws liquibase.exception.DatabaseException,public int hashCode() ,public boolean isAutoCommit() throws liquibase.exception.DatabaseException,public boolean isCaseSensitive() ,public boolean isDefaultCatalog(java.lang.String) ,public boolean isDefaultSchema(java.lang.String, java.lang.String) ,public boolean isFunction(java.lang.String) ,public boolean isLiquibaseObject(liquibase.structure.DatabaseObject) ,public boolean isReservedWord(java.lang.String) ,public boolean isSafeToRunUpdate() throws liquibase.exception.DatabaseException,public boolean isSystemObject(liquibase.structure.DatabaseObject) ,public boolean isSystemView(liquibase.CatalogAndSchema, java.lang.String) ,public boolean jdbcCallsCatalogsSchemas() ,public void markChangeSetExecStatus(liquibase.changelog.ChangeSet, liquibase.changelog.ChangeSet.ExecType) throws liquibase.exception.DatabaseException,public java.util.Date parseDate(java.lang.String) throws liquibase.exception.DateParseException,public java.lang.String quoteObject(java.lang.String, Class<? extends liquibase.structure.DatabaseObject>) ,public void removeRanStatus(liquibase.changelog.ChangeSet) throws liquibase.exception.DatabaseException,public boolean requiresExplicitNullForColumns() ,public boolean requiresPassword() ,public boolean requiresUsername() ,public void resetInternalState() ,public void rollback() throws liquibase.exception.DatabaseException,public void saveRollbackStatement(liquibase.change.Change, List<liquibase.sql.visitor.SqlVisitor>, java.io.Writer) throws java.io.IOException, liquibase.exception.LiquibaseException,public void saveStatements(liquibase.change.Change, List<liquibase.sql.visitor.SqlVisitor>, java.io.Writer) throws java.io.IOException,public liquibase.database.AbstractJdbcDatabase set(java.lang.String, java.lang.Object) ,public void setAutoCommit(boolean) throws liquibase.exception.DatabaseException,public void setCanCacheLiquibaseTableInfo(boolean) ,public void setCaseSensitive(java.lang.Boolean) ,public void setConnection(liquibase.database.DatabaseConnection) ,public void setCurrentDateTimeFunction(java.lang.String) ,public void setDatabaseChangeLogLockTableName(java.lang.String) ,public void setDatabaseChangeLogTableName(java.lang.String) ,public void setDefaultCatalogName(java.lang.String) ,public void setDefaultSchemaName(java.lang.String) ,public void setLiquibaseCatalogName(java.lang.String) ,public void setLiquibaseSchemaName(java.lang.String) ,public void setLiquibaseTablespaceName(java.lang.String) ,public void setObjectQuotingStrategy(liquibase.database.ObjectQuotingStrategy) ,public void setOutputDefaultCatalog(boolean) ,public void setOutputDefaultSchema(boolean) ,public boolean supportsAutoIncrement() ,public boolean supportsBatchUpdates() throws liquibase.exception.DatabaseException,public boolean supportsCatalogInObjectName(Class<? extends liquibase.structure.DatabaseObject>) ,public boolean supportsCatalogs() ,public boolean supportsDDLInTransaction() ,public boolean supportsDropTableCascadeConstraints() ,public boolean supportsForeignKeyDisable() ,public boolean supportsNotNullConstraintNames() ,public boolean supportsPrimaryKeyNames() ,public boolean supportsRestrictForeignKeys() ,public boolean supportsSchemas() ,public boolean supportsSequences() ,public void tag(java.lang.String) throws liquibase.exception.DatabaseException,public java.lang.String toString() ,public java.lang.String unescapeDataTypeName(java.lang.String) ,public java.lang.String unescapeDataTypeString(java.lang.String) ,public liquibase.exception.ValidationErrors validate() <variables>private static final java.util.regex.Pattern CREATE_VIEW_AS_PATTERN,private static final java.lang.String CREATE_VIEW_AS_REGEX,private static final java.util.regex.Pattern DATE_ONLY_PATTERN,private static final java.lang.String DATE_ONLY_REGEX,private static final java.util.regex.Pattern DATE_TIME_PATTERN,private static final java.lang.String DATE_TIME_REGEX,private static final int DEFAULT_MAX_TIMESTAMP_FRACTIONAL_DIGITS,private static final int FETCH_SIZE,private static final java.util.regex.Pattern NAME_WITH_ASC_PATTERN,private static final java.lang.String NAME_WITH_ASC_REGEX,private static final java.util.regex.Pattern NAME_WITH_DESC_PATTERN,private static final java.lang.String NAME_WITH_DESC_REGEX,private static final java.util.regex.Pattern NON_WORD_PATTERN,private static final java.lang.String NON_WORD_REGEX,private static final java.util.regex.Pattern STARTS_WITH_NUMBER_PATTERN,private static final java.lang.String STARTS_WITH_NUMBER_REGEX,private static final java.util.regex.Pattern TIMESTAMP_PATTERN,private static final java.lang.String TIMESTAMP_REGEX,private static final java.util.regex.Pattern TIME_PATTERN,private static final java.lang.String TIME_REGEX,private final Map<java.lang.String,java.lang.Object> attributes,private boolean canCacheLiquibaseTableInfo,protected java.lang.Boolean caseSensitive,private liquibase.database.DatabaseConnection connection,protected java.lang.String currentDateTimeFunction,private java.lang.String databaseChangeLogLockTableName,private java.lang.String databaseChangeLogTableName,protected List<liquibase.statement.DatabaseFunction> dateFunctions,protected java.math.BigInteger defaultAutoIncrementBy,protected java.math.BigInteger defaultAutoIncrementStartWith,protected java.lang.String defaultCatalogName,private boolean defaultCatalogSet,protected java.lang.String defaultSchemaName,private java.lang.String liquibaseCatalogName,private java.lang.String liquibaseSchemaName,private java.lang.String liquibaseTablespaceName,private boolean outputDefaultCatalog,private boolean outputDefaultSchema,private java.lang.Boolean previousAutoCommit,protected liquibase.database.ObjectQuotingStrategy quotingStrategy,private final Set<java.lang.String> reservedWords,protected java.lang.String sequenceCurrentValueFunction,protected java.lang.String sequenceNextValueFunction,protected List<java.lang.String> unmodifiableDataTypes,protected java.lang.Boolean unquotedObjectsAreUppercased