Skip to content

Commit af94842

Browse files
pdabre12Pratik Joseph Dabre
authored andcommitted
Cleanup ArrowFederationColumnHandle protocol
1 parent b081b51 commit af94842

File tree

10 files changed

+42
-709
lines changed

10 files changed

+42
-709
lines changed

presto-native-execution/presto_cpp/main/connectors/arrow_flight/arrow_federation/ArrowFederationConnector.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,20 @@ velox::connector::ColumnHandleMap toArrowFlightColumnHandleMap(
4040
return arrowFlightColumnHandles;
4141
}
4242

43-
// Json conversion helpers for ColumnHandleMap
44-
void to_json(nlohmann::json& j, const ColumnHandleMap& map) {
45-
j = nlohmann::json::array();
46-
for (const auto& [name, handle] : map) {
47-
if (!handle) {
48-
continue; // skip null handles
49-
}
50-
auto handleStr = folly::toJson(handle->serialize());
51-
52-
// Base64 encode
53-
auto encoded = folly::base64Encode(handleStr);
54-
j.push_back(encoded);
43+
const std::vector<std::string> toArrowFederationColumnHandleList(
44+
const velox::connector::ColumnHandleMap& columnHandles) {
45+
std::vector<std::string> arrowFederationColumnHandles;
46+
47+
for (const auto& [name, handle] : columnHandles) {
48+
auto federationColumnHandle =
49+
std::dynamic_pointer_cast<const ArrowFederationColumnHandle>(handle);
50+
VELOX_CHECK(
51+
handle,
52+
"ArrowFederationDataSource received wrong type of column handle");
53+
arrowFederationColumnHandles.push_back(
54+
federationColumnHandle->columnHandleBytes());
5555
}
56+
return arrowFederationColumnHandles;
5657
}
5758
} // namespace
5859

@@ -82,7 +83,8 @@ void ArrowFederationDataSource::addSplit(
8283
nlohmann::json request;
8384
request["connectorId"] = federationSplit->connectorId;
8485
request["splitBytes"] = federationSplit->splitBytes_;
85-
to_json(request["columnHandlesBytes"], columnHandles_);
86+
request["columnHandlesBytes"] =
87+
toArrowFederationColumnHandleList(columnHandles_);
8688

8789
arrow::flight::FlightEndpoint flightEndpoint{request.dump()};
8890

presto-native-execution/presto_cpp/main/connectors/arrow_flight/arrow_federation/ArrowFederationConnector.h

Lines changed: 7 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,6 @@ class Location;
2626

2727
namespace facebook::presto {
2828

29-
struct ArrowFederationTypeHandle {
30-
int jdbcType;
31-
std::string jdbcTypeName;
32-
int columnSize;
33-
int decimalDigits;
34-
};
35-
3629
struct ArrowFederationSplit : public velox::connector::ConnectorSplit {
3730
/// @param connectorId
3831
/// @param splitBytes Base64 Serialized Split for Arrow Federation Flight
@@ -48,64 +41,20 @@ struct ArrowFederationSplit : public velox::connector::ConnectorSplit {
4841
class ArrowFederationColumnHandle : public velox::connector::ColumnHandle {
4942
public:
5043
explicit ArrowFederationColumnHandle(
51-
const std::string& columnName,
52-
const std::string& connectorId,
53-
const std::string& columnType,
54-
bool nullable,
55-
const ArrowFederationTypeHandle& arrowFederationTypeHandle)
56-
: columnName_(columnName),
57-
connectorId_(connectorId),
58-
columnType_(columnType),
59-
nullable_(nullable),
60-
arrowFederationTypeHandle_(arrowFederationTypeHandle) {}
44+
const std::string& columnHandleBytes,
45+
const std::string& columnName)
46+
: columnName_(columnName), columnHandleBytes_(columnHandleBytes) {}
6147

6248
const std::string& name() const {
6349
return columnName_;
6450
}
6551

66-
const std::string& connectorId() const {
67-
return connectorId_;
68-
}
69-
70-
const std::string& columnType() const {
71-
return columnType_;
72-
}
73-
74-
bool nullable() const {
75-
return nullable_;
52+
const std::string& columnHandleBytes() const {
53+
return columnHandleBytes_;
7654
}
7755

78-
const ArrowFederationTypeHandle& arrowFederationTypeHandle() const {
79-
return arrowFederationTypeHandle_;
80-
}
81-
82-
folly::dynamic serializeArrowFederationTypeHandle(
83-
const ArrowFederationTypeHandle& handle) const {
84-
folly::dynamic obj = folly::dynamic::object;
85-
obj["jdbcType"] = handle.jdbcType;
86-
obj["jdbcTypeName"] = handle.jdbcTypeName;
87-
obj["columnSize"] = handle.columnSize;
88-
obj["decimalDigits"] = handle.decimalDigits;
89-
return obj;
90-
}
91-
92-
folly::dynamic serialize() const {
93-
folly::dynamic obj = folly::dynamic::object;
94-
obj["connectorId"] = connectorId();
95-
obj["columnName"] = name();
96-
obj["columnType"] = columnType();
97-
obj["nullable"] = nullable();
98-
obj["jdbcTypeHandle"] =
99-
serializeArrowFederationTypeHandle(arrowFederationTypeHandle());
100-
return obj;
101-
}
102-
103-
private:
104-
std::string columnName_;
105-
std::string connectorId_;
106-
std::string columnType_;
107-
bool nullable_;
108-
const ArrowFederationTypeHandle arrowFederationTypeHandle_;
56+
const std::string columnName_;
57+
const std::string columnHandleBytes_;
10958
};
11059

11160
class ArrowFederationTableHandle

presto-native-execution/presto_cpp/main/connectors/arrow_flight/arrow_federation/ArrowFederationPrestoToVeloxConnector.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,8 @@ ArrowFederationPrestoToVeloxConnector::toVeloxColumnHandle(
4040
VELOX_CHECK_NOT_NULL(
4141
arrowColumn, "Unexpected column handle type {}", column->_type);
4242

43-
auto arrowJdbcTypeHandle = presto::ArrowFederationTypeHandle{
44-
arrowColumn->jdbcTypeHandle.jdbcType,
45-
arrowColumn->jdbcTypeHandle.jdbcTypeName,
46-
arrowColumn->jdbcTypeHandle.columnSize,
47-
arrowColumn->jdbcTypeHandle.decimalDigits};
4843
return std::make_unique<presto::ArrowFederationColumnHandle>(
49-
arrowColumn->columnName,
50-
arrowColumn->connectorId,
51-
arrowColumn->columnType,
52-
arrowColumn->nullable,
53-
arrowJdbcTypeHandle);
44+
arrowColumn->columnHandleBytes, arrowColumn->columnName);
5445
}
5546

5647
std::unique_ptr<velox::connector::ConnectorTableHandle>

presto-native-execution/presto_cpp/presto_protocol/connector/arrow_federation/presto_protocol-json-hpp.mustache

Lines changed: 6 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -89,90 +89,33 @@ void from_json(const json& j, ArrowFederationTableHandle& p) {
8989
namespace facebook::presto::protocol::arrow_federation {
9090
9191
struct ArrowFederationColumnHandle : public ColumnHandle {
92-
String connectorId = {};
92+
String columnHandleBytes = {};
9393
String columnName = {};
94-
String columnType = {};
95-
boolean nullable = {};
96-
JdbcTypeHandle jdbcTypeHandle = {};
9794
};
9895

9996
void to_json(json& j, const ArrowFederationColumnHandle& p) {
100-
j = json::object();
10197
j["@type"] = "arrow-federation";
102-
to_json_key(
103-
j,
104-
"connectorId",
105-
p.connectorId,
106-
"ArrowFederationColumnHandle",
107-
"ConnectorId",
108-
"connectorId");
10998
to_json_key(
11099
j,
111100
"columnName",
112101
p.columnName,
113-
"ArrowFederationColumnHandle",
102+
"ArrowFederationTableHandle",
114103
"ColumnName",
115104
"columnName");
116-
to_json_key(
117-
j,
118-
"columnType",
119-
p.columnType,
120-
"ArrowFederationColumnHandle",
121-
"ColumnType",
122-
"columnType");
123-
to_json_key(
124-
j,
125-
"nullable",
126-
p.nullable,
127-
"ArrowFederationColumnHandle",
128-
"Nullable",
129-
"nullable");
130-
to_json_key(
131-
j,
132-
"jdbcTypeHandle",
133-
p.jdbcTypeHandle,
134-
"ArrowFederationColumnHandle",
135-
"JdbcTypeHandle",
136-
"jdbcTypeHandle");
105+
auto columnHandle = folly::base64Decode(p.columnHandleBytes);
106+
j = json::parse(columnHandle);
137107
}
138108

139109
void from_json(const json& j, ArrowFederationColumnHandle& p) {
140110
p._type = j["@type"];
141-
from_json_key(
142-
j,
143-
"connectorId",
144-
p.connectorId,
145-
"ArrowFederationColumnHandle",
146-
"ConnectorId",
147-
"connectorId");
148111
from_json_key(
149112
j,
150113
"columnName",
151114
p.columnName,
152-
"ArrowFederationColumnHandle",
115+
"ArrowFederationTableHandle",
153116
"ColumnName",
154117
"columnName");
155-
from_json_key(
156-
j,
157-
"columnType",
158-
p.columnType,
159-
"ArrowFederationColumnHandle",
160-
"ColumnType",
161-
"columnType");
162-
from_json_key(
163-
j,
164-
"nullable",
165-
p.nullable,
166-
"ArrowFederationColumnHandle",
167-
"Nullable",
168-
"nullable");
169-
from_json_key(
170-
j,
171-
"jdbcTypeHandle",
172-
p.jdbcTypeHandle,
173-
"ArrowFederationColumnHandle",
174-
"JdbcTypeHandle",
175-
"jdbcTypeHandle");
118+
p.columnHandleBytes = folly::base64Encode(j.dump());
176119
}
177120
} // namespace facebook::presto::protocol::arrow_federation
178121

0 commit comments

Comments
 (0)