@@ -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)>;
7476using ProgressCallback = std::function<void (const Progress& progress)>;
7577using SelectCallback = std::function<void (const Block& block)>;
7678using SelectCancelableCallback = std::function<bool (const Block& block)>;
79+ using ColumnsMetadataCallback = std::function<bool (const std::string& columns_metadata)>;
7780
7881
7982class 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
121130private:
@@ -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