Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před rokem

slapo
Člen
Registrovaný: 16. 7. 2009
Příspěvky: 24

Nesprávne ošetrenie identifikátora (databázového objektu)

Dobrý deň,

mám takúto query:

WITH RECURSIVE user_privileges AS (
        SELECT
                ur1."id",
                ur1.id_user_parent,
                ur1.login,
                1 AS sort_order
        FROM
                "[user"] ur1
        WHERE
                ur1.login='guest'
        UNION
        SELECT
                ur2."id",
                ur2.id_user_parent,
                ur2.login,
                2 AS sort_order
        FROM
                "[user"] ur2
                JOIN
                user_privileges ups1
                ON(ur2.id_user_parent=ups1."id" OR ur2."id"=ups1.id_user_parent)
        WHERE
                ur2.login<>'guest'
)
SELECT
        *
FROM
        user_privileges
ORDER BY
        sort_order,
        "id",
        "id_user_parent"
;

ktorá je výsledkom volania dibi::test($sql, UserModel::$user_login, UserModel::$user_login), kde $sql je:

$sql = '
WITH RECURSIVE user_privileges AS (
        SELECT
                ur1.[id],
                ur1.id_user_parent,
                ur1.login,
                1 AS sort_order
        FROM
                [' . self::TABLE_USERS . '] ur1
        WHERE
                ur1.login=%s
        UNION
        SELECT
                ur2.[id],
                ur2.id_user_parent,
                ur2.login,
                2 AS sort_order
        FROM
                [' . self::TABLE_USERS . '] ur2
                JOIN
                user_privileges ups1
                ON(ur2.id_user_parent=ups1.[id] OR ur2.[id]=ups1.id_user_parent)
        WHERE
                ur2.login<>%s
)
SELECT
        *
FROM
        user_privileges
ORDER BY
        sort_order,
        [id],
        [id_user_parent]
';

a hodnota UserModel::$user_login je guest.

Problém je, že Dibi neprepíše [user] na "user", ako je treba, ale na "[user"].

Pri použití %n v $sql namiesto [user], dostanem "[user]" namiesto "user" (vtedy volám dibi::test($sql, self::TABLE_USERS, UserModel::$user_login, self::TABLE_USERS, UserModel::$user_login)). V tomto prípade dostanem výnimku SQL translate error.

Databáza: PostgreSQL.
Dibi: Dibi 1.3-dev (revision 550be3b released on 2010–04–06).

Myslím, že by to mohla byť chyba v Dibi. Môže niekto potvrdiť?
Ako by sa dala obísť alebo ako by to išlo spraviť inak?

Z nejakého dôvodu som to asi dal do zlého (pod)fóra, moderátori, prosím prehoďte to do Řešení potíží. Zdá sa, že sám to zmeniť nemôžem.

Editoval slapo (14. 4. 2010 15:12)

 

#2 před rokem

slapo
Člen
Registrovaný: 16. 7. 2009
Příspěvky: 24

Re: Nesprávne ošetrenie identifikátora (databázového objektu)

Nepodarilo sa mi to nijako obísť, vytvoril som issue na http://github.com/…/dibi/issues#… .

 

#3 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5563

Re: Nesprávne ošetrenie identifikátora (databázového objektu)

To "[user"] je skutečně správně?

 

#4 před rokem

slapo
Člen
Registrovaný: 16. 7. 2009
Příspěvky: 24

Re: Nesprávne ošetrenie identifikátora (databázového objektu)

David Grudl napsal(a):

To "[user"] je skutečně správně?

Práve to je tá chyba, má to byť len "user".

Ak ale myslíte, či to je správne prepísané, tak áno, je.

Editoval slapo (24. 5. 2010 14:48)

 

#5 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5563

Re: Nesprávne ošetrenie identifikátora (databázového objektu)

Co je obsahem self::TABLE_USERS?

Každopádně pro vkládání identifikátorů existuje modifikátor %n, takže spíš než ... FROM [' . self::TABLE_USERS . '] ur1 ... by tam mělo být ... FROM %n ur1', self::TABLE_USERS, '...

 

#6 před rokem

slapo
Člen
Registrovaný: 16. 7. 2009
Příspěvky: 24

Re: Nesprávne ošetrenie identifikátora (databázového objektu)

David Grudl napsal(a):

Co je obsahem self::TABLE_USERS?

Každopádně pro vkládání identifikátorů existuje modifikátor %n, takže spíš než ... FROM [' . self::TABLE_USERS . '] ur1 ... by tam mělo být ... FROM %n ur1', self::TABLE_USERS, '...

Obsahom self::TABLE_USERS je reťazec user.
Modifikátor %n som skúšal použiť, ale neúspešne. Popis chyby pri použití identifikátora %n je v prvom poste v tomto vlákne.

 

#7 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5563

Re: Nesprávne ošetrenie identifikátora (databázového objektu)

Můžeš mi ten kód poslat emailem?

 

Zápatí