pear nestedset

Alone

Новичок
pear nestedset

Доброго дня.
Кто работал с данным классом?
подскажите с чего начинать???
вот что я делаю:
PHP:
require_once ("DB/NestedSet.php");
require_once ("DB/NestedSet/Output.php");

$params=array(
    'STRID'     => 'id',
    'ROOTID'    => 'rootid',
    'l'         => 'l',
    'r'         => 'r',
    'STREH'     => 'norder',
    'parent'    => 'parent',
    'LEVEL'     => 'level',
    'STRNA'     => 'name'
);

$dbHost = "localhost";
$dbName = "test";
$dbPort = "5432";
$dbUser = "postgres";
$dbPasswd="";

$dsn = "pgsql://$dbUser:$dbPasswd@$dbHost/$dbName";
$db_driver = 'DB';

$ntree=& DB_NestedSet::factory($db_driver, $dsn, $params);
$ntree->setAttr(array
        (
        'node_table' => 'tovar',
        'lock_table' => 'locks'
        )
    );

$values['STRNA'] ='rootnode';
$ntree->createRootNode($values, false, true);
$ntree->createSubNode($parent, array('STRNA' => 'Pads,Sattelunterlagen'));
И вот что получаю:
Fatal error: DB Error: unknown error in /usr/share/pear/PEAR.php on line 754

Просто суперский дебаг :(

-~{}~ 18.03.05 04:05:

Так... частично разобрался...
У класса DB_NestedSet при формировании SQl запроса используется метод _values2InsertQuery($values, $addval) который квотит все подряд... и имена полей и значения, без разбору, интовые они или стринговые... :( что есть совсем неправильно... Постгрес этого неприемлет (незнаю как другие БД)
У кого какие мысли на этот счет?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Re: pear nestedset

Автор оригинала: Alone
Так... частично разобрался...
У класса DB_NestedSet при формировании SQl запроса используется метод _values2InsertQuery($values, $addval) который квотит все подряд... и имена полей и значения, без разбору, интовые они или стринговые... :( что есть совсем неправильно... Постгрес этого неприемлет (незнаю как другие БД)
У кого какие мысли на этот счет?
Мысль простая: выбрось каку. Этот класс похоже никто никогда ни с чем кроме мыскля не тестировал. Там к тому же до хрена плясок с бубном, которые нужны только в случае мыскля (причём мыскля без транзакций).

Проще написать функции на pl/pgsql, которые будут делать всё то же самое. Ну или если есть желание, то можешь открыть баги на все найденные несовместимости и ждать, пока их починят.
 

Alone

Новичок
Re: Re: pear nestedset

BОТ 6/\9I :(
Я так и думал, поглядывая на код...
Ладно, подойдем к этому вопросу с другой стороны:
 

Frol

Новичок
приведенный код нигде -- даже в мускуле -- работать не будет.
 

Frol

Новичок
включи ВСЕ ошибки и заметь, что переменная parent не определена.
 

sokol

Zavolga.Net
Во первых данный кдасс в стадии бета, а в стабильной версии нет очень полезных и нужных вещей.

Для нормальной работы я его правил сам. Квотит он действительно неправильно (даже для MySQL), названия полей надо все таки заключать в `` вместо ''.
 

Alone

Новичок
Фигушки... я слил 1.3.6 - проблема имеет место быть.
хотя в багтреке речь шла за 1.3.4
По идее таки должны были исправить, но я то не "от фонаря" говорю!
 

cryo

Guest
Re: Re: pear nestedset

Автор оригинала: Sad Spirit
Мысль простая: выбрось каку.
Есть какие-нить альтернативы кроме изобретать самому?
(после трех часов плясок с бубнов так и не удалось запустить ни 1.2.4 ни 1.3.6 на Firebird/php5).

То PEAR::error вылетают там где их быть не должно, квотинг полей какой-то корявый - Insert'ы не идут и.т.п.
 

Alone

Новичок
Предлагаю вынести в отдельный топик, и таки изобрести левосипед.
 

su1d

Старожил PHPClubа
Alone
ну зачем же тебе под Postgres'ом нужна какая-то библиотека для вложенных множеств?
ведь у тебя хранимые процедуры есть! их и используй.
обработка древа должна полностью вестись внутри СУБД.
 

cryo

Guest
Автор оригинала: su1d
Alone

обработка древа должна полностью вестись внутри СУБД.
Так то оно так конечно, если привязываешься к определенной СУБД. А если нужна какая-либо минимальная переносимость или СУБД является MySQL - от всех вкусностей приходится отказываться и работать только лишь SQL-92. Тут то и приходится искать классы для манипуляций на клиенте.
 

Alone

Новичок
именно к этому и веду...


su1d
И что мне в хранимки пихать, если все выборки дерева/его_элементов проходят в 1-2 запроса???

Мне помощь нужна единственно в чем, так это построить корректный алгоритм переноса ветки/узла в произвольное место.
остальное я уже сделал.
 

su1d

Старожил PHPClubа
cryo
в том-то и дело, что MySQL -- чуть ли не единственная сейчас, которая не поддерживает хранимые процедуры. =)
ну, может быть ещё SQLite...
все остальные "взрослые" СУБД уже давно держат это за стандарт.

-~{}~ 26.03.05 18:54:

Alone
ну ты начинай делать.
когда/если будут проблемы -- пиши на форум.
кто-нибудь да поможет.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: cryo
Так то оно так конечно, если привязываешься к определенной СУБД. А если нужна какая-либо минимальная переносимость или СУБД является MySQL - от всех вкусностей приходится отказываться и работать только лишь SQL-92. Тут то и приходится искать классы для манипуляций на клиенте.
ты неверно понимаешь слово "переносимость". а если СУБД является MySQL, то бери DB_NestedSet, с мысклём-то он вроде как должен работать.
 
Сверху