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

Wrong result from JSON native function.

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 10.2.6
    • 10.2.9
    • JSON
    • None
    • Windows 10

    Description

      It seems that JSON functions fail to get returned result from another function:

      select json_extract(json_object('truc',json_array('machin',4,json_object('chose','XML'))),'$.truc[2].chose') as result;
      +--------+
      | result |
      +--------+
      | "XML"  |
      +--------+
       
      select json_search(json_object('truc',json_array('machin',4,json_object('chose','XML'))),'one','XML') as Path;
      +-------------------+
      | Path              |
      +-------------------+
      | "$.truc[2].chose" |
      +-------------------+
       
      select json_extract(json_object('truc',json_array('machin',4,json_object('chose','XML'))),json_search(json_object('truc',json_array('machin',4,json_object('chose','XML'))),'one','XML')) as Result;
      +--------+
      | Result |
      +--------+
      | NULL   |
      +--------+
      

      Sould not the last query return "XML"?

      Attachments

        Issue Links

          Activity

            holyfoot Alexey Botchkov added a comment - - edited

            select json_array(5,'[1,2]');
            +-----------------------+
            | json_array(5,'[1,2]') |
            +-----------------------+
            | [5, "[1,2]"]          |
            +-----------------------+
            This time, the function as regarded its second argument as a string.
            

            This is also the correct result. Both MariaDB and MySQL return this.
            You need to specify that the second parameter is JSON explicitly.

            MariaDB [(none)]> select json_array(5,json_compact('[1,2]'));
            +-------------------------------------+
            | json_array(5,json_compact('[1,2]')) |
            +-------------------------------------+
            | [5, [1,2]]                          |
            +-------------------------------------+
            1 row in set (0.00 sec)
            

            holyfoot Alexey Botchkov added a comment - - edited select json_array(5,'[1,2]'); +-----------------------+ | json_array(5,'[1,2]') | +-----------------------+ | [5, "[1,2]"] | +-----------------------+ This time, the function as regarded its second argument as a string. This is also the correct result. Both MariaDB and MySQL return this. You need to specify that the second parameter is JSON explicitly. MariaDB [(none)]> select json_array(5,json_compact('[1,2]')); +-------------------------------------+ | json_array(5,json_compact('[1,2]')) | +-------------------------------------+ | [5, [1,2]] | +-------------------------------------+ 1 row in set (0.00 sec)

            select json_array(5,json_query('[1,2]','$'));
            +---------------------------------------+
            | json_array(5,json_query('[1,2]','$')) |
            +---------------------------------------+
            | [5, "[1,2]"]                          |
            +---------------------------------------+
            

            This is indeed wrong. FIxed.

            holyfoot Alexey Botchkov added a comment - select json_array(5,json_query('[1,2]','$')); +---------------------------------------+ | json_array(5,json_query('[1,2]','$')) | +---------------------------------------+ | [5, "[1,2]"] | +---------------------------------------+ This is indeed wrong. FIxed.

            Crashing UDF call also fixed.
            Though for me that jsonlocate call returned ' truc:[2]:chose ' which was not a right path.

            holyfoot Alexey Botchkov added a comment - Crashing UDF call also fixed. Though for me that jsonlocate call returned ' truc: [2] :chose ' which was not a right path.
            bertrandop Olivier Bertrand added a comment - - edited

            Alexey: you probably used a deprecated version of this UDF. Current version returns '$.truc[2].chose'.
            Thanks for fixing it anyway.

            bertrandop Olivier Bertrand added a comment - - edited Alexey: you probably used a deprecated version of this UDF. Current version returns '$.truc [2] .chose'. Thanks for fixing it anyway.
            greenman Ian Gilfillan added a comment -

            MySQL and MariaDB don't behave quite the same in that MariaDB gives a warning, MySQL an error - I've reported this separately as MDEV-13794

            greenman Ian Gilfillan added a comment - MySQL and MariaDB don't behave quite the same in that MariaDB gives a warning, MySQL an error - I've reported this separately as MDEV-13794

            People

              holyfoot Alexey Botchkov
              bertrandop Olivier Bertrand
              Votes:
              0 Vote for this issue
              Watchers:
              5 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.