kexi

driver.h
1/* This file is part of the KDE project
2 Copyright (C) 2003-2006 Jaroslaw Staniek <js@iidea.pl>
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this program; see the file COPYING. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#ifndef KEXIDB_DRIVER_H
21#define KEXIDB_DRIVER_H
22
23#include <tqobject.h>
24#include <tqdatetime.h>
25#include <tqdict.h>
26
27#include <kexidb/global.h>
28#include <kexidb/object.h>
29#include <kexidb/field.h>
30
31class KService;
32
33namespace KexiDB {
34
35class AdminTools;
36class Connection;
37class ConnectionData;
38class ConnectionInternal;
39class DriverManager;
40class DriverBehaviour;
41class DriverPrivate;
42
44
66class KEXI_DB_EXPORT Driver : public TQObject, public KexiDB::Object
67{
68 TQ_OBJECT
69
70 public:
73 class Info {
74 public:
75 Info();
76 TQString name, caption, comment, fileDBMimeType;
78 bool fileBased : 1;
83 };
84 typedef TQMap<TQString,Info> InfoMap;
85
87 enum Features {
88 NoFeatures = 0,
90 SingleTransactions = 1,
93 MultipleTransactions = 2,
94//(js) NOT YET IN USE:
97 NestedTransactions = 4,
100 CursorForward = 8,
102 CursorBackward = (CursorForward+16),
104 CompactingDatabaseSupported = 32,
105 //-- temporary options: can be removed later, use at your own risk --
111 IgnoreTransactions = 1024
112 };
113
116 ReadOnlyConnection = 1
117 };
118
119 virtual ~Driver();
120
126 Connection *createConnection( ConnectionData &conn_data, int options = 0 );
127
129 const TQPtrList<Connection> connectionsList() const;
130
131// /*! \return a name equal to the service name (X-Kexi-DriverName)
132// stored in given service .desktop file. */
133// TQString driverName() { return m_driverName; }
134
140 TQString fileDBDriverMimeType() const;
141
144 static TQString defaultFileBasedDriverMimeType();
145
147 static TQString defaultFileBasedDriverName();
148
150 const KService* service() const;
151
153 bool isFileDriver() const;
154
164 virtual bool isSystemObjectName( const TQString& n ) const;
165
169 static bool isKexiDBSystemObjectName( const TQString& n );
170
177 virtual bool isSystemDatabaseName( const TQString& n ) const = 0;
178
185 bool isSystemFieldName( const TQString& n ) const;
186
189 int features() const;
190
193 bool transactionsSupported() const;
194
198 AdminTools& adminTools() const;
199
201 virtual TQString sqlTypeName(int id_t, int p=0) const;
202
204 static TQString defaultSQLTypeName(int id_t);
205
211 virtual bool isValid();
212
216 virtual DatabaseVersionInfo version() const = 0;
217
224 virtual TQString valueToSQL( uint ftype, const TQVariant& v ) const;
225
227 inline TQString valueToSQL( const TQString& ftype, const TQVariant& v ) const {
228 return valueToSQL(Field::typeForString(ftype), v);
229 }
230
232 inline TQString valueToSQL( const Field *field, const TQVariant& v ) const {
233 return valueToSQL( (field ? field->type() : Field::InvalidType), v );
234 }
235
237 inline virtual TQString dateTimeToSQL(const TQDateTime& v) const {
238
245//old const TQDateTime dt( v.toDateTime() );
246//old return TQString("\'")+dt.date().toString(TQt::ISODate)+" "+dt.time().toString(TQt::ISODate)+"\'";
247 return TQString("\'")+v.toString(TQt::ISODate)+"\'";
248 }
249
254 virtual TQString escapeString( const TQString& str ) const = 0;
255
259 virtual TQCString escapeString( const TQCString& str ) const = 0;
260
265 virtual TQString escapeBLOB(const TQByteArray& array) const = 0;
266
267//todo enum EscapeType { EscapeDriver = 0x00, EscapeKexi = 0x01};
268//todo enum EscapePolicy { EscapeAsNecessary = 0x00, EscapeAlways = 0x02 };
269
270 enum EscapeType { EscapeDriver = 0x01, EscapeKexi = 0x02};
271
272 enum EscapePolicy { EscapeAsNecessary = 0x04, EscapeAlways = 0x08 };
273
275
280 TQString escapeIdentifier( const TQString& str,
281 int options = EscapeDriver|EscapeAsNecessary) const;
282
283 TQCString escapeIdentifier( const TQCString& str,
284 int options = EscapeDriver|EscapeAsNecessary) const;
285
288 TQVariant propertyValue( const TQCString& propName ) const;
289
292 TQString propertyCaption( const TQCString& propName ) const;
293
295 TQValueList<TQCString> propertyNames() const;
296
297 protected:
308 Driver( TQObject *parent, const char *name, const TQStringList &args = TQStringList() );
309
315//virtual ConnectionInternal* createConnectionInternalObject( Connection& conn ) = 0;
316
324 virtual TQString drv_escapeIdentifier( const TQString& str ) const = 0;
325
329 virtual TQCString drv_escapeIdentifier( const TQCString& str ) const = 0;
330
335 virtual bool drv_isSystemFieldName( const TQString& n ) const = 0;
336
337 /* Creates admin tools object providing a number of database administration
338 tools for the driver. This is called once per driver.
339
340 Note for driver developers: Reimplement this method by returning
341 KexiDB::AdminTools-derived object. Default implementation creates
342 empty admin tools.
343 @see adminTools() */
344 virtual AdminTools* drv_createAdminTools() const;
345
350 Connection* removeConnection( Connection *conn );
351
352 friend class Connection;
353 friend class Cursor;
354 friend class DriverManagerInternal;
355
356
361 void initSQLKeywords(int hashSize = 17);
362
363 DriverBehaviour *beh;
364 DriverPrivate *d;
365};
366
367} //namespace KexiDB
368
371#define KEXIDB_DRIVER \
372 public: \
373 virtual DatabaseVersionInfo version() const;
374
375#endif
376
An interface containing a set of tools for database administration.
Definition admin.h:34
Database specific connection data, e.g. host, port.
Provides database connection, allowing queries and data modification.
Definition connection.h:62
Provides database cursor functionality.
Definition cursor.h:67
Contains database version information about a Kexi-compatible database. The version is stored as inte...
Definition global.h:109
bool fileBased
true is the driver is for file-based database backend
Definition driver.h:78
Generic database abstraction.
Definition driver.h:67
virtual TQString dateTimeToSQL(const TQDateTime &v) const
Definition driver.h:237
virtual TQCString drv_escapeIdentifier(const TQCString &str) const =0
virtual TQString escapeString(const TQString &str) const =0
virtual bool isValid()
virtual DatabaseVersionInfo version() const =0
virtual TQString escapeBLOB(const TQByteArray &array) const =0
virtual bool drv_isSystemFieldName(const TQString &n) const =0
virtual TQCString escapeString(const TQCString &str) const =0
virtual bool isSystemDatabaseName(const TQString &n) const =0
virtual TQString drv_escapeIdentifier(const TQString &str) const =0
Driver(TQObject *parent, const char *name, const TQStringList &args=TQStringList())
virtual Connection * drv_createConnection(ConnectionData &conn_data)=0
TQString valueToSQL(const Field *field, const TQVariant &v) const
Like above method, for field.
Definition driver.h:232
CreateConnectionOptions
Options used for createConnection()
Definition driver.h:115
TQString valueToSQL(const TQString &ftype, const TQVariant &v) const
Like above but with the fildtype as string.
Definition driver.h:227
Meta-data for a field.
Definition field.h:73
High-level database connectivity library with database backend drivers.