package org.reldb.rel.v0.storage.relvars;
import org.reldb.rel.exceptions.*;
import org.reldb.rel.v0.generator.Generator;
import org.reldb.rel.v0.generator.Slot;
import org.reldb.rel.v0.storage.RelDatabase;
import org.reldb.rel.v0.storage.TransactionRunner;
import org.reldb.rel.v0.storage.ValueRelationRelvar;
import org.reldb.rel.v0.types.*;
import org.reldb.rel.v0.values.*;
import org.reldb.rel.v0.vm.instructions.relvar.*;
import com.sleepycat.je.*;
public abstract class RelvarGlobal implements Slot, Relvar {
private RelDatabase database;
private String name;
public RelvarGlobal(String name, RelDatabase database) {
this.name = name;
this.database = database;
}
public String getName() {
return name;
}
public RelDatabase getDatabase() {
return database;
}
RelvarMetadata getRelvarMetadata() {
try {
return (RelvarMetadata)(new TransactionRunner() {
public Object run(Transaction txn) throws Throwable {
return database.getRelvarMetadata(txn, name);
}
}).execute(database);
} catch (Throwable de) {
throw new ExceptionFatal("RS0367: getRelvarMetadata failed: " + de);
}
}
public RelvarHeading getHeadingDefinition() {
return getRelvarMetadata().getHeadingDefinition(database);
}
public Type getType() {
return new TypeRelation(getHeadingDefinition().getHeading());
}
public ValueRelation getValue(Generator generator) {
return new ValueRelationRelvar(generator, this);
}
public void compileGet(Generator generator) {
generator.compileInstruction(new OpRelvarGlobalGet(name, getHeadingDefinition()));
}
public void compileSet(Generator generator) {
generator.compileInstruction(new OpRelvarGlobalSet(name, getHeadingDefinition()));
}
public void compileInitialise(Generator generator) {
generator.compileInstruction(new OpRelvarGlobalSet(getName(), getHeadingDefinition()));
}
public boolean isParameter() {
return false;
}
}