Class GenericExecutionFactory
- java.lang.Object
-
- org.apache.derby.impl.sql.execute.GenericExecutionFactory
-
- All Implemented Interfaces:
ModuleControl,ModuleSupportable,ExecutionFactory
public class GenericExecutionFactory extends java.lang.Object implements ModuleControl, ModuleSupportable, ExecutionFactory
This Factory is for creating the execution items needed by a connection for a given database. Once created for the connection, they should be pushed onto the execution context so that they can be found again by subsequent actions during the session.
-
-
Field Summary
Fields Modifier and Type Field Description private GenericConstantActionFactorygenericConstantActionFactoryprivate ResultSetFactoryrsFactoryprivate ResultSetStatisticsFactoryrssFactoryStatistics factory for this factory.private XPLAINFactoryIFxplainFactory-
Fields inherited from interface org.apache.derby.iapi.sql.execute.ExecutionFactory
MODULE
-
-
Constructor Summary
Constructors Constructor Description GenericExecutionFactory()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidboot(boolean create, java.util.Properties startParams)This Factory is expected to be booted relative to a LanguageConnectionFactory.private static java.lang.ObjectbootServiceModule(boolean create, java.lang.Object serviceModule, java.lang.String factoryInterface, java.util.Properties properties)Privileged startup.booleancanSupport(java.util.Properties startParams)See if this implementation can support any attributes that are listed in properties.GenericConstantActionFactorygetConstantActionFactory()Get the factory for constant actions.ExecIndexRowgetIndexableRow(int numColumns)This returns an indexable rowExecIndexRowgetIndexableRow(ExecRow valueRow)This returns the value row as an indexable rowQualifiergetQualifier(int columnId, int operator, GeneratedMethod orderableGetter, Activation activation, boolean orderedNulls, boolean unknownRV, boolean negateCompareResult, int variantType)Get a Qualifier to use with a scan of a conglomerate.ResultColumnDescriptorgetResultColumnDescriptor(ResultColumnDescriptor compileRCD)Create an execution time ResultColumnDescriptor from a compile time RCD.ResultDescriptiongetResultDescription(ResultColumnDescriptor[] columns, java.lang.String statementType)Make a result descriptionResultSetFactorygetResultSetFactory()Factories are generic and can be used by all connections.ResultSetStatisticsFactorygetResultSetStatisticsFactory()Get the ResultSetStatisticsFactory from this ExecutionFactory.RowChangergetRowChanger(long heapConglom, StaticCompiledOpenConglomInfo heapSCOCI, DynamicCompiledOpenConglomInfo heapDCOCI, IndexRowGenerator[] irgs, long[] indexCIDS, StaticCompiledOpenConglomInfo[] indexSCOCIs, DynamicCompiledOpenConglomInfo[] indexDCOCIs, int numberOfColumns, TransactionController tc, int[] changedColumnIds, int[] streamStorableHeapColIds, Activation activation)Create a new RowChanger for performing update and delete operations based on full before and after rows.RowChangergetRowChanger(long heapConglom, StaticCompiledOpenConglomInfo heapSCOCI, DynamicCompiledOpenConglomInfo heapDCOCI, IndexRowGenerator[] irgs, long[] indexCIDS, StaticCompiledOpenConglomInfo[] indexSCOCIs, DynamicCompiledOpenConglomInfo[] indexDCOCIs, int numberOfColumns, TransactionController tc, int[] changedColumnIds, FormatableBitSet baseRowReadList, int[] baseRowReadMap, int[] streamStorableColIds, Activation activation)Create a new RowChanger for doing insert update and delete operations based on partial before and after.ScanQualifier[][]getScanQualifier(int numQualifiers)Get an array of ScanQualifiers for a scan.(package private) InternalTriggerExecutionContextgetTriggerExecutionContext(LanguageConnectionContext lcc, ConnectionContext cc, java.lang.String statementText, int dmlType, UUID targetTableId, java.lang.String targetTableName, java.util.Vector<AutoincrementCounter> aiCounters)Get a trigger execution contextExecRowgetValueRow(int numColumns)This returns a new row that is storable but not indexableXPLAINFactoryIFgetXPLAINFactory()Get the XPLAINFactory from this ExecutionContext.ExecutionContextnewExecutionContext(ContextManager cm)We want a dependency context so that we can push it onto the stack.voidreleaseScanQualifier(ScanQualifier[][] qualifiers)Release a ScanQualifier[] (back to the pool or free it).voidstop()Stop the module.
-
-
-
Field Detail
-
rssFactory
private ResultSetStatisticsFactory rssFactory
Statistics factory for this factory.
-
rsFactory
private ResultSetFactory rsFactory
-
genericConstantActionFactory
private GenericConstantActionFactory genericConstantActionFactory
-
xplainFactory
private XPLAINFactoryIF xplainFactory
-
-
Method Detail
-
canSupport
public boolean canSupport(java.util.Properties startParams)
Description copied from interface:ModuleSupportableSee if this implementation can support any attributes that are listed in properties. This call may be made on a newly created instance before the boot() method has been called, or after the boot method has been called for a running module.The module can check for attributes in the properties to see if it can fulfill the required behaviour. E.g. the raw store may define an attribute called RawStore.Recoverable. If a temporary raw store is required the property RawStore.recoverable=false would be added to the properties before calling bootServiceModule. If a raw store cannot support this attribute its canSupport method would return null. Also see the Monitor class's prologue to see how the identifier is used in looking up properties.
Actually a better way maybe to have properties of the form RawStore.Attributes.mandatory=recoverable,smallfootprint and RawStore.Attributes.requested=oltp,fast- Specified by:
canSupportin interfaceModuleSupportable- Returns:
- true if this instance can be used, false otherwise.
-
boot
public void boot(boolean create, java.util.Properties startParams) throws StandardExceptionThis Factory is expected to be booted relative to a LanguageConnectionFactory.- Specified by:
bootin interfaceModuleControl- Throws:
StandardException- Thrown on error- See Also:
LanguageConnectionFactory
-
stop
public void stop()
Description copied from interface:ModuleControlStop the module. The module may be found via a findModule() method until some time after this method returns. Therefore the factory must be prepared to reject requests to it once it has been stopped. In addition other modules may cache a reference to the module and make requests of it after it has been stopped, these requests should be rejected as well.- Specified by:
stopin interfaceModuleControl- See Also:
Monitor,ModuleFactory
-
getResultSetFactory
public ResultSetFactory getResultSetFactory()
Factories are generic and can be used by all connections. We defer instantiation until needed to reduce boot time. We may instantiate too many instances in rare multi-user situation, but consistency will be maintained and at some point, usually always, we will have 1 and only 1 instance of each factory because assignment is atomic.- Specified by:
getResultSetFactoryin interfaceExecutionFactory- Returns:
- the result set factory for this database.
-
getConstantActionFactory
public GenericConstantActionFactory getConstantActionFactory()
Get the factory for constant actions.- Returns:
- the factory for constant actions.
-
getResultSetStatisticsFactory
public ResultSetStatisticsFactory getResultSetStatisticsFactory() throws StandardException
Get the ResultSetStatisticsFactory from this ExecutionFactory.- Specified by:
getResultSetStatisticsFactoryin interfaceExecutionFactory- Returns:
- The result set statistics factory associated with this ExecutionFactory
- Throws:
StandardException- Thrown on error
-
newExecutionContext
public ExecutionContext newExecutionContext(ContextManager cm)
We want a dependency context so that we can push it onto the stack. We could instead require the implementation push it onto the stack for us, but this way we know which context object exactly was pushed onto the stack.- Specified by:
newExecutionContextin interfaceExecutionFactory- Parameters:
cm- the context manager
-
getScanQualifier
public ScanQualifier[][] getScanQualifier(int numQualifiers)
Description copied from interface:ExecutionFactoryGet an array of ScanQualifiers for a scan. ScanQualifiers are used with the DataDictionary.- Specified by:
getScanQualifierin interfaceExecutionFactory- Parameters:
numQualifiers- The number of ScanQualifiers to get.
-
getResultDescription
public ResultDescription getResultDescription(ResultColumnDescriptor[] columns, java.lang.String statementType)
Make a result description- Specified by:
getResultDescriptionin interfaceExecutionFactory
-
getResultColumnDescriptor
public ResultColumnDescriptor getResultColumnDescriptor(ResultColumnDescriptor compileRCD)
Create an execution time ResultColumnDescriptor from a compile time RCD.- Specified by:
getResultColumnDescriptorin interfaceExecutionFactory- Parameters:
compileRCD- The compile time RCD.- Returns:
- The execution time ResultColumnDescriptor
-
releaseScanQualifier
public void releaseScanQualifier(ScanQualifier[][] qualifiers)
Description copied from interface:ExecutionFactoryRelease a ScanQualifier[] (back to the pool or free it).- Specified by:
releaseScanQualifierin interfaceExecutionFactory- See Also:
ExecutionFactory.releaseScanQualifier(org.apache.derby.iapi.sql.execute.ScanQualifier[][])
-
getQualifier
public Qualifier getQualifier(int columnId, int operator, GeneratedMethod orderableGetter, Activation activation, boolean orderedNulls, boolean unknownRV, boolean negateCompareResult, int variantType)
Description copied from interface:ExecutionFactoryGet a Qualifier to use with a scan of a conglomerate.- Specified by:
getQualifierin interfaceExecutionFactory- Parameters:
columnId- The store id of the column to qualifyoperator- One of Orderable.ORDER_OP_EQUALS, Orderable.ORDER_OP_LESSTHAN, or Orderable.ORDER_OP_LESSOREQUALSorderableGetter- A generated method that returns the Orderable to be compared with the columnactivation- The Activation that acts as the receiver for the generated methodorderedNulls- True means that null == null for the sake of this QualifierunknownRV- The value to return if the comparison between the column and the Orderable value returns the unknown truth valuenegateCompareResult- True means to negate the result of the comparison. So, for example, to do a > comparison, you would pass ORDER_OP_LESSOREQUALS and set negate to true.variantType- The variantType for the qualifier's orderable. (Determines whether or not to cache the value.)- Returns:
- A new Qualifier
- See Also:
ExecutionFactory.getQualifier(int, int, org.apache.derby.iapi.services.loader.GeneratedMethod, org.apache.derby.iapi.sql.Activation, boolean, boolean, boolean, int)
-
getRowChanger
public RowChanger getRowChanger(long heapConglom, StaticCompiledOpenConglomInfo heapSCOCI, DynamicCompiledOpenConglomInfo heapDCOCI, IndexRowGenerator[] irgs, long[] indexCIDS, StaticCompiledOpenConglomInfo[] indexSCOCIs, DynamicCompiledOpenConglomInfo[] indexDCOCIs, int numberOfColumns, TransactionController tc, int[] changedColumnIds, int[] streamStorableHeapColIds, Activation activation) throws StandardException
Description copied from interface:ExecutionFactoryCreate a new RowChanger for performing update and delete operations based on full before and after rows.- Specified by:
getRowChangerin interfaceExecutionFactory- Parameters:
heapConglom- Conglomerate # for the heapheapSCOCI- The SCOCI for the heap.heapDCOCI- The DCOCI for the heap.irgs- the IndexRowGenerators for the table's indexes. We use positions in this array as local id's for indexes. To support updates, only indexes that change need be included.indexCIDS- the conglomerateids for the table's idexes. 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].numberOfColumns- Number of columns in a full row.tc- the transaction controllerstreamStorableHeapColIds- Column ids of stream storable columns. (0 based, Only needed for sync. null if none or not needed).activation- The Activation.- Throws:
StandardException- Thrown on error- See Also:
ExecutionFactory.getRowChanger(long, org.apache.derby.iapi.store.access.StaticCompiledOpenConglomInfo, org.apache.derby.iapi.store.access.DynamicCompiledOpenConglomInfo, org.apache.derby.iapi.sql.dictionary.IndexRowGenerator[], long[], org.apache.derby.iapi.store.access.StaticCompiledOpenConglomInfo[], org.apache.derby.iapi.store.access.DynamicCompiledOpenConglomInfo[], int, org.apache.derby.iapi.store.access.TransactionController, int[], int[], org.apache.derby.iapi.sql.Activation)
-
getRowChanger
public RowChanger getRowChanger(long heapConglom, StaticCompiledOpenConglomInfo heapSCOCI, DynamicCompiledOpenConglomInfo heapDCOCI, IndexRowGenerator[] irgs, long[] indexCIDS, StaticCompiledOpenConglomInfo[] indexSCOCIs, DynamicCompiledOpenConglomInfo[] indexDCOCIs, int numberOfColumns, TransactionController tc, int[] changedColumnIds, FormatableBitSet baseRowReadList, int[] baseRowReadMap, int[] streamStorableColIds, Activation activation) throws StandardException
Description copied from interface:ExecutionFactoryCreate a new RowChanger for doing insert update and delete operations based on partial before and after.- Specified by:
getRowChangerin interfaceExecutionFactory- Parameters:
heapConglom- Conglomerate # for the heapheapSCOCI- The SCOCI for the heap.heapDCOCI- The DCOCI for the heap.irgs- the IndexRowGenerators for the table's indexes. We use positions in this array as local id's for indexes. To support updates, only indexes that change need be included.indexCIDS- the conglomerateids for the table's idexes. 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].numberOfColumns- Number of columns in partial row.tc- the transaction controllerchangedColumnIds- array of 1 based ints of columns to be updated. Used by update only.baseRowReadList- the columns in the base row that were read (1 based)baseRowReadMap- baseRowReadMap[heapColId]->readRowColId (0 based)streamStorableColIds- Column ids of stream storable columns. (0 based, Only needed for sync. null if none or not needed).activation- The Activation.- Throws:
StandardException- Thrown on error- See Also:
ExecutionFactory.getRowChanger(long, org.apache.derby.iapi.store.access.StaticCompiledOpenConglomInfo, org.apache.derby.iapi.store.access.DynamicCompiledOpenConglomInfo, org.apache.derby.iapi.sql.dictionary.IndexRowGenerator[], long[], org.apache.derby.iapi.store.access.StaticCompiledOpenConglomInfo[], org.apache.derby.iapi.store.access.DynamicCompiledOpenConglomInfo[], int, org.apache.derby.iapi.store.access.TransactionController, int[], int[], org.apache.derby.iapi.sql.Activation)
-
getTriggerExecutionContext
InternalTriggerExecutionContext getTriggerExecutionContext(LanguageConnectionContext lcc, ConnectionContext cc, java.lang.String statementText, int dmlType, UUID targetTableId, java.lang.String targetTableName, java.util.Vector<AutoincrementCounter> aiCounters) throws StandardException
Get a trigger execution context- Throws:
StandardException- Thrown on error
-
getValueRow
public ExecRow getValueRow(int numColumns)
Description copied from interface:ExecutionFactoryThis returns a new row that is storable but not indexable- Specified by:
getValueRowin interfaceExecutionFactory
-
getIndexableRow
public ExecIndexRow getIndexableRow(int numColumns)
Description copied from interface:ExecutionFactoryThis returns an indexable row- Specified by:
getIndexableRowin interfaceExecutionFactory
-
getIndexableRow
public ExecIndexRow getIndexableRow(ExecRow valueRow)
Description copied from interface:ExecutionFactoryThis returns the value row as an indexable row- Specified by:
getIndexableRowin interfaceExecutionFactory
-
getXPLAINFactory
public XPLAINFactoryIF getXPLAINFactory() throws StandardException
Get the XPLAINFactory from this ExecutionContext.- Specified by:
getXPLAINFactoryin interfaceExecutionFactory- Returns:
- The XPLAINFactory associated with this ExecutionContext
- Throws:
StandardException- Thrown on error
-
bootServiceModule
private static java.lang.Object bootServiceModule(boolean create, java.lang.Object serviceModule, java.lang.String factoryInterface, java.util.Properties properties) throws StandardExceptionPrivileged startup. Must be private so that user code can't call this entry point.- Throws:
StandardException
-
-