Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-28075

JSON_VALUE returns first value from array not from range

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 10.9(EOL)
    • 10.9.1
    • JSON
    • None

    Description

      Test:

      SET @json1= '[
                   [{"key1": "value1"}, {"key2": "value2"}],
                   [{"key3": "value3"}, {"key1": "value4"}],
                   [{"key1": "value5"}, {"key4": "value6"}, {"key1": "value7"}]
                  ]';
      SELECT JSON_VALUE(@json1, '$[2][1 to 2].key1');
      SELECT JSON_VALUE(@json1, '$[2][1].key1');
      SELECT JSON_VALUE(@json1, '$[2][2].key1');
      

      Expected result:

      SET @json1= '[
                   [{"key1": "value1"}, {"key2": "value2"}],
                   [{"key3": "value3"}, {"key1": "value4"}],
                   [{"key1": "value5"}, {"key4": "value6"}, {"key1": "value7"}]
                  ]';
      SELECT JSON_VALUE(@json1, '$[2][1 to 2].key1');
      JSON_VALUE(@json1, '$[2][1 to 2].key1')
      value7
      SELECT JSON_VALUE(@json1, '$[2][1].key1');
      JSON_VALUE(@json1, '$[2][1].key1')
      NULL
      SELECT JSON_VALUE(@json1, '$[2][2].key1');
      JSON_VALUE(@json1, '$[2][2].key1')
      value7
      

      Actual result:

      SET @json1= '[
                   [{"key1": "value1"}, {"key2": "value2"}],
                   [{"key3": "value3"}, {"key1": "value4"}],
                   [{"key1": "value5"}, {"key4": "value6"}, {"key1": "value7"}]
                  ]';
      SELECT JSON_VALUE(@json1, '$[2][1 to 2].key1');
      JSON_VALUE(@json1, '$[2][1 to 2].key1')
      value5
      SELECT JSON_VALUE(@json1, '$[2][1].key1');
      JSON_VALUE(@json1, '$[2][1].key1')
      NULL
      SELECT JSON_VALUE(@json1, '$[2][2].key1');
      JSON_VALUE(@json1, '$[2][2].key1')
      value7
      

      The same behavior when json contains only arrays:

      SET @json= '[
                   [1.1, {"key1": "value1"}, 3],
                   [false, 5, 6],
                   [7, 8, [9, {"key2": 2}, 11]],
                   [11, 1.34, [14], ["string1", [16, {"key1":[1,2,3,[4,5,6]]}, 18]]],
                   [19, 20]
                  ]';
      SELECT JSON_VALUE(@json, '$[2 to 3][0]');
      JSON_VALUE(@json, '$[2 to 3][0]')
      1.1
      SELECT JSON_VALUE(@json, '$[2][0]');
      JSON_VALUE(@json, '$[2][0]')
      7
      SELECT JSON_VALUE(@json, '$[3][0]');
      JSON_VALUE(@json, '$[3][0]')
      11
      

      "1.1" is the first value in array not first in the specified range.

      Attachments

        Issue Links

          Activity

            JSON_QUERY has the same behavior:

            SET @json='{
                        "A": [0,
                              [1, 2, 3],
                              [4, 5, 6],
                              "seven",
                               0.8,
                               true,
                               false,
                               "eleven",
                              [[17, 18], 12, [13, 14], {"key1":"value1"},[15]],
                              true],
                        "B": {"C": 1},
                        "D": 2
                       }';
            SELECT JSON_QUERY(@json, '$.A[-2][1 to 3]');
            JSON_QUERY(@json, '$.A[-2][1 to 3]')
            [17, 18]
            SELECT JSON_QUERY(@json, '$.A[-2][1]');
            JSON_QUERY(@json, '$.A[-2][1]')
            NULL
            SELECT JSON_QUERY(@json, '$.A[-2][2]');
            JSON_QUERY(@json, '$.A[-2][2]')
            [13, 14]
            SELECT JSON_QUERY(@json, '$.A[-2][3]');
            JSON_QUERY(@json, '$.A[-2][3]')
            {"key1":"value1"}
            

            "[17, 18]' is incorrect result it is expected "[13, 14]"

            lstartseva Lena Startseva added a comment - JSON_QUERY has the same behavior: SET @json='{ "A": [0, [1, 2, 3], [4, 5, 6], "seven", 0.8, true, false, "eleven", [[17, 18], 12, [13, 14], {"key1":"value1"},[15]], true], "B": {"C": 1}, "D": 2 }'; SELECT JSON_QUERY(@json, '$.A[-2][1 to 3]'); JSON_QUERY(@json, '$.A[-2][1 to 3]') [17, 18] SELECT JSON_QUERY(@json, '$.A[-2][1]'); JSON_QUERY(@json, '$.A[-2][1]') NULL SELECT JSON_QUERY(@json, '$.A[-2][2]'); JSON_QUERY(@json, '$.A[-2][2]') [13, 14] SELECT JSON_QUERY(@json, '$.A[-2][3]'); JSON_QUERY(@json, '$.A[-2][3]') {"key1":"value1"} " [17, 18] ' is incorrect result it is expected " [13, 14] "
            rucha174 Rucha Deodhar added a comment - Patch: https://github.com/MariaDB/server/commit/a2c85b42079d45b05534526abb2fb52c486176cc

            ok to push.

            holyfoot Alexey Botchkov added a comment - ok to push.
            rucha174 Rucha Deodhar added a comment - Pushed to https://github.com/MariaDB/server/tree/bb-10.9-MDEV-27911

            People

              rucha174 Rucha Deodhar
              lstartseva Lena Startseva
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.