casacore
TableUtil.h
Go to the documentation of this file.
1//# TableUtil.h: Utility functions for tables
2//# Copyright (C) 2022
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 receied 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_TABLEUTIL_H
29#define TABLES_TABLEUTIL_H
30
31#include <casacore/casa/aips.h>
32#include <casacore/tables/Tables/Table.h>
33#include <casacore/tables/Tables/TableLock.h>
34#include <casacore/tables/DataMan/TSMOption.h>
35#include <casacore/casa/Containers/Record.h>
36#include <casacore/casa/Utilities/DataType.h>
37
38namespace casacore {
39
40 // The TableUtil namespace contains several convenience functions operating
41 // on Table objects. They make it very convenient to open, close or delete
42 // main tables and subtables.
43 // <p>
44 // The function <src>openTable</src> makes it possible to open a subtable
45 // of a table in a convenient way, even if the table is only a reference
46 // to another table (e.g., a selection). The name can be given with colons as
47 // 'maintab::subtab1::subtab2' meaning that subtab2 is opened and returned.
48 // Of course, it can also be used to open a main table such as 'my.tab'.
49 //
50 // Similar to <src>openTable</src>, the function <src>createTable</src>
51 // can be used to create a (sub)table, possibly using the :: notation.
52 // <br><src>deleteTable</src> is similar to delete a (sub)table.
53
54 namespace TableUtil {
55
56 // Try to open a table. The name of the table can contain subtable names
57 // using :: as separator. In this way it is possible to directly open a
58 // subtable of a RefTable or ConcatTable, which is not possible if the
59 // table name is specified with slashes.
60 // <br>The open process is as follows:
61 // <ul>
62 // <li> It is tried to open the table with the given name.
63 // <li> If unsuccessful, the name is split into its parts using ::
64 // The first part is the main table which will be opened temporarily.
65 // The other parts are the successive subtable names (usually one).
66 // Each subtable is opened by looking it up in the keywords of the
67 // table above. The final subtable is returned.
68 // </ul>
69 // <br>An exception is thrown if the table cannot be opened.
70 // <example>
71 // Open the ANTENNA subtable of an MS which might be a selection of
72 // a real MS.
73 // <srcblock>
74 // Table tab(Table::openTable ("sel.ms::ANTENNA");
75 // </srcblock>
76 // </example>
77 // <group>
78 Table openTable (const String& tableName,
80 const TSMOption& = TSMOption());
81 Table openTable (const String& tableName,
82 const TableLock& lockOptions,
84 const TSMOption& = TSMOption());
85 // </group>
86
87 // Create a table with the given name and description.
88 // Datamanager information can be given in the Record.
89 // The table name can be given with the :: notation meaning that a subtable
90 // of the previous part is created. Depending on the TableOption, that subtable
91 // can or cannot exist yet.
92 // It defines the subtable keyword in the parent table.
93 // <br>An exception is thrown if one of the parts cannot be opened.
94 // <example>
95 // Create the ANT subtable of an MS with some description and create the
96 // table keyword ANT in sel.ms referring to the subtable.
97 // It is replaced if already existing (not if TableOption::NewNoReplace is given).
98 // <srcblock>
99 // Table tab(Table::createTable ("sel.ms::ANT", someDesc, TableOption::New));
100 // </srcblock>
101 // </example>
102 Table createTable (const String& tableName,
103 const TableDesc&,
106 const StorageOption& = StorageOption(),
107 const Record& dmInfo = Record(),
108 const TableLock& lockOptions = TableLock(),
109 rownr_t nrrow = 0,
110 Bool initialize = False,
112 const TSMOption& = TSMOption());
113 Table createSubTable (Table& parent, const String& subtableName,
114 const TableDesc& desc,
116 const StorageOption& = StorageOption(),
117 const Record& dmInfo = Record(),
118 const TableLock& lockOptions = TableLock(),
119 rownr_t nrrow = 0,
120 Bool initialize = False,
122 const TSMOption& = TSMOption());
123
124 // Can the table be deleted?
125 // If true, function deleteTable can safely be called.
126 // If not, message contains the reason why (e.g. 'table is not writable').
127 // It checks if the table is writable, is not open in this process
128 // and is not open in another process.
129 // If <src>splitColons=True</src> the table name can contain :: to
130 // denote subtables.
131 // <br>If <src>checkSubTables</src> is set, it also checks if
132 // a subtable is not open in another process.
133 // <br> <src>canDeleteSubTable</src> can be used to check a subtable of the
134 // given parent.
135 // <group>
136 Bool canDeleteTable (const String& tableName,
137 Bool checkSubTables=False);
138 Bool canDeleteTable (String& message, const String& tableName,
139 Bool checkSubTables=False, Bool splitColons=True);
140 Bool canDeleteSubTable (String& message, const Table& parent,
141 const String& subtableName,
142 Bool checkSubTables=False);
143 // </group>
144
145 // Delete the table.
146 // An exception is thrown if the table cannot be deleted because
147 // its is not writable or because it is still open in this or
148 // another process.
149 // <br>If <src>checkSubTables</src> is set, it is also checked if
150 // a subtable is used in another process.
151 // <br> <src>deleteSubTable</src> can be used to delete a subtable of the
152 // given parent.
153 void deleteTable (const String& tableName,
154 Bool checkSubTables=False);
155 void deleteSubTable (Table& parent, const String& subtableName,
156 Bool checkSubTables = False);
157
158 // Return the layout of a table (i.e. description and #rows).
159 // This function has the advantage that only the minimal amount of
160 // information required is read from the table, thus it is
161 // faster than a normal table open. The table name can be a subtable using ::.
162 // <br> The number of rows is returned. The description of the table
163 // is stored in desc (its contents will be overwritten).
164 // <br> An exception is thrown if the table does not exist.
165 rownr_t getLayout (TableDesc& desc, const String& tableName);
166
167 // Get the table info of the table with the given name.
168 // An empty object is returned if the table is unknown.
169 // The table name can be a subtable using ::.
170 TableInfo tableInfo (const String& tableName);
171
172 // Get the full name (absolute path) of the given table name, which can
173 // be a subtable specification using ::.
174 String getFullName (const String& tableName);
175
176 // Find the parent table of the last subtable in a table name containing
177 // :: to indicate subtables.
178 // It returns the Table object of that parent table and the name of
179 // the last subtable. An empty Table is returned if the table name does
180 // not contain subtable names.
181 // In case of an error, an exception is thrown.
182 std::pair<Table,String> findParentTable (const String& fullName,
183 const TableLock& lockOptions=TableLock(),
185 const TSMOption& tsmOption=TSMOption());
186
187 } //# NAMESPACE TableUtil - END
188} //# NAMESPACE CASACORE - END
189
190#endif
191
String: the storage and methods of handling collections of characters.
Definition: String.h:225
EndianFormat
Define the possible endian formats in which table data can be stored.
Definition: Table.h:196
@ AipsrcEndian
use endian format defined in the aipsrc variable table.endianformat If undefined, it defaults to Loca...
Definition: Table.h:205
TableOption
Define the possible options how a table can be opened.
Definition: Table.h:172
@ Old
existing table
Definition: Table.h:174
TableType
Define the possible table types.
Definition: Table.h:188
@ Plain
plain table (stored on disk)
Definition: Table.h:190
Table openTable(const String &tableName, Table::TableOption=Table::Old, const TSMOption &=TSMOption())
Try to open a table.
Table createTable(const String &tableName, const TableDesc &, Table::TableOption, Table::TableType=Table::Plain, const StorageOption &=StorageOption(), const Record &dmInfo=Record(), const TableLock &lockOptions=TableLock(), rownr_t nrrow=0, Bool initialize=False, Table::EndianFormat=Table::AipsrcEndian, const TSMOption &=TSMOption())
Create a table with the given name and description.
Bool canDeleteTable(const String &tableName, Bool checkSubTables=False)
Can the table be deleted? If true, function deleteTable can safely be called.
rownr_t getLayout(TableDesc &desc, const String &tableName)
Return the layout of a table (i.e.
void deleteTable(const String &tableName, Bool checkSubTables=False)
Delete the table.
TableInfo tableInfo(const String &tableName)
Get the table info of the table with the given name.
std::pair< Table, String > findParentTable(const String &fullName, const TableLock &lockOptions=TableLock(), Table::TableOption option=Table::Old, const TSMOption &tsmOption=TSMOption())
Find the parent table of the last subtable in a table name containing :: to indicate subtables.
Table createSubTable(Table &parent, const String &subtableName, const TableDesc &desc, Table::TableOption, const StorageOption &=StorageOption(), const Record &dmInfo=Record(), const TableLock &lockOptions=TableLock(), rownr_t nrrow=0, Bool initialize=False, Table::EndianFormat=Table::AipsrcEndian, const TSMOption &=TSMOption())
void deleteSubTable(Table &parent, const String &subtableName, Bool checkSubTables=False)
String getFullName(const String &tableName)
Get the full name (absolute path) of the given table name, which can be a subtable specification usin...
Bool canDeleteSubTable(String &message, const Table &parent, const String &subtableName, Bool checkSubTables=False)
this file contains all the compiler specific defines
Definition: mainpage.dox:28
const Bool False
Definition: aipstype.h:44
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
const Bool True
Definition: aipstype.h:43
uInt64 rownr_t
Define the type of a row number in a table.
Definition: aipsxtype.h:46