From c59d41b2a154aa018fc88e67da106e9003cede3a Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Sun, 1 Sep 2024 19:54:53 +0530 Subject: [PATCH 1/7] Fix: Pagination of index aliases is not supported Signed-off-by: Aparajita Pandey --- .../sql/legacy/executor/format/SelectResultSet.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java b/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java index 9d1862023c3..d997ba7a506 100644 --- a/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java +++ b/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java @@ -26,6 +26,8 @@ import java.util.stream.StreamSupport; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.opensearch.action.admin.indices.alias.get.GetAliasesRequest; +import org.opensearch.action.admin.indices.alias.get.GetAliasesResponse; import org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsRequest; import org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsResponse; import org.opensearch.action.search.ClearScrollResponse; @@ -164,7 +166,11 @@ private void populateResultSetFromDefaultCursor(DefaultCursor cursor) { private void loadFromEsState(Query query) { String indexName = fetchIndexName(query); String[] fieldNames = fetchFieldsAsArray(query); - + GetAliasesResponse getAliasesResponse = + client.admin().indices().getAliases(new GetAliasesRequest(indexName)).actionGet(); + if (getAliasesResponse != null && !getAliasesResponse.getAliases().isEmpty()) { + indexName = getAliasesResponse.getAliases().keySet().iterator().next(); + } // Reset boolean in the case of JOIN query where multiple calls to loadFromEsState() are made selectAll = isSimpleQuerySelectAll(query) || isJoinQuerySelectAll(query, fieldNames); @@ -181,6 +187,7 @@ private void loadFromEsState(Query query) { throw new IllegalArgumentException( String.format("Index type %s does not exist", query.getFrom())); } + LOG.info("Response Mapping: {}", response.mappings()); Map typeMappings = mappings.get(indexName); this.indexName = this.indexName == null ? indexName : (this.indexName + "|" + indexName); From dd86d2798f71bed05155d4b996c6cc2e5ed9ffe7 Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Sun, 1 Sep 2024 20:19:03 +0530 Subject: [PATCH 2/7] fix: remove extra debug log Signed-off-by: Aparajita Pandey --- .../opensearch/sql/legacy/executor/format/SelectResultSet.java | 1 - 1 file changed, 1 deletion(-) diff --git a/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java b/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java index d997ba7a506..c99d6d6563f 100644 --- a/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java +++ b/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java @@ -187,7 +187,6 @@ private void loadFromEsState(Query query) { throw new IllegalArgumentException( String.format("Index type %s does not exist", query.getFrom())); } - LOG.info("Response Mapping: {}", response.mappings()); Map typeMappings = mappings.get(indexName); this.indexName = this.indexName == null ? indexName : (this.indexName + "|" + indexName); From 4e190e8ce9d33aa8d654521949979aea7fa50a76 Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Thu, 3 Oct 2024 17:16:12 +0530 Subject: [PATCH 3/7] Integration testadded Signed-off-by: Aparajita Pandey Signed-off-by: Aparajita Pandey --- .../sql/legacy/SQLIntegTestCase.java | 50 ++++------------ .../org/opensearch/sql/sql/PaginationIT.java | 60 +++++++++++++++++-- 2 files changed, 67 insertions(+), 43 deletions(-) diff --git a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java index c6d15a305de..23e4d6df0f9 100644 --- a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java +++ b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java @@ -5,42 +5,10 @@ package org.opensearch.sql.legacy; -import static com.google.common.base.Strings.isNullOrEmpty; -import static org.opensearch.sql.legacy.TestUtils.createIndexByRestClient; -import static org.opensearch.sql.legacy.TestUtils.getAccountIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getBankIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getBankWithNullValuesIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDataTypeNonnumericIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDataTypeNumericIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDateIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDateTimeIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDeepNestedIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDogIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDogs2IndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getDogs3IndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getEmployeeNestedTypeIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getGameOfThronesIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getGeopointIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getJoinTypeIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getLocationIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getMappingFile; -import static org.opensearch.sql.legacy.TestUtils.getNestedSimpleIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getNestedTypeIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getOdbcIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getOrderIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getPeople2IndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getPhraseIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getResponseBody; -import static org.opensearch.sql.legacy.TestUtils.getStringIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getUnexpandedObjectIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.getWeblogsIndexMapping; -import static org.opensearch.sql.legacy.TestUtils.isIndexExist; -import static org.opensearch.sql.legacy.TestUtils.loadDataByRestClient; -import static org.opensearch.sql.legacy.plugin.RestSqlAction.CURSOR_CLOSE_ENDPOINT; -import static org.opensearch.sql.legacy.plugin.RestSqlAction.EXPLAIN_API_ENDPOINT; -import static org.opensearch.sql.legacy.plugin.RestSqlAction.QUERY_API_ENDPOINT; +import static com.google.common.base.Strings.*; +import static org.opensearch.sql.legacy.TestUtils.*; +import static org.opensearch.sql.legacy.plugin.RestSqlAction.*; -import com.google.common.base.Strings; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -50,26 +18,29 @@ import java.nio.file.Paths; import java.util.Locale; import java.util.Map; + import javax.management.MBeanServerInvocationHandler; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; -import lombok.SneakyThrows; + import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; import org.json.JSONObject; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; -import org.opensearch.client.Request; import org.opensearch.client.RequestOptions; -import org.opensearch.client.Response; import org.opensearch.client.RestClient; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.utils.SerializeUtils; +import com.google.common.base.Strings; + +import lombok.SneakyThrows; + /** OpenSearch Rest integration test base for SQL testing */ public abstract class SQLIntegTestCase extends OpenSearchSQLRestTestCase { @@ -462,6 +433,9 @@ protected String makeRequest(String query, int fetch_size) { return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\" }", fetch_size, query); } + protected String makeRequest(String query, int fetch_size, String filterQuery) { + return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\", \"filter\" : %s }", fetch_size, query, filterQuery); + } protected String makeFetchLessRequest(String query) { return String.format("{\n" + " \"query\": \"%s\"\n" + "}", query); } diff --git a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java index 49ef7c583e1..9d0c028c324 100644 --- a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java @@ -7,22 +7,24 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_CALCS; -import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_ONLINE; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.opensearch.sql.legacy.TestUtils.*; +import static org.opensearch.sql.legacy.TestsConstants.*; import java.io.IOException; -import lombok.SneakyThrows; + import org.json.JSONArray; import org.json.JSONObject; import org.junit.Ignore; import org.junit.Test; -import org.opensearch.client.Request; import org.opensearch.client.RequestOptions; -import org.opensearch.client.ResponseException; +import org.opensearch.jdbc.protocol.exceptions.ResponseException; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.legacy.SQLIntegTestCase; import org.opensearch.sql.util.TestUtils; +import lombok.SneakyThrows; + public class PaginationIT extends SQLIntegTestCase { @Override public void init() throws IOException { @@ -215,4 +217,52 @@ public void testQueryWithoutFrom() { assertEquals(1, response.getInt("total")); assertEquals(1, response.getJSONArray("datarows").getJSONArray(0).getInt(0)); } + + @Test + public void testAlias() throws Exception { + ///"107":172 + String indexName = Index.ONLINE.getName(); + String aliasName = "alias_ONLINE"; + String filterQuery = "{\n" + + " \"term\": {\n" + + " \"107\": 72 \n" + + " }\n" + + "}"; + + //Execute the SQL query with filter + String selectQuery = "SELECT * FROM " + TEST_INDEX_ONLINE; + JSONObject initialResponse = new JSONObject(executeFetchQuery(selectQuery, 10, "jdbc", filterQuery)); + assertEquals(initialResponse.getInt("size"), 10); + + //Create an alias + String createAliasQuery = String.format("{ \"actions\": [ { \"add\": { \"index\": \"%s\", \"alias\": \"%s\" } } ] }", indexName, aliasName); + Request createAliasRequest = new Request("POST", "/_aliases"); + createAliasRequest.setJsonEntity(createAliasQuery); + JSONObject aliasResponse = new JSONObject(executeRequest(createAliasRequest)); + + // Assert that alias creation was acknowledged + assertTrue(aliasResponse.getBoolean("acknowledged")); + + //Query using the alias + String aliasSelectQuery = String.format("SELECT * FROM %s", aliasName); + JSONObject aliasQueryResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc")); + assertEquals(4, aliasQueryResponse.getInt("size")); + + //Query using the alias with filter + JSONObject aliasFilteredResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery)); + assertEquals(initialResponse.getInt("size"), 4); + } + + + private String executeFetchQuery(String query, int fetchSize, String requestType, String filter) throws IOException{ + String endpoint = "/_plugins/_sql?format=" + requestType; + String requestBody = makeRequest(query, fetchSize, filter); + + Request sqlRequest = new Request("POST", endpoint); + sqlRequest.setJsonEntity(requestBody); + + Response response = client().performRequest(sqlRequest); + String responseString = getResponseBody(response, true); + return responseString; + } } From ade78a0dd30b587fb413a2f79da2c7dd7812a39d Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Thu, 3 Oct 2024 17:40:24 +0530 Subject: [PATCH 4/7] rollback change Signed-off-by: Aparajita Pandey Signed-off-by: Aparajita Pandey --- .../sql/legacy/SQLIntegTestCase.java | 50 ++++++++++++---- .../org/opensearch/sql/sql/PaginationIT.java | 60 ++----------------- 2 files changed, 43 insertions(+), 67 deletions(-) diff --git a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java index 23e4d6df0f9..c6d15a305de 100644 --- a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java +++ b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java @@ -5,10 +5,42 @@ package org.opensearch.sql.legacy; -import static com.google.common.base.Strings.*; -import static org.opensearch.sql.legacy.TestUtils.*; -import static org.opensearch.sql.legacy.plugin.RestSqlAction.*; +import static com.google.common.base.Strings.isNullOrEmpty; +import static org.opensearch.sql.legacy.TestUtils.createIndexByRestClient; +import static org.opensearch.sql.legacy.TestUtils.getAccountIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getBankIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getBankWithNullValuesIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDataTypeNonnumericIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDataTypeNumericIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDateIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDateTimeIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDeepNestedIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDogIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDogs2IndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getDogs3IndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getEmployeeNestedTypeIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getGameOfThronesIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getGeopointIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getJoinTypeIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getLocationIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getMappingFile; +import static org.opensearch.sql.legacy.TestUtils.getNestedSimpleIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getNestedTypeIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getOdbcIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getOrderIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getPeople2IndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getPhraseIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getResponseBody; +import static org.opensearch.sql.legacy.TestUtils.getStringIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getUnexpandedObjectIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.getWeblogsIndexMapping; +import static org.opensearch.sql.legacy.TestUtils.isIndexExist; +import static org.opensearch.sql.legacy.TestUtils.loadDataByRestClient; +import static org.opensearch.sql.legacy.plugin.RestSqlAction.CURSOR_CLOSE_ENDPOINT; +import static org.opensearch.sql.legacy.plugin.RestSqlAction.EXPLAIN_API_ENDPOINT; +import static org.opensearch.sql.legacy.plugin.RestSqlAction.QUERY_API_ENDPOINT; +import com.google.common.base.Strings; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -18,29 +50,26 @@ import java.nio.file.Paths; import java.util.Locale; import java.util.Map; - import javax.management.MBeanServerInvocationHandler; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; - +import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; import org.json.JSONObject; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.opensearch.client.Request; import org.opensearch.client.RequestOptions; +import org.opensearch.client.Response; import org.opensearch.client.RestClient; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.utils.SerializeUtils; -import com.google.common.base.Strings; - -import lombok.SneakyThrows; - /** OpenSearch Rest integration test base for SQL testing */ public abstract class SQLIntegTestCase extends OpenSearchSQLRestTestCase { @@ -433,9 +462,6 @@ protected String makeRequest(String query, int fetch_size) { return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\" }", fetch_size, query); } - protected String makeRequest(String query, int fetch_size, String filterQuery) { - return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\", \"filter\" : %s }", fetch_size, query, filterQuery); - } protected String makeFetchLessRequest(String query) { return String.format("{\n" + " \"query\": \"%s\"\n" + "}", query); } diff --git a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java index 9d0c028c324..49ef7c583e1 100644 --- a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java @@ -7,24 +7,22 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.opensearch.sql.legacy.TestUtils.*; -import static org.opensearch.sql.legacy.TestsConstants.*; +import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_CALCS; +import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_ONLINE; import java.io.IOException; - +import lombok.SneakyThrows; import org.json.JSONArray; import org.json.JSONObject; import org.junit.Ignore; import org.junit.Test; +import org.opensearch.client.Request; import org.opensearch.client.RequestOptions; -import org.opensearch.jdbc.protocol.exceptions.ResponseException; +import org.opensearch.client.ResponseException; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.legacy.SQLIntegTestCase; import org.opensearch.sql.util.TestUtils; -import lombok.SneakyThrows; - public class PaginationIT extends SQLIntegTestCase { @Override public void init() throws IOException { @@ -217,52 +215,4 @@ public void testQueryWithoutFrom() { assertEquals(1, response.getInt("total")); assertEquals(1, response.getJSONArray("datarows").getJSONArray(0).getInt(0)); } - - @Test - public void testAlias() throws Exception { - ///"107":172 - String indexName = Index.ONLINE.getName(); - String aliasName = "alias_ONLINE"; - String filterQuery = "{\n" + - " \"term\": {\n" + - " \"107\": 72 \n" + - " }\n" + - "}"; - - //Execute the SQL query with filter - String selectQuery = "SELECT * FROM " + TEST_INDEX_ONLINE; - JSONObject initialResponse = new JSONObject(executeFetchQuery(selectQuery, 10, "jdbc", filterQuery)); - assertEquals(initialResponse.getInt("size"), 10); - - //Create an alias - String createAliasQuery = String.format("{ \"actions\": [ { \"add\": { \"index\": \"%s\", \"alias\": \"%s\" } } ] }", indexName, aliasName); - Request createAliasRequest = new Request("POST", "/_aliases"); - createAliasRequest.setJsonEntity(createAliasQuery); - JSONObject aliasResponse = new JSONObject(executeRequest(createAliasRequest)); - - // Assert that alias creation was acknowledged - assertTrue(aliasResponse.getBoolean("acknowledged")); - - //Query using the alias - String aliasSelectQuery = String.format("SELECT * FROM %s", aliasName); - JSONObject aliasQueryResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc")); - assertEquals(4, aliasQueryResponse.getInt("size")); - - //Query using the alias with filter - JSONObject aliasFilteredResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery)); - assertEquals(initialResponse.getInt("size"), 4); - } - - - private String executeFetchQuery(String query, int fetchSize, String requestType, String filter) throws IOException{ - String endpoint = "/_plugins/_sql?format=" + requestType; - String requestBody = makeRequest(query, fetchSize, filter); - - Request sqlRequest = new Request("POST", endpoint); - sqlRequest.setJsonEntity(requestBody); - - Response response = client().performRequest(sqlRequest); - String responseString = getResponseBody(response, true); - return responseString; - } } From 2cef274af7a7abc72f16d11385fdc399db70273c Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Thu, 3 Oct 2024 17:48:16 +0530 Subject: [PATCH 5/7] Integration TestAdded Signed-off-by: Aparajita Pandey Signed-off-by: Aparajita Pandey --- .../sql/legacy/SQLIntegTestCase.java | 4 ++ .../org/opensearch/sql/sql/PaginationIT.java | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java index c6d15a305de..a4d98dc79e7 100644 --- a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java +++ b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java @@ -462,6 +462,10 @@ protected String makeRequest(String query, int fetch_size) { return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\" }", fetch_size, query); } + protected String makeRequest(String query, int fetch_size, String filterQuery) { + return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\", \"filter\" : %s }", fetch_size, query, filterQuery); + } + protected String makeFetchLessRequest(String query) { return String.format("{\n" + " \"query\": \"%s\"\n" + "}", query); } diff --git a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java index 49ef7c583e1..92807edbc8a 100644 --- a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.opensearch.sql.legacy.TestUtils.getResponseBody; import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_CALCS; import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_ONLINE; @@ -17,6 +18,7 @@ import org.junit.Ignore; import org.junit.Test; import org.opensearch.client.Request; +import org.opensearch.client.Response; import org.opensearch.client.RequestOptions; import org.opensearch.client.ResponseException; import org.opensearch.sql.common.setting.Settings; @@ -215,4 +217,50 @@ public void testQueryWithoutFrom() { assertEquals(1, response.getInt("total")); assertEquals(1, response.getJSONArray("datarows").getJSONArray(0).getInt(0)); } + @Test + public void testAlias() throws Exception { + String indexName = Index.ONLINE.getName(); + String aliasName = "alias_ONLINE"; + String filterQuery = "{\n" + + " \"term\": {\n" + + " \"107\": 72 \n" + + " }\n" + + "}"; + + //Execute the SQL query with filter + String selectQuery = "SELECT * FROM " + TEST_INDEX_ONLINE; + JSONObject initialResponse = new JSONObject(executeFetchQuery(selectQuery, 10, "jdbc", filterQuery)); + assertEquals(initialResponse.getInt("size"), 10); + + //Create an alias + String createAliasQuery = String.format("{ \"actions\": [ { \"add\": { \"index\": \"%s\", \"alias\": \"%s\" } } ] }", indexName, aliasName); + Request createAliasRequest = new Request("POST", "/_aliases"); + createAliasRequest.setJsonEntity(createAliasQuery); + JSONObject aliasResponse = new JSONObject(executeRequest(createAliasRequest)); + + // Assert that alias creation was acknowledged + assertTrue(aliasResponse.getBoolean("acknowledged")); + + //Query using the alias + String aliasSelectQuery = String.format("SELECT * FROM %s", aliasName); + JSONObject aliasQueryResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc")); + assertEquals(4, aliasQueryResponse.getInt("size")); + + //Query using the alias with filter + JSONObject aliasFilteredResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery)); + assertEquals(initialResponse.getInt("size"), 4); + } + + + private String executeFetchQuery(String query, int fetchSize, String requestType, String filter) throws IOException{ + String endpoint = "/_plugins/_sql?format=" + requestType; + String requestBody = makeRequest(query, fetchSize, filter); + + Request sqlRequest = new Request("POST", endpoint); + sqlRequest.setJsonEntity(requestBody); + + Response response = client().performRequest(sqlRequest); + String responseString = getResponseBody(response, true); + return responseString; + } } From 7e89567aa09b449fdc0a9fd9fe7e133501010e21 Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Thu, 3 Oct 2024 18:03:58 +0530 Subject: [PATCH 6/7] Integration TestAdded Signed-off-by: Aparajita Pandey Signed-off-by: Aparajita Pandey --- .../src/test/java/org/opensearch/sql/sql/PaginationIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java index 92807edbc8a..1f01c04aa50 100644 --- a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java @@ -248,7 +248,7 @@ public void testAlias() throws Exception { //Query using the alias with filter JSONObject aliasFilteredResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery)); - assertEquals(initialResponse.getInt("size"), 4); + assertEquals(aliasFilteredResponse.getInt("size"), 4); } From 303f4b5e7648195bfc2268d5a773fba015dc0a13 Mon Sep 17 00:00:00 2001 From: Aparajita Pandey Date: Fri, 4 Oct 2024 15:47:04 +0530 Subject: [PATCH 7/7] SpotlessCheck Signed-off-by: Aparajita Pandey Signed-off-by: Aparajita Pandey --- .../sql/legacy/SQLIntegTestCase.java | 4 ++- .../org/opensearch/sql/sql/PaginationIT.java | 32 ++++++++++--------- .../executor/format/SelectResultSet.java | 2 +- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java index a4d98dc79e7..eed4e29c9c8 100644 --- a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java +++ b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java @@ -463,7 +463,9 @@ protected String makeRequest(String query, int fetch_size) { } protected String makeRequest(String query, int fetch_size, String filterQuery) { - return String.format("{ \"fetch_size\": \"%s\", \"query\": \"%s\", \"filter\" : %s }", fetch_size, query, filterQuery); + return String.format( + "{ \"fetch_size\": \"%s\", \"query\": \"%s\", \"filter\" : %s }", + fetch_size, query, filterQuery); } protected String makeFetchLessRequest(String query) { diff --git a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java index 1f01c04aa50..fbe1e378e28 100644 --- a/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java @@ -18,8 +18,8 @@ import org.junit.Ignore; import org.junit.Test; import org.opensearch.client.Request; -import org.opensearch.client.Response; import org.opensearch.client.RequestOptions; +import org.opensearch.client.Response; import org.opensearch.client.ResponseException; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.legacy.SQLIntegTestCase; @@ -217,23 +217,24 @@ public void testQueryWithoutFrom() { assertEquals(1, response.getInt("total")); assertEquals(1, response.getJSONArray("datarows").getJSONArray(0).getInt(0)); } + @Test public void testAlias() throws Exception { String indexName = Index.ONLINE.getName(); String aliasName = "alias_ONLINE"; - String filterQuery = "{\n" + - " \"term\": {\n" + - " \"107\": 72 \n" + - " }\n" + - "}"; + String filterQuery = "{\n" + " \"term\": {\n" + " \"107\": 72 \n" + " }\n" + "}"; - //Execute the SQL query with filter + // Execute the SQL query with filter String selectQuery = "SELECT * FROM " + TEST_INDEX_ONLINE; - JSONObject initialResponse = new JSONObject(executeFetchQuery(selectQuery, 10, "jdbc", filterQuery)); + JSONObject initialResponse = + new JSONObject(executeFetchQuery(selectQuery, 10, "jdbc", filterQuery)); assertEquals(initialResponse.getInt("size"), 10); - //Create an alias - String createAliasQuery = String.format("{ \"actions\": [ { \"add\": { \"index\": \"%s\", \"alias\": \"%s\" } } ] }", indexName, aliasName); + // Create an alias + String createAliasQuery = + String.format( + "{ \"actions\": [ { \"add\": { \"index\": \"%s\", \"alias\": \"%s\" } } ] }", + indexName, aliasName); Request createAliasRequest = new Request("POST", "/_aliases"); createAliasRequest.setJsonEntity(createAliasQuery); JSONObject aliasResponse = new JSONObject(executeRequest(createAliasRequest)); @@ -241,18 +242,19 @@ public void testAlias() throws Exception { // Assert that alias creation was acknowledged assertTrue(aliasResponse.getBoolean("acknowledged")); - //Query using the alias + // Query using the alias String aliasSelectQuery = String.format("SELECT * FROM %s", aliasName); JSONObject aliasQueryResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc")); assertEquals(4, aliasQueryResponse.getInt("size")); - //Query using the alias with filter - JSONObject aliasFilteredResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery)); + // Query using the alias with filter + JSONObject aliasFilteredResponse = + new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery)); assertEquals(aliasFilteredResponse.getInt("size"), 4); } - - private String executeFetchQuery(String query, int fetchSize, String requestType, String filter) throws IOException{ + private String executeFetchQuery(String query, int fetchSize, String requestType, String filter) + throws IOException { String endpoint = "/_plugins/_sql?format=" + requestType; String requestBody = makeRequest(query, fetchSize, filter); diff --git a/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java b/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java index c99d6d6563f..bc5c1fb162c 100644 --- a/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java +++ b/legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java @@ -167,7 +167,7 @@ private void loadFromEsState(Query query) { String indexName = fetchIndexName(query); String[] fieldNames = fetchFieldsAsArray(query); GetAliasesResponse getAliasesResponse = - client.admin().indices().getAliases(new GetAliasesRequest(indexName)).actionGet(); + client.admin().indices().getAliases(new GetAliasesRequest(indexName)).actionGet(); if (getAliasesResponse != null && !getAliasesResponse.getAliases().isEmpty()) { indexName = getAliasesResponse.getAliases().keySet().iterator().next(); }