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