/**
 * @var \Zend\Db\Adapter\Driver\Pdo\Result $results
 * @var \Zend\Db\Adapter\Driver\StatementInterface $statement
 */
function renderResults(Result $results, StatementInterface $statement = null)
{
    $headers = [];
    $queryInformation = null;
    $outputData = null;
    $resultContents = null;
    if ($statement) {
        $queryInformation = SqlFormatter::format($statement->getSql());
        if ($statement->getParameterContainer()->count()) {
            $queryInformation .= createTable(array_keys($statement->getParameterContainer()->getNamedArray()), [array_values($statement->getParameterContainer()->getNamedArray())]);
        }
    }
    if ($results->count()) {
        foreach ($results as $result) {
            $headers = array_keys($result);
            $outputData[] = $result;
        }
    }
    // Results
    if ($outputData) {
        $resultContents = createTable([$headers], $outputData);
    }
    // Wrapper Table
    $table = new Table(new ConsoleOutput());
    $table->setHeaders([['Query Results', 'Generated SQL']])->setRows([[$resultContents, $queryInformation]])->render();
}
Пример #2
0
 /**
  * Prepare statement
  *
  * @param \Zend\Db\Adapter\Adapter $adapter
  * @param \Zend\Db\Adapter\Driver\StatementInterface $statement
  * @return void
  */
 public function prepareStatement(Adapter $adapter, StatementInterface $statement)
 {
     $driver = $adapter->getDriver();
     $platform = $adapter->getPlatform();
     $parameterContainer = $statement->getParameterContainer();
     $prepareType = $driver->getPrepareType();
     $parts = parent::getWhereParts();
     $wherePart = '';
     $whereParamIndex = 1;
     foreach ($parts as $part) {
         if (is_string($part)) {
             $wherePart .= $part;
         } elseif (is_array($part)) {
             $values = $part[1];
             $types = isset($part[2]) ? $part[2] : array();
             foreach ($values as $vIndex => $value) {
                 if (isset($types[$vIndex]) && $types[$vIndex] == self::TYPE_IDENTIFIER) {
                     $values[$vIndex] = $platform->quoteIdentifierInFragment($value);
                 } elseif (isset($types[$vIndex]) && $types[$vIndex] == self::TYPE_VALUE) {
                     if ($prepareType == 'positional') {
                         $parameterContainer->offsetSet(null, $value);
                         $values[$vIndex] = $driver->formatParameterName(null);
                     } elseif ($prepareType == 'named') {
                         $name = 'where' . $whereParamIndex++;
                         $values[$vIndex] = $driver->formatParameterName($name);
                         $parameterContainer->offsetSet($name, $value);
                     }
                 }
             }
             $wherePart .= vsprintf($part[0], $values);
         }
     }
     $sql = $statement->getSql();
     $sql .= sprintf($this->specification, $wherePart);
     $statement->setSql($sql);
 }