/*
 * Copyright 2004-2023 H2 Group. Multiple-Licensed under the MPL 2.0,
 * and the EPL 1.0 (https://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.schema;

import org.h2.engine.DbObject;

/**
 * Any database object that is stored in a schema.
 */
public abstract class SchemaObject extends DbObject {

    private final Schema schema;

    /**
     * Initialize some attributes of this object.
     *
     * @param newSchema the schema
     * @param id the object id
     * @param name the name
     * @param traceModuleId the trace module id
     */
    protected SchemaObject(Schema newSchema, int id, String name, int traceModuleId) {
        super(newSchema.getDatabase(), id, name, traceModuleId);
        this.schema = newSchema;
    }

    /**
     * Get the schema in which this object is defined
     *
     * @return the schema
     */
    public final Schema getSchema() {
        return schema;
    }

    @Override
    public String getSQL(int sqlFlags) {
        return getSQL(new StringBuilder(), sqlFlags).toString();
    }

    @Override
    public StringBuilder getSQL(StringBuilder builder, int sqlFlags) {
        schema.getSQL(builder, sqlFlags).append('.');
        return super.getSQL(builder, sqlFlags);
    }

    /**
     * Check whether this is a hidden object that doesn't appear in the meta
     * data and in the script, and is not dropped on DROP ALL OBJECTS.
     *
     * @return true if it is hidden
     */
    public boolean isHidden() {
        return false;
    }

}
