Where in array + dynamic limit and offset
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia con la riproduzione in test/mongo_ecto_test.exs e ispeziona Mongo.Ecto.execute/6, quindi traccia la gestione di limit e offset attraverso i percorsi del cursore e dei messaggi Mongo indicati negli stack trace. Il lavoro è completato quando i casi di regressione con p.id in ^ids e con limit e offset dinamici passano senza errori aritmetici o di codifica.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hey!
I have a weird bug in my production application which I was able to reproduce in the repo with the latest master in test/mongo_ecto_test.exs:
test "where in ids + dynamic limit + dynamic offset" do
post1 = TestRepo.insert!(%Post{})
post2 = TestRepo.insert!(%Post{})
ids = [post1.id, post2.id]
limit = 1
offset = 1
query = from p in Post, where: p.id in ^ids, limit: ^limit, offset: ^offset
assert TestRepo.all(query) == [post2]
end
- When I try to use
p.id in ^idswithlimit: ^limit, it fails with the following error (the id fromidsis somehow used as a count):
** (ArithmeticError) bad argument in arithmetic expression
code: assert TestRepo.all(query) == [post2]
stacktrace:
:erlang.-(#BSON.ObjectId<5c40b5cdac013d9153aefc9f>, 1)
(mongodb) lib/mongo/cursor.ex:106: Enumerable.Mongo.Cursor.new_limit/2
(mongodb) lib/mongo/cursor.ex:44: anonymous fn/6 in Enumerable.Mongo.Cursor.start_fun/6
(elixir) lib/stream.ex:1362: anonymous fn/5 in Stream.resource/3
(elixir) lib/enum.ex:2979: Enum.map_reduce/3
(mongodb_ecto) lib/mongo_ecto.ex:600: Mongo.Ecto.execute/6
(ecto) lib/ecto/repo/queryable.ex:130: Ecto.Repo.Queryable.execute/5
(ecto) lib/ecto/repo/queryable.ex:35: Ecto.Repo.Queryable.all/4
test/mongo_ecto_test.exs:104: (test)
- When I try to use
p.id in ^idswithoffset: ^offset, it fails with another error:
12:05:34.821 [error] GenServer #PID<0.295.0> terminating
** (DBConnection.ConnectionError) client #PID<0.309.0> stopped: ** (ArgumentError) argument error
(mongodb) lib/mongo/messages.ex:116: Mongo.Messages.encode_op/1
(mongodb) lib/mongo/messages.ex:59: Mongo.Messages.encode/2
(mongodb) lib/mongo/protocol/utils.ex:32: Mongo.Protocol.Utils.send/3
(mongodb) lib/mongo/protocol/utils.ex:12: Mongo.Protocol.Utils.message/3
(mongodb) lib/mongo/protocol.ex:273: Mongo.Protocol.message_reply/2
(mongodb) lib/mongo/protocol.ex:186: Mongo.Protocol.handle_execute/4
(db_connection) lib/db_connection.ex:958: DBConnection.handle/4
(db_connection) lib/db_connection.ex:1100: anonymous fn/4 in DBConnection.run_execute/4
(db_connection) lib/db_connection.ex:1142: anonymous fn/4 in DBConnection.run_meter/5
(db_connection) lib/db_connection.ex:1199: DBConnection.run_begin/3
(db_connection) lib/db_connection.ex:636: DBConnection.execute/4
(mongodb) lib/mongo.ex:414: Mongo.raw_find/5
(mongodb) lib/mongo/cursor.ex:40: anonymous fn/6 in Enumerable.Mongo.Cursor.start_fun/6
(elixir) lib/stream.ex:1362: anonymous fn/5 in Stream.resource/3
(elixir) lib/enum.ex:2979: Enum.map_reduce/3
(mongodb_ecto) lib/mongo_ecto.ex:600: Mongo.Ecto.execute/6
(ecto) lib/ecto/repo/queryable.ex:130: Ecto.Repo.Queryable.execute/5
(ecto) lib/ecto/repo/queryable.ex:35: Ecto.Repo.Queryable.all/4
test/mongo_ecto_test.exs:105: Mongo.EctoTest."test where in + limit"/1
(ex_unit) lib/ex_unit/runner.ex:312: ExUnit.Runner.exec_test/1
(db_connection) lib/db_connection/connection.ex:243: DBConnection.Connection.handle_cast/2
(connection) lib/connection.ex:810: Connection.handle_async/3
(stdlib) gen_server.erl:637: :gen_server.try_dispatch/4
(stdlib) gen_server.erl:711: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
- Lingua principale
- Elixir
- Stelle
- 378
- Fork
- 127
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di elixir-mongo/mongodb_ecto
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 52/100
elixir-mongo/mongodb_ecto#197 · 4 commenti · 1 reazione ·
-
Not able to pass limitAperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
elixir-mongo/mongodb_ecto#189 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
elixir-mongo/mongodb_ecto#187 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
elixir-mongo/mongodb_ecto#184 · 3 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
elixir-mongo/mongodb_ecto#182 · 10 commenti ·
Tutte le issue di elixir-mongo/mongodb_ecto
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
getsentry/sentry-elixir#1259 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
[Bug]: PostgreSQL backend: Queue.remove() / Job.remove() never emit the QueueEvents "removed" eventForse già presa @1AbdullahButt l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
taskforcesh/bullmq#5085 ·
I maintainer di solito rispondono entro 1 giorno
-
Step-by-step Ash GuideAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
liveshowy/webauthn_components#118 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
intellij-elixir/intellij-elixir#4645 ·
I maintainer di solito rispondono entro 1 giorno