Package org.apache.derby.iapi.services.io

Examples of org.apache.derby.iapi.services.io.ArrayInputStream


            if (numberFields != 2) // End of column chain.
                return null;

            // these reads are always against the page array
            ArrayInputStream lrdi = rawDataIn;

            // The 2nd field is the pointer to the next page in column chain.

            int offset = getRecordOffset(slot) + recordHeader.size();
            lrdi.setPosition(offset);

            // skip the first field
            skipField(lrdi);

            // the 2nd field should be <pageId, recordId> pair, return the
            // pageId part and skip over the length.
            int fieldStatus = StoredFieldHeader.readStatus(lrdi);
            int fieldLength = StoredFieldHeader.readFieldDataLength
                (lrdi, fieldStatus, slotFieldSize);

            long ovflowPage = CompressedNumber.readLong((InputStream) lrdi);
            int  ovflowRid  = CompressedNumber.readInt((InputStream) lrdi);

            if (SanityManager.DEBUG)
            {
                if (!StoredFieldHeader.isOverflow(fieldStatus))
                {
                    // In version 1.5, the first field is overflow and the
                    // second is not. In version 2.0 onwards, the first field
                    // is not overflow and the second is overflow (the overflow
                    // bit goes with the overflow pointer).  Check first field
                    // to make sure its overflow bit is set on. 
                    // Offset still points to the first column.
                    lrdi.setPosition(offset);
                    fieldStatus = StoredFieldHeader.readStatus(lrdi);
                    SanityManager.ASSERT(
                            StoredFieldHeader.isOverflow(fieldStatus));
                }
            }
