5#ifndef QSQLTABLEMODEL_P_H
6#define QSQLTABLEMODEL_P_H
19#include <QtSql/private/qtsqlglobal_p.h>
20#include "private/qsqlquerymodel_p.h"
21#include "QtSql/qsqlindex.h"
22#include "QtCore/qmap.h"
30 Q_DECLARE_PUBLIC(QSqlTableModel)
33 QSqlTableModelPrivate()
35 sortOrder(Qt::AscendingOrder),
36 strategy(QSqlTableModel::OnRowChange),
37 busyInsertingRows(
false)
41 virtual void clearCache();
42 QSqlRecord record(
const QList<QVariant> &values)
const;
44 bool exec(
const QString &stmt,
bool prepStatement,
45 const QSqlRecord &rec,
const QSqlRecord &whereValues);
46 virtual void revertCachedRow(
int row);
47 virtual int nameToIndex(
const QString &name)
const;
48 QString strippedFieldName(
const QString &name)
const;
49 int insertCount(
int maxRow = -1)
const;
50 void initRecordAndPrimaryIndex();
55 Qt::SortOrder sortOrder;
57 QSqlTableModel::EditStrategy strategy;
58 bool busyInsertingRows;
60 QSqlQuery editQuery = { QSqlQuery(
nullptr) };
61 QSqlIndex primaryIndex;
66 enum Op { None, Insert, Update, Delete };
71 inline ModifiedRow(Op o = None,
const QSqlRecord &r = QSqlRecord())
72 : m_op(None), m_db_values(r), m_insert(o == Insert)
74 inline Op op()
const {
return m_op; }
75 inline void setOp(Op o)
81 m_submitted = (o != Insert && o != Delete);
84 setGenerated(m_rec, m_op == Delete);
86 inline const QSqlRecord &rec()
const {
return m_rec; }
87 inline QSqlRecord& recRef() {
return m_rec; }
88 inline void setValue(
int c,
const QVariant &v)
92 m_rec.setGenerated(c,
true);
94 inline bool submitted()
const {
return m_submitted; }
95 inline void setSubmitted()
98 setGenerated(m_rec,
false);
105 setGenerated(m_db_values,
true);
108 inline void refresh(
bool exists,
const QSqlRecord& newvals)
113 m_db_values = newvals;
115 setGenerated(m_rec,
false);
122 inline bool insert()
const {
return m_insert; }
130 setGenerated(m_rec,
false);
133 inline QSqlRecord primaryValues(
const QSqlRecord& pi)
const
135 if (m_op == None || m_op == Insert)
138 return m_db_values.keyValues(pi);
141 inline static void setGenerated(QSqlRecord& r,
bool g)
143 for (
int i = r.count() - 1; i >= 0; --i)
144 r.setGenerated(i, g);
148 QSqlRecord m_db_values;
153 typedef QMap<
int, ModifiedRow> CacheMap;
QList< QSharedPointer< QRelation > > relations
void clearCache() override
int nameToIndex(const QString &name) const override
void translateFieldNames(QSqlRecord &values) const
void revertCachedRow(int row) override
static const QString relTablePrefix(int i)
The QSqlRelationalTableModel class provides an editable data model for a single database table,...
QT_REQUIRE_CONFIG(animation)
QT_REQUIRE_CONFIG(sqlmodel)
QSqlRelationalTableModelSql SqlrTm
void populateDictionary()
QRelatedTableModel * model
bool isDictionaryInitialized() const
QHash< QString, QVariant > dictionary
void init(QSqlRelationalTableModel *parent, const QSqlRelation &relation, int column)