Notebook NitroPad V56 od společnosti Nitrokey byl oficiálně certifikován pro Qubes OS verze 4. Qubes OS (Wikipedie) je svobodný a otevřený operační systém zaměřený na bezpečnost desktopu.
Multiplatformní hororová adventura Whispering Willows je na portále GOG.com zdarma, akce trvá do 6. října.
Na čem aktuálně pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za září (YouTube).
Byla vydána nová verze 1.50.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Vypíchnout lze podporu nastavení veth (virtual ethernet) v nmtui.
Byla vydána nová verze 24.1 linuxové distribuce Manjaro (Wikipedie). Její kódové jméno je Xahea. Ke stažení je v edicích GNOME, KDE PLASMA a XFCE.
Mobilní Datovka, tj. svobodná aplikace pro přístup k datovým schránkám pro zařízení s operačním systémem iOS a Android, byla vydána v nové verzi 2.1.0. Nově je pro sestavení potřeba Qt 6.7.
Přesně před 35 lety, 3. října 1989, byla vydána počítačová hra Prince of Persia. Jejím tvůrcem je Jordan Mechner.
Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu zářijový souhrn novinek. Po půl roce od předchozího. Vypíchnout lze nové desky StarPro64, Oz64 a Quartz64-Zero.
Byla zveřejněna ePetice Výzva za strategický přístup k digitalizaci: Kvalita, flexibilita a udržitelnost ve státních projektech.
Japonský Google rozšířil svou kolekci DYI fyzických klávesnic Gboard o klávesnici ve tvaru Möbiovy pásky. Pro zájemce repozitář na GitHubu.
Mějme funkci pro změnu uživatelova hesla:
CREATE OR REPLACE FUNCTION zmen_heslo("login" character varying, domena character varying, stare_heslo character varying, nove_heslo character varying) RETURNS text AS $BODY$DECLARE pocet integer; BEGIN UPDATE uzivatel
SET heslo = md5($4)
WHERE login = $1
AND domena = $2
AND heslo = md5($3);
GET DIAGNOSTICS pocet = ROW_COUNT; IF pocet = 1 THEN RETURN 'Změna hesla pro ' || $1 || '@' || $2 || ' proběhla úspěšně.'; ELSE RAISE EXCEPTION 'Nesprávné heslo, nebo uživatel % neexistuje', $1 || '@' || $2; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER COST 100; ALTER FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) OWNER TO posta; GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO public; GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO posta; GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO posta_zmena_hesla; COMMENT ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) IS 'Změní heslo uživatele.';
Podle dokumentace by ROW_COUNT
mělo vracet počet záznamů dotčených příkazem (updatem) – tedy 1, právě tehdy když uživatel existuje a zadal správě staré heslo.
Problém je, pokud existují dva uživatelské účty se stejným heslem. ROW_COUNT
je v takovém případě 2 a funkce skončí chybou.
Můžu sice změnit podmínku na IF pocet >= 1 THEN, ale to se mi nelíbí. Proč by ROW_COUNT
mělo být dva? Vždyť když ten update pustím ručně, ukáže se mi správně: „1 rows affected
“. Ve WHERE
podmínkách se kontroluje login, doména a staré heslo a takový uživatel je tam jen jeden. Co s tím má společného, že existuje uživatel se stejným heslem (ale jiným jménem nebo doménou)?
Pokud někdo potřebuje širší souvislosti, kompletní zdrojáky jsou tady: mercurial.
Řešení dotazu:
cus
ono ti to fungovat nemuze - mas tam kolizi promenne a sql identifikatoru, kterou sice resis, ale spatne. V plpgsql maji vyssi prioritu plpgsql promenne. Tudiz zapis WHERE ... domena = $2 je fakticky $2 = $2 a tudiz se domena fakticky netestuje. Tak jak jsi to napsal by to fungovalo treba v Oraclu, ale ne v postgresu. To inkriminovane misto uprav (ta sama chyba je i s promennou login.
Pouzij kvalifikatory -
UPDATE uzivatel SET heslo = .. WHERE uzivatel.login = "login" and uzivatel.domena = domena
Pavel
Ahoj,
díky moc, to bylo ono, přidal jsem uzivatel.
a na proměnné se radši odkazuji pomocí názvu v uvozovkách, názvy jsem změnil, aby se nepletly se sloupci tabulky. Dřív stačilo zadat správné heslo a jakéhokoli uživatele… ale naštěstí díky podmínce pocet = 1 to neprošlo.
Franta
Používat úvozvoky není zrovna dobrý nápad - stejně, tak jako používat klíčová slova jako identifikátory. Bohatě postačí označit proměnné nějakým prefixem - mezi komunitou se používá podtržítko (a pokud to je možné, tak používat kvantifikátory (nebo aliasy)).
http://www.postgres.cz/index.php/PL/pgSQL#Doporu.C4.8Den.C3.AD_pro_n.C3.A1vrh_ulo.C5.BEen.C3.BDch_procedur_v_jazyce_PL.2FpgSQL
Tiskni Sdílej: