kexi
driver.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
00096 NestedTransactions = 4,
00099 CursorForward = 8,
00101 CursorBackward = (CursorForward+16),
00103 CompactingDatabaseSupported = 32,
00104
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
00131
00132
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
00245
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
00267
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
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
00337
00338
00339
00340
00341
00342
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 }
00367
00370 #define KEXIDB_DRIVER \
00371 public: \
00372 virtual DatabaseVersionInfo version() const;
00373
00374 #endif
00375
|