Class ConglomerateDescriptor

All Implemented Interfaces:
Dependable, Provider

public final class ConglomerateDescriptor extends UniqueTupleDescriptor implements Provider
The ConglomerateDescriptor class is used to get information about conglomerates for the purpose of optimization. A ConglomerateDescriptor can map to a base table, an index or a index backing a constraint. Multiple ConglomerateDescriptors can map to a single underlying store conglomerate, such as when multiple index definitions share a physical file. NOTE: The language module does not have to know much about conglomerates with this architecture. To get the cost of using a conglomerate, all it has to do is pass the ConglomerateDescriptor to the access methods, along with the predicate. What the access methods need from a ConglomerateDescriptor remains to be seen.
Version:
0.1
  • Field Details

    • conglomerateNumber

      private long conglomerateNumber
    • name

      private String name
    • columnNames

      private transient String[] columnNames
    • indexable

      private final boolean indexable
    • forConstraint

      private final boolean forConstraint
    • indexRowGenerator

      private final IndexRowGenerator indexRowGenerator
    • uuid

      private final UUID uuid
    • tableID

      private final UUID tableID
    • schemaID

      private final UUID schemaID
  • Constructor Details

    • ConglomerateDescriptor

      ConglomerateDescriptor(DataDictionary dataDictionary, long conglomerateNumber, String name, boolean indexable, IndexRowGenerator indexRowGenerator, boolean forConstraint, UUID uuid, UUID tableID, UUID schemaID)
      Constructor for a conglomerate descriptor.
      Parameters:
      dataDictionary - The data dictionary that this descriptor lives in
      conglomerateNumber - The number for the conglomerate we're interested in
      name - The name of the conglomerate, if any
      indexable - TRUE means the conglomerate is indexable, FALSE means it isn't
      indexRowGenerator - The descriptor of the index if it's not a heap
      forConstraint - TRUE means the conglomerate is an index backing up a constraint, FALSE means it isn't
      uuid - UUID for this conglomerate
      tableID - UUID for the table that this conglomerate belongs to
      schemaID - UUID for the schema that this conglomerate belongs to
  • Method Details

    • getConglomerateNumber

      public long getConglomerateNumber()
      Gets the number for the conglomerate.
      Returns:
      A long identifier for the conglomerate
    • setConglomerateNumber

      public void setConglomerateNumber(long conglomerateNumber)
      Set the conglomerate number. This is useful when swapping conglomerates, like for bulkInsert.
      Parameters:
      conglomerateNumber - The new conglomerate number.
    • getUUID

      public UUID getUUID()
      Gets the UUID String for the conglomerate.
      Specified by:
      getUUID in class UniqueTupleDescriptor
      Returns:
      The UUID String for the conglomerate
    • getTableID

      public UUID getTableID()
      Gets the UUID for the table that the conglomerate belongs to.
      Returns:
      The UUID String for the conglomerate
    • getSchemaID

      public UUID getSchemaID()
      Gets the UUID for the schema that the conglomerate belongs to.
      Returns:
      The UUID String for the schema that the conglomerate belongs to
    • isIndex

      public boolean isIndex()
      Tells whether the conglomerate can be used as an index.
      Returns:
      TRUE if the conglomerate can be used as an index, FALSE if not
    • isConstraint

      public boolean isConstraint()
      Tells whether the conglomerate is an index backing up a constraint.
      Returns:
      TRUE if the conglomerate is an index backing up a constraint, FALSE if not
    • getConglomerateName

      public String getConglomerateName()
      Gets the name of the conglomerate. For heaps, this is null. For indexes, it is the index name.
      Returns:
      The name of the conglomerate, null if it's the heap for a table.
    • setConglomerateName

      public void setConglomerateName(String newName)
      Set the name of the conglomerate. Used only by rename index.
      Parameters:
      newName - The new name of the conglomerate.
    • getIndexDescriptor

      public IndexRowGenerator getIndexDescriptor()
      Gets the index row generator for this conglomerate, null if the conglomerate is not an index.
      Returns:
      The index descriptor for this conglomerate, if any.
    • setColumnNames

      public void setColumnNames(String[] columnNames)
      Set the column names for this conglomerate descriptor. This is useful for tracing the optimizer.
      Parameters:
      columnNames - 0-based array of column names.
    • getColumnNames

      public String[] getColumnNames()
      Get the column names for this conglomerate descriptor. This is useful for tracing the optimizer.
      Returns:
      the column names for the conglomerate descriptor.
    • getDependableFinder

      public DependableFinder getDependableFinder()
      Description copied from interface: Dependable
      Get an object which can be written to disk and which, when read from disk, will find or reconstruct this in-memory Dependable.
      Specified by:
      getDependableFinder in interface Dependable
      Returns:
      the stored form of this provider
    • getObjectName

      public String getObjectName()
      Return the name of this Provider. (Useful for errors.)
      Specified by:
      getObjectName in interface Dependable
      Returns:
      String The name of this provider.
    • getObjectID

      public UUID getObjectID()
      Get the provider's UUID
      Specified by:
      getObjectID in interface Dependable
      Returns:
      The provider's UUID
    • getClassType

      public String getClassType()
      Get the provider's type.
      Specified by:
      getClassType in interface Dependable
      Returns:
      char The provider's type.
    • toString

      public String toString()
      Convert the conglomerate descriptor to a String
      Overrides:
      toString in class Object
      Returns:
      The conglomerate descriptor as a String
    • getDescriptorType

      public String getDescriptorType()
      Description copied from class: TupleDescriptor
      Each descriptor must identify itself with its type; i.e index, check constraint whatever.
      Overrides:
      getDescriptorType in class TupleDescriptor
      See Also:
    • getDescriptorName

      public String getDescriptorName()
      Overrides:
      getDescriptorName in class TupleDescriptor
      See Also:
    • drop

      Drop this ConglomerateDescriptor when it represents an index. If this is the last desciptor for a physical index then the physical index (conglomerate) and its descriptor will be dropped.
      Parameters:
      lcc - Connection context to use for dropping
      td - TableDescriptor for the table to which this conglomerate belongs
      Returns:
      If the conglomerate described by this descriptor is an index conglomerate that is shared by multiple constraints/indexes, then we may have to create a new conglomerate to satisfy the constraints/indexes which remain after we drop the existing conglomerate. If that's needed then we'll return a conglomerate descriptor which describes what the new conglomerate must look like. It is then up to the caller of this method to create a new corresponding conglomerate. We don't create the index here because depending on who called us, it might not make sense to create it--esp. if we get here because of a DROP TABLE.
      Throws:
      StandardException
    • describeSharedConglomerate

      public ConglomerateDescriptor describeSharedConglomerate(ConglomerateDescriptor[] descriptors, boolean ignoreThis) throws StandardException
      This method searches the received array of conglom descriptors to find all descriptors that currently share a physical conglom with "this". The method then searches within those sharing descriptors to find one that fully describes what a physical conglom would have to look like in order to support _all_ of the sharing descriptors in the array--esp. one that correctly enforces the uniqueness requirements for those descriptors.
      Parameters:
      descriptors - Array of conglomerate descriptors in which to search; the array may include an entry for "this"; it should not be null.
      ignoreThis - If true then we will NOT consider "this" conglomerate descriptor in our search. That is, we will find a descriptor to describe what a physical conglomerate would have to look like in order to support all sharing descriptors OTHER THAN this one.
      Returns:
      A conglomerate descriptor, pulled from the received array, that describes what a physical conglomerate would have to look to like in order to support all sharing descriptors (minus "this" if ignoreThis is true).
      Throws:
      StandardException