From a04809a44c235bed854adc3bd49ca75b9673bf1f Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Wed, 26 Nov 2014 13:20:05 +0100 Subject: [PATCH 13/30] Intern entity strings for table and column names. This should drastically cut down on the amount of allocations done by the AkonadiServer. Currently, the getters will do the conversion from QLatin1String to QString on every call. By reusing the data via a function-local static const QString object, we can eliminate all of these allocations and increase the cache locality as well. REVIEW: 121255 --- server/src/storage/entities-source.xsl | 56 +++++++++++++++++++++------------- server/src/storage/entities.xsl | 4 +-- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/server/src/storage/entities-source.xsl b/server/src/storage/entities-source.xsl index 174cf4f..7090c31 100644 --- a/server/src/storage/entities-source.xsl +++ b/server/src/storage/entities-source.xsl @@ -214,36 +214,41 @@ void ::::tableName() { - return QLatin1String( "" ); + static const QString tableName = QLatin1String( "" ); + return tableName; } QStringList ::columnNames() { - QStringList rv; + static const QStringList columns = QStringList() - rv.append( QLatin1String( "" ) ); + << Column() - return rv; + ; + return columns; } QStringList ::fullColumnNames() { - QStringList rv; + static const QStringList columns = QStringList() - rv.append( QLatin1String( "." ) ); + << FullColumnName() - return rv; + ; + return columns; } QString ::Column() { - return QLatin1String( "" ); + static const QString column = QLatin1String( "" ); + return column; } QString ::FullColumnName() { - return tableName() + QLatin1String( "." ); + static const QString column = QLatin1String( "." ); + return column; } @@ -399,7 +404,6 @@ QVector<> Relation -Table // data retrieval for n:m relations QVector<> ::s() const @@ -408,14 +412,17 @@ QVector<> >(); - QueryBuilder qb( QLatin1String(""), QueryBuilder::Select ); + QueryBuilder qb( ::tableName(), QueryBuilder::Select ); + static const QStringList columns = QStringList() - qb.addColumn( QLatin1String("." ) ); + << ::FullColumnName() - qb.addJoin( QueryBuilder::InnerJoin, QLatin1String(""), - QLatin1String("._"), - QLatin1String(".") ); - qb.addValueCondition( QLatin1String("._"), Query::Equals, id() ); + ; + qb.addColumns(columns); + qb.addJoin( QueryBuilder::InnerJoin, ::tableName(), + ::rightFullColumnName(), + ::FullColumnName() ); + qb.addValueCondition( ::leftFullColumnName(), Query::Equals, id() ); if ( !qb.exec() ) { akDebug() << "Error during selection of records from table Relation" @@ -546,7 +553,7 @@ bool ::update() - qb.addValueCondition( QLatin1String("id"), Query::Equals, id() ); + qb.addValueCondition( idColumn(), Query::Equals, id() ); if ( !qb.exec() ) { @@ -622,27 +629,32 @@ void ::enableCache( bool enable ) // SQL table information QString ::tableName() { - return QLatin1String( "" ); + static const QString table = QLatin1String( "" ); + return table; } QString ::leftColumn() { - return QLatin1String( "_" ); + static const QString column = QLatin1String( "_" ); + return column; } QString ::leftFullColumnName() { - return tableName() + QLatin1String( "." ) + leftColumn(); + static const QString column = QLatin1String( "._" ); + return column; } QString ::rightColumn() { - return QLatin1String( "_" ); + static const QString column = QLatin1String( "_" ); + return column; } QString ::rightFullColumnName() { - return tableName() + QLatin1String( "." ) + rightColumn(); + static const QString column = QLatin1String( "._" ); + return column; } diff --git a/server/src/storage/entities.xsl b/server/src/storage/entities.xsl index 033e292..8b0ed03 100644 --- a/server/src/storage/entities.xsl +++ b/server/src/storage/entities.xsl @@ -114,7 +114,7 @@ using namespace Akonadi::Server; QVector<QString> Akonadi::Server::allDatabaseTables() { - static QVector<QString> allTables = QVector<QString>() + static const QVector<QString> allTables = QVector<QString>() << QLatin1String( "Table" ) @@ -182,7 +182,7 @@ set( ) QueryBuilder qb( tableName(), QueryBuilder::Select ); qb.addColumns( columnNames() ); - qb.addValueCondition( QLatin1String(""), Query::Equals, ); + qb.addValueCondition( Column(), Query::Equals, ); if ( !qb.exec() ) { akDebug() << "Error during selection of record with " << << "from table" << tableName() -- 2.1.0