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

import java.util.ArrayList;
import org.h2.command.Parser;
import org.h2.message.DbException;
import org.h2.message.Trace;

The base class for all database objects.
/** * The base class for all database objects. */
public abstract class DbObjectBase implements DbObject {
The database.
/** * The database. */
protected Database database;
The trace module.
/** * The trace module. */
protected Trace trace;
The comment (if set).
/** * The comment (if set). */
protected String comment; private int id; private String objectName; private long modificationId; private boolean temporary;
Initialize some attributes of this object.
Params:
  • db – the database
  • objectId – the object id
  • name – the name
  • traceModuleId – the trace module id
/** * Initialize some attributes of this object. * * @param db the database * @param objectId the object id * @param name the name * @param traceModuleId the trace module id */
protected DbObjectBase(Database db, int objectId, String name, int traceModuleId) { this.database = db; this.trace = db.getTrace(traceModuleId); this.id = objectId; this.objectName = name; this.modificationId = db.getModificationMetaId(); }
Build a SQL statement to re-create this object.
Returns:the SQL statement
/** * Build a SQL statement to re-create this object. * * @return the SQL statement */
@Override public abstract String getCreateSQL();
Build a SQL statement to drop this object.
Returns:the SQL statement
/** * Build a SQL statement to drop this object. * * @return the SQL statement */
@Override public abstract String getDropSQL();
Remove all dependent objects and free all resources (files, blocks in files) of this object.
Params:
  • session – the session
/** * Remove all dependent objects and free all resources (files, blocks in * files) of this object. * * @param session the session */
@Override public abstract void removeChildrenAndResources(Session session);
Check if this object can be renamed. System objects may not be renamed.
/** * Check if this object can be renamed. System objects may not be renamed. */
@Override public abstract void checkRename();
Tell the object that is was modified.
/** * Tell the object that is was modified. */
public void setModified() { this.modificationId = database == null ? -1 : database.getNextModificationMetaId(); } public long getModificationId() { return modificationId; } protected void setObjectName(String name) { objectName = name; } @Override public String getSQL(boolean alwaysQuote) { return Parser.quoteIdentifier(objectName, alwaysQuote); } @Override public StringBuilder getSQL(StringBuilder builder, boolean alwaysQuote) { return Parser.quoteIdentifier(builder, objectName, alwaysQuote); } @Override public ArrayList<DbObject> getChildren() { return null; } @Override public Database getDatabase() { return database; } @Override public int getId() { return id; } @Override public String getName() { return objectName; }
Set the main attributes to null to make sure the object is no longer used.
/** * Set the main attributes to null to make sure the object is no longer * used. */
protected void invalidate() { if (id == -1) { throw DbException.throwInternalError(); } setModified(); id = -1; database = null; trace = null; objectName = null; } public final boolean isValid() { return id != -1; } @Override public void rename(String newName) { checkRename(); objectName = newName; setModified(); } @Override public boolean isTemporary() { return temporary; } @Override public void setTemporary(boolean temporary) { this.temporary = temporary; } @Override public void setComment(String comment) { this.comment = comment; } @Override public String getComment() { return comment; } @Override public String toString() { return objectName + ":" + id + ":" + super.toString(); } }