14
14
15
15
#include " presto_cpp/main/types/PrestoToVeloxExpr.h"
16
16
#include < boost/algorithm/string/case_conv.hpp>
17
+ #include " presto_cpp/main/common/Configs.h"
17
18
#include " presto_cpp/presto_protocol/Base64Util.h"
18
19
#include " velox/common/base/Exceptions.h"
19
20
#include " velox/functions/prestosql/types/JsonType.h"
@@ -33,24 +34,44 @@ std::string toJsonString(const T& value) {
33
34
}
34
35
35
36
std::string mapScalarFunction (const std::string& name) {
37
+ static const std::string prestoDefaultNamespacePrefix =
38
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
36
39
static const std::unordered_map<std::string, std::string> kFunctionNames = {
37
40
// Operator overrides: com.facebook.presto.common.function.OperatorType
38
- {" presto.default.$operator$add" , " presto.default.plus" },
39
- {" presto.default.$operator$between" , " presto.default.between" },
40
- {" presto.default.$operator$divide" , " presto.default.divide" },
41
- {" presto.default.$operator$equal" , " presto.default.eq" },
42
- {" presto.default.$operator$greater_than" , " presto.default.gt" },
43
- {" presto.default.$operator$greater_than_or_equal" , " presto.default.gte" },
41
+ {" presto.default.$operator$add" ,
42
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " plus" )},
43
+ {" presto.default.$operator$between" ,
44
+ util::addDefaultNamespacePrefix (
45
+ prestoDefaultNamespacePrefix, " between" )},
46
+ {" presto.default.$operator$divide" ,
47
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " divide" )},
48
+ {" presto.default.$operator$equal" ,
49
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " eq" )},
50
+ {" presto.default.$operator$greater_than" ,
51
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " gt" )},
52
+ {" presto.default.$operator$greater_than_or_equal" ,
53
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " gte" )},
44
54
{" presto.default.$operator$is_distinct_from" ,
45
- " presto.default.distinct_from" },
46
- {" presto.default.$operator$less_than" , " presto.default.lt" },
47
- {" presto.default.$operator$less_than_or_equal" , " presto.default.lte" },
48
- {" presto.default.$operator$modulus" , " presto.default.mod" },
49
- {" presto.default.$operator$multiply" , " presto.default.multiply" },
50
- {" presto.default.$operator$negation" , " presto.default.negate" },
51
- {" presto.default.$operator$not_equal" , " presto.default.neq" },
52
- {" presto.default.$operator$subtract" , " presto.default.minus" },
53
- {" presto.default.$operator$subscript" , " presto.default.subscript" },
55
+ util::addDefaultNamespacePrefix (
56
+ prestoDefaultNamespacePrefix, " distinct_from" )},
57
+ {" presto.default.$operator$less_than" ,
58
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " lt" )},
59
+ {" presto.default.$operator$less_than_or_equal" ,
60
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " lte" )},
61
+ {" presto.default.$operator$modulus" ,
62
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " mod" )},
63
+ {" presto.default.$operator$multiply" ,
64
+ util::addDefaultNamespacePrefix (
65
+ prestoDefaultNamespacePrefix, " multiply" )},
66
+ {" presto.default.$operator$negation" ,
67
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " negate" )},
68
+ {" presto.default.$operator$not_equal" ,
69
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " neq" )},
70
+ {" presto.default.$operator$subtract" ,
71
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " minus" )},
72
+ {" presto.default.$operator$subscript" ,
73
+ util::addDefaultNamespacePrefix (
74
+ prestoDefaultNamespacePrefix, " subscript" )},
54
75
// Special form function overrides.
55
76
{" presto.default.in" , " in" },
56
77
};
@@ -66,11 +87,15 @@ std::string mapScalarFunction(const std::string& name) {
66
87
}
67
88
68
89
std::string mapAggregateOrWindowFunction (const std::string& name) {
90
+ static const std::string prestoDefaultNamespacePrefix =
91
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
69
92
static const std::unordered_map<std::string, std::string> kFunctionNames = {
70
93
{" presto.default.$internal$max_data_size_for_stats" ,
71
- " presto.default.max_data_size_for_stats" },
94
+ util::addDefaultNamespacePrefix (
95
+ prestoDefaultNamespacePrefix, " max_data_size_for_stats" )},
72
96
{" presto.default.$internal$sum_data_size_for_stats" ,
73
- " presto.default.sum_data_size_for_stats" },
97
+ util::addDefaultNamespacePrefix (
98
+ prestoDefaultNamespacePrefix, " sum_data_size_for_stats" )},
74
99
};
75
100
std::string lowerCaseName = boost::to_lower_copy (name);
76
101
auto it = kFunctionNames .find (name);
@@ -167,6 +192,8 @@ std::optional<TypedExprPtr> convertCastToVarcharWithMaxLength(
167
192
const std::string& returnType,
168
193
const std::vector<TypedExprPtr>& args,
169
194
bool nullOnFailure) {
195
+ static const std::string prestoDefaultNamespacePrefix =
196
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
170
197
if (nullOnFailure) {
171
198
VELOX_NYI (" TRY_CAST of varchar to {} is not supported." , returnType);
172
199
}
@@ -195,7 +222,7 @@ std::optional<TypedExprPtr> convertCastToVarcharWithMaxLength(
195
222
std::make_shared<ConstantTypedExpr>(velox::BIGINT (), 1LL ),
196
223
std::make_shared<ConstantTypedExpr>(velox::BIGINT (), (int64_t )length),
197
224
},
198
- " presto.default. substr" );
225
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " substr" ) );
199
226
}
200
227
201
228
// / Converts cast and try_cast functions to CastTypedExpr with nullOnFailure
@@ -212,6 +239,8 @@ std::optional<TypedExprPtr> tryConvertCast(
212
239
const std::string& returnType,
213
240
const std::vector<TypedExprPtr>& args,
214
241
const TypeParser* typeParser) {
242
+ static const std::string prestoDefaultNamespacePrefix =
243
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
215
244
static const char * kCast = " presto.default.$operator$cast" ;
216
245
static const char * kTryCast = " presto.default.try_cast" ;
217
246
static const char * kJsonToArrayCast =
@@ -242,7 +271,10 @@ std::optional<TypedExprPtr> tryConvertCast(
242
271
return std::make_shared<CastTypedExpr>(
243
272
type,
244
273
std::vector<TypedExprPtr>{std::make_shared<CallTypedExpr>(
245
- velox::JSON (), args, " presto.default.json_parse" )},
274
+ velox::JSON (),
275
+ args,
276
+ util::addDefaultNamespacePrefix (
277
+ prestoDefaultNamespacePrefix, " json_parse" ))},
246
278
false );
247
279
} else {
248
280
return std::nullopt;
@@ -279,7 +311,6 @@ std::optional<TypedExprPtr> tryConvertTry(
279
311
const std::vector<TypedExprPtr>& args,
280
312
const TypeParser* typeParser) {
281
313
static const char * kTry = " presto.default.$internal$try" ;
282
-
283
314
if (signature.kind != protocol::FunctionKind::SCALAR) {
284
315
return std::nullopt;
285
316
}
@@ -305,8 +336,11 @@ std::optional<TypedExprPtr> tryConvertLiteralArray(
305
336
const std::vector<TypedExprPtr>& args,
306
337
velox::memory::MemoryPool* pool,
307
338
const TypeParser* typeParser) {
339
+ static const std::string prestoDefaultNamespacePrefix =
340
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
308
341
static const char * kLiteralArray = " presto.default.$literal$array" ;
309
- static const char * kFromBase64 = " presto.default.from_base64" ;
342
+ static const std::string kFromBase64 = util::addDefaultNamespacePrefix (
343
+ prestoDefaultNamespacePrefix, " from_base64" );
310
344
311
345
if (signature.kind != protocol::FunctionKind::SCALAR) {
312
346
return std::nullopt;
@@ -347,7 +381,10 @@ std::optional<TypedExprPtr> tryConvertLiteralArray(
347
381
348
382
std::optional<TypedExprPtr> VeloxExprConverter::tryConvertDate (
349
383
const protocol::CallExpression& pexpr) const {
350
- static const char * kDate = " presto.default.date" ;
384
+ static const std::string prestoDefaultNamespacePrefix =
385
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
386
+ static const std::string kDate =
387
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " date" );
351
388
352
389
auto builtin = std::static_pointer_cast<protocol::BuiltInFunctionHandle>(
353
390
pexpr.functionHandle );
@@ -368,8 +405,12 @@ std::optional<TypedExprPtr> VeloxExprConverter::tryConvertDate(
368
405
369
406
std::optional<TypedExprPtr> VeloxExprConverter::tryConvertLike (
370
407
const protocol::CallExpression& pexpr) const {
371
- static const char * kLike = " presto.default.like" ;
372
- static const char * kLikePatternType = " presto.default.like_pattern" ;
408
+ static const std::string prestoDefaultNamespacePrefix =
409
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
410
+ static const std::string kLike =
411
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " like" );
412
+ static const std::string kLikePatternType = util::addDefaultNamespacePrefix (
413
+ prestoDefaultNamespacePrefix, " like_pattern" );
373
414
static const char * kLikeReturnType = " LikePattern" ;
374
415
static const char * kCast = " presto.default.$operator$cast" ;
375
416
@@ -505,9 +546,13 @@ bool isTrueConstant(const TypedExprPtr& expression) {
505
546
std::shared_ptr<const CallTypedExpr> makeEqualsExpr (
506
547
const TypedExprPtr& a,
507
548
const TypedExprPtr& b) {
549
+ static const std::string prestoDefaultNamespacePrefix =
550
+ SystemConfig::instance ()->prestoDefaultNamespacePrefix ();
508
551
std::vector<TypedExprPtr> inputs{a, b};
509
552
return std::make_shared<CallTypedExpr>(
510
- velox::BOOLEAN (), std::move (inputs), " presto.default.eq" );
553
+ velox::BOOLEAN (),
554
+ std::move (inputs),
555
+ util::addDefaultNamespacePrefix (prestoDefaultNamespacePrefix, " eq" ));
511
556
}
512
557
513
558
std::shared_ptr<const CastTypedExpr> makeCastExpr (
0 commit comments