org.apache.derby.impl.sql.execute
Class IndexSetChanger

java.lang.Object
  extended by org.apache.derby.impl.sql.execute.IndexSetChanger

public class IndexSetChanger
extends java.lang.Object

Perform Index maintenace associated with DML operations for a table's indexes.


Field Summary
private  Activation activation
           
private static int ALL_INDEXES
           
(package private)  ConglomerateController baseCC
           
(package private)  FormatableBitSet baseRowReadMap
           
(package private)  boolean[] fixOnUpdate
           
(package private)  IndexChanger[] indexChangers
           
(package private)  long[] indexCIDS
           
private  DynamicCompiledOpenConglomInfo[] indexDCOCIs
           
(package private)  java.lang.String[] indexNames
           
private  StaticCompiledOpenConglomInfo[] indexSCOCIs
           
(package private)  IndexRowGenerator[] irgs
           
private  int isolationLevel
           
(package private)  boolean isOpen
           
private  int lockMode
           
private static int NO_INDEXES
           
(package private)  TemporaryRowHolderImpl rowHolder
           
(package private)  TransactionController tc
           
private static int UPDATE_INDEXES
           
private  int whatIsOpen
           
 
Constructor Summary
IndexSetChanger(IndexRowGenerator[] irgs, long[] indexCIDS, StaticCompiledOpenConglomInfo[] indexSCOCIs, DynamicCompiledOpenConglomInfo[] indexDCOCIs, java.lang.String[] indexNames, ConglomerateController baseCC, TransactionController tc, int lockMode, FormatableBitSet baseRowReadMap, int isolationLevel, Activation activation)
          Create a new IndexSetChanger
 
Method Summary
 void close()
          Close this IndexSetChanger.
 void delete(ExecRow baseRow, RowLocation baseRowLocation)
          Perform index maintenance associated with deleting a row from a table.
 void finish()
          Finish processing the changes for this IndexSetChanger.
 void insert(ExecRow baseRow, RowLocation baseRowLocation)
          Perform index maintenance associated with insering a row into a table.
 void open(boolean[] fixOnUpdate)
          Open this IndexSetchanger.
private  void openIndexes(int whatToOpen)
          Open the indexes that must be fixed if they are not already open.
 void setBaseCC(ConglomerateController baseCC)
          Propagate the heap's ConglomerateController to all of the underlying index changers.
 void setRowHolder(TemporaryRowHolderImpl rowHolder)
          Set the row holder for all underlying changers to use.
 java.lang.String toString()
          Create a string describing the state of this IndexSetChanger
 void update(ExecRow oldBaseRow, ExecRow newBaseRow, RowLocation baseRowLocation)
          Perform index maintenance associated with updating a row in a table.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

irgs

IndexRowGenerator[] irgs

indexCIDS

long[] indexCIDS

indexDCOCIs

private DynamicCompiledOpenConglomInfo[] indexDCOCIs

indexSCOCIs

private StaticCompiledOpenConglomInfo[] indexSCOCIs

indexNames

java.lang.String[] indexNames

baseCC

ConglomerateController baseCC

baseRowReadMap

FormatableBitSet baseRowReadMap

tc

TransactionController tc

rowHolder

TemporaryRowHolderImpl rowHolder

indexChangers

IndexChanger[] indexChangers

lockMode

private int lockMode

fixOnUpdate

boolean[] fixOnUpdate

isOpen

boolean isOpen

NO_INDEXES

private static final int NO_INDEXES
See Also:
Constant Field Values

UPDATE_INDEXES

private static final int UPDATE_INDEXES
See Also:
Constant Field Values

ALL_INDEXES

private static final int ALL_INDEXES
See Also:
Constant Field Values

whatIsOpen

private int whatIsOpen

isolationLevel

private int isolationLevel

activation

private final Activation activation
Constructor Detail

IndexSetChanger

