예제 #1
0
 public static function MakeGroupByQuery(DBObjectSearch $oFilter, $aArgs, $aGroupByExpr, $bExcludeNullValues = false)
 {
     $aAttToLoad = array();
     if ($bExcludeNullValues) {
         // Null values are not handled (though external keys set to 0 are allowed)
         $oQueryFilter = $oFilter->DeepClone();
         foreach ($aGroupByExpr as $oGroupByExp) {
             $oNull = new FunctionExpression('ISNULL', array($oGroupByExp));
             $oNotNull = new BinaryExpression($oNull, '!=', new TrueExpression());
             $oQueryFilter->AddConditionExpression($oNotNull);
         }
     } else {
         $oQueryFilter = $oFilter;
     }
     $oSelect = self::MakeSelectStructure($oQueryFilter, array(), $aArgs, $aAttToLoad, null, 0, 0, false, $aGroupByExpr);
     $aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
     try {
         $bBeautifulSQL = self::$m_bTraceQueries || self::$m_bDebugQuery || self::$m_bIndentQueries;
         $sRes = $oSelect->RenderGroupBy($aScalarArgs, $bBeautifulSQL);
     } catch (MissingQueryArgument $e) {
         // Add some information...
         $e->addInfo('OQL', $oFilter->ToOQL());
         throw $e;
     }
     self::AddQueryTraceGroupBy($oFilter, $aArgs, $aGroupByExpr, $sRes);
     return $sRes;
 }