Quadcap Embeddable Database

com.quadcap.sql.JoinInnerCursor Class Reference

Inheritance diagram for com.quadcap.sql.JoinInnerCursor:

com.quadcap.sql.JoinCursor com.quadcap.sql.CursorImpl com.quadcap.sql.TupleImpl com.quadcap.sql.Cursor com.quadcap.sql.Tuple Externalizable com.quadcap.sql.Tuple List of all members.

Detailed Description

Cursor implementing INNER JOIN using nested loops (optimized using the inner index).

Author:
Stan Bailes

Definition at line 79 of file JoinInnerCursor.java.

Public Member Functions

 JoinInnerCursor (Session session, Cursor outer, Cursor ca, int[] caCols, Cursor cb, int[] cbCols, Expression where, Tuple tuple, JoinMapRow row, boolean left, boolean inner) throws SQLException
 Constructor takes a whole shitload of parameters.

void freeRows (Btree index, BlockFile file) throws IOException
void close () throws SQLException
 Close the cursor and free up any resources (including closing the cursor's transaction if that is feasible) used by the cursor.


Protected Member Functions

void bfirst () throws SQLException
final boolean bnext () throws SQLException

Package Functions

final IndexConstraint findIndex (Cursor r, int[] cols) throws SQLException
final byte[] makeInnerKey (Cursor cursor, Row row, long rowId) throws IOException, SQLException
final byte[] makeOuterKey (Cursor cursor, Row row) throws IOException, SQLException
final void makeTemporaryIndexForTable () throws IOException, SQLException
final void makeTemporaryIndexForView () throws IOException, SQLException
final Btree makeInnerIndex () throws IOException, SQLException

Static Package Functions

final BitSet intArrayToBitSet (int[] a)

Package Attributes

Database db
BlockFile file
BlockFile tempFile
int[] caCols
 The join columns in the outer table.

byte[] caKey
 The current join key.

int cbCnt
 Cache number of columns in inner table.

int[] cbCols
 The join columns in the inner table.

int[] cbMap
 Map inner, non-join-key columns from join cursor to inner cursor pos.

int[] caMap
 Map outer columns from join cursor to outer cursor pos.

Table cbTable
 If the inner is really a table, or null if it's a view.

IndexConstraint cbIndex
 If there's an index on the join columns of the inner table.

Btree index
 Either the index from above, or a temporary one we create.

boolean tempIndex
 Did we make 'index', or were the columns already indexed?

boolean mustFreeRows = false
 Did we make create new (temporary) rows for the inner index?

BCursor cbKeys
Comparator compare
 Used to compare the inner and outer join keys.

MapRow mapRow
 Temporary used to build keys for inner table index.


Constructor & Destructor Documentation

com.quadcap.sql.JoinInnerCursor.JoinInnerCursor Session  session,
Cursor  outer,
Cursor  ca,
int[]  caCols,
Cursor  cb,
int[]  cbCols,
Expression  where,
Tuple  tuple,
JoinMapRow  row,
boolean  left,
boolean  inner
throws SQLException
 

Constructor takes a whole shitload of parameters.

Parameters:
session my execution session context (transaction, etc)
ca the outer join cursor
caCols the join columns in the outer cursor
cb the inner join cursor
cbCols the join columns in the inner cursor
where the ON/WHERE predicate expression
tuple the format we're supposed to return
row A mapping between the inner/outer rows and the join row
left Include non-matching outer rows with nulls for inner
inner Include matching rows
flip Left is Right, Right is Left

Definition at line 140 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.caCols, com.quadcap.sql.JoinInnerCursor.cbCols, com.quadcap.sql.JoinInnerCursor.db, com.quadcap.sql.JoinInnerCursor.findIndex(), com.quadcap.sql.Tuple.getColumnCount(), and com.quadcap.sql.Session.getDatabase().


Member Function Documentation

void com.quadcap.sql.JoinInnerCursor.bfirst  )  throws SQLException [protected]
 

Reimplemented from com.quadcap.sql.JoinCursor.

Definition at line 218 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.caKey, com.quadcap.sql.JoinInnerCursor.cbCnt, com.quadcap.sql.JoinInnerCursor.cbKeys, com.quadcap.sql.JoinInnerCursor.index, com.quadcap.sql.JoinInnerCursor.makeInnerIndex(), and com.quadcap.sql.JoinMapRow.setB().

final boolean com.quadcap.sql.JoinInnerCursor.bnext  )  throws SQLException [protected]
 

Reimplemented from com.quadcap.sql.JoinCursor.

Definition at line 233 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.caKey, com.quadcap.sql.JoinInnerCursor.cbKeys, com.quadcap.sql.JoinInnerCursor.cbTable, com.quadcap.sql.JoinInnerCursor.compare, com.quadcap.sql.JoinInnerCursor.db, com.quadcap.sql.Database.getRow(), and com.quadcap.sql.JoinMapRow.setB().

