casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BaseTable.h
Go to the documentation of this file.
1 //# BaseTable.h: Abstract base class for tables
2 //# Copyright (C) 1994,1995,1996,1997,1998,2000,2001,2002,2003
3 //# Associated Universities, Inc. Washington DC, USA.
4 //#
5 //# This library is free software; you can redistribute it and/or modify it
6 //# under the terms of the GNU Library General Public License as published by
7 //# the Free Software Foundation; either version 2 of the License, or (at your
8 //# option) any later version.
9 //#
10 //# This library is distributed in the hope that it will be useful, but WITHOUT
11 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 //# License for more details.
14 //#
15 //# You should have received a copy of the GNU Library General Public License
16 //# along with this library; if not, write to the Free Software Foundation,
17 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 //#
19 //# Correspondence concerning AIPS++ should be addressed as follows:
20 //# Internet email: aips2-request@nrao.edu.
21 //# Postal address: AIPS++ Project Office
22 //# National Radio Astronomy Observatory
23 //# 520 Edgemont Road
24 //# Charlottesville, VA 22903-2475 USA
25 //#
26 //# $Id$
27 
28 #ifndef TABLES_BASETABLE_H
29 #define TABLES_BASETABLE_H
30 
31 
32 //# Includes
33 #include <casacore/casa/aips.h>
41 
42 #ifdef HAVE_MPI
43 #include <mpi.h>
44 #endif
45 
46 namespace casacore { //# NAMESPACE CASACORE - BEGIN
47 
48 //# Forward Declarations
49 class RefTable;
50 // class TableDesc; !Forward declaration not recognized SGI compiler
51 class TableLock;
52 class BaseColumn;
53 class ColumnDesc;
54 class TableRecord;
55 class Record;
56 class TableExprNode;
57 class BaseTableIterator;
58 class DataManager;
59 class IPosition;
60 template<class T> class Vector;
61 template<class T> class Block;
62 template<class T> class PtrBlock;
63 class AipsIO;
64 
65 
66 // <summary>
67 // Abstract base class for tables
68 // </summary>
69 
70 // <use visibility=local>
71 
72 // <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="">
73 // </reviewed>
74 
75 // <prerequisite>
76 //# Classes you should understand before using this one.
77 // <li> Table
78 // <li> Sort
79 // <li> TableExprNode
80 // </prerequisite>
81 
82 // <etymology>
83 // BaseTable is the (abstract) base class for different kind of tables.
84 // </etymology>
85 
86 // <synopsis>
87 // BaseTables defines many virtual functions, which are actually
88 // implemented in the underlying table classes like PlainTable and
89 // RefTable. Other functions like sort and select are implemented
90 // in BaseTable itself.
91 //
92 // The functions in BaseTable and its derived classes can only be
93 // used by the table system classes. All user access is via the
94 // envelope class Table, which references (counted) BaseTable.
95 // </synopsis>
96 
97 // <todo asof="$DATE:$">
98 //# A List of bugs, limitations, extensions or planned refinements.
99 // <li> Implement function renameColumn, removeColumn.
100 // </todo>
101 
102 
104 {
105 public:
106 
107  // Initialize the object.
108  BaseTable (const String& tableName, int tableOption, uInt nrrow);
109 
110 #ifdef HAVE_MPI
111  // MPI version of the constructor
112  BaseTable (MPI_Comm mpiComm, const String& tableName, int tableOption, uInt nrrow);
113 #endif
114 
115  // Common code shared by the MPI constructor and non-MPI constructor
116  void BaseTableCommon (const String& tableName, int tableOption, uInt nrrow);
117 
118  virtual ~BaseTable();
119 
120  // Link to this BaseTable object (i.e. increase reference count).
121  void link();
122 
123  // Unlink from a BaseTable.
124  // Delete it if no more references.
125  static void unlink (BaseTable*);
126 
127  // Is the table a null table?
128  // By default it is not.
129  virtual Bool isNull() const;
130 
131  // Reopen the table for read/write.
132  virtual void reopenRW() = 0;
133 
134  // Is the table stored in big or little endian format?
135  virtual Bool asBigEndian() const = 0;
136 
137  // Get the storage option used for the table.
138  virtual const StorageOption& storageOption() const = 0;
139 
140  // Is the table in use (i.e. open) in another process?
141  // If <src>checkSubTables</src> is set, it is also checked if
142  // a subtable is used in another process.
143  virtual Bool isMultiUsed(Bool checkSubTables) const = 0;
144 
145  // Get the locking info.
146  virtual const TableLock& lockOptions() const = 0;
147 
148  // Merge the given lock info with the existing one.
149  virtual void mergeLock (const TableLock& lockOptions) = 0;
150 
151  // Has this process the read or write lock, thus can the table
152  // be read or written safely?
153  virtual Bool hasLock (FileLocker::LockType) const = 0;
154 
155  // Try to lock the table for read or write access.
156  virtual Bool lock (FileLocker::LockType, uInt nattempts) = 0;
157 
158  // Unlock the table. This will also synchronize the table data,
159  // thus force the data to be written to disk.
160  virtual void unlock() = 0;
161 
162  // Flush the table, i.e. write it to disk.
163  virtual void flush (Bool fsync, Bool recursive) = 0;
164 
165  // Resync the Table object with the table file.
166  virtual void resync() = 0;
167 
168  // Get the modify counter.
169  virtual uInt getModifyCounter() const = 0;
170 
171  // Set the table to being changed. By default it does nothing.
172  virtual void setTableChanged();
173 
174  // Do not write the table (used in in case of exceptions).
175  void doNotWrite()
176  { noWrite_p = True; }
177 
178  // Test if this table is writable.
179  // This tells if values can be put into a column.
180  virtual Bool isWritable() const = 0;
181 
182  // Test if the given column is writable.
183  // <group>
184  Bool isColumnWritable (const String& columnName) const;
185  Bool isColumnWritable (uInt columnIndex) const;
186  // </group>
187 
188  // Test if the given column is stored (otherwise it is virtual).
189  // <group>
190  Bool isColumnStored (const String& columnName) const;
191  Bool isColumnStored (uInt columnIndex) const;
192  // </group>
193 
194  // Get the table name.
195  const String& tableName() const
196  { return name_p; }
197 
198  // Get the names of the tables this table consists of.
199  // The default implementation adds the name of this table to the block.
200  virtual void getPartNames (Block<String>& names, Bool recursive) const;
201 
202  // Rename the table.
203  // The following options can be given:
204  // <dl>
205  // <dt> Table::Update
206  // <dd> A table with this name must already exists, which will be
207  // overwritten. When succesfully renamed, the table is unmarked
208  // for delete (if necessary).
209  // <dt> Table::New
210  // <dd> When a table with this name exists, it will be overwritten.
211  // When succesfully renamed, the table is unmarked
212  // for delete (if necessary).
213  // <dt> Table::NewNoReplace
214  // <dd> When a table with this name already exists, an exception
215  // is thrown. When succesfully renamed, the table
216  // is unmarked for delete (if necessary).
217  // <dt> Table::Scratch
218  // <dd> Same as Table::New, but followed by markForDelete().
219  // </dl>
220  // The rename function in this base class renames the table file.
221  // In a derived class (e.g. PlainTable) the function should also
222  // be implemented to rename subtables in its keywords.
223  virtual void rename (const String& newName, int tableOption);
224 
225  // Copy the table and all its subtables.
226  // The default implementation of deepCopy is to call copy.
227  // The following options can be given:
228  // <dl>
229  // <dt> Table::New
230  // <dd> When a table with this name exists, it will be overwritten.
231  // <dt> Table::NewNoReplace
232  // <dd> When a table with this name already exists, an exception
233  // is thrown.
234  // <dt> Table::Scratch
235  // <dd> Same as Table::New, but followed by markForDelete().
236  // </dl>
237  // <group>
238  virtual void copy (const String& newName, int tableOption) const;
239  virtual void deepCopy (const String& newName,
240  const Record& dataManagerInfo,
241  const StorageOption&,
242  int tableOption,
243  Bool valueCopy,
244  int endianFormat,
245  Bool noRows) const;
246  // </group>
247 
248  // Get the table type.
249  // By default it returns Table::Plain.
250  virtual int tableType() const;
251 
252  // Get the table option.
253  int tableOption() const
254  { return option_p; }
255 
256  // Mark the table for delete.
257  // This means that the underlying table gets deleted when it is
258  // actually destructed.
259  // The scratchCallback function is called when needed.
260  void markForDelete (Bool callback, const String& oldName);
261 
262  // Unmark the table for delete.
263  // This means the underlying table does not get deleted when destructed.
264  // The scratchCallback function is called when needed.
265  void unmarkForDelete (Bool callback, const String& oldName);
266 
267  // Test if the table is marked for delete.
269  { return delete_p; }
270 
271  // Get the table description.
272  const TableDesc& tableDesc() const
273  { return (tdescPtr_p == 0 ? makeTableDesc() : *tdescPtr_p); }
274 
275  // Get the actual table description.
276  virtual TableDesc actualTableDesc() const = 0;
277 
278  // Get the data manager info.
279  virtual Record dataManagerInfo() const = 0;
280 
281  // Show the table structure (implementation of Table::showStructure).
282  void showStructure (std::ostream&,
283  Bool showDataMan,
284  Bool showColumns,
285  Bool showSubTables,
286  Bool sortColumns,
287  Bool cOrder);
288 
289  // Get readonly access to the table keyword set.
290  virtual TableRecord& keywordSet() = 0;
291 
292  // Get read/write access to the table keyword set.
293  // This requires that the table is locked (or it gets locked
294  // when using AutoLocking mode).
295  virtual TableRecord& rwKeywordSet() = 0;
296 
297  // Get access to the TableInfo object.
299  { return info_p; }
300 
301  // Get the table info of the table with the given name.
302  // An empty object is returned when the table is unknown.
303  static TableInfo tableInfo (const String& tableName);
304 
305  // Write the TableInfo object.
306  virtual void flushTableInfo();
307 
308  // Get number of rows.
309  uInt nrow() const
310  { return nrrow_p; }
311 
312  // Get a column object using its index.
313  virtual BaseColumn* getColumn (uInt columnIndex) const = 0;
314 
315  // Get a column object using its name.
316  virtual BaseColumn* getColumn (const String& columnName) const = 0;
317 
318  // Test if it is possible to add a row to this table.
319  virtual Bool canAddRow() const;
320 
321  // Add one or more rows and possibly initialize them.
322  // This will fail for tables not supporting addition of rows.
323  virtual void addRow (uInt nrrow = 1, Bool initialize = True);
324 
325  // Test if it is possible to remove a row from this table.
326  virtual Bool canRemoveRow() const;
327 
328  // Remove rows.
329  // This will fail for tables not supporting removal of rows.
330  // <note role=tip>
331  // The following code fragments do NOT have the same result:
332  // <srcblock>
333  // tab.removeRow (10); // remove row 10
334  // tab.removeRow (20); // remove row 20, which was 21
335  //
336  // Vector<uInt> vec(2);
337  // vec(0) = 10;
338  // vec(1) = 20;
339  // tab.removeRow (vec); // remove row 10 and 20
340  // </srcblock>
341  // because in the first fragment removing row 10 turns the former
342  // row 21 into row 20.
343  // </note>
344  // <group>
345  virtual void removeRow (uInt rownr);
346  void removeRow (const Vector<uInt>& rownrs);
347  // </group>
348 
349  // Find the data manager with the given name or for the given column.
350  virtual DataManager* findDataManager (const String& name,
351  Bool byColumn) const = 0;
352 
353  // Select rows using the given expression (which can be null).
354  // Skip first <src>offset</src> matching rows.
355  // Return at most <src>maxRow</src> matching rows.
356  BaseTable* select (const TableExprNode&, uInt maxRow, uInt offset);
357 
358  // Select maxRow rows and skip first offset rows. maxRow=0 means all.
359  BaseTable* select (uInt maxRow, uInt offset);
360 
361  // Select rows using a vector of row numbers.
362  BaseTable* select (const Vector<uInt>& rownrs);
363 
364  // Select rows using a mask block.
365  // The length of the block must match the number of rows in the table.
366  // If True, the corresponding row will be selected.
367  BaseTable* select (const Block<Bool>& mask);
368 
369  // Project the given columns (i.e. select the columns).
370  BaseTable* project (const Block<String>& columnNames);
371 
372  //# Virtually concatenate all tables in this column.
373  //# The column cells must contain tables with the same description.
374 //#// BaseTable* concatenate (const String& columnName);
375 
376  // Do logical operations on a table.
377  // <group>
378  // intersection with another table
380  // union with another table
382  // subtract another table
384  // xor with another table
386  // take complement
387  BaseTable* tabNot ();
388  // </group>
389 
390  // Sort a table on one or more columns of scalars.
391  BaseTable* sort (const Block<String>& columnNames,
392  const Block<CountedPtr<BaseCompare> >& compareObjects,
393  const Block<Int>& sortOrder, int sortOption);
394 
395  // Create an iterator.
396  BaseTableIterator* makeIterator (const Block<String>& columnNames,
398  const Block<Int>& orders, int option);
399 
400  // Add one or more columns to the table.
401  // The default implementation throws an "invalid operation" exception.
402  // <group>
403  virtual void addColumn (const ColumnDesc& columnDesc, Bool addToParent);
404  virtual void addColumn (const ColumnDesc& columnDesc,
405  const String& dataManager, Bool byName,
406  Bool addToParent);
407  virtual void addColumn (const ColumnDesc& columnDesc,
408  const DataManager& dataManager, Bool addToParent);
409  virtual void addColumn (const TableDesc& tableDesc,
410  const DataManager& dataManager, Bool addToParent);
411  // </group>
412 
413  // Add one or more columns to the table.
414  // The data manager to use is described in the record.
415  void addColumns (const TableDesc& tableDesc, const Record& dmInfo,
416  Bool addToParent);
417 
418  // Test if columns can be removed.
419  virtual Bool canRemoveColumn (const Vector<String>& columnNames) const = 0;
420 
421  // Remove columns.
422  virtual void removeColumn (const Vector<String>& columnNames) = 0;
423 
424  // Check if the set of columns can be removed.
425  // It checks if columns have not been specified twice and it
426  // checks if they exist.
427  // If the flag is set an exception is thrown if errors are found.
428  Bool checkRemoveColumn (const Vector<String>& columnNames,
429  Bool throwException) const;
430 
431  // Test if a column can be renamed.
432  virtual Bool canRenameColumn (const String& columnName) const = 0;
433 
434  // Rename a column.
435  virtual void renameColumn (const String& newName,
436  const String& oldName) = 0;
437 
438  // Rename a hypercolumn.
439  virtual void renameHypercolumn (const String& newName,
440  const String& oldName) = 0;
441 
442  // Get a vector of row numbers.
443  // By default it returns the row numbers 0..nrrow()-1.
444  // It needs to be implemented for RefTable only.
445  virtual Vector<uInt> rowNumbers() const;
446 
447  // Get pointer to root table (i.e. parent of a RefTable).
448  // Default it is this table.
449  // It is meant for the reference tables after a select or sort which
450  // can then still name their parent as the root.
451  virtual BaseTable* root();
452 
453  // Tell if the table is in row order.
454  // By default it is, since normally a table is always in row order.
455  // It is meant for RefTable-s, where the rows can be in
456  // another (sorted) order.
457  virtual Bool rowOrder() const;
458 
459  // By the default the table cannot return the storage of rownrs.
460  // That can only be done by a RefTable, where it is implemented.
461  virtual Vector<uInt>* rowStorage();
462 
463  // Adjust the row numbers to be the actual row numbers in the
464  // root table. This is, for instance, used when a RefTable is sorted.
465  // Optionally it also determines if the resulting rows are in order.
466  virtual Bool adjustRownrs (uInt nrrow, Vector<uInt>& rownrs,
467  Bool determineOrder) const;
468 
469  // Do the actual sort.
470  // The default implementation is suitable for almost all cases.
471  // Only in RefTable a smarter implementation is provided.
474  const Block<Int>& sortOrder,
475  int sortOption);
476 
477  // Create a RefTable object.
478  RefTable* makeRefTable (Bool rowOrder, uInt initialNrrow);
479 
480  // Check if the row number is valid.
481  // It throws an exception if out of range.
482  void checkRowNumber (uInt rownr) const
483  { if (rownr >= nrrow_p + nrrowToAdd_p) checkRowNumberThrow (rownr); }
484 
485  // Get the table's trace-id.
486  int traceId() const
487  { return itsTraceId; }
488 
489 
490 protected:
491  uInt nrlink_p; //# #references to this table
492  uInt nrrow_p; //# #rows in this table
493  uInt nrrowToAdd_p; //# #rows to be added
494  TableDesc* tdescPtr_p; //# Pointer to table description
495  String name_p; //# table name
496  int option_p; //# Table constructor option
497  Bool noWrite_p; //# False = do not write the table
498  Bool delete_p; //# True = delete when destructed
499  TableInfo info_p; //# Table information (type, etc.)
500  Bool madeDir_p; //# True = table dir has been created
501  int itsTraceId; //# table-id for TableTrace tracing
502 
503 
504  // Do the callback for scratch tables (if callback is set).
505  void scratchCallback (Bool isScratch, const String& oldName) const;
506 
507  // Create the table directory when needed (and possible).
508  // When the file already exists, check if it is a directory.
509  // It returns True when it actually created the directory.
510  Bool makeTableDir();
511 
512  // Make a true deep copy of the table.
513  void trueDeepCopy (const String& newName,
514  const Record& dataManagerInfo,
515  const StorageOption&,
516  int tableOption,
517  int endianFormat,
518  Bool noRows) const;
519 
520  // Prepare for copying or renaming a table.
521  // It checks if the target table already exists and removes it
522  // when necessary.
523  void prepareCopyRename (const String& newName, int tableOption) const;
524 
525  // Rename the subtables (used by rename function).
526  virtual void renameSubTables (const String& newName,
527  const String& oldName);
528 
529  // Check if the table already exists.
530  // Throw an exception if so.
531  void throwIfTableExists();
532 
533  // Test if the table is opened for write.
534  Bool openedForWrite() const;
535 
536  // Start writing a table. It does a putstart and writes <src>nrrow_p</src>.
537  // It should be ended by calling <src>writeEnd</src>.
538  void writeStart (AipsIO&, Bool bigEndian);
539 
540  // End writing a table.
541  void writeEnd (AipsIO&);
542 
543  // Should the table be written.
544  // This flag is False if an exception was thrown.
546  { return noWrite_p; }
547 
548  // Read the TableInfo object.
549  void getTableInfo();
550 
551 private:
552  // Copy constructor is forbidden, because copying a table requires
553  // some more knowledge (like table name of result).
554  // Declaring it private, makes it unusable.
555  BaseTable (const BaseTable&);
556 
557  // Assignment is forbidden, because copying a table requires
558  // some more knowledge (like table name of result).
559  // Declaring it private, makes it unusable.
560  BaseTable& operator= (const BaseTable&);
561 
562  // Show a possible extra table structure header.
563  // It is used by e.g. RefTable to show which table is referenced.
564  virtual void showStructureExtra (std::ostream&) const;
565 
566  // Show the info of the given columns.
567  // Sort the columns if needed.
568  void showColumnInfo (ostream& os, const TableDesc&, uInt maxNameLength,
569  const Array<String>& columnNames, Bool sort,
570  Bool cOrder) const;
571 
572  // Throw an exception for checkRowNumber.
573  void checkRowNumberThrow (uInt rownr) const;
574 
575  // Check if the tables combined in a logical operation have the
576  // same root.
577  void logicCheck (BaseTable* that);
578 
579  // Get the rownrs of the table in ascending order to be
580  // used in the logical operation on the table.
581  uInt logicRows (uInt*& rownrs, Bool& allocated);
582 
583  // Make an empty table description.
584  // This is used if one asks for the description of a NullTable.
585  // Creating an empty TableDesc in the NullTable takes too much time.
586  // Furthermore it causes static initialization order problems.
587  const TableDesc& makeTableDesc() const;
588 
589  // Make the name absolute.
590  // It first checks if the name contains valid characters (not only . and /).
591  String makeAbsoluteName (const String& name) const;
592 
593 #ifdef HAVE_MPI
594  // MPI communicator for parallel I/O
595  // Set the default to MPI_COMM_WORLD to keep the compatibility for
596  // non-MPI apps to work with the MPI-enabled casacore build.
597  MPI_Comm itsMpiComm = MPI_COMM_WORLD;
598 #endif
599 };
600 
601 
602 
603 
604 } //# NAMESPACE CASACORE - END
605 
606 #endif
BaseTable * select(const TableExprNode &, uInt maxRow, uInt offset)
Select rows using the given expression (which can be null).
virtual void renameHypercolumn(const String &newName, const String &oldName)=0
Rename a hypercolumn.
TableInfo info_p
Definition: BaseTable.h:499
std::vector< double > Vector
Definition: ds9context.h:24
virtual const StorageOption & storageOption() const =0
Get the storage option used for the table.
virtual DataManager * findDataManager(const String &name, Bool byColumn) const =0
Find the data manager with the given name or for the given column.
int tableOption() const
Get the table option.
Definition: BaseTable.h:253
int MPI_Comm
Definition: MPIGlue.h:59
Bool isColumnWritable(const String &columnName) const
Test if the given column is writable.
virtual Bool isNull() const
Is the table a null table? By default it is not.
LatticeExprNode mask(const LatticeExprNode &expr)
This function returns the mask of the given expression.
virtual void mergeLock(const TableLock &lockOptions)=0
Merge the given lock info with the existing one.
virtual int tableType() const
Get the table type.
AipsIO is the object persistency mechanism of Casacore.
Definition: AipsIO.h:168
virtual Bool canRenameColumn(const String &columnName) const =0
Test if a column can be renamed.
void checkRowNumberThrow(uInt rownr) const
Throw an exception for checkRowNumber.
Bool isColumnStored(const String &columnName) const
Test if the given column is stored (otherwise it is virtual).
virtual void reopenRW()=0
Reopen the table for read/write.
Handle class for a table column expression tree.
Definition: ExprNode.h:155
BaseTable * tabXor(BaseTable *)
xor with another table
Envelope class for the description of a table column.
Definition: ColumnDesc.h:131
virtual BaseTable * doSort(PtrBlock< BaseColumn * > &, const Block< CountedPtr< BaseCompare > > &, const Block< Int > &sortOrder, int sortOption)
Do the actual sort.
virtual const TableLock & lockOptions() const =0
Get the locking info.
virtual void addRow(uInt nrrow=1, Bool initialize=True)
Add one or more rows and possibly initialize them.
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.
void unmarkForDelete(Bool callback, const String &oldName)
Unmark the table for delete.
Base class for table iterator.
Definition: BaseTabIter.h:83
BaseTable * tabOr(BaseTable *)
union with another table
virtual uInt getModifyCounter() const =0
Get the modify counter.
virtual TableDesc actualTableDesc() const =0
Get the actual table description.
BaseTable * tabSub(BaseTable *)
subtract another table
void scratchCallback(Bool isScratch, const String &oldName) const
Do the callback for scratch tables (if callback is set).
virtual void rename(const String &newName, int tableOption)
Rename the table.
void getTableInfo()
Read the TableInfo object.
virtual Bool lock(FileLocker::LockType, uInt nattempts)=0
Try to lock the table for read or write access.
virtual void renameSubTables(const String &newName, const String &oldName)
Rename the subtables (used by rename function).
void writeEnd(AipsIO &)
End writing a table.
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...
virtual void getPartNames(Block< String > &names, Bool recursive) const
Get the names of the tables this table consists of.
ABSTRACT CLASSES Abstract class for colors Any implementation of color should be able to provide a hexadecimal form of the if a human readable name(i.e."black").In many places throughout the plotter
void BaseTableCommon(const String &tableName, int tableOption, uInt nrrow)
Common code shared by the MPI constructor and non-MPI constructor.
virtual Vector< uInt > rowNumbers() const
Get a vector of row numbers.
Bool makeTableDir()
Create the table directory when needed (and possible).
void markForDelete(Bool callback, const String &oldName)
Mark the table for delete.
Options defining how table files are organized.
Definition: StorageOption.h:76
RefTable * makeRefTable(Bool rowOrder, uInt initialNrrow)
Create a RefTable object.
virtual BaseTable * root()
Get pointer to root table (i.e.
virtual Vector< uInt > * rowStorage()
By the default the table cannot return the storage of rownrs.
BaseTableIterator * makeIterator(const Block< String > &columnNames, const Block< CountedPtr< BaseCompare > > &, const Block< Int > &orders, int option)
Create an iterator.
BaseTable & operator=(const BaseTable &)
Assignment is forbidden, because copying a table requires some more knowledge (like table name of res...
Referenced counted pointer for constant data.
Definition: VisModelData.h:42
Abstract base class for tables.
Definition: BaseTable.h:103
Class for a table as a view of another table.
Definition: RefTable.h:104
virtual TableRecord & rwKeywordSet()=0
Get read/write access to the table keyword set.
static void unlink(BaseTable *)
Unlink from a BaseTable.
Bool openedForWrite() const
Test if the table is opened for write.
const String & tableName() const
Get the table name.
Definition: BaseTable.h:195
String makeAbsoluteName(const String &name) const
Make the name absolute.
void checkRowNumber(uInt rownr) const
Check if the row number is valid.
Definition: BaseTable.h:482
virtual void removeColumn(const Vector< String > &columnNames)=0
Remove columns.
BaseTable * tabAnd(BaseTable *)
Do logical operations on a table.
virtual void copy(const String &newName, int tableOption) const
Copy the table and all its subtables.
virtual void unlock()=0
Unlock the table.
A hierarchical collection of named fields of various types.
Definition: Record.h:180
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
virtual Bool isWritable() const =0
Test if this table is writable.
virtual void removeRow(uInt rownr)
Remove rows.
BaseTable * project(const Block< String > &columnNames)
Project the given columns (i.e.
#define MPI_COMM_WORLD
Definition: MPIGlue.h:65
void logicCheck(BaseTable *that)
Check if the tables combined in a logical operation have the same root.
int traceId() const
Get the table&#39;s trace-id.
Definition: BaseTable.h:486
Table type, subtype and further info.
Definition: TableInfo.h:130
virtual BaseColumn * getColumn(uInt columnIndex) const =0
Get a column object using its index.
Class to hold table lock options.
Definition: TableLock.h:65
const TableDesc & makeTableDesc() const
Make an empty table description.
A drop-in replacement for Block&lt;T*&gt;.
Definition: WProjectFT.h:54
virtual void resync()=0
Resync the Table object with the table file.
virtual Bool canAddRow() const
Test if it is possible to add a row to this table.
A hierarchical collection of named fields of various types.
Definition: TableRecord.h:182
template &lt;class T, class U&gt; class vector;
Definition: MSFlagger.h:37
void prepareCopyRename(const String &newName, int tableOption) const
Prepare for copying or renaming a table.
uInt nrow() const
Get number of rows.
Definition: BaseTable.h:309
Bool isMarkedForDelete() const
Test if the table is marked for delete.
Definition: BaseTable.h:268
simple 1-D array
void trueDeepCopy(const String &newName, const Record &dataManagerInfo, const StorageOption &, int tableOption, int endianFormat, Bool noRows) const
Make a true deep copy of the table.
virtual Bool canRemoveColumn(const Vector< String > &columnNames) const =0
Test if columns can be removed.
BaseTable * sort(const Block< String > &columnNames, const Block< CountedPtr< BaseCompare > > &compareObjects, const Block< Int > &sortOrder, int sortOption)
Sort a table on one or more columns of scalars.
Bool checkRemoveColumn(const Vector< String > &columnNames, Bool throwException) const
Check if the set of columns can be removed.
Abstract base class for a data manager.
Definition: DataManager.h:224
virtual void showStructureExtra(std::ostream &) const
Show a possible extra table structure header.
virtual Record dataManagerInfo() const =0
Get the data manager info.
BaseTable * tabNot()
take complement
virtual Bool canRemoveRow() const
Test if it is possible to remove a row from this table.
virtual void flushTableInfo()
Write the TableInfo object.
void writeStart(AipsIO &, Bool bigEndian)
Start writing a table.
virtual void flush(Bool fsync, Bool recursive)=0
Flush the table, i.e.
String: the storage and methods of handling collections of characters.
Definition: String.h:223
virtual Bool isMultiUsed(Bool checkSubTables) const =0
Is the table in use (i.e.
void addColumns(const TableDesc &tableDesc, const Record &dmInfo, Bool addToParent)
Add one or more columns to the table.
virtual void renameColumn(const String &newName, const String &oldName)=0
Rename a column.
Define the structure of a Casacore table.
Definition: TableDesc.h:187
virtual void addColumn(const ColumnDesc &columnDesc, Bool addToParent)
Add one or more columns to the table.
void showStructure(std::ostream &, Bool showDataMan, Bool showColumns, Bool showSubTables, Bool sortColumns, Bool cOrder)
Show the table structure (implementation of Table::showStructure).
TableDesc * tdescPtr_p
Definition: BaseTable.h:494
LockType
Define the possible lock types.
Definition: FileLocker.h:95
const TableDesc & tableDesc() const
Get the table description.
Definition: BaseTable.h:272
void link()
Link to this BaseTable object (i.e.
Bool shouldNotWrite() const
Should the table be written.
Definition: BaseTable.h:545
virtual Bool rowOrder() const
Tell if the table is in row order.
const Bool True
Definition: aipstype.h:43
virtual Bool asBigEndian() const =0
Is the table stored in big or little endian format?
virtual Bool hasLock(FileLocker::LockType) const =0
Has this process the read or write lock, thus can the table be read or written safely?
TableInfo & tableInfo()
Get access to the TableInfo object.
Definition: BaseTable.h:298
virtual void setTableChanged()
Set the table to being changed.
void doNotWrite()
Do not write the table (used in in case of exceptions).
Definition: BaseTable.h:175
unsigned int uInt
Definition: aipstype.h:51
virtual void deepCopy(const String &newName, const Record &dataManagerInfo, const StorageOption &, int tableOption, Bool valueCopy, int endianFormat, Bool noRows) const
BaseTable(const String &tableName, int tableOption, uInt nrrow)
Initialize the object.
void showColumnInfo(ostream &os, const TableDesc &, uInt maxNameLength, const Array< String > &columnNames, Bool sort, Bool cOrder) const
Show the info of the given columns.
void throwIfTableExists()
Check if the table already exists.
Abstract base class for a table column.
Definition: BaseColumn.h:98
virtual TableRecord & keywordSet()=0
Get readonly access to the table keyword set.
#define casacore
&lt;X11/Intrinsic.h&gt; #defines true, false, casacore::Bool, and String.
Definition: X11Intrinsic.h:42