Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add totals #24

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

add totals #24

wants to merge 5 commits into from

Conversation

rumours86
Copy link

No description provided.

Copy link

@stanislav-reshetnev stanislav-reshetnev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@rumours86
Copy link
Author

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?

@stanislav-reshetnev
Copy link

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();
    }

@rumours86
Copy link
Author

rumours86 commented Mar 18, 2019

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 ?

@stanislav-reshetnev
Copy link

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.

@rumours86
Copy link
Author

okay

@yapro
Copy link

yapro commented Mar 22, 2020

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants