Skip to content

Commit 959fe57

Browse files
committed
Receiving columns metadata
1 parent 9782b5c commit 959fe57

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

clickhouse/client.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,22 @@ bool Client::Impl::ReceivePacket(uint64_t* server_packet) {
430430
return false;
431431
}
432432

433+
case ServerCodes::TableColumns: {
434+
// external table name
435+
if (!WireFormat::SkipString(*input_)) {
436+
return false;
437+
}
438+
439+
std::string columns_metadata;
440+
if (!WireFormat::ReadString(*input_, &columns_metadata)) {
441+
return false;
442+
}
443+
if (events_) {
444+
events_->OnColumnsMetadata(columns_metadata);
445+
}
446+
return true;
447+
}
448+
433449
default:
434450
throw UnimplementedError("unimplemented " + std::to_string((int)packet_type));
435451
break;

clickhouse/protocol.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ namespace clickhouse {
1616
Extremes = 8, /// Block of mins and maxs, may be compressed.
1717
TablesStatusResponse = 9, /// Response to TableStatus.
1818
Log = 10, /// Query execution log.
19+
TableColumns = 11, /// Columns' description for default values calculation
1920
};
2021
}
2122

2223
/// Types of packets sent by client.
2324
namespace ClientCodes {
2425
enum {
2526
Hello = 0, /// Name, version, default database name.
26-
Query = 1, /** Query id, query settings, query processing stage,
27+
Query = 1, /** Query id, query settings, query processing stage,
2728
* compression status, and query text (no INSERT data).
2829
*/
2930
Data = 2, /// Data `Block` (e.g. INSERT data), may be compressed.
@@ -32,7 +33,7 @@ namespace clickhouse {
3233
};
3334
}
3435

35-
/// Should we compress `Block`s of data
36+
/// Should we compress `Block`s of data
3637
namespace CompressionState {
3738
enum {
3839
Disable = 0,

clickhouse/query.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class QueryEvents {
6666

6767
virtual void OnProgress(const Progress& progress) = 0;
6868

69+
virtual void OnColumnsMetadata(const std::string& columns_metadata) = 0;
70+
6971
virtual void OnFinish() = 0;
7072
};
7173

@@ -74,6 +76,7 @@ using ExceptionCallback = std::function<void(const Exception& e)>;
7476
using ProgressCallback = std::function<void(const Progress& progress)>;
7577
using SelectCallback = std::function<void(const Block& block)>;
7678
using SelectCancelableCallback = std::function<bool(const Block& block)>;
79+
using ColumnsMetadataCallback = std::function<bool(const std::string& columns_metadata)>;
7780

7881

7982
class Query : public QueryEvents {
@@ -116,6 +119,12 @@ class Query : public QueryEvents {
116119
return *this;
117120
}
118121

122+
/// Set handler for receiving a metedata of column of query.
123+
inline Query& OnColumnsMetadata(ColumnsMetadataCallback cb) {
124+
columns_metadata_cb_ = std::move(cb);
125+
return *this;
126+
}
127+
119128
static const std::string default_query_id;
120129

121130
private:
@@ -149,6 +158,12 @@ class Query : public QueryEvents {
149158
}
150159
}
151160

161+
void OnColumnsMetadata(const std::string& columns_metadata) override {
162+
if (columns_metadata_cb_) {
163+
columns_metadata_cb_(columns_metadata);
164+
}
165+
}
166+
152167
void OnFinish() override {
153168
}
154169

@@ -159,6 +174,7 @@ class Query : public QueryEvents {
159174
ProgressCallback progress_cb_;
160175
SelectCallback select_cb_;
161176
SelectCancelableCallback select_cancelable_cb_;
177+
ColumnsMetadataCallback columns_metadata_cb_;
162178
};
163179

164180
}

0 commit comments

Comments
 (0)