Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Fix unclear PPL error message for empty mapping on wildcard indices by anohedr · Pull Request #5609 · opensearch-project/sql · GitHub
Skip to content

Fix unclear PPL error message for empty mapping on wildcard indices - #5609

Open
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968
Open

Fix unclear PPL error message for empty mapping on wildcard indices#5609
anohedr wants to merge 3 commits into
opensearch-project:mainfrom
anohedr:feature/unclear_ppl_err_msg_4968

Conversation

@anohedr

Copy link
Copy Markdown

Description

Improves the error message returned when an index has an empty mapping. This change makes the error clearer and more actionable for users while preserving the existing behavior. Unit tests have been updated to verify the new error message.

Related Issues

Resolves #[4872]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit 879940e)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

The pattern detection logic treats a single string containing a comma (e.g., "index1,index2") as a non-pattern, but OpenSearch interprets comma-separated values within a single string as multiple indices. This mismatch causes the error message to omit the "compatible mapping" hint when it should be included, misleading users who pass comma-separated index names as a single argument.

|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
|| e.startsWith("-")
|| e.equals("_all"));

@github-actions

github-actionsBot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to 879940e

Explore these optional code suggestions:

CategorySuggestion Impact
General
Remove incorrect hyphen pattern check

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but in OpenSearch index expressions, a leading hyphen denotes exclusion
(e.g., index
,-excluded). This can cause false positives when checking for patterns.
Consider removing the e.startsWith("-") condition or refining the logic to
distinguish between exclusion syntax and actual pattern indicators.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") may cause false positives in pattern detection. In OpenSearch, a leading hyphen indicates exclusion syntax rather than a wildcard pattern. Removing this check would improve the accuracy of pattern detection, though the impact is moderate since exclusion syntax is less commonly used alone.

Medium

Previous suggestions

Suggestions up to commit 21ff0fc
CategorySuggestion Impact
Possible issue
Avoid false pattern detection for hyphenated names

The pattern detection logic treats a leading hyphen (-) as a wildcard pattern
indicator, but this conflicts with date-based index names (e.g., logs-2024-01-01)
which are common and not patterns. Consider checking for exclusion syntax more
precisely (e.g., -index without other characters) or removing this check to avoid
false positives.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that e.startsWith("-") can cause false positives for date-based index names like logs-2024-01-01. However, the check is intended to detect exclusion patterns (e.g., -excluded_index), which are valid OpenSearch syntax. The suggestion to remove this check entirely may miss legitimate exclusion patterns, but the concern about false positives is valid and warrants careful consideration.

Medium
Suggestions up to commit 5e50c14
CategorySuggestion Impact
General
Fix pattern detection for exclusions

The pattern detection logic treats any expression starting with - as a pattern, but
- is used for exclusions in multi-index patterns (e.g., index
,-excluded). A single
expression starting with - (like -myindex) is invalid and should not be classified
as a pattern requiring the "compatible mapping" hint.
*

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [144-154]

 boolean isPattern =
exprs.length > 1
|| Arrays.stream(exprs)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")
|| e.equals("_all"));
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that a single expression starting with - (like -myindex) is invalid and shouldn't trigger the "compatible mapping" hint. However, the logic exprs.length > 1 already handles multi-index patterns where exclusions are valid, so removing the e.startsWith("-") check is appropriate for single-expression cases.

Medium
Suggestions up to commit 8f53d9a
CategorySuggestion Impact
General
Remove redundant ErrorReport catch block

Catching and re-throwing ErrorReport is unnecessary since ErrorReport extends
RuntimeException. The existing catch block for generic Exception will not catch
ErrorReport anyway due to the order. Remove this redundant catch block to simplify
the exception handling flow.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchNodeClient.java [117-119]

-} catch (ErrorReport e) {- throw e;
} catch (Exception e) {
Suggestion importance[1-10]: 4

__

Why: The catch block for ErrorReport appears redundant since it only re-throws the exception. However, it serves to preserve the specific ErrorReport type before the generic Exception handler wraps it in IllegalStateException. Removing it would change exception handling behavior, though the impact is minor since ErrorReport extends RuntimeException.

Low
Fix pattern detection for multi-index queries

The pattern detection logic treats a comma within a single string as a pattern
indicator, but commas are also used to separate multiple index names in a single
argument. This can cause false positives where legitimate multi-index queries
without wildcards are incorrectly flagged as patterns. Consider checking if the
array contains multiple elements OR if any single element contains pattern syntax.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [134-146]

 String[] exprs = indexExpression != null ? indexExpression : new String[0];
String joined = String.join(",", exprs);
boolean isPattern =
- Arrays.stream(exprs)- .filter(e -> e != null)- .anyMatch(- e ->- e.contains("*")- || e.contains("?")- || e.contains(",")- || e.startsWith("<")- || e.startsWith("-")- || e.equals("_all"));+ exprs.length > 1+ || Arrays.stream(exprs)+ .filter(e -> e != null)+ .anyMatch(+ e ->+ e.contains("*")+ || e.contains("?")+ || e.contains(",")+ || e.startsWith("<")+ || e.startsWith("-")+ || e.equals("_all"));
Suggestion importance[1-10]: 3

__

Why: The suggestion identifies a potential issue where exprs.length > 1 could help distinguish multi-index queries, but the current logic already handles commas within strings as pattern indicators (which is correct per OpenSearch syntax). The test at line 310-314 validates this behavior. The suggestion may introduce unintended changes to the error message logic without clear benefit.

Low
Suggestions up to commit ae77f2a
CategorySuggestion Impact
General
Fix pattern detection for hyphenated names

The pattern detection logic may incorrectly classify indices with hyphens in their
names (e.g., my-index) as patterns because it checks e.startsWith("-"). This check
is intended for exclusion patterns but will match any index name containing a
leading hyphen. Consider checking for exclusion syntax more precisely or documenting
this behavior.

opensearch/src/main/java/org/opensearch/sql/opensearch/client/OpenSearchClient.java [135-144]

 boolean isPattern =
Arrays.stream(indexExpression)
.filter(e -> e != null)
.anyMatch(
e ->
e.contains("*")
|| e.contains("?")
|| e.startsWith("<")
- || e.startsWith("-")+ || (e.startsWith("-") && e.length() > 1 && !Character.isLetterOrDigit(e.charAt(1)))
|| e.equals("_all"));
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical bug where e.startsWith("-") would incorrectly classify normal index names like my-index as patterns. The improved code adds a check to distinguish between exclusion patterns (e.g., -excluded*) and regular hyphenated names, preventing false positives that would show incorrect error messages to users.

Medium

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 8f53d9a

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5e50c14

@RyanL1997RyanL1997 added the enhancement New feature or request label Jul 7, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 21ff0fc

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 5618a2e

Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
Signed-off-by: anohedr <anoopmahenderkar@gmail.com>
@anohedr
anohedrforce-pushed the feature/unclear_ppl_err_msg_4968 branch from 5618a2e to 879940eCompareJuly 22, 2026 04:42
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 879940e

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anohedr@RyanL1997