You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by mi...@apache.org on 2010/06/29 20:17:11 UTC
svn commit: r959060 [3/3] - in
/db/derby/code/trunk/java/engine/org/apache/derby:
iapi/store/raw/RawStoreFactory.java impl/store/raw/data/StoredPage.java
impl/store/raw/data/StoredRecordHeader.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredRecordHeader.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredRecordHeader.java?rev=959060&r1=959059&r2=959060&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredRecordHeader.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredRecordHeader.java Tue Jun 29 18:17:11 2010
@@ -33,24 +33,24 @@ import java.io.OutputStream;
import org.apache.derby.iapi.services.io.CompressedNumber;
/**
- A class StoredPage uses to cache record headers by passing instances
- to BasePage, and to write stored versions of record headers.
+ A class StoredPage uses to cache record headers by passing instances
+ to BasePage, and to write stored versions of record headers.
- Format
+ Format
- <PRE>
+ <PRE>
- 1 byte - status
- compressed int - record identifier
+ 1 byte - status
+ compressed int - record identifier
- compressed long - overflow page } only if hasOverflow() is true
- compressed int - overflow id } " " "
+ compressed long - overflow page } only if hasOverflow() is true
+ compressed int - overflow id } " " "
- compressed int - first field } only if hasFirstField set - otherwise 0
+ compressed int - first field } only if hasFirstField set - otherwise 0
- compressed int - number of fields in this portion - only if hasOverflow()
- is false OR hasFirstField is true - otherwise 0
- </PRE>
+ compressed int - number of fields in this portion - only if hasOverflow()
+ is false OR hasFirstField is true - otherwise 0
+ </PRE>
*/
@@ -65,11 +65,11 @@ public final class StoredRecordHeader
/**
* Status bits for the record header:
*
- * RECORD_DELETED - used to indicate the record has been deleted
- * RECORD_OVERFLOW - used to indicate the record has been
+ * RECORD_DELETED - used to indicate the record has been deleted
+ * RECORD_OVERFLOW - used to indicate the record has been
* overflowed, it will point to the overflow
* page and ID
- * RECORD_HAS_FIRST_FIELD - used to indicate that firstField is stored.
+ * RECORD_HAS_FIRST_FIELD - used to indicate that firstField is stored.
* When RECORD_OVERFLOW and
* RECORD_HAS_FIRST_FIELD both are set, part of
* record is on the page, the record header
@@ -112,7 +112,7 @@ public final class StoredRecordHeader
*
* <BR> MT - Mutable
**/
- protected int id;
+ protected int id;
/**
* Status of the record.
@@ -130,12 +130,12 @@ public final class StoredRecordHeader
/**
* number of fields in the row.
**/
- protected int numberFields;
+ protected int numberFields;
/**
* A record handle that can represent the record, may be null.
**/
- protected RecordHandle handle;
+ protected RecordHandle handle;
/**
* Class which holds the fields {@code overflowId}, {@code overflowPage}
@@ -191,34 +191,34 @@ public final class StoredRecordHeader
* Constructors for This class:
**************************************************************************
*/
- public StoredRecordHeader()
+ public StoredRecordHeader()
{
- }
+ }
- public StoredRecordHeader(int id, int numberFields)
+ public StoredRecordHeader(int id, int numberFields)
{
- setId(id);
- setNumberFields(numberFields);
- }
+ setId(id);
+ setNumberFields(numberFields);
+ }
- public StoredRecordHeader(
+ public StoredRecordHeader(
byte data[],
int offset)
{
read(data, offset);
- }
+ }
- public StoredRecordHeader(StoredRecordHeader loadTargetFrom)
+ public StoredRecordHeader(StoredRecordHeader loadTargetFrom)
{
- this.status = loadTargetFrom.status;
- this.id = loadTargetFrom.id;
- this.numberFields = loadTargetFrom.numberFields;
- handle = null;
+ this.status = loadTargetFrom.status;
+ this.id = loadTargetFrom.id;
+ this.numberFields = loadTargetFrom.numberFields;
+ handle = null;
if (loadTargetFrom.overflow != null) {
overflow = new OverflowInfo(loadTargetFrom.overflow);
}
- }
+ }
/**************************************************************************
* Public Accessor "Get" Methods of This class:
@@ -231,55 +231,55 @@ public final class StoredRecordHeader
*
* <BR> MT - single thread required
**/
- protected RecordHandle getHandle(
+ protected RecordHandle getHandle(
PageKey pageId,
int current_slot)
{
- if (handle == null)
- handle = new RecordId(pageId, id, current_slot);
+ if (handle == null)
+ handle = new RecordId(pageId, id, current_slot);
- return handle;
- }
+ return handle;
+ }
/**
* Get the record identifier
*
* <BR> MT - thread safe
**/
- public final int getId()
+ public final int getId()
{
- return id;
- }
+ return id;
+ }
- public int getNumberFields()
+ public int getNumberFields()
{
- return numberFields;
- }
+ return numberFields;
+ }
- public long getOverflowPage()
+ public long getOverflowPage()
{
- return overflow == null ? 0 : overflow.overflowPage;
- }
+ return overflow == null ? 0 : overflow.overflowPage;
+ }
- public int getOverflowId()
+ public int getOverflowId()
{
- return overflow == null ? 0 : overflow.overflowId;
- }
+ return overflow == null ? 0 : overflow.overflowId;
+ }
- public int getFirstField()
+ public int getFirstField()
{
- return overflow == null ? 0 : overflow.firstField;
- }
+ return overflow == null ? 0 : overflow.firstField;
+ }
- public final boolean hasOverflow()
+ public final boolean hasOverflow()
{
- return ((status & RECORD_OVERFLOW) == RECORD_OVERFLOW);
- }
+ return ((status & RECORD_OVERFLOW) == RECORD_OVERFLOW);
+ }
- protected final boolean hasFirstField()
+ protected final boolean hasFirstField()
{
- return ((status & RECORD_HAS_FIRST_FIELD) == RECORD_HAS_FIRST_FIELD);
- }
+ return ((status & RECORD_HAS_FIRST_FIELD) == RECORD_HAS_FIRST_FIELD);
+ }
/**
* Get the deleted state of the record.
@@ -287,10 +287,10 @@ public final class StoredRecordHeader
*
* <BR> MT - single thread required
**/
- public final boolean isDeleted()
+ public final boolean isDeleted()
{
- return ((status & RECORD_DELETED) == RECORD_DELETED);
- }
+ return ((status & RECORD_DELETED) == RECORD_DELETED);
+ }
/**
@@ -303,11 +303,11 @@ public final class StoredRecordHeader
* This low level routine is performance critical to processing lots of
* rows, so calls to CompressNumber have been hand inlined.
*
- * @return The length of the record header.
+ * @return The length of the record header.
*
- * @exception StandardException Standard exception policy.
+ * @exception StandardException Standard exception policy.
**/
- public int size()
+ public int size()
{
// account for length of fieldDataLength field stored as a compressed
// int plus one byte for status.
@@ -338,18 +338,18 @@ public final class StoredRecordHeader
{
// is an overflow field
- len += CompressedNumber.sizeLong(overflow.overflowPage);
- len += CompressedNumber.sizeInt(overflow.overflowId);
+ len += CompressedNumber.sizeLong(overflow.overflowPage);
+ len += CompressedNumber.sizeInt(overflow.overflowId);
if (hasFirstField())
{
len += CompressedNumber.sizeInt(overflow.firstField);
len += CompressedNumber.sizeInt(numberFields);
}
- }
+ }
- return len;
- }
+ return len;
+ }
/**************************************************************************
* Public Accessor "Set" Methods of This class:
@@ -359,61 +359,61 @@ public final class StoredRecordHeader
/**
* Set the deleted state of the record.
* <p>
- * return 1, if delete status from not deleted to deleted
+ * return 1, if delete status from not deleted to deleted
* return -1, if delete status from deleted to not deleted
* return 0, if status unchanged.
*
* <BR> MT - single thread required
**/
- public int setDeleted(boolean deleteTrue)
+ public int setDeleted(boolean deleteTrue)
{
- int retCode = 0;
+ int retCode = 0;
- if (deleteTrue)
+ if (deleteTrue)
{
- if (!isDeleted())
+ if (!isDeleted())
{
- // setting the bit from not deleted to deleted
- retCode = 1;
- status |= RECORD_DELETED;
- }
- }
+ // setting the bit from not deleted to deleted
+ retCode = 1;
+ status |= RECORD_DELETED;
+ }
+ }
else
{
- if (isDeleted())
+ if (isDeleted())
{
- // setting the bit from deleted to not deleted
- retCode = -1;
- status &= ~RECORD_DELETED;
- }
- }
+ // setting the bit from deleted to not deleted
+ retCode = -1;
+ status &= ~RECORD_DELETED;
+ }
+ }
- return(retCode);
- }
+ return(retCode);
+ }
- public void setFirstField(int firstField)
+ public void setFirstField(int firstField)
{
if (overflow == null) {
overflow = new OverflowInfo();
}
overflow.firstField = firstField;
status |= RECORD_HAS_FIRST_FIELD;
- }
+ }
- public final void setId(int id)
+ public final void setId(int id)
{
- this.id = id;
- }
+ this.id = id;
+ }
- public void setOverflowDetails(RecordHandle overflowHandle)
+ public void setOverflowDetails(RecordHandle overflowHandle)
{
if (overflow == null) {
overflow = new OverflowInfo();
}
overflow.overflowPage = overflowHandle.getPageNumber();
overflow.overflowId = overflowHandle.getId();
- }
+ }
public void setOverflowFields(StoredRecordHeader loadFromTarget)
{
@@ -421,23 +421,23 @@ public final class StoredRecordHeader
overflow = new OverflowInfo();
}
this.status = (byte) (loadFromTarget.status | RECORD_OVERFLOW);
- this.id = loadFromTarget.id;
- this.numberFields = loadFromTarget.numberFields;
+ this.id = loadFromTarget.id;
+ this.numberFields = loadFromTarget.numberFields;
overflow.firstField = loadFromTarget.overflow.firstField;
- handle = null;
+ handle = null;
}
- public final void setNumberFields(int numberFields)
+ public final void setNumberFields(int numberFields)
{
- this.numberFields = numberFields;
- }
+ this.numberFields = numberFields;
+ }
/**************************************************************************
* Public Methods implmenting read/write of Storable Interface:
**************************************************************************
*/
- public int write(OutputStream out)
+ public int write(OutputStream out)
throws IOException
{
// check consistency of the status field - this has caught
@@ -445,50 +445,50 @@ public final class StoredRecordHeader
if (SanityManager.DEBUG)
{
if ((status & ~RECORD_VALID_MASK) != 0)
- SanityManager.THROWASSERT(
- "Invalid status in StoredRecordHeaader = " + status);
+ SanityManager.THROWASSERT(
+ "Invalid status in StoredRecordHeaader = " + status);
}
// write status
- int len = 1;
- out.write(status);
+ int len = 1;
+ out.write(status);
// write id
- len += CompressedNumber.writeInt(out, id);
-
+ len += CompressedNumber.writeInt(out, id);
+
// write overflow information for overflow record headers
- if (hasOverflow())
+ if (hasOverflow())
{
- // if overflow bit is set, then write the overflow pointer info.
- len += CompressedNumber.writeLong(out, overflow.overflowPage);
- len += CompressedNumber.writeInt(out, overflow.overflowId);
- }
+ // if overflow bit is set, then write the overflow pointer info.
+ len += CompressedNumber.writeLong(out, overflow.overflowPage);
+ len += CompressedNumber.writeInt(out, overflow.overflowId);
+ }
// write first field info for long row parts
- if (hasFirstField())
+ if (hasFirstField())
{
- len += CompressedNumber.writeInt(out, overflow.firstField);
- }
+ len += CompressedNumber.writeInt(out, overflow.firstField);
+ }
// write number of fields, except in the case of a record header
// which is solely a pointer to another row portion.
//
- // see read
- if (!hasOverflow() || hasFirstField())
- len += CompressedNumber.writeInt(out, numberFields);
+ // see read
+ if (!hasOverflow() || hasFirstField())
+ len += CompressedNumber.writeInt(out, numberFields);
- return len;
- }
+ return len;
+ }
- public void read(java.io.ObjectInput in)
+ public void read(java.io.ObjectInput in)
throws IOException
{
// read status
int s = in.read();
if (s < 0) {
- throw new EOFException();
+ throw new EOFException();
}
status = (byte) s;
@@ -498,12 +498,12 @@ public final class StoredRecordHeader
if (SanityManager.DEBUG)
{
if ((s & ~RECORD_VALID_MASK) != 0)
- SanityManager.THROWASSERT(
- "Invalid status in StoredRecordHeader = " + s);
+ SanityManager.THROWASSERT(
+ "Invalid status in StoredRecordHeader = " + s);
}
// read the record id
- id = CompressedNumber.readInt(in);
+ id = CompressedNumber.readInt(in);
if (hasOverflow() || hasFirstField()) {
overflow = new OverflowInfo();
@@ -512,38 +512,38 @@ public final class StoredRecordHeader
}
// initialize the overflow pointer based on status.
- if (hasOverflow())
+ if (hasOverflow())
{
- overflow.overflowPage = CompressedNumber.readLong(in);
- overflow.overflowId = CompressedNumber.readInt(in);
+ overflow.overflowPage = CompressedNumber.readLong(in);
+ overflow.overflowId = CompressedNumber.readInt(in);
- }
+ }
// initialize the 1st field overflow pointer based on status.
- if (hasFirstField())
+ if (hasFirstField())
{
- overflow.firstField = CompressedNumber.readInt(in);
- }
-
- // In releases prior to 1.3 an overflow record was handled
- // by an overflow header pointing to a complete record on
- // another page. This header had the overflow bit set but not
- // the has first field bit. This header also did not have the
- // number of fields written out, but it can be seen as
- // a header with 0 fields and a first field of 0.
- if (!hasOverflow() || hasFirstField())
- numberFields = CompressedNumber.readInt(in);
- else
- numberFields = 0;
+ overflow.firstField = CompressedNumber.readInt(in);
+ }
+
+ // In releases prior to 1.3 an overflow record was handled
+ // by an overflow header pointing to a complete record on
+ // another page. This header had the overflow bit set but not
+ // the has first field bit. This header also did not have the
+ // number of fields written out, but it can be seen as
+ // a header with 0 fields and a first field of 0.
+ if (!hasOverflow() || hasFirstField())
+ numberFields = CompressedNumber.readInt(in);
+ else
+ numberFields = 0;
- handle = null;
- }
+ handle = null;
+ }
private int readOverFlowPage(
byte[] data,
int offset)
{
- int int_value = data[offset++];
+ int int_value = data[offset++];
if ((int_value & ~0x3f) == 0)
{
@@ -553,9 +553,9 @@ public final class StoredRecordHeader
overflow.overflowPage = ((int_value << 8) | (data[offset] & 0xff));
return(2);
- }
- else if ((int_value & 0x80) == 0)
- {
+ }
+ else if ((int_value & 0x80) == 0)
+ {
// value is stored in 4 bytes. only use low 6 bits from 1st byte.
overflow.overflowPage =
@@ -566,9 +566,9 @@ public final class StoredRecordHeader
return(4);
- }
+ }
else
- {
+ {
// value is stored in 8 bytes. only use low 6 bits from 1st byte.
overflow.overflowPage =
(((long) (int_value & 0x7f)) << 56) |
@@ -581,13 +581,13 @@ public final class StoredRecordHeader
(((long) (data[offset] & 0xff)) );
return(8);
- }
+ }
}
private int readOverFlowId(
byte[] data,
int offset)
{
- int value = data[offset++];
+ int value = data[offset++];
if ((value & ~0x3f) == 0)
{
@@ -596,15 +596,15 @@ public final class StoredRecordHeader
return(1);
}
- else if ((value & 0x80) == 0)
- {
+ else if ((value & 0x80) == 0)
+ {
// length is stored in 2 bytes. only use low 6 bits from 1st byte.
overflow.overflowId =
(((value & 0x3f) << 8) | (data[offset] & 0xff));
return(2);
- }
+ }
else
{
// length is stored in 4 bytes. only use low 7 bits from 1st byte.
@@ -621,7 +621,7 @@ public final class StoredRecordHeader
byte[] data,
int offset)
{
- int value = data[offset++];
+ int value = data[offset++];
if ((value & ~0x3f) == 0)
{
@@ -630,15 +630,15 @@ public final class StoredRecordHeader
return(1);
}
- else if ((value & 0x80) == 0)
- {
+ else if ((value & 0x80) == 0)
+ {
// length is stored in 2 bytes. only use low 6 bits from 1st byte.
overflow.firstField =
(((value & 0x3f) << 8) | (data[offset] & 0xff));
return(2);
- }
+ }
else
{
// length is stored in 4 bytes. only use low 7 bits from 1st byte.
@@ -655,19 +655,19 @@ public final class StoredRecordHeader
byte[] data,
int offset)
{
- int value = data[offset++];
+ int value = data[offset++];
if ((value & ~0x3f) == 0)
{
// length stored in this byte.
numberFields = value;
}
- else if ((value & 0x80) == 0)
- {
+ else if ((value & 0x80) == 0)
+ {
// length is stored in 2 bytes. only use low 6 bits from 1st byte.
numberFields = (((value & 0x3f) << 8) | (data[offset] & 0xff));
- }
+ }
else
{
// length is stored in 4 bytes. only use low 7 bits from 1st byte.
@@ -680,25 +680,25 @@ public final class StoredRecordHeader
}
- private void read(
+ private void read(
byte[] data,
int offset)
{
status = data[offset++];
- int value = data[offset++];
+ int value = data[offset++];
if ((value & ~0x3f) == 0)
{
// value stored in this byte.
id = value;
}
- else if ((value & 0x80) == 0)
- {
+ else if ((value & 0x80) == 0)
+ {
// value is stored in 2 bytes. only use low 6 bits from 1st byte.
id = (((value & 0x3f) << 8) | (data[offset++] & 0xff));
- }
+ }
else
{
// value is stored in 4 bytes. only use low 7 bits from 1st byte.
@@ -742,12 +742,12 @@ public final class StoredRecordHeader
{
numberFields = 0;
}
- }
+ }
handle = null;
return;
- }
+ }
/**
* Return length on disk of the record id portion of the record header
@@ -763,26 +763,26 @@ public final class StoredRecordHeader
return(CompressedNumber.sizeInt(record_id));
}
- public String toString()
- {
- if (SanityManager.DEBUG)
- {
- String str = "recordHeader: Id=" + getId();
-
- str += "\n isDeleted = " + isDeleted();
- str += "\n hasOverflow = " + hasOverflow();
- str += "\n hasFirstField = " + hasFirstField();
- str += "\n numberFields = " + getNumberFields();
- str += "\n firstField = " + getFirstField();
- str += "\n overflowPage = " + getOverflowPage();
- str += "\n overflowId = " + getOverflowId();
- str += "\n header length = " + size();
-
- return str;
- }
- else
+ public String toString()
+ {
+ if (SanityManager.DEBUG)
+ {
+ String str = "recordHeader: Id=" + getId();
+
+ str += "\n isDeleted = " + isDeleted();
+ str += "\n hasOverflow = " + hasOverflow();
+ str += "\n hasFirstField = " + hasFirstField();
+ str += "\n numberFields = " + getNumberFields();
+ str += "\n firstField = " + getFirstField();
+ str += "\n overflowPage = " + getOverflowPage();
+ str += "\n overflowId = " + getOverflowId();
+ str += "\n header length = " + size();
+
+ return str;
+ }
+ else
{
- return null;
+ return null;
}
- }
+ }
}