Open rumours86 opened 5 years ago
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
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?