package org.h2.table;
import org.h2.command.Parser;
import org.h2.command.ddl.CreateSynonymData;
import org.h2.engine.Session;
import org.h2.message.DbException;
import org.h2.message.Trace;
import org.h2.schema.Schema;
import org.h2.schema.SchemaObjectBase;
public class TableSynonym extends SchemaObjectBase {
private CreateSynonymData data;
private Table synonymFor;
public TableSynonym(CreateSynonymData data) {
super(data.schema, data.id, data.synonymName, Trace.TABLE);
this.data = data;
}
public Table getSynonymFor() {
return synonymFor;
}
public void updateData(CreateSynonymData data) {
this.data = data;
}
@Override
public int getType() {
return SYNONYM;
}
@Override
public String getCreateSQLForCopy(Table table, String quotedName) {
return synonymFor.getCreateSQLForCopy(table, quotedName);
}
@Override
public void rename(String newName) { throw DbException.getUnsupportedException("SYNONYM"); }
@Override
public void removeChildrenAndResources(Session session) {
synonymFor.removeSynonym(this);
database.removeMeta(session, getId());
}
@Override
public String getCreateSQL() {
StringBuilder builder = new StringBuilder("CREATE SYNONYM ");
getSQL(builder, true).append(" FOR ");
Parser.quoteIdentifier(builder, data.synonymForSchema.getName(), true).append('.');
Parser.quoteIdentifier(builder, data.synonymFor, true);
return builder.toString();
}
@Override
public String getDropSQL() {
StringBuilder builder = new StringBuilder("DROP SYNONYM ");
return getSQL(builder, true).toString();
}
@Override
public void checkRename() {
throw DbException.getUnsupportedException("SYNONYM");
}
public String getSynonymForName() {
return data.synonymFor;
}
public Schema getSynonymForSchema() {
return data.synonymForSchema;
}
public boolean isInvalid() {
return synonymFor.isValid();
}
public void updateSynonymFor() {
if (synonymFor != null) {
synonymFor.removeSynonym(this);
}
synonymFor = data.synonymForSchema.getTableOrView(data.session, data.synonymFor);
synonymFor.addSynonym(this);
}
}