geldata / geldata/gel-python

qb: Array producing functions don't work?

Aperta
#896 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.