1 <?php
2 3 4 5 6 7
8 namespace Cross\DB\SQLAssembler;
9
10 11 12 13 14
15 class PgSQLAssembler extends SQLAssembler
16 {
17 18 19 20 21 22 23 24 25 26 27 28
29 public function find($table, $fields, $where, $order = 1, array &$page = array('p' => 1, 'limit' => 50), $group_by = 1)
30 {
31 $params = array();
32 $field_str = $this->parseFields($fields);
33 $where_str = $this->parseWhere($where, $params);
34 $order_str = $this->parseOrder($order);
35
36
37 $offset = $page['limit'] * ($page['p'] - 1);
38 if (1 !== $group_by) {
39 $group_str = $this->parseGroup($group_by);
40 $sql = "SELECT {$field_str} FROM {$table} WHERE {$where_str} GROUP BY {$group_str} ORDER BY {$order_str} LIMIT {$page['limit']} OFFSET {$offset}";
41 } else {
42 $sql = "SELECT {$field_str} FROM {$table} WHERE {$where_str} ORDER BY {$order_str} LIMIT {$page['limit']} OFFSET {$offset}";
43 }
44
45 $this->setSQL($sql);
46 $this->setParams($params);
47 }
48
49 50 51 52 53 54 55
56 public function limit($start, $end = false)
57 {
58 if ($end) {
59 $limit = max(1, (int)$end);
60 $offset = $limit * (max(1, (int)$start) - 1);
61
62 $this->offset_is_valid = false;
63 return "LIMIT {$limit} OFFSET {$offset} ";
64 }
65
66 $start = (int)$start;
67 return "LIMIT {$start} ";
68 }
69 }
70