package org.reldb.rel.v0.storage.catalog;
import org.reldb.rel.exceptions.ExceptionSemantic;
import org.reldb.rel.v0.generator.Generator;
import org.reldb.rel.v0.generator.SelectAttributes;
import org.reldb.rel.v0.storage.RelDatabase;
import org.reldb.rel.v0.storage.relvars.RelvarGlobal;
import org.reldb.rel.v0.storage.relvars.RelvarHeading;
import org.reldb.rel.v0.storage.relvars.RelvarMetadata;
import org.reldb.rel.v0.types.*;
import org.reldb.rel.v0.types.builtin.TypeBoolean;
import org.reldb.rel.v0.types.builtin.TypeCharacter;
import org.reldb.rel.v0.types.builtin.TypeInteger;
public class RelvarCatalogMetadata extends RelvarMetadata {
public static final long serialVersionUID = 0;
// This must parallel the ValueTuple created by getCatalogTupleIterator() in RelDatabase.
static Heading getNewHeading(Generator generator) {
Heading heading = new Heading();
heading.add("Name", TypeCharacter.getInstance());
heading.add("Definition", TypeCharacter.getInstance());
heading.add("Owner", TypeCharacter.getInstance());
heading.add("CreationSequence", TypeInteger.getInstance());
heading.add("isVirtual", TypeBoolean.getInstance());
heading.add("isExternal", TypeBoolean.getInstance());
heading.add("Attributes", generator.findType("NonScalar"));
Heading keyHeading = new Heading();
keyHeading.add("Name", TypeCharacter.getInstance());
Heading keysHeading = new Heading();
keysHeading.add("Attributes", new TypeRelation(keyHeading));
heading.add("Keys", new TypeRelation(keysHeading));
return heading;
}
static RelvarHeading getNewKeyDefinition(Generator generator) {
SelectAttributes attributes = new SelectAttributes();
attributes.add("Name");
RelvarHeading keyDefinition = new RelvarHeading(getNewHeading(generator));
keyDefinition.addKey(attributes);
return keyDefinition;
}
public RelvarCatalogMetadata(RelDatabase database, Generator generator) {
super(database, getNewKeyDefinition(generator), RelDatabase.systemOwner);
}
public RelvarHeading getHeadingDefinition(RelDatabase database) {
return getNewKeyDefinition(new Generator(database, System.out));
}
public RelvarGlobal getRelvar(String name, RelDatabase database) {
return new RelvarCatalog(database);
}
public void dropRelvar(RelDatabase database) {
throw new ExceptionSemantic("RS0198: The " + Catalog.relvarCatalog + " relvar may not be dropped.");
}
}