Oznámení
Nesprávne ošetrenie identifikátora (databázového objektu)
před 9 lety
- slapo
- Člen | 23
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)
před 9 lety
- slapo
- Člen | 23
Nepodarilo sa mi to nijako obísť, vytvoril som issue na https://github.com/…/dibi/issues#… .
před 9 lety
- David Grudl
- Nette Core | 6806
To "[user"]
je skutečně správně?
před 9 lety
- slapo
- Člen | 23
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)
před 9 lety
- David Grudl
- Nette Core | 6806
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, '...
před 9 lety
- slapo
- Člen | 23
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.
před 9 lety
- David Grudl
- Nette Core | 6806
Můžeš mi ten kód poslat emailem?