/** * @param DbRequestInterface $request * @return DbResponseInterface */ public function query(DbRequestInterface $request) { $mode = MYSQLI_STORE_RESULT; if (!$request->isResultBuffer()) { $mode = MYSQLI_USE_RESULT; } switch ($request->getResultType()) { /* column names as keys in the result */ case 'name': $type = MYSQLI_ASSOC; break; /* column position as keys in the result */ /* column position as keys in the result */ case 'position': $type = MYSQLI_NUM; break; case 'name-pos': $type = MYSQLI_BOTH; break; default: $type = MYSQLI_ASSOC; } $sql = $request->getSql(); $filter = $request->getCallback(); $driver = $this->getDriver(); try { $result = $driver->query($sql, $mode); } catch (\Exception $e) { $this->addError($e->getMessage(), $e->getCode()); return false; } if (!$result instanceof mysqli_result) { $this->addError("result not instanceof mysqli_result"); return false; } $resultSet = new ResultSet($result); $data = $resultSet->fetchAllData($type, $filter); if (false === $data) { $errText = "{$driver->error} {$drive->sqlstate}"; $errCode = $driver->errno; $this->addError($errText, $errCode); return false; } else { if (true === $data) { $data = null; } } return $this->createResponse($data); }