Nebula
Loading...
Searching...
No Matches
database.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
12#include "core/refcounted.h"
13#include "io/uri.h"
14#include "util/dictionary.h"
15#include "db/table.h"
16#include "db/command.h"
17
18//------------------------------------------------------------------------------
19namespace Attr
20{
23 DeclareAttrBool(AttrReadWrite);
24 DeclareAttrBool(AttrDynamic);
25}
26//------------------------------------------------------------------------------
27namespace Db
28{
30{
32public:
35 {
37 ReadWriteExisting, // fail if database doesn't exist
38 ReadWriteCreate, // create new database if doesn't exist
39 };
40
42 Database();
44 virtual ~Database();
45
47 void SetURI(const IO::URI& uri);
49 const IO::URI& GetURI() const;
55 void SetExclusiveMode(bool b);
57 bool GetExclusiveMode() const;
59 void SetIgnoreUnknownColumns(bool b);
61 bool GetIgnoreUnknownColumns() const;
62
64 virtual bool Open();
66 virtual void Close();
68 bool IsOpen() const;
70 const Util::String& GetError() const;
71
73 virtual bool AttachDatabase(const IO::URI& uri, const Util::String& dbName);
75 virtual void DetachDatabase(const Util::String& dbName);
77 virtual void BeginTransaction();
79 virtual void EndTransaction();
81 virtual bool IsInTransaction() const;
83 virtual void AddTable(const Ptr<Table>& table);
85 virtual void DeleteTable(const Util::String& tableName);
87 bool HasTable(const Util::String& tableName) const;
89 SizeT GetNumTables() const;
91 const Ptr<Table>& GetTableByIndex(IndexT i) const;
93 const Ptr<Table>& GetTableByName(const Util::String& tableName) const;
94
96 void SetInMemoryDatabase(bool b);
98 virtual void CopyInMemoryDatabaseToFile(const IO::URI& fileUri);
99
100protected:
102 void SetError(const Util::String& error);
104 IndexT FindTableIndex(const Util::String& tableName) const;
105
106 bool isOpen;
113 Util::Array<Ptr<Table> > tables; // NOTE: not in a Dictionary, because name may change externally!
114};
115
116//------------------------------------------------------------------------------
119inline void
124
125//------------------------------------------------------------------------------
128inline bool
130{
131 return this->ignoreUnknownColumns;
132}
133
134//------------------------------------------------------------------------------
137inline void
139{
140 this->error = err;
141}
142
143//------------------------------------------------------------------------------
146inline const Util::String&
148{
149 return this->error;
150}
151
152//------------------------------------------------------------------------------
155inline bool
157{
158 return this->isOpen;
159}
160
161//------------------------------------------------------------------------------
164inline void
166{
167 this->uri = u;
168}
169
170//------------------------------------------------------------------------------
173inline const IO::URI&
175{
176 return this->uri;
177}
178
179//------------------------------------------------------------------------------
182inline void
187
188//------------------------------------------------------------------------------
193{
194 return this->accessMode;
195}
196
197//------------------------------------------------------------------------------
200inline void
202{
203 this->memoryDatabase = b;
204}
205
206//------------------------------------------------------------------------------
209inline void
211{
212 this->exclusiveMode = b;
213}
214
215//------------------------------------------------------------------------------
218inline bool
220{
221 return this->exclusiveMode;
222}
223} // namespace Db
224//------------------------------------------------------------------------------
#define DeclareAttrString(NAME)
Definition attributedefinition.h:94
#define DeclareAttrBool(NAME)
Definition attributedefinition.h:78
The common base class of Nebula.
Definition refcounted.h:38
virtual void BeginTransaction()
begin a transaction on the database
Definition database.cc:82
virtual void AddTable(const Ptr< Table > &table)
create a new table in the database
Definition database.cc:116
const IO::URI & GetURI() const
get the database URI
Definition database.h:174
void SetURI(const IO::URI &uri)
set the data source URI (usually filename of database file)
Definition database.h:165
virtual void DeleteTable(const Util::String &tableName)
delete a table from the database
Definition database.cc:131
virtual void Close()
close the database
Definition database.cc:62
bool ignoreUnknownColumns
Definition database.h:107
IO::URI uri
Definition database.h:108
Util::String error
Definition database.h:109
bool GetExclusiveMode() const
get exclusive mode
Definition database.h:219
virtual void DetachDatabase(const Util::String &dbName)
detach an attached database
Definition database.cc:230
bool GetIgnoreUnknownColumns() const
get ignore unknown columns flag
Definition database.h:129
const Ptr< Table > & GetTableByIndex(IndexT i) const
get table by index
Definition database.cc:189
void SetError(const Util::String &error)
set error string
Definition database.h:138
IndexT FindTableIndex(const Util::String &tableName) const
find a table index by name
Definition database.cc:145
bool IsOpen() const
return true if database is open
Definition database.h:156
AccessMode GetAccessMode() const
get access mode
Definition database.h:192
virtual bool AttachDatabase(const IO::URI &uri, const Util::String &dbName)
attach another database to the current database
Definition database.cc:218
virtual void EndTransaction()
end a transaction on the database
Definition database.cc:92
bool HasTable(const Util::String &tableName) const
return true if a table exists by name
Definition database.cc:166
Util::Array< Ptr< Table > > tables
Definition database.h:113
AccessMode
access modes
Definition database.h:35
@ ReadWriteCreate
Definition database.h:38
@ ReadOnly
Definition database.h:36
@ ReadWriteExisting
Definition database.h:37
AccessMode accessMode
Definition database.h:110
virtual bool IsInTransaction() const
return true if a transaction is currently open
Definition database.cc:101
Database()
constructor
Definition database.cc:25
__DeclareClass(Database)
SizeT GetNumTables() const
get number of tables in the database
Definition database.cc:177
void SetIgnoreUnknownColumns(bool b)
ignore unknown columns (not existing as attribute), yes/no
Definition database.h:120
bool isOpen
Definition database.h:106
bool exclusiveMode
Definition database.h:112
void SetAccessMode(AccessMode m)
set the access mode (ReadOnly or ReadWrite)
Definition database.h:183
virtual ~Database()
destructor
Definition database.cc:38
void SetExclusiveMode(bool b)
enable/disable exclusive mode
Definition database.h:210
bool memoryDatabase
Definition database.h:111
void SetInMemoryDatabase(bool b)
set in-memory database only
Definition database.h:201
virtual bool Open()
open the database
Definition database.cc:49
const Ptr< Table > & GetTableByName(const Util::String &tableName) const
get table by name
Definition database.cc:201
virtual void CopyInMemoryDatabaseToFile(const IO::URI &fileUri)
copy in memory database to file
Definition database.cc:241
const Util::String & GetError() const
get last error string
Definition database.h:147
An URI object can split a Uniform Resource Identifier string into its components or build a string fr...
Definition uri.h:67
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition ptr.h:38
Nebula's dynamic array class.
Definition array.h:61
Nebula's universal string class.
Definition string.h:50
Definition accessmode.h:13
Definition column.cc:10
int SizeT
Definition types.h:42
int IndexT
Definition types.h:41