-
-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
failing test #172
failing test #172
Conversation
a980406
to
1f923ae
Compare
1a41202
to
c3671d1
Compare
c3671d1
to
044c13b
Compare
@@ -90,6 +96,7 @@ public function add($entity) | |||
|
|||
$this->updateRelationshipAdd($entity); | |||
$this->modify(); | |||
$this->wasLoaded = ($this->wasLoaded || $this->collection !== null); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Co toto presne znamena? Co se timto checkuje?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(wasLoaded má hodnotu true) právě tehdy, když (collection měla nenulovou hodnotu, ale byla invalidována = nastavena na null)
wasLoaded se používá pouze na to, aby getEntitiesForPersistence
vedělo, zda si má nechat postavit (pokud tomu ještě tak není) celou kolekci (protože ví, že to umíme udělat bez dalšího dotazu do DB, neboť všechny entity už jsou v paměti) nebo projít jenom to, co máme teď v paměti (říkejme tomu třeba partial kolekce).
Jinak obecně – ty testy by měli pokrývat ideálně všechny možné kombinace volání |
Jinak další plán vidím zhruba takto:
|
Takze sem to cely prosel a pochopil, co resis a o co se snazis.
|
Nevidím to primárně jako řešení nějakých optimalizací, ale jako řešení toho, že ORM teď „náhodně“ ztrácí data a nepersistuje data, co má persistovat. Dejme tomu, že jsem ochoten akceptovat, že některé kombinace nebudeme podporovat, ale v tom případě musí být jasně definované a vyhazovat výjimku, tj. nesmí selhat potichu, jak se to děje doposud. Nicméně myslím, že je neakceptovatelné, aby Předpokládejme na chvíli, že bychom nechali
Ano, stačí si pustit ty testy nad aktuálním masterem a zakomentovat ty asserty, které se netýkají výsledků getIterator.
Imho bys měl právě tu entitu přidat do
Tak to oprav, já se na to díval a nevím, co s tím moc dělat. Až se to tady rebasne, tak se budeme moci podívat na ten remove pořádně. Obecně remove kódu vůbec nevěřím, protože na něj nejsou testy intuitivně tuším, že to nebude vždycky fungovat. |
Cela ma predstava je zalozena na tom, ze v userlandu to bude fungovat samozrejme spolehlive. Nicmene to, co jsem si namyslel, by nefungovalo v priade add->persist->add->persist, kdy by to nezapersistovalo zmeny v prvni entity. Takze beru zpet a toto asi teda bude nutne udelat, jak si to udelal ty. Nenacitat celou kolekci likes - samozrejme souhlas, to se ani puvodne nedelo. Test fetchExistingA z tveho posledniho komentare moc nechapu co tim chces rict, problem mi prijde trochu nekde jinde. TestRemove - jojo, to asi opravim. Snad to stihnu zitra. |
Ten test dělá následující – načte entitu |
Super, tak to jsem te pochopil. Jeste premyslim, k cemu je presne $removed? Nestaci jen to added k drzeni partial kolekce? |
s tim testRemoveA nevim. kdyz ten test udelam nad aktualnim radkem, tak to dalsi query nespousti, tzn. imo spis si spatne detekoval, co zpusobuje ten dotaz navic: 112a33e Ja sem samozrejme predtim myslel, ze vim kde je chyba, ale tam nakonec nebyla, a obecne jsem ji v tom danym usecase nenasel. |
Nikdo neví, nejsou na to testy. Ale imho selže sekvence getIterator-remove-persist-remove-getIterator (vrátí i entitu odstraněnou prvním remove).
|
Protoze persist nulluje kolekce, mela byt dalsi getIterator volani ji nacist z db, cimz dostane korektni stav v db (bez prvniho remove) a unsetne z ni nepersistovanou druhou removed entitu, ne?
To prvni tady: |
Flush resetuje relationship cache, persist afaik nikoliv. |
} | ||
|
||
if ($this->collection !== null) { | ||
$this->collection = $this->applyDefaultOrder($this->collection); // required when ordered by id |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@JanTvrdik do you have idea why this is needed and why you have put it here? I see some tests fail if I removed so, something has changed in this pr to require this.
may or may not be related to #171