Details

    • Type: Task
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Fix Version/s: 10.1
    • Component/s: None
    • Labels:
      None

      Description

      Could you include Sveta Smirnova's UDF's to work with JSON? They are useful by themself, and also in conjunction with COLUMN_JSON().

      https://blogs.oracle.com/svetasmirnova/entry/json_udf_functions_0_4

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            bertrandop Olivier Bertrand added a comment - - edited

            It occurs both with the old and new path versions.

            Array indexes are ok only for an array in last position. For instance this is Ok:

            +--------------------------------------+
            | json_search('[45,28,36,45,89]','36') |
            +--------------------------------------+
            | $[2]                                 |
            +--------------------------------------+
            

            but this is not:

            +------------------------------------------+
            | json_search('[[45,28],[36,45,89]]','36') |
            +------------------------------------------+
            | $[6][3]                                  |
            +------------------------------------------+
            

            Same errors with json_extract:
            Ok:

            +-----------------------------------------+
            | json_extract('[45,28,36,45,89]','$[2]') |
            +-----------------------------------------+
            | 36                                      |
            +-----------------------------------------+
            

            Not Ok:

            +------------------------------------------------+
            | json_extract('[[45,28],[36,45,89]]','$[1][0]') |
            +------------------------------------------------+
            | NULL                                           |
            +------------------------------------------------+
            

            It printed these messages:

            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: Path parse error
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: Path parse error
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: In make_jeargs_from_path [
            UDF-level error: Path parse error
            
            Show
            bertrandop Olivier Bertrand added a comment - - edited It occurs both with the old and new path versions. Array indexes are ok only for an array in last position. For instance this is Ok: +--------------------------------------+ | json_search('[45,28,36,45,89]','36') | +--------------------------------------+ | $[2] | +--------------------------------------+ but this is not: +------------------------------------------+ | json_search('[[45,28],[36,45,89]]','36') | +------------------------------------------+ | $[6][3] | +------------------------------------------+ Same errors with json_extract: Ok: +-----------------------------------------+ | json_extract('[45,28,36,45,89]','$[2]') | +-----------------------------------------+ | 36 | +-----------------------------------------+ Not Ok: +------------------------------------------------+ | json_extract('[[45,28],[36,45,89]]','$[1][0]') | +------------------------------------------------+ | NULL | +------------------------------------------------+ It printed these messages: UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: Path parse error UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: Path parse error UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: In make_jeargs_from_path [ UDF-level error: Path parse error
            Hide
            svetasmirnova Sveta Smirnova added a comment - - edited

            Patch for JSON_EXTRACT bug:

            diff -ur /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/my_json_udf_path.cc /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/my_json_udf_path.cc
            --- /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/my_json_udf_path.cc  2015-03-05 22:29:34.000000000 +0200
            +++ /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/my_json_udf_path.cc       2015-08-18 13:58:58.603175861 +0300
            @@ -1097,7 +1097,6 @@
                   }
                   break;
                 case '[':
            -      jdump(JSON_ERROR, JSON_UDF_ERROR, "In make_jeargs_from_path [");
                   if (1 < i)
                   {
                     if (is_key)
            @@ -1119,6 +1118,10 @@
                         is_array= true;
                       }
                     }
            +        else if (!is_array)
            +        {
            +          is_array= true;
            +        }
                     else
                     {
                       jdump(JSON_ERROR, JSON_UDF_ERROR, "Path parse error");
            
            
            
            Show
            svetasmirnova Sveta Smirnova added a comment - - edited Patch for JSON_EXTRACT bug: diff -ur /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/my_json_udf_path.cc /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/my_json_udf_path.cc --- /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/my_json_udf_path.cc 2015-03-05 22:29:34.000000000 +0200 +++ /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/my_json_udf_path.cc 2015-08-18 13:58:58.603175861 +0300 @@ -1097,7 +1097,6 @@ } break ; case '[': - jdump(JSON_ERROR, JSON_UDF_ERROR, "In make_jeargs_from_path [" ); if (1 < i) { if (is_key) @@ -1119,6 +1118,10 @@ is_array= true ; } } + else if (!is_array) + { + is_array= true ; + } else { jdump(JSON_ERROR, JSON_UDF_ERROR, "Path parse error" );
            Hide
            svetasmirnova Sveta Smirnova added a comment -

            Fix for case

            select json_search('{"ISBN":"9782212090819","AUTHOR":[{"FIRSTNAME":"Jean-Michel","LASTNAME":"Bernadac"},{"FIRSTNAME":"François","LASTNAME":"Knab"}],"TITLE":"Construire une application XML"}','"Knab"');
            

            :

            diff -ur /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/JCallback.cc /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/JCallback.cc
            --- /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/JCallback.cc 2015-03-05 22:29:34.000000000 +0200
            +++ /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/JCallback.cc      2015-08-18 15:14:22.129083555 +0300
            @@ -868,13 +868,13 @@
                   
                   memcpy(&(path[path_len]->key[0]), &doc[key_start + 1], key_len - 2);
                   path_len++;
            -      arr_ind= -1;
                 }
                 else if (is_array_elem)
                 {
                   char* key= new char[33];
                   sprintf(key, "%d", this->arr_ind);
                   path[path_len++]= new JPath(key, strlen(key), true);
            +      arr_ind= -1;
                 }
                 cur_pos= pos;
               }
            
            Show
            svetasmirnova Sveta Smirnova added a comment - Fix for case select json_search('{ "ISBN" : "9782212090819" , "AUTHOR" :[{ "FIRSTNAME" : "Jean-Michel" , "LASTNAME" : "Bernadac" },{ "FIRSTNAME" : "François" , "LASTNAME" : "Knab" }], "TITLE" : "Construire une application XML" }',' "Knab" '); : diff -ur /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/JCallback.cc /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/JCallback.cc --- /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src_orig/JCallback.cc 2015-03-05 22:29:34.000000000 +0200 +++ /home/sveta/src/json_udf/mysql-json-udfs-0.4.0-labs-json-udfs-src/JCallback.cc 2015-08-18 15:14:22.129083555 +0300 @@ -868,13 +868,13 @@ memcpy(&(path[path_len]->key[0]), &doc[key_start + 1], key_len - 2); path_len++; - arr_ind= -1; } else if (is_array_elem) { char * key= new char [33]; sprintf(key, "%d" , this ->arr_ind); path[path_len++]= new JPath(key, strlen(key), true ); + arr_ind= -1; } cur_pos= pos; }
            Hide
            bertrandop Olivier Bertrand added a comment -

            I applied your patches and most errors are gone.

            However, this one remains:

            +------------------------------------------+
            | json_search('[[45,28],[36,45,89]]','36') |
            +------------------------------------------+
            | $[2][3]                                  |
            +------------------------------------------+
            
            Show
            bertrandop Olivier Bertrand added a comment - I applied your patches and most errors are gone. However, this one remains: +------------------------------------------+ | json_search('[[45,28],[36,45,89]]','36') | +------------------------------------------+ | $[2][3] | +------------------------------------------+
            Hide
            svetasmirnova Sveta Smirnova added a comment -

            Yes, this one was not fixed.

            Show
            svetasmirnova Sveta Smirnova added a comment - Yes, this one was not fixed.

              People

              • Assignee:
                Unassigned
                Reporter:
                f_razzoli Federico Razzoli
              • Votes:
                1 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated: