Pomalý DataGrid – jak optimalizovat DataSource?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Kurtas
Člen | 109
+
0
-

Ahoj,

povedlo se někomu optimalizovat DataGrid resp DataSource? S nette začínám, dva dny se s*ru abych rozchodil DataGrid na aktuální verzi Nette 2.0 + php 5.3 … nakonec to rozchodim a když to nasadim na reálná data (tabulka s 630 000 záznamy) tak je to jako mrtvola :( … Nemá někdo verzi bez DataSource přes klasické dibi::query?

Zase budu mít noční můry :)

PS: už se to nakouslo zde bohužel do tohoto vlákna nelze přispívat, tak zakládám nové. Potřeboval bych řešení pro MySQL

dík Míra

Majkl578
Moderator | 1364
+
0
-

Zkusil jsi použít dev větev? Podporuje DibiFluent.

Kurtas
Člen | 109
+
0
-

Díky moc DibiFluent šlape skvěle, jen ale přestalo fungovat filtrování záznamů nějak to špatně skládá SQL dotazy … při filtrování nad CheckboxColumn to padne na vyjímku DibiDriverException #1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‚NULL OFFSET 0‘ at line 1

TextbocColumn filtruje ok, SelectboxColumn nepadá na vyjímku ale nefiltruje :)

Zítra na to mrknu, snad to rozlousknu nebo případně pokud to někdo řešil budu rád za nakopnutí :)

Kurtas
Člen | 109
+
0
-

Tak jsem našel pár chybek v DataGridu (1.0-aplha-86) při použití DibiFluent jako datasource.
Pokud někomu nefunguje filtrovaní stačí opravit v Fluent.php

metoda reduce- u LIMIT parametru misto NULL dát 0

public function reduce($count, $start = 0)
	{
		if ($count == NULL || $count > 0) { //intentionally ==
			$this->df->limit($count == NULL ? 0 : $count);
		} else throw new \OutOfRangeException;

		if ($start == NULL || ($start > 0 && $start < count($this))) {
			$this->df->offset($start == NULL ? 0 : $start);
		} else throw new \OutOfRangeException;

		return $this;
	}

Dále špatně se skládal or misto ( sloupec = $value or sloupec IS NULLL ) to posílalo sloupec = $value or sloupec IS NULLL, takže při filtrování s více sloupci to blbo.

opravit metodu filter kolem řádku 81 $this->df->where(‚( %or )‘, $conds);

} elseif ($chainType === self::CHAIN_OR) {
				$this->df->where('( %or )', $conds);
}

Editoval Kurtas (10. 8. 2011 9:26)

norbe
Backer | 405
+
0
-

Bylo by lepší, kdyby jsi vytvořil patch. Nemusíš kvůli tomu nic instalovat. Stačí jen přejít v githubu na soubor Fluent.php a tam kliknout na tlačítko Fork and edit this file, kód upravíš a zašleš žádost o zanesení změn…

Kurtas
Člen | 109
+
0
-

Dík, GitHub nepoužívám, tak začnu patch jsem poslal

Majkl578
Moderator | 1364
+
0
-