drzewka for bsp |
drzewka for bsp |
10.07.2003, 18:56:00
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) |
dobra, mam kod na postgresa i dziala z tym usuwanie bardzo slicznie
Zrobile pare przemian. Zmienilem typ na BIGINT oraz pozmienialem nazwy na angielskie. Teraz jeszcze poproboje sie pobawic w przenoszenie :? i takie tam. |
|
|
11.07.2003, 22:22:19
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) |
a co powiecie na to?
Kod --mkdir, tworzy katalog To jest kod w sql'u i plpgsql'u zoptymalizowany dla postgres'q ale mozna z niego biorac przyklad zrobic inny, np. php.
CREATE FUNCTION mkdir (VARCHAR(100), BIGINT) RETURNS BOOLEAN AS ' INSERT INTO categories (name, parent) VALUES ($1, $2); INSERT INTO asociations (first_id, second_id, depth) SELECT first_id, (SELECT id FROM categories WHERE name = $1 AND parent = $2), depth + 1 FROM asociations WHERE second_id = $2; INSERT INTO asociations (first_id, second_id, depth) VALUES((SELECT id FROM categories WHERE name = $1 AND parent = $2), (SELECT id FROM categories WHERE name = $1 AND parent = $2), 0); SELECT true; ' LANGUAGE "sql"; --get_path, pobiera sciezke do katalogu CREATE FUNCTION get_path (BIGINT) RETURNS TEXT AS ' DECLARE cid ALIAS FOR $1; path TEXT; item RECORD; BEGIN path := '/'; FOR item IN SELECT c.name FROM categories c, asociations a WHERE c.id = a.first_id AND a.second_id = cid ORDER BY a.depth DESC LOOP path := path || item.name || '/'::TEXT; END LOOP; RETURN path; END; ' LANGUAGE "plpgsql"; Ps. kod jest w znacznikach code bo w sql'u brzydko wygladal |
|
|
12.07.2003, 15:43:43
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) |
MAM FUNKCJE MV !!!
Wow, ale sie podniecilem... Ale mysle, ze warto. Bo w koncu mam funkcje mv (do przenoszenia)!!! Kod CREATE FUNCTION mv(BIGINT, BIGINT) RETURN BOOLEAN AS '
DECLARE cid ALIAS FOR $1; np ALIAS FOR $2; temp1 RECORD; temp2 RECORD; BEGIN FOR temp1 IN SELECT MAX(depth) AS max, second_id FROM asociations WHERE first_id = cid GROUP BY second_id LOOP DELETE FROM asociations WHERE second_id = temp1.second_id AND depth > temp1.max; END LOOP; UPDATE categories SET parent = np WHERE id = cid; INSERT INTO asociations (first_id, second_id, depth) SELECT first_id, cid, depth + 1 FROM asociations WHERE second_id = np; FOR temp2 IN SELECT second_id, depth FROM asociations WHERE first_id = cid AND depth <> 0 LOOP INSERT INTO asociations (first_id, second_id, depth) SELECT first_id, temp2.second_id, depth + temp2.depth FROM asociations WHERE second_id = cid AND depth <> 0; END LOOP; RETURN true; END; ' LANGUAGE "plpgsql"; |
|
|
13.07.2003, 14:57:06
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) |
Troche mnie nie bedzie od jutra wiec jakby ktos chcial zobaczyc co do tej pory wyskrobalem to ponizej podaje link do wyniku polecenia `pg_dump -f php_pl_dump.sql -d -D -O -R -x postgres`. Zrobione jest uzytkownika php_pl i dla niego tworzy "schema" (jak to jest po polsku?), wiec jezeli ktos by chcial uruchomic to trzeba najpierw dodac takiego usera a potem wystarotwac ten kod. Link do kou: http://adamjabol.w.interia.pl/php_pl_dump.sql
Ps. skrypt trzeba troche przerobic i pierwsze instrukcje (create function plpgsql_call_handler i create language wykonac jako admin) Ps.2 Dla zgodnosci z adodb nalezy zmienic metode uzyskiwania auto_increment z default nextval('xxx'); na SERIAL. Jak wroce to to zmienie. |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 20:17 |