[MDEV-11205] UDF_ARGS "attribute_lengths" incorrect value Created: 2016-11-01  Updated: 2017-07-18  Resolved: 2017-07-18

Status: Closed
Project: MariaDB Server
Component/s: OTHER
Affects Version/s: 5.5, 10.0, 10.1
Fix Version/s: 5.5.58

Type: Bug Priority: Major
Reporter: Alexander Sidorov Assignee: Alexey Botchkov
Resolution: Fixed Votes: 0
Labels: upstream-fixed
Environment:

Arch Linux
Linux kernel 4.4.23-1-lts
Lenovo ThinkPad E540



 Description   

I try to use User Defined Function lib_mysqludf_json from https://github.com/mysqludf/lib_mysqludf_json with MariaDB 10.1.18 and found an incorrect behavior of UDF_ARGS attribute_lengths.

typedef struct st_udf_args
{
...
  unsigned long *attribute_lengths;     /* Length of attribute arguments */
...
} UDF_ARGS;

Example:
When you use SELECT json_object("citizen_id") FROM ...
you will have:

args->attributes[0] = "citizen_id"
args->attribute_lengths[0] = 12

That's correct.

When you use SELECT json_object(citizen_id AS citizen_id) FROM ...

args->attributes[0] = citizen_id
args->attribute_lengths[0] = 10

That's also correct.

But when you use SELECT json_object(citizen_id) FROM ...

args->attributes[0] = citizen_id
args->attribute_lengths[0] = 0

That's incorrect. Correct value of attribute_lengths[0] is 10.

That's not reproducable on MySQL. This is not lib_mysqludf_json incorrect behavior, it just uses standart struct UDF_ARGS.



 Comments   
Comment by Elena Stepanova [ 2016-12-01 ]

Thanks for the report.

Same in MySQL 5.5, but not reproducible with MySQL 5.6.

MariaDB 10.1.19

MariaDB [test]>  SELECT json_object(citizen_id) FROM citizens;
ERROR 1123 (HY000): Can't initialize function 'json_object'; Invalid json member name - name cannot be empty
MariaDB [test]>  SELECT json_object(citizen_id AS citizen_id) FROM citizens;
+---------------------------------------+
| json_object(citizen_id AS citizen_id) |
+---------------------------------------+
| {"citizen_id":1}                      |
| {"citizen_id":2}                      |
+---------------------------------------+
2 rows in set (0.00 sec)

MySQL 5.6

MySQL [test]>  SELECT json_object(citizen_id) FROM citizens;
+-------------------------+
| json_object(citizen_id) |
+-------------------------+
| {"citizen_id":1}        |
| {"citizen_id":2}        |
+-------------------------+
2 rows in set (0.00 sec)

Both MySQL 5.7 and MariaDB 10.2 have native JSON_OBJECT, so it's not applicable there.

Comment by Alexey Botchkov [ 2017-07-18 ]

http://lists.askmonty.org/pipermail/commits/2017-July/011308.html

Generated at Thu Feb 08 07:48:07 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.