Skip to content

Commit aa7535f

Browse files
committedApr 22, 2023
Add original id to QgsHistoryEntry
1 parent 2fafc28 commit aa7535f

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed
 

‎python/gui/auto_generated/history/qgshistoryentry.sip.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ Returns ``True`` if the entry is valid.
4545
.. versionadded:: 3.32
4646
%End
4747

48+
long long id;
49+
4850
QDateTime timestamp;
4951

5052
QString providerId;

‎src/gui/history/qgshistoryentry.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ class GUI_EXPORT QgsHistoryEntry
5959
*/
6060
bool isValid() const;
6161

62+
/**
63+
* Entry ID.
64+
*
65+
* \since QGIS 3.32
66+
*/
67+
long long id = 0;
68+
6269
//! Entry timestamp
6370
QDateTime timestamp;
6471

‎src/gui/history/qgshistoryproviderregistry.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@ long long QgsHistoryProviderRegistry::addEntry( const QgsHistoryEntry &entry, bo
115115
}
116116
id = static_cast< int >( sqlite3_last_insert_rowid( mLocalDB.get() ) );
117117

118-
emit entryAdded( id, entry, Qgis::HistoryProviderBackend::LocalProfile );
118+
QgsHistoryEntry addedEntry( entry );
119+
addedEntry.id = id;
120+
121+
emit entryAdded( id, addedEntry, Qgis::HistoryProviderBackend::LocalProfile );
119122
}
120123

121124
return id;
@@ -163,11 +166,13 @@ QgsHistoryEntry QgsHistoryProviderRegistry::entry( long long id, bool &ok, Qgis:
163166
}
164167

165168
ok = true;
166-
return QgsHistoryEntry(
167-
statement.columnAsText( 0 ),
168-
QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
169-
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
170-
);
169+
QgsHistoryEntry res = QgsHistoryEntry(
170+
statement.columnAsText( 0 ),
171+
QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
172+
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
173+
);
174+
res.id = id;
175+
return res;
171176
}
172177

173178
QgsDebugMsg( QStringLiteral( "Cannot find history item with matching ID" ) );
@@ -213,7 +218,7 @@ QList<QgsHistoryEntry> QgsHistoryProviderRegistry::queryEntries( const QDateTime
213218
return {};
214219
}
215220

