Skip to content

Commit 239f4d9

Browse files
authored
Wire PPL string scalar functions with analytics-backend-datafusion (opensearch-project#21543)
Signed-off-by: Tanik Pansuriya <panbhai@amazon.com>
1 parent 0d31e28 commit 239f4d9

19 files changed

Lines changed: 2847 additions & 8 deletions

File tree

sandbox/libs/analytics-framework/src/main/java/org/opensearch/analytics/spi/ScalarFunction.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public enum ScalarFunction {
5656
UPPER(Category.STRING, SqlKind.OTHER_FUNCTION),
5757
LOWER(Category.STRING, SqlKind.OTHER_FUNCTION),
5858
TRIM(Category.STRING, SqlKind.TRIM),
59+
SUBSTR(Category.STRING, SqlKind.OTHER_FUNCTION),
5960
SUBSTRING(Category.STRING, SqlKind.OTHER_FUNCTION),
6061
/**
6162
* String concatenation. Calcite's {@code SqlStdOperatorTable.CONCAT} is a
@@ -66,9 +67,23 @@ public enum ScalarFunction {
6667
* rename surfaces as a compile error rather than as a silent string mismatch at runtime.
6768
*/
6869
CONCAT(Category.STRING, SqlKind.OTHER_FUNCTION, SqlStdOperatorTable.CONCAT),
70+
CONCAT_WS(Category.STRING, SqlKind.OTHER_FUNCTION),
6971
CHAR_LENGTH(Category.STRING, SqlKind.OTHER_FUNCTION),
7072
REPLACE(Category.STRING, SqlKind.OTHER_FUNCTION),
7173
REGEXP_REPLACE(Category.STRING, SqlKind.OTHER_FUNCTION),
74+
ASCII(Category.STRING, SqlKind.OTHER_FUNCTION),
75+
LEFT(Category.STRING, SqlKind.OTHER_FUNCTION),
76+
LENGTH(Category.STRING, SqlKind.OTHER_FUNCTION),
77+
LOCATE(Category.STRING, SqlKind.OTHER_FUNCTION),
78+
POSITION(Category.STRING, SqlKind.POSITION),
79+
LTRIM(Category.STRING, SqlKind.OTHER_FUNCTION),
80+
RTRIM(Category.STRING, SqlKind.OTHER_FUNCTION),
81+
REVERSE(Category.STRING, SqlKind.OTHER_FUNCTION),
82+
RIGHT(Category.STRING, SqlKind.OTHER_FUNCTION),
83+
TOSTRING(Category.STRING, SqlKind.OTHER_FUNCTION),
84+
NUMBER_TO_STRING(Category.STRING, SqlKind.OTHER_FUNCTION), // Alias for TOSTRING
85+
TONUMBER(Category.STRING, SqlKind.OTHER_FUNCTION),
86+
STRCMP(Category.STRING, SqlKind.OTHER_FUNCTION),
7287

7388
// ── Math ─────────────────────────────────────────────────────────
7489
PLUS(Category.MATH, SqlKind.PLUS),

sandbox/plugins/analytics-backend-datafusion/rust/src/session_context.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ pub async unsafe fn create_session_context(
111111
.build();
112112

113113
let ctx = SessionContext::new_with_state(state);
114+
crate::udf::register_all(&ctx);
114115

115116
// Register default ListingTable for parquet scans
116117
let listing_options = ListingOptions::new(Arc::new(ParquetFormat::new()))

sandbox/plugins/analytics-backend-datafusion/rust/src/udf/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,14 @@ pub(crate) fn coerce_args(
113113
}
114114

115115
pub mod convert_tz;
116+
pub mod tonumber;
117+
pub mod tostring;
116118

117119
pub fn register_all(ctx: &SessionContext) {
118120
convert_tz::register_all(ctx);
119-
log::info!("OpenSearch UDF register_all: convert_tz registered");
121+
tonumber::register_all(ctx);
122+
tostring::register_all(ctx);
123+
log::info!("OpenSearch UDF register_all: convert_tz, tonumber, tostring registered");
120124
}
121125

122126
#[cfg(test)]

0 commit comments

Comments
 (0)