Skip to content

Commit 9026b7d

Browse files
Resolve Alias Issues in Legacy SQL with Filters (#2960)
* Fix: Pagination of index aliases is not supported Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> * fix: remove extra debug log Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> * Integration testadded Signed-off-by: Aparajita Pandey<aparajita31pandey@gmail.com> Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> * rollback change Signed-off-by: Aparajita Pandey<aparajita31pandey@gmail.com> Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> * Integration TestAdded Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> * Integration TestAdded Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> * SpotlessCheck Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> --------- Signed-off-by: Aparajita Pandey <aparajita31pandey@gmail.com> (cherry picked from commit 564ab60) Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 724176c commit 9026b7d

3 files changed

Lines changed: 63 additions & 1 deletion

File tree

integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,12 @@ protected String makeRequest(String query, int fetch_size) {
468468
"{\n" + " \"fetch_size\": \"%s\",\n" + " \"query\": \"%s\"\n" + "}", fetch_size, query);
469469
}
470470

471+
protected String makeRequest(String query, int fetch_size, String filterQuery) {
472+
return String.format(
473+
"{ \"fetch_size\": \"%s\", \"query\": \"%s\", \"filter\" : %s }",
474+
fetch_size, query, filterQuery);
475+
}
476+
471477
protected String makeFetchLessRequest(String query) {
472478
return String.format("{\n" + " \"query\": \"%s\"\n" + "}", query);
473479
}

integ-test/src/test/java/org/opensearch/sql/sql/PaginationIT.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static org.junit.Assert.assertEquals;
99
import static org.junit.Assert.assertTrue;
10+
import static org.opensearch.sql.legacy.TestUtils.getResponseBody;
1011
import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_CALCS;
1112
import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_ONLINE;
1213

@@ -18,6 +19,7 @@
1819
import org.junit.Test;
1920
import org.opensearch.client.Request;
2021
import org.opensearch.client.RequestOptions;
22+
import org.opensearch.client.Response;
2123
import org.opensearch.client.ResponseException;
2224
import org.opensearch.sql.common.setting.Settings;
2325
import org.opensearch.sql.legacy.SQLIntegTestCase;
@@ -215,4 +217,52 @@ public void testQueryWithoutFrom() {
215217
assertEquals(1, response.getInt("total"));
216218
assertEquals(1, response.getJSONArray("datarows").getJSONArray(0).getInt(0));
217219
}
220+
221+
@Test
222+
public void testAlias() throws Exception {
223+
String indexName = Index.ONLINE.getName();
224+
String aliasName = "alias_ONLINE";
225+
String filterQuery = "{\n" + " \"term\": {\n" + " \"107\": 72 \n" + " }\n" + "}";
226+
227+
// Execute the SQL query with filter
228+
String selectQuery = "SELECT * FROM " + TEST_INDEX_ONLINE;
229+
JSONObject initialResponse =
230+
new JSONObject(executeFetchQuery(selectQuery, 10, "jdbc", filterQuery));
231+
assertEquals(initialResponse.getInt("size"), 10);
232+
233+
// Create an alias
234+
String createAliasQuery =
235+
String.format(
236+
"{ \"actions\": [ { \"add\": { \"index\": \"%s\", \"alias\": \"%s\" } } ] }",
237+
indexName, aliasName);
238+
Request createAliasRequest = new Request("POST", "/_aliases");
239+
createAliasRequest.setJsonEntity(createAliasQuery);
240+
JSONObject aliasResponse = new JSONObject(executeRequest(createAliasRequest));
241+
242+
// Assert that alias creation was acknowledged
243+
assertTrue(aliasResponse.getBoolean("acknowledged"));
244+
245+
// Query using the alias
246+
String aliasSelectQuery = String.format("SELECT * FROM %s", aliasName);
247+
JSONObject aliasQueryResponse = new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc"));
248+
assertEquals(4, aliasQueryResponse.getInt("size"));
249+
250+
// Query using the alias with filter
251+
JSONObject aliasFilteredResponse =
252+
new JSONObject(executeFetchQuery(aliasSelectQuery, 4, "jdbc", filterQuery));
253+
assertEquals(aliasFilteredResponse.getInt("size"), 4);
254+
}
255+
256+
private String executeFetchQuery(String query, int fetchSize, String requestType, String filter)
257+
throws IOException {
258+
String endpoint = "/_plugins/_sql?format=" + requestType;
259+
String requestBody = makeRequest(query, fetchSize, filter);
260+
261+
Request sqlRequest = new Request("POST", endpoint);
262+
sqlRequest.setJsonEntity(requestBody);
263+
264+
Response response = client().performRequest(sqlRequest);
265+
String responseString = getResponseBody(response, true);
266+
return responseString;
267+
}
218268
}

legacy/src/main/java/org/opensearch/sql/legacy/executor/format/SelectResultSet.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import java.util.stream.StreamSupport;
2727
import org.apache.logging.log4j.LogManager;
2828
import org.apache.logging.log4j.Logger;
29+
import org.opensearch.action.admin.indices.alias.get.GetAliasesRequest;
30+
import org.opensearch.action.admin.indices.alias.get.GetAliasesResponse;
2931
import org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsRequest;
3032
import org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsResponse;
3133
import org.opensearch.action.search.ClearScrollResponse;
@@ -160,7 +162,11 @@ private void populateResultSetFromDefaultCursor(DefaultCursor cursor) {
160162
private void loadFromEsState(Query query) {
161163
String indexName = fetchIndexName(query);
162164
String[] fieldNames = fetchFieldsAsArray(query);
163-
165+
GetAliasesResponse getAliasesResponse =
166+
client.admin().indices().getAliases(new GetAliasesRequest(indexName)).actionGet();
167+
if (getAliasesResponse != null && !getAliasesResponse.getAliases().isEmpty()) {
168+
indexName = getAliasesResponse.getAliases().keySet().iterator().next();
169+
}
164170
// Reset boolean in the case of JOIN query where multiple calls to loadFromEsState() are made
165171
selectAll = isSimpleQuerySelectAll(query) || isJoinQuerySelectAll(query, fieldNames);
166172

0 commit comments

Comments
 (0)