216-
QString sql = QStringLiteral( "SELECT provider_id, xml, timestamp FROM history" );
221+
QString sql = QStringLiteral( "SELECT id, provider_id, xml, timestamp FROM history" );
217222
QStringList whereClauses;
218223
if ( !providerId.isEmpty() )
219224
{
@@ -237,17 +242,20 @@ QList<QgsHistoryEntry> QgsHistoryProviderRegistry::queryEntries( const QDateTime
237242
while ( nErr == SQLITE_OK && sqlite3_step( statement.get() ) == SQLITE_ROW )
238243
{
239244
QDomDocument doc;
240-
if ( !doc.setContent( statement.columnAsText( 1 ) ) )
245+
if ( !doc.setContent( statement.columnAsText( 2 ) ) )
241246
{
242247
QgsDebugMsg( QStringLiteral( "Cannot read history entry" ) );
243248
continue;
244249
}
245250

246-
entries.append( QgsHistoryEntry(
247-
statement.columnAsText( 0 ),
248-
QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
249-
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
250-
) );
251+
QgsHistoryEntry entry(
252+
statement.columnAsText( 1 ),
253+
QDateTime::fromString( statement.columnAsText( 3 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
254+
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
255+
);
256+
entry.id = statement.columnAsInt64( 0 );
257+
258+
entries.append( entry );
251259
}
252260
}
253261

‎tests/src/python/test_qgshistoryproviderregistry.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ def test_registry_entries(self):
110110
self.assertEqual(len(added_spy), 1)
111111
self.assertEqual(added_spy[-1][0], id_1)
112112
self.assertEqual(added_spy[-1][1].providerId, 'my provider')
113+
self.assertEqual(added_spy[-1][1].id, id_1)
113114
self.assertEqual(added_spy[-1][1].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
114115

115116
id_2, ok = reg.addEntry('my provider 2', {'some var': 6},
@@ -118,14 +119,17 @@ def test_registry_entries(self):
118119
self.assertEqual(len(added_spy), 2)
119120
self.assertEqual(added_spy[-1][0], id_2)
120121
self.assertEqual(added_spy[-1][1].providerId, 'my provider 2')
122+
self.assertEqual(added_spy[-1][1].id, id_2)
121123
self.assertEqual(added_spy[-1][1].entry, {'some var': 6})
122124

123125
self.assertEqual(len(reg.queryEntries()), 2)
124126
self.assertEqual(reg.queryEntries()[0].providerId, 'my provider')
127+
self.assertEqual(reg.queryEntries()[0].id, id_1)
125128
self.assertEqual(reg.queryEntries()[0].timestamp.date(), QDateTime.currentDateTime().date())
126129
self.assertEqual(reg.queryEntries()[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
127130

128131
self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 2')
132+
self.assertEqual(reg.queryEntries()[1].id, id_2)
129133
self.assertEqual(reg.queryEntries()[1].timestamp.date(), QDateTime.currentDateTime().date())
130134
self.assertEqual(reg.queryEntries()[1].entry, {'some var': 6})
131135

@@ -134,11 +138,13 @@ def test_registry_entries(self):
134138
entry, ok = reg.entry(id_1)
135139
self.assertTrue(ok)
136140
self.assertEqual(entry.providerId, 'my provider')
141+
self.assertEqual(entry.id, id_1)
137142
self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date())
138143
self.assertEqual(entry.entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
139144
entry, ok = reg.entry(id_2)
140145
self.assertTrue(ok)
141146
self.assertEqual(entry.providerId, 'my provider 2')
147+
self.assertEqual(entry.id, id_2)
142148
self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date())
143149
self.assertEqual(entry.entry, {'some var': 6})
144150

@@ -148,29 +154,35 @@ def test_registry_entries(self):
148154
self.assertEqual(len(added_spy), 3)
149155
self.assertEqual(added_spy[-1][0], id_3)
150156
self.assertEqual(added_spy[-1][1].providerId, 'my provider 3')
157+
self.assertEqual(added_spy[-1][1].id, id_3)
151158
self.assertEqual(added_spy[-1][1].entry, {'var': 7})
152159

153160
self.assertEqual(len(reg.queryEntries()), 3)
154161
self.assertEqual(reg.queryEntries()[0].providerId, 'my provider')
162+
self.assertEqual(reg.queryEntries()[0].id, id_1)
155163
self.assertEqual(reg.queryEntries()[0].timestamp.date(), QDateTime.currentDateTime().date())
156164
self.assertEqual(reg.queryEntries()[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
157165
self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 2')
166+
self.assertEqual(reg.queryEntries()[1].id, id_2)
158167
self.assertEqual(reg.queryEntries()[1].timestamp.date(), QDateTime.currentDateTime().date())
159168
self.assertEqual(reg.queryEntries()[1].entry, {'some var': 6})
160169
self.assertEqual(reg.queryEntries()[2].providerId, 'my provider 3')
170+
self.assertEqual(reg.queryEntries()[2].id, id_3)
161171
self.assertEqual(reg.queryEntries()[2].timestamp.date(), QDate(2021, 1, 2))
162172
self.assertEqual(reg.queryEntries()[2].entry, {'var': 7})
163173

164174
# query by provider
165175
entries = reg.queryEntries(providerId='my provider')
166176
self.assertEqual(len(entries), 1)
167177
self.assertEqual(entries[0].providerId, 'my provider')
178+
self.assertEqual(entries[0].id, id_1)
168179
self.assertEqual(entries[0].timestamp.date(), QDateTime.currentDateTime().date())
169180
self.assertEqual(entries[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
170181

171182
entries = reg.queryEntries(providerId='my provider 2')
172183
self.assertEqual(len(entries), 1)
173184
self.assertEqual(entries[0].providerId, 'my provider 2')
185+
self.assertEqual(entries[0].id, id_2)
174186
self.assertEqual(entries[0].timestamp.date(), QDateTime.currentDateTime().date())
175187
self.assertEqual(entries[0].entry, {'some var': 6})
176188

@@ -195,6 +207,7 @@ def test_registry_entries(self):
195207

196208
entry, ok = reg.entry(id_1)
197209
self.assertEqual(entry.providerId, 'my provider')
210+
self.assertEqual(entry.id, id_1)
198211
self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date())
199212
self.assertEqual(entry.entry, {'new_props': 54})
200213

@@ -213,14 +226,18 @@ def test_registry_entries(self):
213226

214227
self.assertEqual(len(added_spy), 5)
215228
self.assertEqual(added_spy[-2][1].providerId, 'my provider 4')
229+
self.assertEqual(added_spy[-2][1].id, 1)
216230
self.assertEqual(added_spy[-2][1].entry, {'var': 7})
217231
self.assertEqual(added_spy[-1][1].providerId, 'my provider 5')
232+
self.assertEqual(added_spy[-1][1].id, 2)
218233
self.assertEqual(added_spy[-1][1].entry, {'var': 8})
219234

220235
self.assertEqual(reg.queryEntries()[0].providerId, 'my provider 4')
236+
self.assertEqual(reg.queryEntries()[0].id, 1)
221237
self.assertEqual(reg.queryEntries()[0].entry, {'var': 7})
222238

223239
self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 5')
240+
self.assertEqual(reg.queryEntries()[1].id, 2)
224241
self.assertEqual(reg.queryEntries()[1].entry, {'var': 8})
225242

226243

0 commit comments

Comments
 (0)
Please sign in to comment.