public function grammarCount(Cursor $cursor, $foundOnly, array &$data = array()) { $sql = "FROM {$cursor->getCollection()->getName()}"; $wheres = array(); foreach ($cursor->getCriteria() as $key => $value) { $wheres[] = $this->collection->connection->getDialect()->grammarExpression($key, $value, $data); } if (count($wheres)) { $sql .= ' WHERE ' . implode(' AND ', $wheres); } if ($foundOnly) { $sorts = $cursor->sort(); $limit = $cursor->limit(); $skip = $cursor->skip(); if (isset($sorts)) { throw new Exception(__FILE__ . ':' . __LINE__ . ' unimplemented yet!'); } if (isset($limit) || isset($skip)) { $sql .= ' LIMIT ' . ($limit ?: -1) . ' OFFSET ' . ($skip ?: 0); } $sql = 'SELECT COUNT(*) AS c FROM (SELECT * ' . $sql . ')'; } else { $sql = 'SELECT COUNT(*) AS c ' . $sql; } return $sql; }
/** * Get data from rest service. * * @param \Norm\Cursor $cursor * * @throws \Exception * * @return array */ public function restGet($cursor) { if ($cursor instanceof Cursor) { $name = $cursor->getCollection()->getName(); $criteria = $cursor->getCriteria(); $limit = $cursor->limit(); $skip = $cursor->skip(); $sorts = $cursor->sort(); $query = array(); foreach ($criteria as $key => $value) { $query[$key] = $value; } if ($limit) { $query['!limit'] = $limit; } if ($skip) { $query['!skip'] = $skip; } if (!empty($sorts)) { foreach ($sorts as $key => $value) { $query["!sort[{$key}]"] = $value; } } $qs = array(); foreach ($query as $key => $value) { if (is_array($value)) { foreach ($value as $k => $v) { $qs[] = '!' . $key . '=' . $v; } } else { $qs[] = $key . '=' . $value; } } if ($qs) { $qs = '?' . implode('&', $qs); } else { $qs = ''; } $url = $this->option('baseUrl') . '/' . $name . '.json' . $qs; $client = new Client(); $response = $client->get($url)->send(); return json_decode($response->getBody(true), true); } else { throw new Exception('Unimplemented yet!'); } }
public function grammarCount(Cursor $cursor, $foundOnly, array &$data = array()) { $sql = "FROM {$cursor->getCollection()->getName()}"; $wheres = array(); foreach ($cursor->getCriteria() as $key => $value) { $wheres[] = $this->grammarExpression($key, $value, $cursor->getCollection(), $data); } if (count($wheres)) { $sql .= ' WHERE ' . implode(' AND ', $wheres); } if ($foundOnly) { $limit = $cursor->limit(); $skip = $cursor->skip(); if (isset($limit) || isset($skip)) { $sql .= ' LIMIT ' . ($limit ?: 1000000000) . ' OFFSET ' . ($skip ?: 0); } $sql = 'SELECT COUNT(*) AS c FROM (SELECT * ' . $sql . ') AS t'; } else { $sql = 'SELECT COUNT(*) AS c ' . $sql; } return $sql; }