public IndexSetChanger(IndexRowGenerator[] irgs,
                       long[] indexCIDS,
                       StaticCompiledOpenConglomInfo[] indexSCOCIs,
                       DynamicCompiledOpenConglomInfo[] indexDCOCIs,
                       java.lang.String[] indexNames,
                       ConglomerateController baseCC,
                       TransactionController tc,
                       int lockMode,
                       FormatableBitSet baseRowReadMap,
                       int isolationLevel,
                       Activation activation)
                throws StandardException
Create a new IndexSetChanger

Parameters:
irgs - the IndexRowGenerators for the table's indexes. We use positions in this array as local id's for indexes.
indexCIDS - the conglomerate ids for the table's indexes. indexCIDS[ix] corresponds to the same index as irgs[ix].
indexSCOCIs - the SCOCIs for the table's idexes. indexSCOCIs[ix] corresponds to the same index as irgs[ix].
indexDCOCIs - the DCOCIs for the table's idexes. indexDCOCIs[ix] corresponds to the same index as irgs[ix].
baseCC - a ConglomerateController for the base table.
tc - a TransactionController for managing temporary conglomerates
lockMode - The lock mode (granularity) for the indexes.
baseRowReadMap - Map of columns read in. 1 based.
isolationLevel - Isolation level to use
activation - Current activation
Throws:
StandardException - Thrown on error
Method Detail

open

public void open(boolean[] fixOnUpdate)
          throws StandardException
Open this IndexSetchanger.

Parameters:
fixOnUpdate - indicates which indexes to correct due to an update. The entries in this array must be in the same order as the entries in the irgs array that was passed to the constructor.
Throws:
StandardException - Thrown on error

setRowHolder

public void setRowHolder(TemporaryRowHolderImpl rowHolder)
Set the row holder for all underlying changers to use. If the row holder is set, underlying changers wont bother saving copies of rows needed for deferred processing. Also, it will never close the passed in rowHolder.

Parameters:
rowHolder - the row holder

openIndexes

private void openIndexes(int whatToOpen)
                  throws StandardException
Open the indexes that must be fixed if they are not already open.

Parameters:
whatToOpen - must be one of ALL_INDEXES or UPDATE_INDEXES.
Throws:
StandardException - Thrown on error

delete

public void delete(ExecRow baseRow,
                   RowLocation baseRowLocation)
            throws StandardException
Perform index maintenance associated with deleting a row from a table.

Parameters:
baseRow - the deleted row.
baseRowLocation - the deleted row's base conglomerate location
Throws:
StandardException - Thrown on error

insert

public void insert(ExecRow baseRow,
                   RowLocation baseRowLocation)
            throws StandardException
Perform index maintenance associated with insering a row into a table.

Parameters:
baseRow - the row.
baseRowLocation - the row's base conglomerate location
Throws:
StandardException - Thrown on error

update

public void update(ExecRow oldBaseRow,
                   ExecRow newBaseRow,
                   RowLocation baseRowLocation)
            throws StandardException
Perform index maintenance associated with updating a row in a table.

Parameters:
oldBaseRow - the old image of the row.
newBaseRow - the new image of the row.
baseRowLocation - the row's base conglomerate location
Throws:
StandardException - Thrown on error

setBaseCC

public void setBaseCC(ConglomerateController baseCC)
Propagate the heap's ConglomerateController to all of the underlying index changers.

Parameters:
baseCC - The heap's ConglomerateController.

finish

public void finish()
            throws StandardException
Finish processing the changes for this IndexSetChanger. This means doing the deferred inserts for updates of unique indexes.

Throws:
StandardException - Thrown on error

close

public void close()
           throws StandardException
Close this IndexSetChanger.

Throws:
StandardException - Thrown on error

toString

public java.lang.String toString()
Create a string describing the state of this IndexSetChanger

Overrides:
toString in class java.lang.Object

Built on Thu 2012-03-29 21:53:33+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.