kexi

driver.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 2003-2006 Jaroslaw Staniek <js@iidea.pl>
00003 
00004    This program is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; either
00007    version 2 of the License, or (at your option) any later version.
00008 
00009    This program is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this program; see the file COPYING.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017  * Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #ifndef KEXIDB_DRIVER_H
00021 #define KEXIDB_DRIVER_H
00022 
00023 #include <qobject.h>
00024 #include <qdatetime.h>
00025 #include <qdict.h>
00026 
00027 #include <kexidb/global.h>
00028 #include <kexidb/object.h>
00029 #include <kexidb/field.h>
00030 
00031 class KService;
00032 
00033 namespace KexiDB {
00034 
00035 class AdminTools;
00036 class Connection;
00037 class ConnectionData;
00038 class ConnectionInternal;
00039 class DriverManager;
00040 class DriverBehaviour;
00041 class DriverPrivate;
00042 
00044 
00066 class KEXI_DB_EXPORT Driver : public QObject, public KexiDB::Object
00067 {
00068     Q_OBJECT
00069     public:
00072         class Info {
00073             public:
00074             Info();
00075             QString name, caption, comment, fileDBMimeType;
00077             bool fileBased : 1;
00081             bool allowImportingTo : 1;
00082         };
00083         typedef QMap<QString,Info> InfoMap;
00084         
00086         enum Features {
00087             NoFeatures = 0,
00089             SingleTransactions = 1,   
00092             MultipleTransactions = 2, 
00093 //(js) NOT YET IN USE:
00096             NestedTransactions = 4,
00099             CursorForward = 8, 
00101             CursorBackward = (CursorForward+16),
00103             CompactingDatabaseSupported = 32,
00104             //-- temporary options: can be removed later, use at your own risk --
00110             IgnoreTransactions = 1024
00111         };
00112 
00114         enum CreateConnectionOptions {
00115             ReadOnlyConnection = 1 
00116         };
00117         
00118         virtual ~Driver();
00119 
00125         Connection *createConnection( ConnectionData &conn_data, int options = 0 );
00126 
00128         const QPtrList<Connection> connectionsList() const;
00129 
00130 //      /*! \return a name equal to the service name (X-Kexi-DriverName) 
00131 //       stored in given service .desktop file. */
00132 //      QString driverName() { return m_driverName; }
00133 
00139         QString fileDBDriverMimeType() const;
00140 
00143         static QString defaultFileBasedDriverMimeType();
00144 
00146         static QString defaultFileBasedDriverName();
00147 
00149         const KService* service() const;
00150 
00152         bool isFileDriver() const;
00153 
00163         virtual bool isSystemObjectName( const QString& n ) const;
00164 
00168         static bool isKexiDBSystemObjectName( const QString& n );
00169 
00176         virtual bool isSystemDatabaseName( const QString& n ) const = 0;
00177 
00184         bool isSystemFieldName( const QString& n ) const;
00185 
00188         int features() const;
00189 
00192         bool transactionsSupported() const;
00193 
00197         AdminTools& adminTools() const;
00198 
00200         virtual QString sqlTypeName(int id_t, int p=0) const;
00201 
00203         static QString defaultSQLTypeName(int id_t);
00204 
00210         virtual bool isValid();
00211     
00215         virtual DatabaseVersionInfo version() const = 0;
00216 
00223         virtual QString valueToSQL( uint ftype, const QVariant& v ) const;
00224         
00226         inline QString valueToSQL( const QString& ftype, const QVariant& v ) const {
00227             return valueToSQL(Field::typeForString(ftype), v);
00228         }
00229 
00231         inline QString valueToSQL( const Field *field, const QVariant& v ) const {
00232             return valueToSQL( (field ? field->type() : Field::InvalidType), v );
00233         }
00234 
00236         inline virtual QString dateTimeToSQL(const QDateTime& v) const {
00237 
00244 //old           const QDateTime dt( v.toDateTime() );
00245 //old           return QString("\'")+dt.date().toString(Qt::ISODate)+" "+dt.time().toString(Qt::ISODate)+"\'";
00246             return QString("\'")+v.toString(Qt::ISODate)+"\'";
00247         }
00248 
00253         virtual QString escapeString( const QString& str ) const = 0;
00254         
00258         virtual QCString escapeString( const QCString& str ) const = 0;
00259         
00264         virtual QString escapeBLOB(const QByteArray& array) const = 0;
00265 
00266 //todo enum EscapeType { EscapeDriver = 0x00, EscapeKexi = 0x01};
00267 //todo enum EscapePolicy { EscapeAsNecessary = 0x00, EscapeAlways = 0x02 };
00268 
00269         enum EscapeType { EscapeDriver = 0x01, EscapeKexi = 0x02};
00270         
00271         enum EscapePolicy { EscapeAsNecessary = 0x04, EscapeAlways = 0x08 };
00272 
00274 
00279         QString escapeIdentifier( const QString& str, 
00280             int options = EscapeDriver|EscapeAsNecessary) const;
00281 
00282         QCString escapeIdentifier( const QCString& str, 
00283             int options = EscapeDriver|EscapeAsNecessary) const;
00284 
00287         QVariant propertyValue( const QCString& propName ) const;
00288 
00291         QString propertyCaption( const QCString& propName ) const;
00292 
00294         QValueList<QCString> propertyNames() const;
00295 
00296     protected:
00307         Driver( QObject *parent, const char *name, const QStringList &args = QStringList() );
00308 
00313         virtual Connection *drv_createConnection( ConnectionData &conn_data ) = 0;
00314 //virtual ConnectionInternal* createConnectionInternalObject( Connection& conn ) = 0;
00315 
00323         virtual QString drv_escapeIdentifier( const QString& str ) const = 0;
00324         
00328         virtual QCString drv_escapeIdentifier( const QCString& str ) const = 0;
00329         
00334         virtual bool drv_isSystemFieldName( const QString& n ) const = 0;
00335         
00336         /* Creates admin tools object providing a number of database administration 
00337          tools for the driver. This is called once per driver.
00338 
00339          Note for driver developers: Reimplement this method by returning 
00340          KexiDB::AdminTools-derived object. Default implementation creates 
00341          empty admin tools. 
00342          @see adminTools() */
00343         virtual AdminTools* drv_createAdminTools() const;
00344 
00349         Connection* removeConnection( Connection *conn );
00350 
00351     friend class Connection;
00352     friend class Cursor;
00353     friend class DriverManagerInternal;
00354 
00355 
00360     void initSQLKeywords(int hashSize = 17);
00361 
00362     DriverBehaviour *beh;
00363     DriverPrivate *d;
00364 };
00365 
00366 } //namespace KexiDB
00367 
00370 #define KEXIDB_DRIVER \
00371     public: \
00372     virtual DatabaseVersionInfo version() const;
00373 
00374 #endif
00375 
KDE Home | KDE Accessibility Home | Description of Access Keys