Example #1
0
 /**
  * Get closest node by latitude and longitude
  * This function use fast, but not exact algorithm
  * 
  * @param float $latitude
  * @param float $longitude
  * @param int $type_id
  * @param int $cacheMinutes
  */
 public function getClosestNode($latitude, $longitude, $type_id = null, $cacheMinutes = null)
 {
     if (empty($latitude) or empty($longitude)) {
         return false;
     }
     $qb = new QueryBuilder();
     $qb->select(new Field('*'))->from(Tbl::get('TBL_TREE'))->where($qb->expr()->equal(new Field('lat'), $latitude))->andWhere($qb->expr()->equal(new Field('lng'), $longitude));
     if ($type_id !== null) {
         $qb->andWhere($qb->expr()->equal(new Field('type_id'), $type_id));
     }
     $qb->limit(1);
     $this->query->exec($qb->getSQL(), $cacheMinutes);
     if ($this->query->countRecords()) {
         return $this->query->fetchRecord();
     }
     // If above query doesn't return record, find in some range of posible latitude and longitude
     // As $latitude, $longitude are decimal(8,4)  find with 3 digits to the right of the decimal point
     $digits_after = 3;
     while ($digits_after > -2) {
         //2 digits to the left of the decimal point
         $pow = pow(10, $digits_after);
         $lat_min = $latitude - 1 / 2 / $pow;
         $lat_max = $latitude + 1 / 2 / $pow;
         $lng_min = $longitude - 1 / 2 / $pow;
         $lng_max = $longitude + 1 / 2 / $pow;
         $qb = new QueryBuilder();
         $qb->select(new Field('*'))->from(Tbl::get('TBL_TREE'))->where($qb->expr()->between(new Field('lat'), $lat_min, $lat_max))->andWhere($qb->expr()->between(new Field('lng'), $lng_min, $lng_max));
         $this->query->exec($qb->getSQL());
         if ($this->query->countRecords()) {
             return $this->query->fetchRecord();
         }
         $digits_after--;
         //decrease accuracy
     }
     //////////////////////////////////////////////////////
     // Appear here only if there is no such record		//
     // in wgps_tree table with zero precision/accuracy.	//
     //////////////////////////////////////////////////////
     return null;
 }
Example #2
0
 /**
  * Generated from @assert limit(10, 1)->text() [==] " LIMIT 1,10".
  *
  * @covers Kotchasan\Database\QueryBuilder::limit
  */
 public function testLimit2()
 {
     $this->assertEquals(" LIMIT 1,10", $this->object->limit(10, 1)->text());
 }
Example #3
0
} else {
    $total_results = $peregrine->session->getInt('last_query_total_results');
}
// Order by
if (defined('DEFAULT_ORDER_BY') && DEFAULT_ORDER_BY != '') {
    $qb->order(DEFAULT_ORDER_BY);
}
$per_page = $peregrine->post->getInt('per_page');
// Try to ensure it's somewhat sensible
if ($per_page <= 0 || $per_page > 10000) {
    $per_page = 25;
}
$response = array('results' => false, 'total_results' => $total_results, 'per_page' => $per_page, 'pages' => $total_results > 0 ? ceil($total_results / $per_page) : 0, 'curr_page' => $peregrine->post->getInt('curr_page'), 'sql_hash' => $sql_hash, 'session_hash' => $peregrine->session->getAlnum('sql_conditions_hash'));
// Limit
$offset = ($response['curr_page'] - 1) * $response['per_page'];
$qb->limit($offset, $response['per_page']);
// Merge sql
$sql = $qb->getQuery();
if (defined('WEB_UI_DEBUG') && WEB_UI_DEBUG) {
    print $sql;
    exit;
}
$date_format = 'Y-m-d H:i:s';
if (defined('DEFAULT_DATE_FORMAT') && DEFAULT_DATE_FORMAT) {
    $date_format = DEFAULT_DATE_FORMAT;
}
$statement = $db->query($sql);
$statement->setFetchMode(PDO::FETCH_ASSOC);
if ($statement->rowCount()) {
    $results = array();
    $blocks = $prism->getItemList();