This is an automated email from the ASF dual-hosted git repository.
zstan pushed a commit to branch ignite-2.18
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-2.18 by this push:
new ad8ccf7d4b8 IGNITE-27412 SQL Calcite: Fix function with schema
serialization - Fixes #12665.
ad8ccf7d4b8 is described below
commit ad8ccf7d4b869d9e9e1900833db30660afa549dc
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Tue Feb 3 10:32:38 2026 +0300
IGNITE-27412 SQL Calcite: Fix function with schema serialization - Fixes
#12665.
Signed-off-by: Aleksey Plekhanov <[email protected]>
(cherry picked from commit 8da974f6abd9c894546cc76fbd7922ffb5e6c5ee)
---
.../query/calcite/externalize/RelJson.java | 4 ++--
.../UserDefinedFunctionsIntegrationTest.java | 18 ++++++++++++++++++
.../calcite/planner/SerializationPlannerTest.java | 21 +++++++++++++++++++++
3 files changed, 41 insertions(+), 2 deletions(-)
diff --git
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
index df348933cf9..0460fb49da0 100644
---
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
+++
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
@@ -574,7 +574,7 @@ class RelJson {
List<SqlOperator> operators = new ArrayList<>();
qctx.opTable().lookupOperatorOverloads(
- new SqlIdentifier(name, new SqlParserPos(0, 0)),
+ new SqlIdentifier(List.of(name.split("\\.")), new SqlParserPos(0,
0)),
null,
sqlSyntax,
operators,
@@ -995,7 +995,7 @@ class RelJson {
private Object toJson(SqlOperator operator) {
// User-defined operators are not yet handled.
Map map = map();
- map.put("name", operator.getName());
+ map.put("name", operator.getNameAsId().toString());
map.put("kind", toJson(operator.kind));
map.put("syntax", toJson(operator.getSyntax()));
return map;
diff --git
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDefinedFunctionsIntegrationTest.java
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDefinedFunctionsIntegrationTest.java
index ac2e9acecc3..41aef299596 100644
---
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDefinedFunctionsIntegrationTest.java
+++
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDefinedFunctionsIntegrationTest.java
@@ -229,6 +229,24 @@ public class UserDefinedFunctionsIntegrationTest extends
AbstractBasicIntegratio
assertQuery("SELECT sq(4)").returns(16d).check();
}
+ /** */
+ @Test
+ public void testUdfAnotherSchema() {
+ client.getOrCreateCache(new CacheConfiguration<Integer, Object>("emp")
+ .setSqlSchema("EMP")
+ .setIndexedTypes(Integer.class, Employer.class));
+
+ client.getOrCreateCache(new CacheConfiguration<Integer, Object>("udf")
+ .setSqlSchema("UDF")
+ .setSqlFunctionClasses(MulFunctionsLibrary.class));
+
+ for (int i = 0; i < 3; i++)
+ client.cache("emp").put(i, new Employer("emp" + i, (double)i));
+
+ assertQuery("SELECT udf.mul(_key, _key) FROM emp.Employer")
+ .returns(0).returns(1).returns(4).check();
+ }
+
/** */
@Test
public void testTableFunctions() throws Exception {
diff --git
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/SerializationPlannerTest.java
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/SerializationPlannerTest.java
index 15661476be0..8e3528dfb9b 100644
---
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/SerializationPlannerTest.java
+++
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/SerializationPlannerTest.java
@@ -17,8 +17,11 @@
package org.apache.ignite.internal.processors.query.calcite.planner;
+import java.util.List;
+import org.apache.calcite.linq4j.tree.Types;
import org.apache.calcite.rel.core.Aggregate;
import org.apache.calcite.sql.SqlKind;
+import
org.apache.ignite.internal.processors.query.calcite.exec.exp.IgniteScalarFunction;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteRel;
import org.apache.ignite.internal.processors.query.calcite.schema.IgniteSchema;
import
org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
@@ -90,4 +93,22 @@ public class SerializationPlannerTest extends
AbstractPlannerTest {
)
);
}
+
+ /** */
+ @Test
+ public void testUdfWithSchemaSerialization() throws Exception {
+ IgniteSchema publicSchema = createSchema(createTable("ORDERS",
single(), "ID", Integer.class));
+ IgniteSchema funcSchema = new IgniteSchema("FUNC");
+
+ funcSchema.addFunction("ECHO", IgniteScalarFunction.create(
+ Types.lookupMethod(SerializationPlannerTest.class, "echo",
int.class)));
+
+ assertPlan("SELECT func.echo(id) FROM orders", List.of(publicSchema,
funcSchema),
+ isTableScan("ORDERS"));
+ }
+
+ /** */
+ public static int echo(int val) {
+ return val;
+ }
}