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