Beispiel #1
0
 /**
  * @param Query $query
  *
  * @return \PDOStatement
  */
 private function prepareSQL(Query $query)
 {
     $subQueries = array();
     foreach ($query->getTables() as $table) {
         $subQueries[] = '(' . $this->buildSubQuery($table, $query) . ')';
     }
     $sql = sprintf('SELECT %s, %s, %s, %s FROM (', self::$_tableCol, self::$_sensorIdCol, self::$_timestampCol, self::$_valuesCol);
     $sql .= implode(' UNION ALL ', $subQueries) . ') t';
     $where = array();
     $timestampColumn = $this->sanitize($query->getTimestampColumn());
     if ($query->getStart() !== null) {
         $where[] = self::$_timestampCol . ' > :start';
     }
     if ($query->getEnd() !== null) {
         $where[] = self::$_timestampCol . ' < :end';
     }
     if (count($where) != 0) {
         $sql .= ' WHERE ' . implode(' AND ', $where);
     }
     $sql .= sprintf(' ORDER BY
         t.%1$s ASC,
         t.%2$s ASC,
         t.%3$s ASC', self::$_tableCol, self::$_sensorIdCol, self::$_timestampCol);
     $sql = preg_replace('/\\r\\n|\\r|\\n/', ' ', $sql);
     $sql = preg_replace('/\\s+/', ' ', $sql);
     $sth = $this->pdo->prepare($sql);
     if ($this->logger != null) {
         $this->logger->message($sql);
     }
     foreach ($query->getTables() as $table) {
         foreach ($query->getSensorsByTable($table) as $i => $sensor) {
             $sth->bindValue(":{$table}{$i}", $sensor);
         }
     }
     if ($query->getStart() !== null) {
         $sth->bindValue(':start', $query->getStart());
     }
     if ($query->getEnd() !== null) {
         $sth->bindValue(':end', $query->getEnd());
     }
     return $sth;
 }