File indexing completed on 2026-08-09 09:21:35
0001
0002
0003
0004
0005 #ifndef QSQLDRIVER_H
0006 #define QSQLDRIVER_H
0007
0008 #include <QtSql/qtsqlglobal.h>
0009 #include <QtCore/qobject.h>
0010 #include <QtCore/qstring.h>
0011 #include <QtCore/qstringlist.h>
0012
0013
0014 QT_BEGIN_NAMESPACE
0015
0016
0017 class QSqlDatabase;
0018 class QSqlDriverPrivate;
0019 class QSqlError;
0020 class QSqlField;
0021 class QSqlIndex;
0022 class QSqlRecord;
0023 class QSqlResult;
0024 class QVariant;
0025
0026 class Q_SQL_EXPORT QSqlDriver : public QObject
0027 {
0028 friend class QSqlDatabase;
0029 friend class QSqlDatabasePrivate;
0030 friend class QSqlResultPrivate;
0031 Q_OBJECT
0032 Q_PROPERTY(QSql::NumericalPrecisionPolicy numericalPrecisionPolicy READ numericalPrecisionPolicy WRITE setNumericalPrecisionPolicy)
0033 Q_DECLARE_PRIVATE(QSqlDriver)
0034
0035 public:
0036 enum DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries,
0037 NamedPlaceholders, PositionalPlaceholders, LastInsertId,
0038 BatchOperations, SimpleLocking, LowPrecisionNumbers,
0039 EventNotifications, FinishQuery, MultipleResultSets, CancelQuery };
0040
0041 enum StatementType { WhereStatement, SelectStatement, UpdateStatement,
0042 InsertStatement, DeleteStatement };
0043
0044 enum IdentifierType { FieldName, TableName };
0045
0046 enum NotificationSource { UnknownSource, SelfSource, OtherSource };
0047
0048 enum DbmsType {
0049 UnknownDbms,
0050 MSSqlServer,
0051 MySqlServer,
0052 PostgreSQL,
0053 Oracle,
0054 Sybase,
0055 SQLite,
0056 Interbase,
0057 DB2,
0058 MimerSQL,
0059 };
0060
0061 explicit QSqlDriver(QObject *parent = nullptr);
0062 ~QSqlDriver();
0063 virtual bool isOpen() const;
0064 bool isOpenError() const;
0065
0066 virtual bool beginTransaction();
0067 virtual bool commitTransaction();
0068 virtual bool rollbackTransaction();
0069 virtual QStringList tables(QSql::TableType tableType) const;
0070 virtual QSqlIndex primaryIndex(const QString &tableName) const;
0071 virtual QSqlRecord record(const QString &tableName) const;
0072 virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const;
0073
0074 virtual QString escapeIdentifier(const QString &identifier, IdentifierType type) const;
0075 virtual QString sqlStatement(StatementType type, const QString &tableName,
0076 const QSqlRecord &rec, bool preparedStatement) const;
0077
0078 QSqlError lastError() const;
0079
0080 virtual QVariant handle() const;
0081 virtual bool hasFeature(DriverFeature f) const = 0;
0082 virtual void close() = 0;
0083 virtual QSqlResult *createResult() const = 0;
0084
0085 virtual bool open(const QString &db,
0086 const QString &user = QString(),
0087 const QString &password = QString(),
0088 const QString &host = QString(),
0089 int port = -1,
0090 const QString &connOpts = QString()) = 0;
0091 virtual bool subscribeToNotification(const QString &name);
0092 virtual bool unsubscribeFromNotification(const QString &name);
0093 virtual QStringList subscribedToNotifications() const;
0094
0095 virtual bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const;
0096 virtual QString stripDelimiters(const QString &identifier, IdentifierType type) const;
0097
0098 void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy);
0099 QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
0100
0101 DbmsType dbmsType() const;
0102 virtual int maximumIdentifierLength(IdentifierType type) const;
0103
0104 QString connectionName() const;
0105
0106 public Q_SLOTS:
0107 virtual bool cancelQuery();
0108
0109 Q_SIGNALS:
0110 void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload);
0111
0112 protected:
0113 QSqlDriver(QSqlDriverPrivate &dd, QObject *parent = nullptr);
0114 virtual void setOpen(bool o);
0115 virtual void setOpenError(bool e);
0116 virtual void setLastError(const QSqlError& e);
0117
0118
0119 private:
0120 Q_DISABLE_COPY(QSqlDriver)
0121 };
0122
0123 QT_END_NAMESPACE
0124
0125 #endif