JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources

Repeating the same sort attribute with reverse direction overwrites the previous direction for that attribute

Abierto
#1,396 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Ruby
Estrellas
2.3k
Forks
546
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

This issue is a (choose one):

  • Problem/bug report.

Checklist before submitting:

  • I've searched for an existing issue.
  • I've asked my question on Gitter and have not received a satisfactory answer.
  • I've included a complete bug report template. This step helps us and allows us to see the bug without trying to reproduce the problem from your description. It helps you because you will frequently detect if it's a problem specific to your project.
  • The feature I'm asking for is compliant with the JSON:API spec.

Description

So, this is a pretty slim edge case. It concerns repetition of an attribute in the sort param, which can yield some arguably weird results that are possibly not compliant with the JSON:API spec recommendations:

Sort fields SHOULD be applied in the order specified.

Scenario

The index of a resource is called with a sort param, where the same attribute occurs more than once with different directions:

GET /foos?sort=bar,baz,-bar
Expected outcome

The records are ordered as specified by all the sort params, with an order of precedence from left to right. Any repetitions of the same attribute can be ignored, since they won't make a difference.

ORDER BY `foos`.`bar` ASC, `foos`.`baz` ASC, `foos`.`bar` DESC

or, equivalently, ignoring the repeated attributes:

ORDER BY `foos`.`bar` ASC, `foos`.`baz` ASC
Actual outcome

Whenever a sort attribute is repeated, its direction overwrites the previous direction of that same attribute.

ORDER BY `foos`.`bar` DESC, `foos`.`baz` ASC

Since ActiveRecord's order uses keyword arguments, calling it with repeated arguments will result in the repeated value overwriting the original value (with a warning). So it could be argued that the present behavior is consistent with how ActiveRecord works.

However, considering sort order in a more general sense or in the context of an SQL query it seems reasonable to me that a repeating value should not overwrite the original value.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza reproduciendo GET /foos?sort=bar,baz,-bar e inspecciona cómo se pasa la ordenación del índice de recursos al método order de ActiveRecord. Confirma que se conserva la primera dirección para un atributo repetido y, después, verifica el comportamiento ORDER BY generado frente a la precedencia esperada descrita en el issue.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
rails, ruby, sql
Área
api, backend, databases
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.