qb: Array producing functions don't work?
- Lingua principale
- Python
- Stelle
- 415
- Fork
- 50
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
```
q = default.GameSession.select(
"*",
players=True,
).filter(
lambda g: std.array_agg(g.players.id)
== std.array_agg(green.users.id)
)
```
fails at runtime with
```
File "/home/sully/src/e/edgedb-python/gel/_internal/_qb/_generics.py", line 300, in wrapper
return attrval(*args, __operand__=self, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sully/src/e/edgedb-python/gel/_internal/_qbmodel/_abstract/_methods.py", line 140, in filter
add_filter(cls, *exprs, __operand__=__operand__, **properties),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sully/src/e/edgedb-python/gel/_internal/_qbmodel/_abstract/_expressions.py", line 269, in add_filter
all_exprs = [_qb.edgeql_qb_expr(expr, var=prefix) for expr in exprs]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sully/src/e/edgedb-python/gel/_internal/_qb/_protocols.py", line 145, in edgeql_qb_expr
x = x(var)
^^^^^^
File "/home/sully/src/e/edgedb-python/tests/test_qb.py", line 371, in
lambda g: std.array_agg(g.players.id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sully/src/e/edgedb-python/gel/_internal/_qb/_generics.py", line 213, in
lambda self, other, op=op: self.__infix_op__(op, other),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sully/src/e/edgedb-python/gel/_internal/_qb/_generics.py", line 333, in __infix_op__
type_class = this_operand.__gel_type_class__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'Array[models.orm.__shapes__.std.uuid]' has no attribute '__gel_type_class__'
```
And it fails to typecheck because `__eq__` is not overloaded on `Array` in a way visible to the typechecker. (And the way *not* visible seems broken?)
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
Inizia con l’esempio che fallisce in tests/test_qb.py intorno alla riga 371, quindi segui array_agg attraverso _internal/_qb/_generics.py, _internal/_qbmodel/_abstract/_methods.py, _expressions.py e _protocols.py. Riproduci sia l’errore a runtime sia l’errore di type-checking, quindi verifica che le espressioni che producono array possano essere confrontate correttamente e che il test pertinente passi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- backend-api-design, databases
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100