/**
  * @return owa_db
  */
 public static function dbSingleton()
 {
     static $db;
     if (!isset($db)) {
         $db = owa_coreAPI::dbFactory();
     }
     return $db;
 }
 function generateSegmentQuery($base_entity)
 {
     $segment = $this->getSegment();
     $segment_entity = owa_coreAPI::entityFactory($base_entity->getName());
     $segment_entity->setTableAlias($segment_entity->getTableAlias() . '_segment');
     if ($segment) {
         // use a new data access object
         $db = owa_coreAPI::dbFactory();
         $db->select($segment_entity->getTableAlias() . '.*');
         $db->from($segment_entity->getTableName(), $segment_entity->getTableAlias());
         if (isset($segment['metrics'])) {
             //$this->applyConstraints( $segment['metrics'], $db);
         }
         if (isset($segment['dimensions'])) {
             //print_r($segment);
             foreach ($segment['dimensions'] as $k => $dim) {
                 $check = $this->isDimensionRelated($dim['name'], $segment_entity->getName());
                 if ($check) {
                     $dimension = $this->lookupDimension($dim['name'], $segment_entity);
                     if (!isset($dimension['denormalized']) || $dimension['denormalized'] != true) {
                         $this->addRelation($dimension, $db, $segment_entity);
                     }
                 }
             }
             //print_r( $segment['dimensions'] );
             $this->applyConstraints($segment['dimensions'], $db, $segment_entity);
             // apply siteId, startDate, and endDate constraints
             $constraint_names = array('siteId', 'date');
             $constraints_apply = array();
             //print_r($this->params['constraints']);
             foreach ($constraint_names as $name) {
                 $con = $this->getConstraint($name);
                 if ($con) {
                     $constraints_apply[$name] = $con;
                 }
             }
             if ($constraints_apply) {
                 $this->applyConstraints($constraints_apply, $db, $segment_entity);
             }
         }
         return sprintf('(%s)', $db->generateSelectQuerySql());
     }
 }