Je migre actuellement une fonction TRAVERSAL d'arangoDB 2 vers arangoDB 3. L'aql a un visiteur de feuille personnalisé et une option filterVertices avec une fonction AQL personnalisée (pour un filtrage plus spécifique).Migration d'un UDF de filtre d'ArangoDB 2.8 vers ArangoDB 3
FOR result IN TRAVERSAL(
page,
menu,
"page/99999999999999",
"inbound",
{filterVertices : "udf::customFilter", visitor : "udf::customVisitor", }
) RETURN result
La feuille visiteur UDF a été relativement facile à transférer car il crée simplement un objet personnalisé, mais je rencontre des problèmes avec les filterVertices UDF puisque dans Arango 3 les fonctions graphiques ont été supprimés.
Il y a quelques cas comme celui ci-dessous dans la filterVertices UDF
//check the page status
if (mismatch == 1) {
//stop traversal and not return mismatched
return ['exclude', 'prune'];
} else if (mismatch == 2) {
//stop but return mismatched
return 'prune';
} else {
//exclude mismatched but continue
return 'exclude';
}
Ma question est de savoir comment devrait pruneau et ne comprennent ni être traduit en cas de filtre dans le aql ci-dessous exactement?
FOR v, d, p IN 1..10 INBOUND "page/99999999999999" menu
LET filtered = CALL('udf::customFilter',v,p)
LET result = CALL('udf::customVisitor',v,d,p)
RETURN {filtered:filtered,result:result}
Est-ce que la performance sera affectée si j'utilise l'UDF comme il est et passer le résultat dans un param LET et exclure (filtre) les manuellement?
Tellement intéressant! Je m'attendais à une réponse dans ce sens. Je devais juste être sûr de ne rien manquer de la documentation. Malheureusement mes fonctions dépendent des résultats des entrées et des collectes de l'utilisateur, donc je ne suis pas sûr que ce soit faisable de tout convertir en instructions FILTER, mais je comprends ce que vous dites et je le garderai en tête pour le prochain refactoring . Je sais que c'est un longhot mais si vous parvenez à inclure des instructions "if" dans l'AQL, cela ajouterait beaucoup de flexibilité! J'utilise l'option isDeterministic pour le moment, juste pour être prêt pour les futures mises à jour. – GeorgeKaf