This is an automated email from the ASF dual-hosted git repository.
gianm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new b3f08c83aa0 feat: Allow BINDABLE plans for Dart. (#19952)
b3f08c83aa0 is described below
commit b3f08c83aa0492a8ed0e16b1b715f5abc0fa3d3a
Author: Gian Merlino <[email protected]>
AuthorDate: Mon Aug 10 19:39:05 2026 -0700
feat: Allow BINDABLE plans for Dart. (#19952)
This switch allows the "msq-dart" engine to be used for metadata tables
such as those in "sys' and "INFORMATION_SCHEMA".
---
.../msq/dart/controller/sql/DartSqlEngine.java | 2 +-
.../dart/controller/http/DartSqlResourceTest.java | 60 ++++++++++++++++++++++
2 files changed, 61 insertions(+), 1 deletion(-)
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
index c62c57b2880..aaf7eea7496 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
@@ -146,12 +146,12 @@ public class DartSqlEngine implements SqlEngine
case WINDOW_FUNCTIONS:
case WINDOW_LEAF_OPERATOR:
case UNNEST:
+ case ALLOW_BINDABLE_PLAN:
return true;
case CAN_INSERT:
case CAN_REPLACE:
case READ_EXTERNAL_DATA:
- case ALLOW_BINDABLE_PLAN:
case ALLOW_BROADCAST_RIGHTY_JOIN:
case ALLOW_TOP_LEVEL_UNION_ALL:
case TIMESERIES_QUERY:
diff --git
a/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
b/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
index 999de322393..e579ee427d7 100644
---
a/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
+++
b/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
@@ -535,6 +535,66 @@ public class DartSqlResourceTest extends MSQTestBase
Assertions.assertEquals("[[2]]\n",
StringUtils.fromUtf8(asyncResponse.baos.toByteArray()));
}
+ @Test
+ public void test_doPost_informationSchema()
+ {
+ final MockAsyncContext asyncContext = new MockAsyncContext();
+ final MockHttpServletResponse asyncResponse = new
MockHttpServletResponse();
+ asyncContext.response = asyncResponse;
+
+
Mockito.when(httpServletRequest.getAttribute(AuthConfig.DRUID_AUTHENTICATION_RESULT))
+
.thenReturn(makeAuthenticationResult(CalciteTests.TEST_SUPERUSER_NAME));
+ Mockito.when(httpServletRequest.startAsync())
+ .thenReturn(asyncContext);
+
+ final SqlQuery sqlQuery = new SqlQuery(
+ "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY
SCHEMA_NAME",
+ ResultFormat.ARRAY,
+ false,
+ false,
+ false,
+ Map.of(QueryContexts.ENGINE, DartSqlEngine.NAME),
+ Collections.emptyList()
+ );
+
+ Assertions.assertNull(sqlResource.doPost(sqlQuery, httpServletRequest));
+ Assertions.assertEquals(Response.Status.OK.getStatusCode(),
asyncResponse.getStatus());
+ Assertions.assertEquals(
+
"[[\"INFORMATION_SCHEMA\"],[\"druid\"],[\"lookup\"],[\"sys\"],[\"view\"]]\n",
+ StringUtils.fromUtf8(asyncResponse.baos.toByteArray())
+ );
+ }
+
+ @Test
+ public void test_doPost_sysTableJoinedToDatasource()
+ {
+ final MockAsyncContext asyncContext = new MockAsyncContext();
+ final MockHttpServletResponse asyncResponse = new
MockHttpServletResponse();
+ asyncContext.response = asyncResponse;
+
+
Mockito.when(httpServletRequest.getAttribute(AuthConfig.DRUID_AUTHENTICATION_RESULT))
+
.thenReturn(makeAuthenticationResult(CalciteTests.TEST_SUPERUSER_NAME));
+ Mockito.when(httpServletRequest.startAsync())
+ .thenReturn(asyncContext);
+
+ final SqlQuery sqlQuery = new SqlQuery(
+ StringUtils.format(
+ "SELECT s.segment_id, f.dim1 FROM sys.segments AS s, %s AS f",
+ CalciteTests.DATASOURCE1
+ ),
+ ResultFormat.ARRAY,
+ false,
+ false,
+ false,
+ Map.of(QueryContexts.ENGINE, DartSqlEngine.NAME),
+ Collections.emptyList()
+ );
+
+ // 501 Not Implemented.
+ final Response response = sqlResource.doPost(sqlQuery, httpServletRequest);
+ Assertions.assertEquals(501, response.getStatus());
+ }
+
@Test
public void test_doPost_regularUser_forbidden()
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]