Add original id to QgsHistoryEntry

This commit is contained in:
Nyall Dawson 2023-04-19 10:12:34 +10:00
parent 2fafc2828d
commit aa7535ffab
4 changed files with 47 additions and 13 deletions

View File

@ -45,6 +45,8 @@ Returns ``True`` if the entry is valid.
.. versionadded:: 3.32
%End
long long id;
QDateTime timestamp;
QString providerId;

View File

@ -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;

View File

@ -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;
@ -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" ) );
@ -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() )
{
@ -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 );
}
}

View File

@ -110,6 +110,7 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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},
@ -118,14 +119,17 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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})
@ -134,11 +138,13 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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})
@ -148,16 +154,20 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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})
@ -165,12 +175,14 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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})
@ -195,6 +207,7 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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})
@ -213,14 +226,18 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase):
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})