void com.quadcap.sql.JoinInnerCursor.close  )  throws SQLException [virtual]
 

Close the cursor and free up any resources (including closing the cursor's transaction if that is feasible) used by the cursor.

Exceptions:
SQLException may be thrown

Reimplemented from com.quadcap.sql.JoinCursor.

Definition at line 329 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.cbKeys, com.quadcap.sql.Session.getDatabase(), com.quadcap.sql.JoinInnerCursor.index, com.quadcap.sql.JoinInnerCursor.mustFreeRows, com.quadcap.sql.JoinInnerCursor.tempFile, and com.quadcap.sql.JoinInnerCursor.tempIndex.

final IndexConstraint com.quadcap.sql.JoinInnerCursor.findIndex Cursor  r,
int[]  cols
throws SQLException [package]
 

Definition at line 164 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.cbTable, com.quadcap.sql.JoinInnerCursor.findIndex(), com.quadcap.sql.Constraint.getColumns(), com.quadcap.sql.Table.getConstraint(), com.quadcap.sql.Table.getNumConstraints(), com.quadcap.sql.Constraint.getTable(), and com.quadcap.sql.JoinInnerCursor.intArrayToBitSet().

Referenced by com.quadcap.sql.JoinInnerCursor.findIndex(), and com.quadcap.sql.JoinInnerCursor.JoinInnerCursor().

void com.quadcap.sql.JoinInnerCursor.freeRows Btree  index,
BlockFile  file
throws IOException
 

Definition at line 315 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.db, com.quadcap.sql.JoinInnerCursor.file, com.quadcap.sql.JoinInnerCursor.freeRows(), com.quadcap.sql.JoinInnerCursor.index, and com.quadcap.sql.Database.removeRow().

Referenced by com.quadcap.sql.JoinInnerCursor.freeRows().

final BitSet com.quadcap.sql.JoinInnerCursor.intArrayToBitSet int[]  a  )  [static, package]
 

Definition at line 192 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.intArrayToBitSet().

Referenced by com.quadcap.sql.JoinInnerCursor.findIndex(), and com.quadcap.sql.JoinInnerCursor.intArrayToBitSet().

final Btree com.quadcap.sql.JoinInnerCursor.makeInnerIndex  )  throws IOException, SQLException [package]
 

Definition at line 293 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.caCols, com.quadcap.sql.JoinInnerCursor.cbCols, com.quadcap.sql.JoinInnerCursor.cbIndex, com.quadcap.sql.JoinInnerCursor.cbTable, com.quadcap.sql.JoinInnerCursor.db, com.quadcap.sql.Tuple.getColumnCount(), com.quadcap.sql.IndexConstraint.getIndex(), com.quadcap.sql.JoinInnerCursor.index, com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForTable(), com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForView(), com.quadcap.sql.JoinInnerCursor.mapRow, and com.quadcap.sql.JoinInnerCursor.tempIndex.

Referenced by com.quadcap.sql.JoinInnerCursor.bfirst().

final byte [] com.quadcap.sql.JoinInnerCursor.makeInnerKey Cursor  cursor,
Row  row,
long  rowId
throws IOException, SQLException [package]
 

Definition at line 200 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.cbCols, and com.quadcap.sql.JoinInnerCursor.makeInnerKey().

Referenced by com.quadcap.sql.JoinInnerCursor.makeInnerKey().

final byte [] com.quadcap.sql.JoinInnerCursor.makeOuterKey Cursor  cursor,
Row  row
throws IOException, SQLException [package]
 

Definition at line 206 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.caCols, com.quadcap.sql.JoinInnerCursor.cbIndex, com.quadcap.sql.IndexConstraint.makeKey(), com.quadcap.sql.JoinInnerCursor.makeOuterKey(), com.quadcap.sql.JoinInnerCursor.mapRow, and com.quadcap.sql.MapRow.setRow().

Referenced by com.quadcap.sql.JoinInnerCursor.makeOuterKey().

final void com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForTable  )  throws IOException, SQLException [package]
 

Definition at line 258 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.cbCols, com.quadcap.sql.Session.getBuf8(), com.quadcap.sql.Tuple.getColumn(), com.quadcap.sql.Tuple.getName(), com.quadcap.sql.Column.getName(), com.quadcap.sql.Cursor.getRow(), com.quadcap.sql.Cursor.getRowId(), com.quadcap.sql.JoinInnerCursor.index, com.quadcap.sql.Session.makeTempTree(), and com.quadcap.sql.Cursor.next().

Referenced by com.quadcap.sql.JoinInnerCursor.makeInnerIndex().

final void com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForView  )  throws IOException, SQLException [package]
 

Definition at line 280 of file JoinInnerCursor.java.

