DataStructures::Table Class Reference

Holds a set of columns, a set of rows, and rows times columns cells. The table data structure is useful if you want to store a set of structures and perform queries on those structures This is a relatively simple and fast implementation of the types of tables commonly used in databases See TableSerializer to serialize data members of the table See LightweightDatabaseClient and LightweightDatabaseServer to transmit the table over the network. More...

#include <DS_Table.h>

List of all members.

Public Types

enum  ColumnType { NUMERIC, STRING, BINARY }
enum  FilterQueryType {
  QF_EQUAL, QF_NOT_EQUAL, QF_GREATER_THAN, QF_LESS_THAN,
  QF_IS_EMPTY, QF_NOT_EMPTY
}
enum  SortQueryType { QS_INCREASING_ORDER, QS_DECREASING_ORDER }
 Increasing or decreasing sort order.

Public Member Functions

 Table ()
 Constructor.
 ~Table ()
 Destructor.
unsigned AddColumn (char columnName[_TABLE_MAX_COLUMN_NAME_LENGTH], ColumnType columnType)
 Adds a column to the table.
void RemoveColumn (unsigned columnIndex)
 Removes a column by index.
unsigned ColumnIndex (char columnName[_TABLE_MAX_COLUMN_NAME_LENGTH])
 Gets the index of a column by name Column indices are stored in the order they are added.
char * ColumnName (unsigned index)
 Gives the string name of the column at a certain index.
ColumnType GetColumnType (unsigned index)
 Returns the type of a column, referenced by index.
unsigned GetColumnCount (void) const
unsigned GetRowCount (void) const
Table::RowAddRow (unsigned rowId)
 Adds a row to the table New rows are added with empty values for all cells. However, if you specify initialCelLValues you can specify initial values It's up to you to ensure that the values in the specific cells match the type of data used by that row rowId can be considered the primary key for the row. It is much faster to lookup a row by its rowId than by searching keys. rowId must be unique Rows are stored in sorted order in the table, using rowId as the sort key.
Table::RowAddRow (unsigned rowId, DataStructures::List< Cell > &initialCellValues)
void RemoveRow (unsigned rowId)
void RemoveRows (Table *tableContainingRowIDs)
bool UpdateCell (unsigned rowId, unsigned columnIndex, int value)
bool UpdateCell (unsigned rowId, unsigned columnIndex, char *str)
bool UpdateCell (unsigned rowId, unsigned columnIndex, int byteLength, char *data)
RowGetRowByID (unsigned rowId)
RowGetRowByIndex (unsigned rowIndex)
void QueryTable (unsigned *columnSubset, unsigned numColumnSubset, FilterQuery *inclusionFilters, unsigned numInclusionFilters, unsigned *rowIds, unsigned numRowIDs, Table *result)
 Queries the table, optionally returning only a subset of columns and rows.
void SortTable (Table::SortQuery *sortQueries, unsigned numSortQueries, Table::Row **out)
 Sorts the table by rows You can sort the table in ascending or descending order on one or more columns Columns have precedence in the order they appear in the sortQueries array If a row cell on column n has the same value as a a different row on column n, then the row will be compared on column n+1.
void Clear (void)
 Frees all memory in the table.
void PrintRow (char *out, int outLength, char columnDelineator, bool printDelineatorForBinary, Table::Row *inputRow)
DataStructures::List< ColumnDescriptor > & GetColumns (void)
 Direct access to make things easier.
DataStructures::BPlusTree<
unsigned, Row *, _TABLE_BPLUS_TREE_ORDER > & 
GetRows (void)
 Direct access to make things easier.
DataStructures::Page< unsigned,
DataStructures::Table::Row *,
_TABLE_BPLUS_TREE_ORDER > * 
GetListHead (void)

Protected Member Functions

Table::RowAddRowColumns (unsigned rowId, Row *row, DataStructures::List< unsigned > columnIndices)
void DeleteRow (Row *row)
void QueryRow (DataStructures::List< unsigned > &inclusionFilterColumnIndices, DataStructures::List< unsigned > &columnIndicesToReturn, unsigned key, Table::Row *row, FilterQuery *inclusionFilters, Table *result)

Protected Attributes

DataStructures::BPlusTree<
unsigned, Row *, _TABLE_BPLUS_TREE_ORDER > 
rows
DataStructures::List< ColumnDescriptorcolumns

Classes

struct  Cell
 Holds the actual data in the table. More...
struct  ColumnDescriptor
struct  FilterQuery
struct  Row
 Stores the list of cells for this row, and a special flag used for internal sorting. More...
struct  SortQuery


Detailed Description

Holds a set of columns, a set of rows, and rows times columns cells. The table data structure is useful if you want to store a set of structures and perform queries on those structures This is a relatively simple and fast implementation of the types of tables commonly used in databases See TableSerializer to serialize data members of the table See LightweightDatabaseClient and LightweightDatabaseServer to transmit the table over the network.


Member Function Documentation

