[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/akonadi/server
From: Volker Krause <vkrause () kde ! org>
Date: 2010-09-26 12:42:27
Message-ID: 20100926124227.11AC8AC857 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1179899 by vkrause:
Add support for aggregation queries to the query builder.
M +1 -1 src/handlerhelper.cpp
M +9 -0 src/storage/querybuilder.cpp
M +7 -0 src/storage/querybuilder.h
M +5 -0 tests/unittest/querybuildertest.cpp
--- trunk/kdesupport/akonadi/server/src/handlerhelper.cpp #1179898:1179899
@@ -118,7 +118,7 @@
{
QueryBuilder qb( PimItem::tableName() );
qb.addValueCondition( PimItem::collectionIdColumn(), Query::Equals, col.id() );
- qb.addColumn( QLatin1String("sum(size)") );
+ qb.addAggregation( PimItem::sizeColumn(), QLatin1String("sum") );
if ( !qb.exec() )
return -1;
--- trunk/kdesupport/akonadi/server/src/storage/querybuilder.cpp #1179898:1179899
@@ -301,6 +301,15 @@
mColumns << col;
}
+void QueryBuilder::addAggregation(const QString& col, const QString& aggregate)
+{
+ QString s( aggregate );
+ s += QLatin1Char('(');
+ s += col;
+ s += QLatin1Char(')');
+ mColumns.append( s );
+}
+
QString QueryBuilder::bindValue(const QVariant & value)
{
mBindValues << value;
--- trunk/kdesupport/akonadi/server/src/storage/querybuilder.h #1179898:1179899
@@ -127,6 +127,13 @@
void addColumn( const QString &col );
/**
+ * Adds an aggregation statement.
+ * @param col The column to aggregate on
+ * @param aggregate The aggregation function.
+ */
+ void addAggregation( const QString &col, const QString &aggregate );
+
+ /**
Add a WHERE or HAVING condition which compares a column with a given value.
@param column The column that should be compared.
@param op The operator used for comparison
--- trunk/kdesupport/akonadi/server/tests/unittest/querybuildertest.cpp \
#1179898:1179899 @@ -69,6 +69,11 @@
QTest::newRow( "hierarchical where" ) << mBuilders.count() << QString( "SELECT \
col1, col2 FROM table WHERE ( col1 = :0 OR col1 <= col2 OR ( col1 > col2 AND col1 <> \
NULL ) )" ) << bindVals;
qb = QueryBuilder( "table" );
+ qb.addAggregation( "col1", "count" );
+ mBuilders << qb;
+ QTest::newRow( "single aggregation" ) << mBuilders.count() << QString( "SELECT \
count(col1) FROM table" ) << QList<QVariant>(); +
+ qb = QueryBuilder( "table" );
qb.addColumn( "col1" );
qb.addSortColumn( "col1" );
mBuilders << qb;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic