Class StreamFileContainer

java.lang.Object
org.apache.derby.impl.store.raw.data.StreamFileContainer
All Implemented Interfaces:
PrivilegedExceptionAction<Object>, TypedFormat

class StreamFileContainer extends Object implements TypedFormat, PrivilegedExceptionAction<Object>
The format of this stream file is: (RH) (FH) (field data) (FH) (field data) ........ (FH) (field data) Record header is stored once at the beginning of the file for all the rows stored in this file. Record Header indicates how many fields are in each row. Then we just stored all the column from each row. Field header stored on this file is fixed size with fieldDataLength size set to LARGE_SLOT_SIZE (4) bytes. NOTE: No locks are used in this container. All transaction are not logged.
  • Field Details

  • Constructor Details

  • Method Details

    • open

      protected StreamFileContainer open(boolean forUpdate) throws StandardException
      Open a stream file container.

      Open a container. Open the file that maps to this container, if the file does not exist then we assume the container was never created and return. If the file exists but we have trouble opening it then we throw some exception.

      Parameters:
      forUpdate - Currently only accepts false, updating and existing stream file container is not currently supported.
      Returns:
      The opened StreamFileContainer.
      Throws:
      StandardException - Standard exception policy.
    • close

      protected void close()
      Close the stream file.

      Close this stream file, and all streams associated with it.

    • getTypeFormatId

      public int getTypeFormatId()
      Return my format identifier.
      Specified by:
      getTypeFormatId in interface TypedFormat
      Returns:
      The identifier. (A UUID stuffed in an array of 16 bytes).
    • getContainerProperties

      public void getContainerProperties(Properties prop) throws StandardException
      Request the system properties associated with a stream container.

      Request the value of properties associated with a stream container. The following properties can be requested: derby.storage.streamFileBufferSize

      To get the value of a particular property add it to the property list, and on return the value of the property will be set to it's current value. For example: get_prop(ConglomerateController cc) { Properties prop = new Properties(); prop.put("derby.storage.streamFileBufferSize", ""); cc.getContainerProperties(prop); System.out.println( "stream table's buffer size = " + prop.getProperty("derby.storage.streamFileBufferSize"); }

      Parameters:
      prop - Property list to fill in.
      Throws:
      StandardException - Standard exception policy.
    • getIdentity

      public ContainerKey getIdentity()
      Request the container key associated with the stream container.
    • use

      protected boolean use(StreamContainerHandle handle) throws StandardException
      Can I use this container?

      This method always return true right now. In the future when there are different uses for this container, we may need to add qualifications for this.

      Throws:
      StandardException - Standard exception policy.
    • load

      public void load(RowSource rowSource) throws StandardException
      load data into this container.

      populate the stream container with data in the rowSource

      Parameters:
      rowSource - The row source to get rows to load into this container.
      Throws:
      StandardException - Standard exception policy.
    • writeToFile

      private void writeToFile() throws StandardException
      Write the buffer to the file.

      If the database is encrypted, the dataFactory.getEncryptionBlockSize() - 1 reserved bytes will be used to pad the byte array to be dataFactory.getEncryptionBlockSize() aligned. Before the bytes are encrypted and written to the file stream, the actual length of the byte array is written out as a compressed integer. This number will be used when decrypting the data. If the database is not encrypted, then, we don't reserve the bytes upfront, and we simple just write the bytes out to the file stream.

      Throws:
      StandardException - Standard exception policy.
    • writeColumn

      private void writeColumn(Object column) throws StandardException, IOException
      Throws:
      StandardException
      IOException
    • fetchNext

      public boolean fetchNext(Object[] row) throws StandardException
      Throws:
      StandardException
    • removeContainer

      public boolean removeContainer() throws StandardException
      Close the stream file and remove the file.
      Throws:
      StandardException - Segment directory cannot be created
    • getFileName

      protected StorageFile getFileName(ContainerKey identity, boolean forCreate, boolean errorOK) throws StandardException
      Return a file name for the identity.

      Return a valid file name for the identity, or null if the data directory for this segment cannot be created

      Throws:
      StandardException - Segment directory cannot be created
    • privExists

      private boolean privExists(StorageFile file)
    • privMkdirs

      private boolean privMkdirs(StorageFile file) throws IOException
      Throws:
      IOException
    • privDelete

      private boolean privDelete(StorageFile file)
    • privGetOutputStream

      private OutputStream privGetOutputStream(StorageFile file) throws FileNotFoundException
      Throws:
      FileNotFoundException
    • privGetInputStream

      private InputStream privGetInputStream(StorageFile file) throws FileNotFoundException
      Throws:
      FileNotFoundException
    • run

      public Object run() throws IOException
      Specified by:
      run in interface PrivilegedExceptionAction<Object>
      Throws:
      IOException
    • getContextService

      private static ContextService getContextService()
      Privileged lookup of the ContextService. Must be private so that user code can't call this entry point.
    • getServiceModule

      private static Object getServiceModule(Object serviceModule, String factoryInterface)
      Privileged module lookup. Must be private so that user code can't call this entry point.