2017-10-19 6 views
0

Je suis en train d'écrire un pilote pour Luvit, une bibliothèque Lua incompatible avec le pilote Lua-ReQL actuel. Comment pourrais-je aller sur ce problème?
Les données en question, comme JSON est,Une erreur se produit avec un ensemble de données spécifique

{"Settings":{"bet":"b!","admin_roles":[],"co_owner_roles":[],"voting_chan":"default---channel","mod_log":"true","log_channel":"default---channel","voting":"false","verify":"true","audit_log":"true","audit_log_chan":"audit-log-test","mod_log_chan":"modlog","banned_phrases":[],"mod_roles":[],"verify_chan":"default---channel","mod_log_channel":"default---channel","verify_role":"Member"},"Roles":[],"Cases":[],"Votes":[],"Timers":[],"id":"284381751084843008","Ignore":[]} 

Les données sérialisé est

[1,[53, [[15, [[14, ["test"]], "table"]], {"Ignore":[],"id":"284381751084843008","Cases":[],"Roles":[],"Timers":[],"Settings":{"bet":"b!","admin_roles":[],"co_owner_roles":[],"voting_chan":"default---channel","mod_log":"true","log_channel":"default---channel","voting":"false","verify":"true","audit_log":"true","audit_log_chan":"audit-log-test","mod_log_chan":"modlog","banned_phrases":[],"mod_roles":[],"verify_chan":"default---channel","mod_log_channel":"default---channel","verify_role":"Member"},"Votes":[]}]],{}] 

Les données du serveur est:

Expected between 1 and 3 elements in a raw term, but found 0. 

Répondre

0

Le problème est l'un des réseaux être vide. Quelle est la requête réelle à partir de laquelle vous construisez cela? Est-ce r.db('test').table('table').update(<your document>)?

Je regarde le fichier source term_walker.cc. Il semble que l'objet passé à UPDATE (l'objet entier {"Ignore"...}) sera enveloppé dans [MAKE_OBJ, {"Ignore"...}] (lorsque l'AST sera traité, avec la ligne de code rewrite(src, Term::MAKE_OBJ);) et que l'objet {"Ignore"...} sera traité de la même manière que les paramètres optargs - leurs champs de valeur reçoivent walk appelés.

Il semble que les objets nus soient traités de la même manière que s'ils étaient déjà enveloppés avec [3, <object>] (parce que MAKE_OBJ = 3). Lorsqu'un utilisateur écrit l'expression {"abc": r.add(1, 2)}, cela est censé être une expression MAKE_OBJ et la sous-expression doit être convertie par la bibliothèque cliente dans le code ReQL-ese approprié. Ma conjecture est que votre bibliothèque client ne traverse pas les objets et effectue cette conversion. Vous devez faire cela, de sorte que les tableaux nus soient transformés en ce qu'ils deviennent (un terme MAKE_ARRAY?). Si vous voulez que votre client passe un objet qui ne soit pas traversé et traité du tout, vous devriez utiliser DATUM, je suppose. Prenez tout ce que j'ai dit ici comme lignes directrices avec seulement 90% de certitude.

+0

Merci beaucoup! J'ai décidé d'utiliser le datum, et ça fonctionne comme un charme! <3 – DannehSC