Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add original id to QgsHistoryEntry
  • Loading branch information
nyalldawson committed Apr 22, 2023
1 parent 2fafc28 commit aa7535f
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 13 deletions.
2 changes: 2 additions & 0 deletions python/gui/auto_generated/history/qgshistoryentry.sip.in
Expand Up @@ -45,6 +45,8 @@ Returns ``True`` if the entry is valid.
.. versionadded:: 3.32
%End

long long id;

QDateTime timestamp;

QString providerId;
Expand Down
7 changes: 7 additions & 0 deletions src/gui/history/qgshistoryentry.h
Expand Up @@ -59,6 +59,13 @@ class GUI_EXPORT QgsHistoryEntry
*/
bool isValid() const;

/**
* Entry ID.
*
* \since QGIS 3.32
*/
long long id = 0;

//! Entry timestamp
QDateTime timestamp;

Expand Down
34 changes: 21 additions & 13 deletions src/gui/history/qgshistoryproviderregistry.cpp
Expand Up @@ -115,7 +115,10 @@ long long QgsHistoryProviderRegistry::addEntry( const QgsHistoryEntry &entry, bo
}
id = static_cast< int >( sqlite3_last_insert_rowid( mLocalDB.get() ) );

emit entryAdded( id, entry, Qgis::HistoryProviderBackend::LocalProfile );
QgsHistoryEntry addedEntry( entry );
addedEntry.id = id;

emit entryAdded( id, addedEntry, Qgis::HistoryProviderBackend::LocalProfile );
}

return id;
Expand Down Expand Up @@ -163,11 +166,13 @@ QgsHistoryEntry QgsHistoryProviderRegistry::entry( long long id, bool &ok, Qgis:
}

ok = true;
return QgsHistoryEntry(
statement.columnAsText( 0 ),
QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
);
QgsHistoryEntry res = QgsHistoryEntry(
statement.columnAsText( 0 ),
QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
);
res.id = id;
return res;
}

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

QString sql = QStringLiteral( "SELECT provider_id, xml, timestamp FROM history" );
QString sql = QStringLiteral( "SELECT id, provider_id, xml, timestamp FROM history" );
QStringList whereClauses;
if ( !providerId.isEmpty() )
{
Expand All @@ -237,17 +242,20 @@ QList<QgsHistoryEntry> QgsHistoryProviderRegistry::queryEntries( const QDateTime
while ( nErr == SQLITE_OK && sqlite3_step( statement.get() ) == SQLITE_ROW )
{
QDomDocument doc;
if ( !doc.setContent( statement.columnAsText( 1 ) ) )
if ( !doc.setContent( statement.columnAsText( 2 ) ) )
{
QgsDebugMsg( QStringLiteral( "Cannot read history entry" ) );
continue;
}

entries.append( QgsHistoryEntry(
statement.columnAsText( 0 ),
QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
) );
QgsHistoryEntry entry(
statement.columnAsText( 1 ),
QDateTime::fromString( statement.columnAsText( 3 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ),
QgsXmlUtils::readVariant( doc.documentElement() ).toMap()
);
entry.id = statement.columnAsInt64( 0 );

entries.append( entry );
}
}

Expand Down
17 changes: 17 additions & 0 deletions tests/src/python/test_qgshistoryproviderregistry.py
Expand Up @@ -110,6 +110,7 @@ def test_registry_entries(self):
self.assertEqual(len(added_spy), 1)
self.assertEqual(added_spy[-1][0], id_1)
self.assertEqual(added_spy[-1][1].providerId, 'my provider')
self.assertEqual(added_spy[-1][1].id, id_1)
self.assertEqual(added_spy[-1][1].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})

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

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

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

Expand All @@ -134,11 +138,13 @@ def test_registry_entries(self):
entry, ok = reg.entry(id_1)
self.assertTrue(ok)
self.assertEqual(entry.providerId, 'my provider')
self.assertEqual(entry.id, id_1)
self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date())
self.assertEqual(entry.entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
entry, ok = reg.entry(id_2)
self.assertTrue(ok)
self.assertEqual(entry.providerId, 'my provider 2')
self.assertEqual(entry.id, id_2)
self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date())
self.assertEqual(entry.entry, {'some var': 6})

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

self.assertEqual(len(reg.queryEntries()), 3)
self.assertEqual(reg.queryEntries()[0].providerId, 'my provider')
self.assertEqual(reg.queryEntries()[0].id, id_1)
self.assertEqual(reg.queryEntries()[0].timestamp.date(), QDateTime.currentDateTime().date())
self.assertEqual(reg.queryEntries()[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}})
self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 2')
self.assertEqual(reg.queryEntries()[1].id, id_2)
self.assertEqual(reg.queryEntries()[1].timestamp.date(), QDateTime.currentDateTime().date())
self.assertEqual(reg.queryEntries()[1].entry, {'some var': 6})
self.assertEqual(reg.queryEntries()[2].providerId, 'my provider 3')
self.assertEqual(reg.queryEntries()[2].id, id_3)
self.assertEqual(reg.queryEntries()[2].timestamp.date(), QDate(2021, 1, 2))
self.assertEqual(reg.queryEntries()[2].entry, {'var': 7})

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

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

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

entry, ok = reg.entry(id_1)
self.assertEqual(entry.providerId, 'my provider')
self.assertEqual(entry.id, id_1)
self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date())
self.assertEqual(entry.entry, {'new_props': 54})

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

self.assertEqual(len(added_spy), 5)
self.assertEqual(added_spy[-2][1].providerId, 'my provider 4')
self.assertEqual(added_spy[-2][1].id, 1)
self.assertEqual(added_spy[-2][1].entry, {'var': 7})
self.assertEqual(added_spy[-1][1].providerId, 'my provider 5')
self.assertEqual(added_spy[-1][1].id, 2)
self.assertEqual(added_spy[-1][1].entry, {'var': 8})

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

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


Expand Down

0 comments on commit aa7535f

Please sign in to comment.