Skip to content

Commit 6560bf5

Browse files
authored
feat: add server to admin udfs api (#17141)
* feat: add server to admin udfs api * z
1 parent 9e71e4d commit 6560bf5

File tree

3 files changed

+48
-20
lines changed

3 files changed

+48
-20
lines changed

src/meta/app/src/principal/user_defined_function.rs

+29
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,35 @@ pub enum UDFDefinition {
6565
UDAFScript(UDAFScript),
6666
}
6767

68+
impl UDFDefinition {
69+
pub fn category(&self) -> &str {
70+
match self {
71+
Self::LambdaUDF(_) => "LambdaUDF",
72+
Self::UDFServer(_) => "UDFServer",
73+
Self::UDFScript(_) => "UDFScript",
74+
Self::UDAFScript(_) => "UDAFScript",
75+
}
76+
}
77+
78+
pub fn is_aggregate(&self) -> bool {
79+
match self {
80+
Self::LambdaUDF(_) => false,
81+
Self::UDFServer(_) => false,
82+
Self::UDFScript(_) => false,
83+
Self::UDAFScript(_) => true,
84+
}
85+
}
86+
87+
pub fn language(&self) -> &str {
88+
match self {
89+
Self::LambdaUDF(_) => "SQL",
90+
Self::UDFServer(x) => x.language.as_str(),
91+
Self::UDFScript(x) => x.language.as_str(),
92+
Self::UDAFScript(x) => x.language.as_str(),
93+
}
94+
}
95+
}
96+
6897
#[derive(Clone, Debug, Eq, PartialEq)]
6998
pub struct UserDefinedFunction {
7099
pub name: String,

src/query/storages/system/src/user_functions_table.rs

+17-18
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ pub struct UserFunctionArguments {
106106
arg_types: Vec<String>,
107107
#[serde(skip_serializing_if = "std::option::Option::is_none")]
108108
return_type: Option<String>,
109+
#[serde(skip_serializing_if = "std::option::Option::is_none")]
110+
server: Option<String>,
109111
#[serde(skip_serializing_if = "std::vec::Vec::is_empty")]
110112
parameters: Vec<String>,
111113
#[serde(skip_serializing_if = "std::collections::BTreeMap::is_empty")]
@@ -118,6 +120,7 @@ pub struct UserFunction {
118120
is_aggregate: bool,
119121
description: String,
120122
language: String,
123+
category: String,
121124
definition: String,
122125
created_on: DateTime<Utc>,
123126
arguments: UserFunctionArguments,
@@ -162,43 +165,39 @@ impl UserFunctionsTable {
162165
.into_iter()
163166
.map(|user_function| UserFunction {
164167
name: user_function.name,
165-
is_aggregate: match user_function.definition {
166-
UDFDefinition::LambdaUDF(_) => false,
167-
UDFDefinition::UDFServer(_) | UDFDefinition::UDFScript(_) => false,
168-
UDFDefinition::UDAFScript(_) => true,
169-
},
168+
is_aggregate: user_function.definition.is_aggregate(),
170169
description: user_function.description,
171-
language: match &user_function.definition {
172-
UDFDefinition::LambdaUDF(_) => String::from("SQL"),
173-
UDFDefinition::UDFServer(x) => x.language.clone(),
174-
UDFDefinition::UDFScript(x) => x.language.to_string(),
175-
UDFDefinition::UDAFScript(x) => x.language.to_string(),
176-
},
170+
language: user_function.definition.language().to_string(),
171+
category: user_function.definition.category().to_string(),
177172
definition: user_function.definition.to_string(),
178173
created_on: user_function.created_on,
179174
arguments: match &user_function.definition {
180175
UDFDefinition::LambdaUDF(x) => UserFunctionArguments {
181-
return_type: None,
182176
arg_types: vec![],
177+
return_type: None,
178+
server: None,
183179
parameters: x.parameters.clone(),
184180
states: BTreeMap::new(),
185181
},
186182
UDFDefinition::UDFServer(x) => UserFunctionArguments {
187-
parameters: vec![],
188-
return_type: Some(x.return_type.to_string()),
189183
arg_types: x.arg_types.iter().map(ToString::to_string).collect(),
184+
return_type: Some(x.return_type.to_string()),
185+
server: Some(x.address.to_string()),
186+
parameters: vec![],
190187
states: BTreeMap::new(),
191188
},
192189
UDFDefinition::UDFScript(x) => UserFunctionArguments {
193-
parameters: vec![],
194-
return_type: Some(x.return_type.to_string()),
195190
arg_types: x.arg_types.iter().map(ToString::to_string).collect(),
191+
return_type: Some(x.return_type.to_string()),
192+
server: None,
193+
parameters: vec![],
196194
states: BTreeMap::new(),
197195
},
198196
UDFDefinition::UDAFScript(x) => UserFunctionArguments {
199-
parameters: vec![],
200-
return_type: Some(x.return_type.to_string()),
201197
arg_types: x.arg_types.iter().map(ToString::to_string).collect(),
198+
return_type: Some(x.return_type.to_string()),
199+
server: None,
200+
parameters: vec![],
202201
states: x
203202
.state_fields
204203
.iter()
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
==TEST SHOW USER FUNCTIONS==
22
isnotempty 0 {"parameters":["p"]} SQL yyyy-mm-dd HH:MM:SS.ssssss
3-
ping 0 Built-in UDF {"arg_types":["String NULL"],"return_type":"String NULL"} python yyyy-mm-dd HH:MM:SS.ssssss
3+
ping 0 Built-in UDF {"arg_types":["String NULL"],"return_type":"String NULL","server":"http://0.0.0.0:8815"} python yyyy-mm-dd HH:MM:SS.ssssss
44
==TEST SELECT * FROM SYSTEM.USER_FUNCTIONS==
55
isnotempty 0 {"parameters":["p"]} SQL (p) -> NOT is_null(p) yyyy-mm-dd HH:MM:SS.ssssss
6-
ping 0 Built-in UDF {"arg_types":["String NULL"],"return_type":"String NULL"} python (String NULL) RETURNS String NULL LANGUAGE python HANDLER = ping ADDRESS = http://0.0.0.0:8815 yyyy-mm-dd HH:MM:SS.ssssss
6+
ping 0 Built-in UDF {"arg_types":["String NULL"],"return_type":"String NULL","server":"http://0.0.0.0:8815"} python (String NULL) RETURNS String NULL LANGUAGE python HANDLER = ping ADDRESS = http://0.0.0.0:8815 yyyy-mm-dd HH:MM:SS.ssssss

0 commit comments

Comments
 (0)