unsigned Table::AddColumn char  columnName[_TABLE_MAX_COLUMN_NAME_LENGTH],
ColumnType  columnType
 

Adds a column to the table.

Parameters:
[in] columnName The name of the column
[in] columnType What type of data this column will hold
Returns:
The index of the new column

Table::Row * Table::AddRow unsigned  rowId  ) 
 

Adds a row to the table New rows are added with empty values for all cells. However, if you specify initialCelLValues you can specify initial values It's up to you to ensure that the values in the specific cells match the type of data used by that row rowId can be considered the primary key for the row. It is much faster to lookup a row by its rowId than by searching keys. rowId must be unique Rows are stored in sorted order in the table, using rowId as the sort key.

Parameters:
[in] rowId The UNIQUE primary key for the row. This can never be changed.
[in] initialCellValues Initial values to give the row (optional)
Returns:
The newly added row

unsigned Table::ColumnIndex char  columnName[_TABLE_MAX_COLUMN_NAME_LENGTH]  ) 
 

Gets the index of a column by name Column indices are stored in the order they are added.

Parameters:
[in] columnName The name of the column
Returns:
The index of the column, or (unsigned)-1 if no such column

char * Table::ColumnName unsigned  index  ) 
 

Gives the string name of the column at a certain index.

Parameters:
[in] index The index of the column
Returns:
The name of the column, or 0 if an invalid index

unsigned Table::GetColumnCount void   )  const
 

Returns the number of columns

Returns:
The number of columns in the table

Table::ColumnType Table::GetColumnType unsigned  index  ) 
 

Returns the type of a column, referenced by index.

Parameters:
[in] index The index of the column
Returns:
The type of the column

Table::Row * Table::GetRowByID unsigned  rowId  ) 
 

Gets a row. More efficient to do this and access Row::cells than to repeatedly call GetCell. You can also update cells in rows from this function.

Parameters:
[in] rowId The ID of the row
Returns:
The desired row, or 0 if no such row.

Table::Row * Table::GetRowByIndex unsigned  rowIndex  ) 
 

Gets a row at a specific index rowIndex should be less than GetRowCount()

Parameters:
[in] rowIndex The index of the row
Returns:
The desired row, or 0 if no such row.

unsigned Table::GetRowCount void   )  const
 

Returns the number of rows

Returns:
The number of rows in the table

void Table::PrintRow char *  out,
int  outLength,
char  columnDelineator,
bool  printDelineatorForBinary,
Table::Row inputRow
 

Writes a text representation of the row to out

Parameters:
[out] out A pointer to an array of bytes which will hold the output.
[in] outLength The size of the out array
[in] columnDelineator What character to print to delineate columns
[in] printDelineatorForBinary Binary output is not printed. True to still print the delineator.
[in] inputRow The row to print

void Table::QueryTable unsigned *  columnSubset,
unsigned  numColumnSubset,
FilterQuery *  inclusionFilters,
unsigned  numInclusionFilters,
unsigned *  rowIds,
unsigned  numRowIDs,
Table result
 

Queries the table, optionally returning only a subset of columns and rows.

Parameters:
[in] columnSubset An array of column indices. Only columns in this array are returned. Pass 0 for all columns
[in] numColumnSubset The number of elements in columnSubset
[in] inclusionFilters An array of FilterQuery. All filters must pass for the row to be returned.
[in] numInclusionFilters The number of elements in inclusionFilters
[in] rowIds An arrow of row IDs. Only these rows with these IDs are returned. Pass 0 for all rows.
[in] numRowIDs The number of elements in rowIds
[out] result The result of the query. If no rows are returned, the table will only have columns.

void Table::RemoveColumn unsigned  columnIndex  ) 
 

Removes a column by index.

Parameters:
[in] columnIndex The index of the column to remove

void Table::RemoveRow unsigned  rowId  ) 
 

Removes a row specified by rowId

Parameters:
[in] rowId The ID of the row

void Table::RemoveRows Table tableContainingRowIDs  ) 
 

Removes all the rows with IDs that the specified table also has

Parameters:
[in] tableContainingRowIDs The IDs of the rows

void Table::SortTable Table::SortQuery *  sortQueries,
unsigned  numSortQueries,
Table::Row **  out
 

Sorts the table by rows You can sort the table in ascending or descending order on one or more columns Columns have precedence in the order they appear in the sortQueries array If a row cell on column n has the same value as a a different row on column n, then the row will be compared on column n+1.

Parameters:
[in] sortQueries A list of SortQuery structures, defining the sorts to perform on the table
[in] numColumnSubset The number of elements in numSortQueries
[out] out The address of an array of Rows, which will receive the sorted output. The array must be long enough to contain all returned rows, up to GetRowCount()

bool Table::UpdateCell unsigned  rowId,
unsigned  columnIndex,
int  value
 

Parameters:
[in] columnIndex The column of the cell
[in] value The data to set


The documentation for this class was generated from the following files:
Generated on Sat Oct 14 08:37:41 2006 for RakNet by  doxygen 1.4.6-NO