From 4c35899b3d14767488720838d05db3e4f55b6b14 Mon Sep 17 00:00:00 2001 From: cryptoe Date: Wed, 19 Jul 2023 18:13:43 +0530 Subject: [PATCH 1/2] Adding null fix for rows and col stats information. --- .../sql/resources/SqlStatementResource.java | 4 +- .../sql/SqlMSQStatementResourcePostTest.java | 80 +++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java index 7b92872ee6f9..f5268bd8fbec 100644 --- a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java +++ b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java @@ -536,8 +536,8 @@ private Optional getSampleResults( rows = 0L; size = 0L; for (PageInformation pageInformation : pageList.get()) { - rows += pageInformation.getNumRows(); - size += pageInformation.getSizeInBytes(); + rows += pageInformation.getNumRows() != null ? pageInformation.getNumRows() : 0L; + size += pageInformation.getSizeInBytes() != null ? pageInformation.getSizeInBytes() : 0L; } } diff --git a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java index 70ac5386ba6c..3306249297ac 100644 --- a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java +++ b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java @@ -336,6 +336,86 @@ public void testWithDurableStorage() throws IOException ))); } + @Test + public void testInsert() + { + Response response = resource.doPost(new SqlQuery( + "insert into foo1 select __time, dim1 , count(*) as cnt from foo where dim1 is not null group by 1, 2 PARTITIONED by day clustered by dim1", + null, + false, + false, + false, + defaultAsyncContext(), + null + ), SqlStatementResourceTest.makeOkRequest()); + Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + SqlStatementResult actual = (SqlStatementResult) response.getEntity(); + + + SqlStatementResult expected = new SqlStatementResult( + actual.getQueryId(), + SqlStatementState.SUCCESS, + MSQTestOverlordServiceClient.CREATED_TIME, + null, + MSQTestOverlordServiceClient.DURATION, + new ResultSetInformation(5L, 0L, null, "foo1", null, null), + null + ); + Assert.assertEquals(expected, actual); + + Response getResponse = resource.doGetStatus(actual.getQueryId(), SqlStatementResourceTest.makeOkRequest()); + Assert.assertEquals(Response.Status.OK.getStatusCode(), getResponse.getStatus()); + Assert.assertEquals(expected, getResponse.getEntity()); + + Response resultsResponse = resource.doGetResults(actual.getQueryId(), + null, + SqlStatementResourceTest.makeOkRequest()); + Assert.assertEquals(Response.Status.OK.getStatusCode(), resultsResponse.getStatus()); + Assert.assertNull(resultsResponse.getEntity()); + } + + + @Test + public void testReplaceAll() + { + Response response = resource.doPost(new SqlQuery( + "replace into foo1 overwrite all select __time, dim1 , count(*) as cnt from foo where dim1 is not null group by 1, 2 PARTITIONED by day clustered by dim1", + null, + false, + false, + false, + defaultAsyncContext(), + null + ), SqlStatementResourceTest.makeOkRequest()); + Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + SqlStatementResult actual = (SqlStatementResult) response.getEntity(); + + + SqlStatementResult expected = new SqlStatementResult( + actual.getQueryId(), + SqlStatementState.SUCCESS, + MSQTestOverlordServiceClient.CREATED_TIME, + null, + MSQTestOverlordServiceClient.DURATION, + new ResultSetInformation(5L, 0L, null, "foo1", null, null), + null + ); + Assert.assertEquals(expected, actual); + + Response getResponse = resource.doGetStatus(actual.getQueryId(), SqlStatementResourceTest.makeOkRequest()); + Assert.assertEquals(Response.Status.OK.getStatusCode(), getResponse.getStatus()); + Assert.assertEquals(expected, getResponse.getEntity()); + + Response resultsResponse = resource.doGetResults(actual.getQueryId(), + null, + SqlStatementResourceTest.makeOkRequest()); + Assert.assertEquals(Response.Status.OK.getStatusCode(), resultsResponse.getStatus()); + Assert.assertNull(resultsResponse.getEntity()); + } + + private static Map defaultAsyncContext() { Map context = new HashMap(); From 15beb5875c976cf5514f84f40bf5af3e79fc8ab9 Mon Sep 17 00:00:00 2001 From: cryptoe Date: Wed, 19 Jul 2023 19:21:49 +0530 Subject: [PATCH 2/2] Null handling test case fix --- .../sql/SqlMSQStatementResourcePostTest.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java index 3306249297ac..4f96b132ef07 100644 --- a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java +++ b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/sql/SqlMSQStatementResourcePostTest.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.apache.calcite.sql.type.SqlTypeName; +import org.apache.druid.common.config.NullHandling; import org.apache.druid.error.DruidException; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.msq.indexing.MSQControllerTask; @@ -359,7 +360,7 @@ public void testInsert() MSQTestOverlordServiceClient.CREATED_TIME, null, MSQTestOverlordServiceClient.DURATION, - new ResultSetInformation(5L, 0L, null, "foo1", null, null), + new ResultSetInformation(NullHandling.sqlCompatible() ? 6L : 5L, 0L, null, "foo1", null, null), null ); Assert.assertEquals(expected, actual); @@ -368,9 +369,11 @@ public void testInsert() Assert.assertEquals(Response.Status.OK.getStatusCode(), getResponse.getStatus()); Assert.assertEquals(expected, getResponse.getEntity()); - Response resultsResponse = resource.doGetResults(actual.getQueryId(), - null, - SqlStatementResourceTest.makeOkRequest()); + Response resultsResponse = resource.doGetResults( + actual.getQueryId(), + null, + SqlStatementResourceTest.makeOkRequest() + ); Assert.assertEquals(Response.Status.OK.getStatusCode(), resultsResponse.getStatus()); Assert.assertNull(resultsResponse.getEntity()); } @@ -399,7 +402,7 @@ public void testReplaceAll() MSQTestOverlordServiceClient.CREATED_TIME, null, MSQTestOverlordServiceClient.DURATION, - new ResultSetInformation(5L, 0L, null, "foo1", null, null), + new ResultSetInformation(NullHandling.sqlCompatible() ? 6L : 5L, 0L, null, "foo1", null, null), null ); Assert.assertEquals(expected, actual); @@ -408,9 +411,11 @@ public void testReplaceAll() Assert.assertEquals(Response.Status.OK.getStatusCode(), getResponse.getStatus()); Assert.assertEquals(expected, getResponse.getEntity()); - Response resultsResponse = resource.doGetResults(actual.getQueryId(), - null, - SqlStatementResourceTest.makeOkRequest()); + Response resultsResponse = resource.doGetResults( + actual.getQueryId(), + null, + SqlStatementResourceTest.makeOkRequest() + ); Assert.assertEquals(Response.Status.OK.getStatusCode(), resultsResponse.getStatus()); Assert.assertNull(resultsResponse.getEntity()); }