6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-22 21:43:06 +01:00
firebird-qa/tests/bugs/core_0014_test.py

188 lines
5.7 KiB
Python

#coding:utf-8
#
# id: bugs.core_0014
# title: Trigger do it wrong
# decription: Computed by columns inside triggers always=NULL
# tracker_id: CORE-0014
# min_versions: ['2.5.0']
# versions: 2.5
# qmid: None
import pytest
from firebird.qa import db_factory, isql_act, Action
# version: 2.5
# resources: None
substitutions_1 = []
init_script_1 = """"""
db_1 = db_factory(sql_dialect=3, init=init_script_1)
test_script_1 = """
-- 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_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1)
expected_stdout_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 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('>=2.5')
def test_1(act_1: Action):
act_1.expected_stdout = expected_stdout_1
act_1.execute()
assert act_1.clean_expected_stdout == act_1.clean_stdout