Skip to content

Commit 6ed3091

Browse files
Krishna Paifacebook-github-bot
authored andcommitted
fix(geos) Add support for bing_tile_parent(bing_tile, integer) signature
Summary: Added bing_tile_parent(bing_tile, integer) which is the signature used by Presto when calling bing_tile_parent. Differential Revision: D75481392
1 parent a801441 commit 6ed3091

File tree

3 files changed

+34
-13
lines changed

3 files changed

+34
-13
lines changed

velox/functions/prestosql/BingTileFunctions.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ struct BingTileParentFunction {
143143
result = parent.value();
144144
return Status::OK();
145145
}
146+
147+
FOLLY_ALWAYS_INLINE Status call(
148+
out_type<BingTile>& result,
149+
const arg_type<BingTile>& tile,
150+
const arg_type<int32_t>& parentZoom) {
151+
return call(result, tile, static_cast<int8_t>(parentZoom));
152+
}
146153
};
147154

148155
template <typename T>

velox/functions/prestosql/registration/BingTileFunctionsRegistration.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ void registerSimpleBingTileFunctions(const std::string& prefix) {
4444
{prefix + "bing_tile_parent"});
4545
registerFunction<BingTileParentFunction, BingTile, BingTile, int8_t>(
4646
{prefix + "bing_tile_parent"});
47+
registerFunction<BingTileParentFunction, BingTile, BingTile, int32_t>(
48+
{prefix + "bing_tile_parent"});
4749
registerFunction<BingTileChildrenFunction, Array<BingTile>, BingTile>(
4850
{prefix + "bing_tile_children"});
4951
registerFunction<BingTileChildrenFunction, Array<BingTile>, BingTile, int8_t>(

velox/functions/prestosql/tests/BingTileFunctionsTest.cpp

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -315,19 +315,31 @@ TEST_F(BingTileFunctionsTest, bingTileParentZoom) {
315315
y,
316316
zoom,
317317
parentZoom);
318-
if (x.has_value() && y.has_value() && zoom.has_value() &&
319-
parentZoom.has_value()) {
320-
ASSERT_TRUE(tile.has_value());
321-
int32_t shift = *zoom - *parentZoom;
322-
ASSERT_EQ(
323-
BingTileType::bingTileCoordsToInt(
324-
static_cast<uint32_t>(*x) >> shift,
325-
static_cast<uint32_t>(*y) >> shift,
326-
*parentZoom),
327-
*tile);
328-
} else {
329-
ASSERT_FALSE(tile.has_value());
330-
}
318+
auto validate = [&]() {
319+
if (x.has_value() && y.has_value() && zoom.has_value() &&
320+
parentZoom.has_value()) {
321+
ASSERT_TRUE(tile.has_value());
322+
int32_t shift = *zoom - *parentZoom;
323+
ASSERT_EQ(
324+
BingTileType::bingTileCoordsToInt(
325+
static_cast<uint32_t>(*x) >> shift,
326+
static_cast<uint32_t>(*y) >> shift,
327+
*parentZoom),
328+
*tile);
329+
} else {
330+
ASSERT_FALSE(tile.has_value());
331+
}
332+
};
333+
334+
validate();
335+
336+
tile = evaluateOnce<int64_t>(
337+
"CAST(bing_tile_parent(bing_tile(c0, c1, c2), cast(c3 as integer)) AS BIGINT)",
338+
x,
339+
y,
340+
zoom,
341+
parentZoom);
342+
validate();
331343
};
332344

333345
testBingTileParent(0, 0, 0, 0);

0 commit comments

Comments
 (0)