[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