The functions in BaseTable and its derived classes can only be used by the table system classes. All user access is via the envelope class Table, which references (counted) BaseTable.
Link to this BaseTable object (i.e. increase reference count).
Unlink from a BaseTable. Delete it if no more references.
Is the table a null table? By default it is not.
Reopen the table for read/write.
Is the table stored in big or little endian format?
Is the table in use (i.e. open) in another process? If checkSubTables is set, it is also checked if a subtable is used in another process.
Get the locking info.
Merge the given lock info with the existing one.
Has this process the read or write lock, thus can the table be read or written safely?
Try to lock the table for read or write access.
Unlock the table. This will also synchronize the table data, thus force the data to be written to disk.
Flush the table, i.e. write it to disk.
Resync the Table object with the table file.
Get the modify counter.
Set the table to being changed. By default it does nothing.
Do not write the table (used in in case of exceptions).
Test if this table is writable. This tells if values can be put into a column.
Test if the given column is writable.
Test if the given column is stored (otherwise it is virtual).
Get the table name.
Rename the table. The following options can be given:
Copy the table and all its subtables. The default implementation of deepCopy is to call copy. The following options can be given:
Get the table type. By default it returns Table::Plain.
Get the table option.
Mark the table for delete. This means that the underlying table gets deleted when it is actually destructed. The scratchCallback function is called when needed.
Unmark the table for delete. This means the underlying table does not get deleted when destructed. The scratchCallback function is called when needed.
Test if the table is marked for delete.
Get the table description.
Get the actual table description.
Get the data manager info.
Get readonly access to the table keyword set.
Get read/write access to the table keyword set. This requires that the table is locked (or it gets locked when using AutoLocking mode).
Get access to the TableInfo object.
Get the table info of the table with the given name. An empty object is returned when the table is unknown.
Write the TableInfo object.
Get number of rows.
Get a column object using its index.
Get a column object using its name.
Test if it is possible to add a row to this table.
Add one or more rows and possibly initialize them. This will fail for tables not supporting addition of rows.
Test if it is possible to remove a row from this table.
Remove rows. This will fail for tables not supporting removal of rows.
The following code fragments do NOT have the same result:tab.removeRow (10); // remove row 10 tab.removeRow (20); // remove row 20, which was 21 </em></blockquote> Vector<uInt> vec(2); vec(0) = 10; vec(1) = 20; tab.removeRow (vec); // remove row 10 and 20because in the first fragment removing row 10 turns the former row 21 into row 20.virtual DataManager* findDataManager (const String& dataManagerName) const = 0
Find the data manager with the given name.
BaseTable* select (const TableExprNode&, uInt maxRow)
Select rows using the given expression.
BaseTable* select (const Vector<uInt>& rownrs)
Select rows using a vector of row numbers.
BaseTable* select (const Block<Bool>& mask)
Select rows using a mask block. The length of the block must match the number of rows in the table. If True, the corresponding row will be selected.
BaseTable* project (const Block<String>& columnNames)
Project the given columns (i.e. select the columns).
BaseTable* tabAnd (BaseTable*)
Do logical operations on a table.
intersection with another table
BaseTable* tabOr (BaseTable*)
Do logical operations on a table.
union with another table
BaseTable* tabSub (BaseTable*)
Do logical operations on a table.
subtract another table
BaseTable* tabXor (BaseTable*)
Do logical operations on a table.
xor with another table
BaseTable* tabNot ()
Do logical operations on a table.
take complement
BaseTable* sort (const Block<String>& columnNames, const PtrBlock<ObjCompareFunc*>& compareFunctionPointers, const Block<Int>& sortOrder, int sortOption)
Sort a table on one or more columns of scalars.
BaseTableIterator* makeIterator (const Block<String>& columnNames, const PtrBlock<ObjCompareFunc*>&, const Block<Int>& orders, int option)
Create an iterator.
virtual void addColumn (const ColumnDesc& columnDesc)
virtual void addColumn (const ColumnDesc& columnDesc, const String& dataManager, Bool byName)
virtual void addColumn (const ColumnDesc& columnDesc, const DataManager& dataManager)
virtual void addColumn (const TableDesc& tableDesc, const DataManager& dataManager)Add one or more columns to the table. The default implementation throws an "invalid operation" exception.
void addColumns (const TableDesc& tableDesc, const Record& dmInfo)
Add one or more columns to the table. The data manager to use is described in the record.
virtual Bool canRemoveColumn (const Vector<String>& columnNames) const = 0
Test if columns can be removed.
virtual void removeColumn (const Vector<String>& columnNames) = 0
Remove columns.
Bool checkRemoveColumn (const Vector<String>& columnNames, Bool throwException) const
Check if the set of columns can be removed. It checks if columns have not been specified twice and it checks if they exist. If the flag is set an exception is thrown if errors are found.
virtual Bool canRenameColumn (const String& columnName) const = 0
Test if a column can be renamed.
virtual void renameColumn (const String& newName, const String& oldName) = 0
Rename a column.
virtual Vector<uInt> rowNumbers() const
Get a vector of row numbers. By default it returns the row numbers 0..nrrow()-1. It needs to be implemented for RefTable only.
virtual BaseTable* root()
Get pointer to root table (i.e. parent of a RefTable). Default it is this table. It is meant for the reference tables after a select or sort which can then still name their parent as the root.
virtual Bool rowOrder() const
Tell if the table is in row order. By default it is, since normally a table is always in row order. It is meant for RefTable-s, where the rows can be in another (sorted) order.
virtual Vector<uInt>* rowStorage()
By the default the table cannot return the storage of rownrs. That can only be done by a RefTable, where it is implemented.
virtual Bool adjustRownrs (uInt nrrow, Vector<uInt>& rownrs, Bool determineOrder) const
Adjust the row numbers to be the actual row numbers in the root table. This is, for instance, used when a RefTable is sorted. Optionally it also determines if the resulting rows are in order.
virtual BaseTable* doSort (PtrBlock<BaseColumn*>&, const PtrBlock<ObjCompareFunc*>&, const Block<Int>& sortOrder, int sortOption)
Do the actual sort. The default implementation is suitable for almost all cases. Only in RefTable a smarter implementation is provided.
RefTable* makeRefTable (Bool rowOrder, uInt initialNrrow)
Create a RefTable object.
void checkRowNumber (uInt rownr) const
Check if the row number is valid. It throws an exception if out of range.
void scratchCallback (Bool isScratch, const String& oldName) const
Do the callback for scratch tables (if callback is set).
Bool makeTableDir()
Create the table directory when needed (and possible). When the file already exists, check if it is a directory. It returns True when it actually created the directory.
void trueDeepCopy (const String& newName, const Record& dataManagerInfo, int tableOption, int endianFormat, Bool noRows) const
Make a true deep copy of the table.
void prepareCopyRename (const String& newName, int tableOption) const
Prepare for copying or renaming a table. It checks if the target table already exists and removes it when necessary.
virtual void renameSubTables (const String& newName, const String& oldName)
Rename the subtables (used by rename function).
void throwIfTableExists()
Check if the table already exists. Throw an exception if so.
Bool openedForWrite() const
Test if the table is opened for write.
void writeStart (AipsIO&, Bool bigEndian)
Start writing a table. It does a putstart and writes nrrow_p. It should be ended by calling writeEnd.
void writeEnd (AipsIO&)
End writing a table.
Bool shouldNotWrite() const
Should the table be written. This flag is False if an exception was thrown.
void getTableInfo()
Read the TableInfo object.
BaseTable (const BaseTable&)
Copy constructor is forbidden, because copying a table requires some more knowledge (like table name of result). Declaring it private, makes it unusable.BaseTable& operator= (const BaseTable&)
Assignment is forbidden, because copying a table requires some more knowledge (like table name of result). Declaring it private, makes it unusable.
void checkRowNumberThrow (uInt rownr) const
Throw an exception for checkRowNumber.
void logicCheck (BaseTable* that)
Check if the tables combined in a logical operation have the same root.
uInt logicRows (uInt*& rownrs, Bool& allocated)
Get the rownrs of the table in ascending order to be used in the logical operation on the table.
const TableDesc& makeTableDesc() const
Make an empty table description. This is used if one asks for the description of a NullTable. Creating an empty TableDesc in the NullTable takes too much time. Furthermore it causes static initialization order problems.