Byl vydán Debian 12.11, tj. jedenáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Makepad dospěl do verze 1.0 (𝕏). Jedná se o multiplatformní open source UI framework pro Rust napsaný v Rustu.
Konference OpenAlt 2025 hledá přednášející. Proběhne o víkendu 1. a 2. listopadu na půdě Fakulty informačních technologií VUT v Brně. Témata konference jsou: Otevřený a svobodný software, IoT a Hnutí tvůrců, Vzdělávání, Bezpečnost a soukromí, Otevřená společnost, komunity a data, OpenMobility a další.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 153 (pdf)
Byl publikován květnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Programovací jazyk Rust (Wikipedie) dnes slaví 10 let od vydání verze 1.0. Přímo na oslavě byla vydána nová verze 1.87.0. Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Evropská komise obvinila provozovatele čínské platformy TikTok z porušování pravidel EU kvůli netransparentnosti v reklamě. Komise, která v EU plní i funkci antimonopolního úřadu, to dnes uvedla v tiskové zprávě. TikTok, který patří čínské firmě ByteDance, se může k předběžnému nálezu vyjádřit. Pokud ale podezření komise nevyvrátí, hrozí mu pokuta až do šesti procent z ročního globálního obratu.
Sovereign Tech Agency (Wikipedie), tj. agentura zabezpečující financování svobodného a otevřeného softwaru německou vládou, podpoří GFortran částkou 360 000 eur.
Microsoft hodlá zrušit zhruba tři procenta pracovních míst. Microsoft na konci loňského června zaměstnával kolem 228.000 lidí. Tři procenta z tohoto počtu představují téměř 7000 pracovních míst.
V říjnu loňského roku provedl Úřad pro ochranu hospodářské soutěže (ÚOHS) místní šetření u společnosti Seznam.cz. Krajský soud v Brně tento týden konstatoval, že toto šetření bylo nezákonné.
Ahoj vsem, poteboval bych poresit jednu vec.
Mam tabulku se zaznamy tvorenymi polozkami x a y, ktera vypada nejak takhle
CREATE TABLE "tab" (
x varchar(64);
y varchar(64);
created DATETIME;
last DATETIME;
UNIQUE ( x, y);
)
Krome polozek x a y obsahuje tabulka i dva casove udaje - kdy byl zaznam porizen a kdy byl naposledy kontrolovan.
Samotne zaznamy by mely byt unikatni, nemenne, pri pokusu o vlozeni stejneho zaznamu by melo dojit jen k prepsani znacky 'last'.
Myslim, ze to neni az tak neobvyykla uloha. Je mozne zajistit preklopeni pokusu o vlozeni na update znacky last pomoci triggeru? Primarne bych to chtel v sqlite, ale nebranim se ani reseni v jinych DB.
ano, jde to. A často se to tak dělá.
sqlite: dokumentace a příklady
A mohl bych vedet jak?
Googlit jsem samozrejme zkousel, zkousel jsem par desitek pokusu, ale porad ne a ne prijit na to jak :(
snadno
-- Script started
CREATE TABLE tab
(
x VARCHAR2(64),
y VARCHAR2(64),
created DATETIME,
updated DATETIME,
unique(x, y)
);
-- No error
--
CREATE TRIGGER t_tab_insert
AFTER INSERT ON tab
FOR EACH ROW
BEGIN
UPDATE tab SET created = DATETIME('NOW')
WHERE x = new.x
AND y = new.y;
END;
-- No error
--
CREATE TRIGGER t_tab_update
AFTER UPDATE OF x, y ON tab
FOR EACH ROW
BEGIN
UPDATE tab SET updated = DATETIME('NOW')
WHERE x = new.x
AND y = new.y;
END;
-- No error
--
insert into tab values ('1', '1', null, null);
-- No error
--
insert into tab values ('1', '2', null, null);
-- No error
--
select * from tab;
-- No error
-- x y created updated
-- - - ------------------- -------
-- 1 1 2009-01-28 13:34:54 {null}
-- 1 2 2009-01-28 13:34:55 {null}
update tab set x = '2';
-- No error
--
select * from tab;
-- No error
-- x y created updated
-- - - ------------------- -------
-- 2 1 2009-01-28 13:34:54 2009-01-28 13:35:36
-- 2 2 2009-01-28 13:34:55 2009-01-28 13:35:36
-- Script finished
Jiné DB neš sqlite mají pochopitelně jiné možnosti. Takže by to šlo udělat jendím triggerem 9IF UPDATING... apod.)
ale fakt bude lepší, kdyby sis přešetl nějakou SQL příručku a dokumentaci k tvé DB.
Diky,
tohle jsem taky zkousel, ale me jde o to, aby kdyz udelam znovu insert toho sameho, tak abych misto hlasky o poruseni omezeni docilil ten update.
sqlite> insert into tab values ('1', '1', null, null);
sqlite> insert into tab values ('1', '2', null, null);
sqlite> insert into tab values ('1', '1', null, null);
SQL error: columns x, y are not unique
Dokumentaci mam prectenou horem dolem, jinak bych se neptal :)
U toho REPLACE se rika, ze pre-existing rows that are causing the constraint violation are removed. To mi ale vadi, protoze tim prijdu o puvodni hodnotu sloupce created. To uz mi prislo zajimavejsi to IGNORE ale s tim jsem taky niceho nedosahl.
Idealni by bylo, kdy k tomu ON CONFLICT sla pripojit vlastni procedura nebo by sla odchytit ta chybova vyjimka, ale to tady nejde. Napadlo me i odstranit ten constraint a delat ho rucne v triggeru i kdyz to mi neprijde jako moc efektivni. Myslel jsem, ze by to mohla byt pomerne casta uloha a zajimalo me, jestli na to neni nejaka znama finta, at uz v sqline nebo jine DB.
CREATE TABLE tab
(
x VARCHAR2(64),
y VARCHAR2(64),
unique(x, y) on conflict replace
);
create table tab_audit
(
x VARCHAR2(64),
y VARCHAR2(64),
dml_action varchar2(10),
stamp DATETIME
);
CREATE TRIGGER t_tab_insert
AFTER INSERT ON tab
FOR EACH ROW
BEGIN
insert into tab_audit
values (new.x, new.y, 'INSERT', DATETIME('NOW'));
END;
CREATE TRIGGER t_tab_update
AFTER UPDATE OF x, y ON tab
FOR EACH ROW
BEGIN
insert into tab_audit
values (new.x, new.y, 'UPDATE', DATETIME('NOW'));
END;
insert into tab values ('1', '1');
insert into tab values ('1', '1');
insert into tab values ('1', '2');
select * from tab;
select * from tab_audit;
update tab set x = '2';
select * from tab;
select * from tab_audit;
Aktuální stav dohledáš (outer) joinem, historii selektem. Jo, a nejsou tam indexy.
Anebo to ošetři v klientský aplikaci jako UPSERT.
V Oracle jde toto pomoci merge (tedy neni to uz insert) - definuje se co se ma stat pokud zaznam existuje (typicky update) a co pokud neexistuje (typicky insert). Samozrejme triggerem by to slo i v Oracle.
Dovedu si predstavit, ze se takovy trigger muze nekdy hodit, nicmene mam s tim dost spatne zkusenosti. Pokud insert uz neni ve skutecnosti insert, muze to nekdy byt docela matouci, takze tam kde to jde preferuji explicitni reseni (zmineny merge nebo select a podle vysledku insert/update) - kazdemu je pak z kodu jasne, co se vlastne v tabulce stane.
Tiskni
Sdílej: