ClickHouse / ClickHouse/clickhouse-cpp
Allow for inheritance of Query Interface
- Vorherrschende Sprache
- C
- Sterne
- 382
- Forks
- 209
- Ø Merge
- 1 T. 22 Std.
- Gemergte PRs (30 T.)
- 13
Beschreibung
Enhancement request.
## Description:
Currently the clickhouse::Query interface cannot be inherited for any requirements which deviate from the existing implementation.
e.g, if we need a callback for when the query is finished, we should be able to override the Query as follows:
```C++
#ifndef CLICKHOUSE_OVERRIDES
#define CLICKHOUSE_OVERRIDES
#include
namespace DB
{
class Query : public clickhouse::Query
{
public:
Query();
Query(const char *query, const char *query_id = nullptr);
Query(const std::string &query, const std::string &query_id = default_query_id);
Query &OnFinish(std::function callback);
std::function _finish_callback;
void OnFinish() override;
private:
};
}
#endif // CLICKHOUSE_OVERRIDES
```
However this does not work and the original function `OnFinish` of clickhouse::Query is called instead of DB::Query.
The culprit as far as I can understand is:
```C++
// clickhouse/client.cpp
void Client::Impl::ExecuteQuery(Query query) {
EnsureNull en(static_cast(&query), &events_);
if (options_.ping_before_query) {
RetryGuard([this]() { Ping(); });
}
SendQuery(query);
while (ReceivePacket()) {
;
}
}
```
Here the function is called without reference and I believe that the compiler is creating a copy of clickhouse::Query with data from the object passed. This causes the overrides from DB::Query to not be called.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne in clickhouse/client.cpp bei Client::Impl::ExecuteQuery und verfolge, wie Query an SendQuery übergeben und von QueryEvents verarbeitet wird. Vergleiche diesen Ablauf mit dem Vererbungsbeispiel und ermittle, wie das virtuelle OnFinish-Verhalten der Schnittstelle verloren geht. Als erledigt gilt, wenn abgeleitete Query-Implementierungen während der Ausführung das beabsichtigte Callback-Verhalten erhalten können, ohne die bestehende Verwendung von Query zu beeinträchtigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- cpp
- Bereich
- backend-api-design, databases
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100