dbal-clickhouse
dbal-clickhouse copied to clipboard
add totals
The "totals" may be not needed at results. It must be manipulated by input parameter. An extra data like additional "totals" entry can destroy existing applications.
I thought about it, but I have no idea how not to break existing applications and add total output
And it should not break anything, unless someone uses a query with "WITH TOTALS", but why use it if it cannot be displayed?
I thought about it, but I have no idea how not to break existing applications and add total output
I added getTotals() method for the replaced vendor's class for it in my application:
public function getTotals(): array
{
return $this->_client_statement->totals();
}
I thought about it, but I have no idea how not to break existing applications and add total output
I added getTotals() method for the replaced vendor's class for it in my application:
public function getTotals(): array { return $this->_client_statement->totals(); }
how i can use this in controller or template or pager ?
how i can use this in controller or template or pager ?
Here is using in my Symfony service:
/** @var ClickhouseConnection $conn */
$conn = $this->_doctrine_manager->getConnection('clickhouse');
$q = $conn->createQueryBuilder();
// ...
/** @var \App\VendorReplace\ClickhouseStatement $clickhouse_stmt */
$clickhouse_stmt = $q->execute();
$totals = $clickhouse_stmt->getTotals();
I do not use database access in controllers or templates.
okay
My solution:
/**@var \FOD\DBALClickHouse\Connection $conn */
$olapConnection = $this->_doctrine_manager->getConnection('clickhouse');
$clickHouseConnection = $olapConnection->getWrappedConnection();
$class = new \ReflectionClass($clickHouseConnection);
$property = $class->getProperty('smi2CHClient');
$property->setAccessible(true);
/** @var \ClickHouseDB\Client $client */
$client = $property->getValue($clickHouseConnection);
$params = ['field3' => 'value'];
$statement = $client->select('SELECT field1, COUNT(*) AS field2 FROM table1 WHERE field3 = :field3 GROUP BY field1 LIMIT 5, 10', $params);
$statement->rows(); // get rows by LIMIT
$statement->countAll(); // Count all rows (like LIMIT not using) - for implementation my pagination
Details in the documentation https://github.com/smi2/phpClickHouse#start