View Full Code Here


    {
        ErrorObjectInput    inUserCode = null;

        // Reads in this routine are always against the raw data in the
        // pageData array, thus it can assume array access to page data array.
        ArrayInputStream lrdi = rawDataIn;

        try
        {
            if (SanityManager.DEBUG)
            {
                if (colid >= row.length)
                    SanityManager.THROWASSERT(
                        "colid = " + colid +
                        ";row length = " + row.length);

                // currently this routine will not work on long rows.
                if (recordHeader.getFirstField() != 0)
                {
                    SanityManager.THROWASSERT(
                        "recordHeader.getFirstField() = " +
                        recordHeader.getFirstField());
                }
            }

            Object column     = row[colid];

            // if the column id exists on this page.
            if (colid <= (recordHeader.getNumberFields() - 1))
            {
                // skip the fields before colid, the column in question
                // existent on this page.

                for (int columnId = colid; columnId > 0; columnId--)
                {
                    offset_to_field_data +=
                        StoredFieldHeader.readTotalFieldLength(
                            pageData, offset_to_field_data);
                }



                // read the field header

                // read the status byte.
                int fieldStatus     =
                    StoredFieldHeader.readStatus(
                        pageData, offset_to_field_data);

                // read the field data length, and position on 1st byte of data.
                int fieldDataLength =
                    StoredFieldHeader.readFieldLengthAndSetStreamPosition(
                        pageData,
                        offset_to_field_data +
                            StoredFieldHeader.STORED_FIELD_HEADER_STATUS_SIZE,
                        fieldStatus,
                        slotFieldSize,
                        lrdi);

                if (SanityManager.DEBUG)
                {
                    SanityManager.ASSERT(
                        !StoredFieldHeader.isExtensible(fieldStatus),
                        "extensible fields not supported yet");
                }

                // SRW-DJD code assumes non-extensible case ...

                if (!StoredFieldHeader.isNonexistent(fieldStatus))
                {
                    boolean isOverflow =
                        StoredFieldHeader.isOverflow(fieldStatus);

                    OverflowInputStream overflowIn = null;

                    if (isOverflow)
                    {
                        // A fetched long column is returned as a stream
                        long overflowPage   =
                            CompressedNumber.readLong((InputStream) lrdi);

                        int overflowId      =
                            CompressedNumber.readInt((InputStream) lrdi);

                        // Prepare the stream for results...
                        // create the byteHolder the size of a page, so, that it
                        // will fit the field Data that would fit on a page.
                        MemByteHolder byteHolder =
                            new MemByteHolder(pageData.length);

                        overflowIn = new OverflowInputStream(
                            byteHolder, owner, overflowPage,
                            overflowId, recordToLock);
                    }

                    // Deal with Storable columns
                    if (column instanceof DataValueDescriptor)
                    {
                        DataValueDescriptor sColumn =
                            (DataValueDescriptor) column;

                        // is the column null ?
                        if (StoredFieldHeader.isNull(fieldStatus))
                        {
                            sColumn.restoreToNull();
                        }
                        else
                        {
                            // set the limit for the user read
                            if (!isOverflow)
                            {
                                // normal, non-overflow column case.

                                lrdi.setLimit(fieldDataLength);
                                inUserCode = lrdi;
                                sColumn.readExternalFromArray(lrdi);
                                inUserCode = null;
                                int unread = lrdi.clearLimit();
                                if (unread != 0)
                                    DataInputUtil.skipFully(lrdi, unread);
                            }
                            else
                            {
                                // fetched column is a Storable long column.

                                FormatIdInputStream newIn =
                                    new FormatIdInputStream(overflowIn);

                                if ((sColumn instanceof StreamStorable))
                                {
                                    ((StreamStorable)sColumn).setStream(newIn);
                                }
                                else
                                {
                                    inUserCode = newIn;
                                    sColumn.readExternal(newIn);
                                    inUserCode = null;
                                }
                            }
                        }
                    }
                    else
                    {
                        // At this point only non-Storable columns.

                        if (StoredFieldHeader.isNull(fieldStatus))
                        {
                            // Only Storables can be null ...

                            throw StandardException.newException(
                                    SQLState.DATA_NULL_STORABLE_COLUMN,
                                    Integer.toString(colid));
                        }

                        // This is a non-extensible field, which means the
                        // caller must know the correct type and thus the
                        // element in row is the correct type or null. It must
                        // be Serializable.
                        //
                        // We do not support Externalizable here.

                        lrdi.setLimit(fieldDataLength);
                        inUserCode = lrdi;
                        // RESOLVE (no non-storables?)
                        row[colid] = (Object) lrdi.readObject();
                        inUserCode = null;
                        int unread = lrdi.clearLimit();
                        if (unread != 0)
                            DataInputUtil.skipFully(lrdi, unread);
                    }

                }
                else
                {
                    // column does not exist in the row, return null.

                    // field is non-existent

                    if (column instanceof DataValueDescriptor)
                    {
                        // RESOLVE - This is in place for 1.2. In the future
                        // we may want to return this column as non-existent
                        // even if it is a storable column, or maybe use a
                        // supplied default.

                        ((DataValueDescriptor) column).restoreToNull();
                    }
                    else
                    {
                        row[colid] = null;
                    }
                }
            }
            else
            {
                // field does not exist on this page.

                if (column instanceof DataValueDescriptor)
                {
                    // RESOLVE - This is in place for 1.2. In the future
                    // we may want to return this column as non-existent
                    // even if it is a storable column, or maybe use a
                    // supplied default.
                    ((DataValueDescriptor) column).restoreToNull();
                }
                else
                {
                    row[colid] = null;
                }
            }
        }
        catch (IOException ioe)
        {
            // an exception during the restore of a user column, this doesn't
            // make the database corrupt, just that this field is inaccessable

            if (inUserCode != null)
            {
                lrdi.clearLimit();

                if (ioe instanceof EOFException)
                {
                    if (SanityManager.DEBUG)
                    {
                        SanityManager.DEBUG_PRINT("DEBUG_TRACE",
                            "StoredPage.readOneColumnFromPage - EOF while restoring record: " +
                                recordHeader +
                            "Page dump = " + this);
                        SanityManager.showTrace(ioe);
                    }

                    // going beyond the limit in a DataInput class results in
                    // an EOFException when it sees the -1 from a read
                    throw StandardException.newException(
                            SQLState.DATA_STORABLE_READ_MISMATCH,
                            ioe, inUserCode.getErrorInfo());
                }

                // some SQLData error reporting
                Exception ne = inUserCode.getNestedException();
                if (ne != null)
                {
                    if (ne instanceof InstantiationException)
                    {
                        throw StandardException.newException(
                            SQLState.DATA_SQLDATA_READ_INSTANTIATION_EXCEPTION,
                            ne, inUserCode.getErrorInfo());
                    }

                    if (ne instanceof IllegalAccessException)
                    {
                        throw StandardException.newException(
                            SQLState.DATA_SQLDATA_READ_ILLEGAL_ACCESS_EXCEPTION,
                            ne, inUserCode.getErrorInfo());
                    }

                    if (ne instanceof StandardException)
                    {
                        throw (StandardException) ne;
                    }
                }

                throw StandardException.newException(
                        SQLState.DATA_STORABLE_READ_EXCEPTION,
                        ioe, inUserCode.getErrorInfo());
            }

            // re-throw to higher levels so they can put it in correct context.
            throw ioe;

        }
        catch (ClassNotFoundException cnfe)
        {
            lrdi.clearLimit();

            // an exception during the restore of a user column, this doesn't
            // make the database corrupt, just that this field is inaccessable
            throw StandardException.newException(
                    SQLState.DATA_STORABLE_READ_MISSING_CLASS,
                    cnfe, inUserCode.getErrorInfo());

        }
        catch (LinkageError le)
        {
            // Some error during the link of a user class
            if (inUserCode != null)
            {
                lrdi.clearLimit();

                throw StandardException.newException(
                        SQLState.DATA_STORABLE_READ_EXCEPTION,
                        le, inUserCode.getErrorInfo());
            }
View Full Code Here

        throws StandardException, IOException
    {
        int offset = getFieldOffset(slot, fieldNumber);

        // these reads are always against the page array
        ArrayInputStream lrdi = rawDataIn;

        // now write out the field we are interested in ...
        lrdi.setPosition(offset);
        int fieldStatus = StoredFieldHeader.readStatus(lrdi);
        int fieldDataLength = StoredFieldHeader.readFieldDataLength(lrdi, fieldStatus, slotFieldSize);

        StoredFieldHeader.write(out, fieldStatus, fieldDataLength, slotFieldSize);
       
        if (fieldDataLength != 0) {
            // and then the data
            out.write(pageData, lrdi.getPosition(), fieldDataLength);
        }
    }
View Full Code Here

        logAction(instant);

        int offset = getFieldOffset(slot, fieldNumber);

        // get the field header information, the input stream came from the log
        ArrayInputStream lrdi = rawDataIn;
        lrdi.setPosition(offset);
        int oldFieldStatus = StoredFieldHeader.readStatus(lrdi);
        int oldFieldDataLength = StoredFieldHeader.readFieldDataLength(lrdi, oldFieldStatus, slotFieldSize);

        int newFieldStatus = StoredFieldHeader.readStatus(in);
        int newFieldDataLength = StoredFieldHeader.readFieldDataLength(in, newFieldStatus, slotFieldSize);
View Full Code Here

                    "fieldNumber: " + fieldNumber +
                    " start field: " + startField +
                    " number of fields " + numberFields);
        }

        ArrayInputStream lrdi = rawDataIn;

        // skip the record header
        lrdi.setPosition(offset + recordHeader.size());

        // skip any earlier fields ...
        for (int i = startField; i < fieldNumber; i++) {
            skipField(lrdi);
        }
