mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 13:33:07 +01:00
182 lines
5.4 KiB
Python
182 lines
5.4 KiB
Python
#coding:utf-8
|
|
|
|
"""
|
|
ID: issue-333
|
|
ISSUE: 333
|
|
JIRA: CORE-14
|
|
TITLE: Trigger do it wrong
|
|
DESCRIPTION: Computed by columns inside triggers always=NULL
|
|
FBTEST: bugs.core_0014
|
|
"""
|
|
|
|
import pytest
|
|
from firebird.qa import *
|
|
|
|
db = db_factory()
|
|
|
|
test_script = """
|
|
-- Works OK on 1.5.6 and up to 4.0.0.
|
|
create domain dom_datum_vreme as timestamp not null;
|
|
create domain dom_dokid as varchar(20) not null;
|
|
create domain dom_jid as integer;
|
|
create domain dom_kolicina as integer default 0;
|
|
create domain dom_naziv as varchar(100) not null;
|
|
create domain dom_novac as double precision default 0;
|
|
create domain dom_rabat as float default 0;
|
|
create domain dom_status as integer default 0;
|
|
commit;
|
|
|
|
create table ulaz_master
|
|
(
|
|
ulzid dom_jid not null,
|
|
datum dom_datum_vreme not null,
|
|
broj_racuna dom_dokid not null,
|
|
dobid dom_jid not null,
|
|
dobavljac dom_naziv not null,
|
|
napid dom_jid not null,
|
|
nacin_placanja dom_naziv not null,
|
|
datumprispeca timestamp, -- dom_datum_vreme null ,
|
|
vrednost dom_novac default 0,
|
|
rvrednost dom_novac default 0,
|
|
status dom_status default 0,
|
|
constraint pk_ulaz_master primary key (ulzid)
|
|
);
|
|
|
|
create table ulaz_detalji
|
|
(
|
|
ulzid dom_jid not null,
|
|
artid dom_jid not null,
|
|
artikal dom_naziv not null,
|
|
kolicina dom_kolicina default 0 not null,
|
|
cena dom_novac default 0 not null,
|
|
rabat dom_rabat default 0 not null,
|
|
ukupno computed by (kolicina * cena),
|
|
vratio dom_kolicina default 0,
|
|
constraint pk_ulaz_detalji primary key (ulzid, artid)
|
|
);
|
|
|
|
|
|
set term ^;
|
|
create trigger trig_ulaz_detalji_ai for ulaz_detalji
|
|
active after insert position 0
|
|
as
|
|
begin
|
|
|
|
update ulaz_master u set u.vrednost = u.vrednost + new.ukupno
|
|
where u.ulzid = new.ulzid;
|
|
|
|
update ulaz_master u set u.rvrednost = u.rvrednost + (1 - new.rabat/100) * new.ukupno
|
|
where u.ulzid = new.ulzid;
|
|
|
|
end
|
|
^
|
|
set term ;^
|
|
commit;
|
|
|
|
-- this trigger sets fiedls to null on rc8.
|
|
-- on rc6 it works as it should.
|
|
|
|
insert into ulaz_master(ulzid, datum, broj_racuna, dobid, dobavljac, napid, nacin_placanja)
|
|
values(1000, '19.03.2016 12:01:03', 'qwerty123', 78966, 'foo-bar', 32101, 'asd-fgh-jkl' );
|
|
/*
|
|
create domain dom_datum_vreme as timestamp not null;
|
|
create domain dom_dokid as varchar(20) not null;
|
|
create domain dom_jid as integer;
|
|
create domain dom_kolicina as integer default 0;
|
|
create domain dom_naziv as varchar(100) not null;
|
|
create domain dom_novac as double precision default 0;
|
|
create domain dom_rabat as float default 0;
|
|
create domain dom_status as integer default 0;
|
|
|
|
datum dom_datum_vreme not null,
|
|
broj_racuna dom_dokid not null,
|
|
dobid dom_jid not null,
|
|
dobavljac dom_naziv not null,
|
|
napid dom_jid not null,
|
|
nacin_placanja dom_naziv not null,
|
|
*/
|
|
|
|
set list on;
|
|
set count on;
|
|
|
|
select
|
|
ulzid, datum, broj_racuna, dobid, dobavljac, napid, nacin_placanja, datumprispeca
|
|
,cast(vrednost as numeric(10,2)) as vrednost
|
|
,cast(rvrednost as numeric(10,2)) as rvrednost
|
|
,status
|
|
from ulaz_master;
|
|
|
|
insert into
|
|
ulaz_detalji(ulzid, artid, artikal, kolicina, cena, rabat, vratio)
|
|
values(1000, 1000, 'liste', 19, 7, 30, 0);
|
|
|
|
select
|
|
ulzid, artid, artikal, kolicina,
|
|
cast(cena as numeric(12,2)) as cena,
|
|
rabat,
|
|
cast(ukupno as numeric(12,2)) as ukupno,
|
|
vratio
|
|
from ulaz_detalji;
|
|
|
|
select
|
|
ulzid, datum, broj_racuna, dobid, dobavljac, napid, nacin_placanja, datumprispeca
|
|
,cast(vrednost as numeric(10,2)) as vrednost
|
|
,cast(rvrednost as numeric(10,2)) as rvrednost
|
|
,status
|
|
from ulaz_master;
|
|
|
|
"""
|
|
|
|
act = isql_act('db', test_script)
|
|
|
|
expected_stdout = """
|
|
ULZID 1000
|
|
DATUM 2016-03-19 12:01:03.0000
|
|
BROJ_RACUNA qwerty123
|
|
DOBID 78966
|
|
DOBAVLJAC foo-bar
|
|
NAPID 32101
|
|
NACIN_PLACANJA asd-fgh-jkl
|
|
DATUMPRISPECA <null>
|
|
VREDNOST 0.00
|
|
RVREDNOST 0.00
|
|
STATUS 0
|
|
|
|
|
|
Records affected: 1
|
|
Records affected: 1
|
|
|
|
ULZID 1000
|
|
ARTID 1000
|
|
ARTIKAL liste
|
|
KOLICINA 19
|
|
CENA 7.00
|
|
RABAT 30
|
|
UKUPNO 133.00
|
|
VRATIO 0
|
|
|
|
|
|
Records affected: 1
|
|
|
|
ULZID 1000
|
|
DATUM 2016-03-19 12:01:03.0000
|
|
BROJ_RACUNA qwerty123
|
|
DOBID 78966
|
|
DOBAVLJAC foo-bar
|
|
NAPID 32101
|
|
NACIN_PLACANJA asd-fgh-jkl
|
|
DATUMPRISPECA <null>
|
|
VREDNOST 133.00
|
|
RVREDNOST 93.10
|
|
STATUS 0
|
|
|
|
Records affected: 1
|
|
"""
|
|
|
|
@pytest.mark.version('>=3')
|
|
def test_1(act: Action):
|
|
act.expected_stdout = expected_stdout
|
|
act.execute()
|
|
assert act.clean_stdout == act.clean_expected_stdout
|
|
|