Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Comparison operators only compare the first element for arrays against a scalar value #3136

Open
normanj-bitquill opened this issue Oct 29, 2024 · 1 comment
Labels
bug Something isn't working untriaged

Comments

@normanj-bitquill
Copy link
Contributor

What is the bug?
The comparison operators (=, !=, >, >=, <, <=) do not properly compare arrays. The comparison is performed on each element against a scalar value. If any element passes the comparison, then the whole array is considered to pass the comparison.

Consider an index with the following data:

{"x": 1, "y": [1, 2]}
{"x": 2, "y": [3, 4]}
{"x": 3, "y": [1, 5]}
{"x": 4, "y": [1, 2]}
{"x": 5, "y": [2, 3]}

and this query:

SELECT x, y FROM test3 WHERE y > 3;
{"x": 2, "y": [3, 4]}
{"x": 3, "y": [1, 5]}

Expected result:
Throw an exception since the types for the comparison are different. If both sides are arrays, then perform the comparison element by element until there is a difference.

How can one reproduce the bug?
Steps to reproduce the behavior:

  1. Create a new index and load the data above
  2. Run the query above

What is the expected behavior?
Throw an exception if the comparison is between an array and a scalar value. If the comparison is between two arrays, perform the comparison element by element.

What is your host/environment?

  • OS: Mac OS X (shouldn't matter)
  • Version: 3.0 code base
  • Plugins: SQL plugin

Do you have any screenshots?
N/A

Do you have any additional context?
Issue #1300 had a change recently merged in that allows array values to be used in query evaluation and in the result set.

@normanj-bitquill normanj-bitquill added bug Something isn't working untriaged labels Oct 29, 2024
@normanj-bitquill normanj-bitquill changed the title [BUG] Comparison operators only compare all element for arrays against a scalar value [BUG] Comparison operators only compare the first element for arrays against a scalar value Oct 30, 2024
@normanj-bitquill
Copy link
Contributor Author

Related to this, there should be a way of providing an array literal for comparisons in the OpenSearch engine.

POST test3/_search
{
  "query": {
    "range": {
      "y": {
        "gt": [1,2]
      }
    }
  }
}
{
  "error": {
    "root_cause": [
      {
        "type": "query_shard_exception",
        "reason": "failed to create query: For input string: \"]\"",
        "index": "test3",
        "index_uuid": "7X1qRsNZSIel9ivGfqxEDg"
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "test3",
        "node": "pCTODN1sTfy2wK_F6DuUog",
        "reason": {
          "type": "query_shard_exception",
          "reason": "failed to create query: For input string: \"]\"",
          "index": "test3",
          "index_uuid": "7X1qRsNZSIel9ivGfqxEDg",
          "caused_by": {
            "type": "number_format_exception",
            "reason": "For input string: \"]\""
          }
        }
      }
    ]
  },
  "status": 400
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working untriaged
Projects
None yet
Development

No branches or pull requests

1 participant