/**
  * @param AbstractQueryBuilder $query
  * @return string
  */
 public function compileSelect(AbstractQueryBuilder $query)
 {
     $stmt = "SELECT ";
     $stmt .= $query->getDistinct() ? "DISTINCT " : "";
     $stmt .= implode(', ', $query->getColumns());
     $stmt .= " FROM {$query->getTable()} ";
     $stmt .= $this->compileWheres($query->getWheres());
     $stmt .= !is_null($query->getGroupBy()) ? $this->compileGroupBy($query->getGroupBy()) . " " : "";
     $stmt .= !is_null($query->getOrderBy()) ? $this->compileOrderBy($query->getOrderBy()) . " " : "";
     $stmt .= !is_null($query->getLimit()) ? "LIMIT " . $query->getLimit() . " " : "";
     $stmt .= !is_null($query->getOffset()) ? "OFFSET " . $query->getOffset() : "";
     return trim($stmt) . ';';
 }