View Full Code Here

        {
      SanityManager.ASSERT(getRecordOffset(slot) != 0);
    }

    // these reads are always against the page array
    ArrayInputStream lrdi = rawDataIn;

    lrdi.setPosition(
            slotTableOffsetToFirstRecordLengthField - (slot * slotEntrySize));

        return(
            (slotFieldSize == SMALL_SLOT_SIZE) ?
                lrdi.readUnsignedShort() : lrdi.readInt());
  }
View Full Code Here

        {
      SanityManager.ASSERT(getRecordOffset(slot) != 0);
    }

    // these reads are always against the page array
    ArrayInputStream lrdi = rawDataIn;

    lrdi.setPosition(
            slotTableOffsetToFirstReservedSpaceField - (slot * slotEntrySize));

        return(
            (slotFieldSize == SMALL_SLOT_SIZE) ?
                lrdi.readUnsignedShort() : lrdi.readInt());
  }
View Full Code Here

      }

      int numberFields = recordHeader.getNumberFields();

      // these reads are always against the page array
      ArrayInputStream lrdi = rawDataIn;

            // position after the record header, at 1st column.
      lrdi.setPosition(offset + recordHeader.size());
   
      for (int i = 0; i < numberFields; i++)
            {
        int fieldStatus = StoredFieldHeader.readStatus(lrdi);
        if (StoredFieldHeader.isOverflow(fieldStatus))
          return false;

        int fieldLength =
                    StoredFieldHeader.readFieldDataLength(
                        lrdi, fieldStatus, slotFieldSize);

        if (fieldLength != 0)
          lrdi.setPosition(lrdi.getPosition() + fieldLength);
      }
    }
        catch (IOException ioe)
        {
      throw dataFactory.markCorrupt(
View Full Code Here

      StoredRecordHeader recordHeader = getHeaderAtSlot(slot);

      int numberFields    = recordHeader.getNumberFields();

      // these reads are always against the page array
      ArrayInputStream lrdi = rawDataIn;

            // position the stream to just after record header.
      int offset          = getRecordOffset(slot) + recordHeader.size();
      lrdi.setPosition(offset);

      for (int i = 0; i < numberFields; i++)
            {
        int fieldStatus = StoredFieldHeader.readStatus(lrdi);
        int fieldLength =
                    StoredFieldHeader.readFieldDataLength(
                        lrdi, fieldStatus, slotFieldSize);

        if (!StoredFieldHeader.isOverflow(fieldStatus))
                {
          // skip this field, it is not an long column
          if (fieldLength != 0)
                        lrdi.setPosition(lrdi.getPosition() + fieldLength);
          continue;
        }
                else
                {
View Full Code Here

                columnId >= recordHeader.getFirstField(),
                "first column on page > expected");
    }

    // these reads are always against the page array
    ArrayInputStream lrdi = rawDataIn;

        // set read position to data portion of record to check.
    int offset = getRecordOffset(slot);
    lrdi.setPosition(offset + recordHeader.size());

        // skip until you get to the record in question.
    for (int i = recordHeader.getFirstField(); i < columnId; i++)
      skipField(lrdi);
View Full Code Here

TOP

Related Classes of org.apache.derby.iapi.services.io.ArrayInputStream

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.