Bug #92416 mysqlx (X DevAPI) does not allow "(@)" (@ inside parenthesis) as value
Submitted: 14 Sep 2018 4:18 Modified: 14 Sep 2018 4:18
Reporter: Jesper wisborg Krogh Email Updates:
Status: Verified Impact on me:
None 
Category:Connector / Python Severity:S2 (Serious)
Version:8.0.12 OS:Any
Assigned to: CPU Architecture:Any

[14 Sep 2018 4:18] Jesper wisborg Krogh
Description:
If you have a value in a JSON document that includes an @ inside parenthesis, it is not possible to add the document to a collection:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    mycol.add({"A": "(@)"}).execute()
  File "/usr/lib64/python2.7/site-packages/mysqlx/statement.py", line 583, in execute
  File "/usr/lib64/python2.7/site-packages/mysqlx/connection.py", line 243, in wrapper
  File "/usr/lib64/python2.7/site-packages/mysqlx/connection.py", line 505, in send_insert
  File "/usr/lib64/python2.7/site-packages/mysqlx/protocol.py", line 514, in send_insert
  File "/usr/lib64/python2.7/site-packages/mysqlx/expr.py", line 296, in build_expr
  File "/usr/lib64/python2.7/site-packages/mysqlx/expr.py", line 329, in build_object
  File "/usr/lib64/python2.7/site-packages/mysqlx/expr.py", line 335, in build_object
  File "/usr/lib64/python2.7/site-packages/mysqlx/expr.py", line 303, in build_expr
  File "/usr/lib64/python2.7/site-packages/mysqlx/expr.py", line 424, in __init__
  File "/usr/lib64/python2.7/site-packages/mysqlx/expr.py", line 614, in lex
ValueError: Unknown character at 1

How to repeat:
import mysqlx

connect_args = {
    "user": "root",
    "password": "password",
    "host": "127.0.0.1",
    "port": 33060,
}

db = mysqlx.get_session(**connect_args)

schema = db.create_schema("db1")
mycol = schema.create_collection("mycol")
mycol.add({"A": "(@)"}).execute()

db.close()
[5 Dec 2018 23:21] Philip Olson
Posted by developer:
 
Fixed as of the upcoming MySQL Connector/Python 8.0.14 release, and here's the changelog entry:

The connector assumed that all values were expressions, which could lead
to errors. The expr() method is now required to designate values as
expressions.

Thank you for the bug report.