MongoDB extended operator rules erroneously applied to SQL databases and json bodies
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript, postgresql
- Área
- database
Línea de trabajo
Comienza con el código de validación introducido por el pull request 1662 de loopback-datasource-juggler y reproduce el problema mediante una llamada a find() sobre un campo JSON de PostgreSQL que contenga una clave $ de nivel superior. Se considera terminado cuando las consultas de igualdad JSON de SQL ya no generan OPERATOR_NOT_ALLOWED_IN_QUERY, mientras la validación de operadores extendidos de MongoDB sigue siendo aplicable.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
NOTE: This is a bug in loopback-datasource-juggler, however the issue template there explicitly requests filing bugs in this project so 🤷
https://github.com/loopbackio/loopback-datasource-juggler/pull/1662 brought in some validation code that only is applicable to MongoDB, and is making certain operation on JSON properties/columns with SQL databases excessively difficult.
It is already impossible to do json equality searches out of the box due to #477, however that issue has a fairly straight forward workaround.
That workaround fails if the JSON object you are searching for contains any properties starting with a $ at the top level however, because they are interpreted as extended operators, even if they cannot possibly actually be such.
For example, pretend #477 was already fixed and you wrote this where expression:
{ where: { propertyName: { eq: { $foo: 'bar' } } } }
The $foo, AFAICT, cannot possibly be an operator because you already specified the eq operator.
Furthermore, if you're not using MongoDB, then this whole thing is moot anyways and these checks are inapplicable.
Steps to reproduce
- Create an entity type with a property of object type mapped to a SQL field of json type
- Insert a record that has a key in this property, at the top level, whose name starts with a
$ - Attempt to do a
find()call to locate this record using an equality match on that property
Current Behavior
- #477 gets in your way
- Even with the workaround for that, Loopback throws a
OPERATOR_NOT_ALLOWED_IN_QUERYerror and refuses to run your query
Expected Behavior
Loopback should be able to do property = ? queries on JSON fields against SQL databases.
Link to reproduction sandbox
WIP
Additional information
Same environment as #477
Related Issues
- #477
- Lenguaje dominante
- JavaScript
- Estrellas
- 118
- Forks
- 183
- Merge medio
- 3 d 7 h
- PR fusionados (30 d)
- 9
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de loopbackio/loopback-connector-postgresql
-
Partial JSON UpdatePosiblemente ocupada @vaibhavbhalla2505 la tomó hace 264 días. Abiertofeature
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
loopbackio/loopback-connector-postgresql#748 · 1 comentario ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
loopbackio/loopback-connector-postgresql#732 · 1 comentario ·
Todos los issues de loopbackio/loopback-connector-postgresql
Issues similares
-
[dsh-plugin.org | dsh-plugin-hub] plugin distribution incomplete: yjh051108/dsh-routing-suiteAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 71/100
yjh051108/dsh-routing-suite#227 ·
-
needs-triage release-watch
Dificultad 1/5 Menos de una hora Aptitud para principiantes 76/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
dusk-network/exu#17 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
jspreadsheet/ce#1809 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
githubnext/gh-aw-workshop#4458 ·
Los mantenedores suelen responder en 1 día