Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> QueryBuilder
skowron-line
post
Post #1





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Witam, proszę o ocenę querybuildera.
Klasa nie jest w pełni przetestowana, ale chętnie już teraz poczytam wasze uwagi, krytykę, pochwały.
Kod dostępny jest pod adresem http://skowronline.pl/qb/source.php a jutro postaram się wrzucić przykłady użycia.

Pozrawiam


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Testy jednostkowe będą?


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Rzuciłem okiem tylko pobieżnie na to (chwilowo brak czasu) ale od razu rzuciło mi się w oczy konstrukcje jak ta:
"\nSET"

Czemu specjalnie dodajesz nowe linie do zapytan? Najlepiej jest unikać enterów w zapytaniach, a ty je spacjalnie wkładasz.
Czy to ma służyć tylko temu, by potem robiąc
echo $sql;
można było ładnie zobaczyć jak zapytanie wygląda?

Edit:
tu masz blad:
$direction_array = array('ASC, DESC');
powinno byc:
$direction_array = array('ASC', 'DESC');


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat
Testy jednostkowe będą?

Raczej nie, przynajmniej nie teraz.

@nospor wychwyciłem ten błąd wcześniej tylko nowej wersji nie wgrałem na serwer, a co do enterów to masz racje po to one są. Ale poprawie to, dzięki za uwagę.

EDIT:
zrobiłem up na nową wersję.

Ten post edytował skowron-line 20.10.2010, 10:52:53


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ja albo jestem jakiś nawiedzony, albo nie wiem co - wszędzie widzę wpływy Kohany smile.gif nie wmówisz mi, że kohanowa klasa Database nie była źródłem natchnienia winksmiley.jpg

Kod przejrzałem i co mi się rzuciło w oczy:
Linia 71.
  1. public function select($columns = '')

Dobrze by było jako domyślną wartość podstawiać '*', a nie ''.

Linia 73.
  1. if(is_object($columns) OR trim($columns) == '*')

Czy to przypadkiem nie wywali błędu gdy $column będzie tablicą? trim() na tablicy?

Linia 389.
  1. public function limit($limit, $offset = '')

Domyślną wartością dla $offset ładniej by wyglądał NULL, a nie pusty ciąg.

Metody execute(), count(), first() tworzą nowe obiekty QueryResults wykonując za każdym razem zapytanie. Czyli by je wykonać i pobrać liczbę rekordów trzeba 2x wykonać to samo zapytanie.

Brak linii bo się numerowanie skończyło biggrin.gif :
  1. public function __toString()
  2. {
  3. return (string) $this->expression;
  4. }

Nie rzutuj zwracanej wartości na stringa. Zwróć dokładnie to, co dostałeś. Wstawiasz inta to zwróć inta, a nie string (WHERE id = 1 jest DUŻO szybsze od WHERE id = '1').

* Teraz zauważyłem: numerowanie linii się rozjeżdża z racji różnicy wielkości czcionek :/
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat
Ja albo jestem jakiś nawiedzony, albo nie wiem co - wszędzie widzę wpływy Kohany
To może się skończyć pobytem w miejscu odosobnienia smile.gif
Cytat
smile.gif nie wmówisz mi, że kohanowa klasa Database nie była źródłem natchnienia
Nie ma zamiaru wmawiać, nie powiem zaglądałem do Kohany ale również do Zend -a i innych FW.
Cytat
Czy to przypadkiem nie wywali błędu gdy $column będzie tablicą? trim() na tablicy?
nie.

Cytat
Domyślną wartością dla $offset ładniej by wyglądał NULL, a nie pusty ciąg.
Oczywiście poprawię to.

Cytat
Metody execute(), count(), first() tworzą nowe obiekty QueryResults wykonując za każdym razem zapytanie. Czyli by je wykonać i pobrać liczbę rekordów trzeba 2x wykonać to samo zapytanie.
Wiele rzeczy wymaga poprawy i ponownego przemyślenia, i to są właśnie te rzeczy pisałem to tak na szybko bo potrzebne mi to było "na wczoraj" stąd też takie babole.


Może coś warto dopisać, coś poprawić questionmark.gif (na pewno do poprawy jest cały where)


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Domyślną wartością dla $offset ładniej by wyglądał NULL, a nie pusty ciąg.
Raczej zero, nie null. Dodatkowo upraszcza to kod, bo nie trzeba przewidywać dwóch sytuacji (z i bez OFFSET).

Niestety jak większość QB i ten spisze się co najwyżej przy najprostszych zapytaniach.
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat
  1. protected function query_compile()


Kompilujesz zapytanie czy je składasz? Bo to cholerna różnica.

Dlaczego protected? Jak chcę pobrać treść zapytania to muszę przekonwertować na stringa :/

Nie mamy klasy QueryResults więc wiele metod nie będzie działać.
Dlaczego QueryBuilder zawiera metody do wykonywania zapytania?
Jak działa u Ciebie wykonywanie "count" ?

Cytat
Czy to przypadkiem nie wywali błędu gdy $column będzie tablicą? trim() na tablicy?

Oczywiście, że wywali
  1. $columns = array('test', 'ziom');
  2. var_dump(is_object($columns) OR trim($columns) == '*');

Notice: Array to string conversion

Ten post edytował wookieb 21.10.2010, 08:10:13


--------------------
Go to the top of the page
+Quote Post
skowron-line
post
Post #9





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat
Kompilujesz zapytanie czy je składasz? Bo to cholerna różnica.
No różnica, różnica.
Cytat
Nie mamy klasy QueryResults więc wiele metod nie będzie działać.

Bo to paździerz i nie warto było tego tu wrzucać.
Cytat
Dlaczego QueryBuilder zawiera metody do wykonywania zapytania?
Zawiera metody które tworzą obiekt QueryResults i tam jest wykonywane zapytanie.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
wookieb
post
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No ale dlaczego? Skoro klasa ma budować zapytania a nie je wykonywać...


--------------------
Go to the top of the page
+Quote Post
skowron-line
post
Post #11





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(wookieb @ 21.10.2010, 09:19:24 ) *
No ale dlaczego? Skoro klasa ma budować zapytania a nie je wykonywać...

Prawda klasa ma budować zapytania. Jak uważasz że powinno to być rozwiązane.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
wookieb
post
Post #12





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tzn, że nie ma mieć nic wspólnego z ich wykonywaniem. Wywal te metody i pobieraj wyniki tylko za pomocą QueryResults.
Nadal nie powiedziałeś jak robisz tego counta.


--------------------
Go to the top of the page
+Quote Post
skowron-line
post
Post #13





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  1. $qb = new QueryBuilder;
  2. //(..)
  3. $results = new QueryResults;
  4. $results->execute($qb);

Nie wpychać w metody QB.

Z count to zwykły num_rows.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
wookieb
post
Post #14





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No i tak jest ok.

A masz jakąś metodą do transformowania zapytania na takie zliczające wszystkie rekordy?


--------------------
Go to the top of the page
+Quote Post
skowron-line
post
Post #15





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(wookieb @ 21.10.2010, 10:05:10 ) *
No i tak jest ok.

Na 100% to poprawie, przy wprowadzaniu następnych zmian, napisz co jeszcze wymaga zmiany.
Cytat
A masz jakąś metodą do transformowania zapytania na takie zliczające wszystkie rekordy?
tzn questionmark.gif robiące COUNT ? takich brak jak na razie.

Ten post edytował skowron-line 21.10.2010, 10:18:27


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:16