References com.quadcap.sql.JoinInnerCursor.cbCols, com.quadcap.sql.Session.getBuf8(), com.quadcap.sql.Session.getDatabase(), com.quadcap.sql.Cursor.getRow(), com.quadcap.sql.JoinInnerCursor.index, com.quadcap.sql.Session.makeTempTree(), com.quadcap.sql.JoinInnerCursor.mustFreeRows, com.quadcap.sql.Cursor.next(), com.quadcap.sql.Database.putRow(), and com.quadcap.sql.JoinInnerCursor.tempFile.

Referenced by com.quadcap.sql.JoinInnerCursor.makeInnerIndex().


Member Data Documentation

int [] com.quadcap.sql.JoinInnerCursor.caCols [package]
 

The join columns in the outer table.

Definition at line 85 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.JoinInnerCursor(), com.quadcap.sql.JoinInnerCursor.makeInnerIndex(), and com.quadcap.sql.JoinInnerCursor.makeOuterKey().

byte [] com.quadcap.sql.JoinInnerCursor.caKey [package]
 

The current join key.

Definition at line 88 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bfirst(), and com.quadcap.sql.JoinInnerCursor.bnext().

int [] com.quadcap.sql.JoinInnerCursor.caMap [package]
 

Map outer columns from join cursor to outer cursor pos.

Definition at line 100 of file JoinInnerCursor.java.

int com.quadcap.sql.JoinInnerCursor.cbCnt [package]
 

Cache number of columns in inner table.

Definition at line 91 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bfirst().

int [] com.quadcap.sql.JoinInnerCursor.cbCols [package]
 

The join columns in the inner table.

Definition at line 94 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.JoinInnerCursor(), com.quadcap.sql.JoinInnerCursor.makeInnerIndex(), com.quadcap.sql.JoinInnerCursor.makeInnerKey(), com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForTable(), and com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForView().

IndexConstraint com.quadcap.sql.JoinInnerCursor.cbIndex [package]
 

If there's an index on the join columns of the inner table.

Definition at line 106 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.makeInnerIndex(), and com.quadcap.sql.JoinInnerCursor.makeOuterKey().

BCursor com.quadcap.sql.JoinInnerCursor.cbKeys [package]
 

Definition at line 117 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bfirst(), com.quadcap.sql.JoinInnerCursor.bnext(), and com.quadcap.sql.JoinInnerCursor.close().

int [] com.quadcap.sql.JoinInnerCursor.cbMap [package]
 

Map inner, non-join-key columns from join cursor to inner cursor pos.

Definition at line 97 of file JoinInnerCursor.java.

Table com.quadcap.sql.JoinInnerCursor.cbTable [package]
 

If the inner is really a table, or null if it's a view.

Definition at line 103 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bnext(), com.quadcap.sql.JoinInnerCursor.findIndex(), and com.quadcap.sql.JoinInnerCursor.makeInnerIndex().

Comparator com.quadcap.sql.JoinInnerCursor.compare [package]
 

Used to compare the inner and outer join keys.

Definition at line 120 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bnext().

Database com.quadcap.sql.JoinInnerCursor.db [package]
 

Definition at line 80 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bnext(), com.quadcap.sql.JoinInnerCursor.freeRows(), com.quadcap.sql.JoinInnerCursor.JoinInnerCursor(), and com.quadcap.sql.JoinInnerCursor.makeInnerIndex().

BlockFile com.quadcap.sql.JoinInnerCursor.file [package]
 

Definition at line 81 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.freeRows().

Btree com.quadcap.sql.JoinInnerCursor.index [package]
 

Either the index from above, or a temporary one we create.

Definition at line 109 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.bfirst(), com.quadcap.sql.JoinInnerCursor.close(), com.quadcap.sql.JoinInnerCursor.freeRows(), com.quadcap.sql.JoinInnerCursor.makeInnerIndex(), com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForTable(), and com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForView().

MapRow com.quadcap.sql.JoinInnerCursor.mapRow [package]
 

Temporary used to build keys for inner table index.

Definition at line 123 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.makeInnerIndex(), and com.quadcap.sql.JoinInnerCursor.makeOuterKey().

boolean com.quadcap.sql.JoinInnerCursor.mustFreeRows = false [package]
 

Did we make create new (temporary) rows for the inner index?

Definition at line 115 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.close(), and com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForView().

BlockFile com.quadcap.sql.JoinInnerCursor.tempFile [package]
 

Definition at line 82 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.close(), and com.quadcap.sql.JoinInnerCursor.makeTemporaryIndexForView().

boolean com.quadcap.sql.JoinInnerCursor.tempIndex [package]
 

Did we make 'index', or were the columns already indexed?

Definition at line 112 of file JoinInnerCursor.java.

Referenced by com.quadcap.sql.JoinInnerCursor.close(), and com.quadcap.sql.JoinInnerCursor.makeInnerIndex().