예제 #1
0
 /**
  * 
  * @param string $queryId
  * @param array $values
  * @return self
  */
 public function appendQueryId($queryId, array $values = [])
 {
     $binary = pack('C', 1);
     $binary .= pack('n', strlen($queryId)) . $queryId;
     $binary .= Request::valuesBinary($values, !empty($this->_options['names_for_values']));
     $this->_queryArray[] = $binary;
     return $this;
 }
예제 #2
0
 /**
  * 
  * @param string $queryId
  * @param array $values
  * @return self
  */
 public function appendQueryId($queryId, array $values = [])
 {
     $binary = pack('C', 1);
     $binary .= pack('n', strlen($queryId)) . $queryId;
     $binary .= Request::valuesBinary($values);
     $this->_queryArray[] = $binary;
     return $this;
 }
 /**
  * {@inheritdoc}
  */
 public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null)
 {
     if ($qcp !== null) {
         return $this->executeCacheQuery($query, $params, $types, $qcp);
     }
     $this->connect();
     $logger = $this->_config->getSQLLogger();
     if ($logger) {
         $logger->startQuery($query, $params, $types);
     }
     try {
         list($query, $params, $types) = SQLParserUtils::expandListParameters($query, $params, $types);
         $preparedData = $this->_conn->prepare($query);
         $strictValues = \Cassandra\Request\Request::strictTypeValues($params, $preparedData['metadata']['columns']);
         $stmt = $this->_conn->executeSync($preparedData['id'], $strictValues);
         $stmt->setMetadata($preparedData['result_metadata']);
     } catch (\Exception $ex) {
         throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types));
     }
     if ($logger) {
         $logger->stopQuery();
     }
     return $stmt;
 }
예제 #4
0
 /**
  * 
  * @param Request\Request $request
  * @return Statement
  */
 public function asyncRequest(Request\Request $request)
 {
     if ($this->_node === null) {
         $this->connect();
     }
     $streamId = $this->_getNewStreamId();
     $request->setStream($streamId);
     $this->_node->write($request->__toString());
     return $this->_statements[$streamId] = new Statement($this, $streamId);
 }
예제 #5
0
 public function getBody()
 {
     $body = pack('N', strlen($this->_cql)) . $this->_cql;
     $body .= Request::queryParameters($this->_consistency, $this->_values, $this->_options);
     return $body;
 }
예제 #6
0
 /**
  * 
  * @param int $consistency
  * @param array $values
  * @param array $options
  * @return string
  */
 public static function queryParameters($consistency, array $values = [], array $options = [])
 {
     $flags = 0;
     $optional = '';
     if (!empty($values)) {
         $flags |= Query::FLAG_VALUES;
         $optional .= Request::valuesBinary($values, !empty($options['names_for_values']));
     }
     if (!empty($options['skip_metadata'])) {
         $flags |= Query::FLAG_SKIP_METADATA;
     }
     if (isset($options['page_size'])) {
         $flags |= Query::FLAG_PAGE_SIZE;
         $optional .= pack('N', $options['page_size']);
     }
     if (isset($options['paging_state'])) {
         $flags |= Query::FLAG_WITH_PAGING_STATE;
         $optional .= pack('N', strlen($options['paging_state'])) . $options['paging_state'];
     }
     if (isset($options['serial_consistency'])) {
         $flags |= Query::FLAG_WITH_SERIAL_CONSISTENCY;
         $optional .= pack('n', $options['serial_consistency']);
     }
     if (isset($options['default_timestamp'])) {
         $flags |= Query::FLAG_WITH_DEFAULT_TIMESTAMP;
         $bigint = new Type\Bigint($options['default_timestamp']);
         $optional .= $bigint->getBinary();
     }
     if (!empty($options['names_for_values'])) {
         $flags |= Query::FLAG_WITH_NAMES_FOR_VALUES;
     }
     return pack('n', $consistency) . pack('C', $flags) . $optional;
 }
예제 #7
0
 /**
  * {@inheritdoc}
  */
 public function execute($params = null)
 {
     return $this->_conn->executeSync($this->_stmtPrepared['id'], Request::strictTypeValues(is_null($params) ? $this->_bindedValues : $params, $this->_stmtPrepared['metadata']['columns']));
 }
예제 #8
0
 /**
  * 
  * @param Request\Request $request
  * @return Statement
  */
 public function asyncRequest(Request\Request $request)
 {
     if ($this->connection === null) {
         $this->connect();
     }
     $streamId = $this->_getNewStreamId();
     $request->setStream($streamId);
     socket_write($this->connection, $request);
     return $this->_statements[$streamId] = new Statement($this, $streamId);
 }