reset role; SET log_error_verbosity = terse; SET client_min_messages = notice; -- all orders removed CREATE FUNCTION swallow_orders() RETURNS int AS $$ DECLARE _i int; _uuid text; _vo vorder%rowtype; BEGIN _i := 0; FOR _uuid IN SELECT m.uuid FROM torder m LOOP _vo := fremoveorder(_uuid); _i := _i + 1; END LOOP; RETURN _i; END; $$ LANGUAGE PLPGSQL; -- all mvts removed CREATE FUNCTION swallow_agreements() RETURNS int AS $$ DECLARE _i int; _uuid text; _CHECK_QUALITY_OWNERSHIP int := fgetconst('CHECK_QUALITY_OWNERSHIP'); BEGIN _i := 0; FOR _uuid IN SELECT m.uuid FROM tmvt m, tquality q WHERE m.nat=q.id AND ((q.depository=session_user) OR (_CHECK_QUALITY_OWNERSHIP = 0)) GROUP BY m.uuid LOOP _i := _i + fremovemvt(_uuid); END LOOP; RETURN _i; END; $$ LANGUAGE PLPGSQL; select swallow_orders(); swallow_orders ---------------- 2 (1 row) select swallow_agreements(); swallow_agreements -------------------- 10 (1 row) set role admin; select * from fchangestatemarket(true); NOTICE: market_status OPENED->STOPPING NOTICE: The market is now stopping for clients fchangestatemarket -------------------- STOPPING (1 row) select * from fchangestatemarket(true); NOTICE: market_status STOPPING->CLOSED fchangestatemarket -------------------- CLOSED (1 row) select * from fchangestatemarket(true); NOTICE: market_session = n->n+1 NOTICE: market_status CLOSED->STARTING NOTICE: Run the command: CONTEXT: PL/pgSQL function fchangestatemarket(boolean) line 60 at assignment NOTICE: VACUUM FULL ANALYZE CONTEXT: PL/pgSQL function fchangestatemarket(boolean) line 60 at assignment NOTICE: before starting the market CONTEXT: PL/pgSQL function fchangestatemarket(boolean) line 60 at assignment fchangestatemarket -------------------- STARTING (1 row) select * from fchangestatemarket(true); NOTICE: market_status STARTING->OPENED NOTICE: The market is now opened for clients fchangestatemarket -------------------- OPENED (1 row) select id,market_session,market_status from vmarket; id | market_session | market_status ----+----------------+--------------- 5 | 2 | OPENED (1 row) set role client; select finsertorder('u','b',1000,1000,'a'); finsertorder -------------------------------- (1,2-1,1,5,1000,4,1000,0,0,{}) (1 row) select finsertorder('v','c',1000,1000,'b'); finsertorder -------------------------------- (2,2-2,2,4,1000,6,1000,0,0,{}) (1 row) select qtt_in,qtt_out from fgetquote('w','a',1000,0,'c'); qtt_in | qtt_out --------+--------- 1000 | 1000 (1 row) select finsertorder('w','a',1000,1000,'c'); finsertorder ------------------------------------------------------------------------------------------------------------------------------------------ (3,2-3,3,6,1000,5,1000,1000,1000,"{""[(1, 1, 5, 1000, 4, 1000, 1000),(2, 2, 4, 1000, 6, 1000, 1000),(3, 3, 6, 1000, 5, 1000, 1000)]""}") (1 row) select id,uuid,nb,oruuid,grp,provider,quality,qtt,receiver from vmvt order by uuid; id | uuid | nb | oruuid | grp | provider | quality | qtt | receiver ----+------+----+--------+-----+----------+---------+------+---------- 1 | 2-1 | 3 | 2-3 | 2-1 | w | a | 1000 | u 2 | 2-2 | 3 | 2-1 | 2-1 | u | b | 1000 | v 3 | 2-3 | 3 | 2-2 | 2-1 | v | c | 1000 | w (3 rows) select fremovemvt('2-1'); fremovemvt ------------ 1 (1 row) select fremovemvt('2-2'); fremovemvt ------------ 1 (1 row) select fremovemvt('2-3'); fremovemvt ------------ 1 (1 row) select id,qtt from tquality; id | qtt ----+----- 1 | 0 2 | 0 3 | 0 7 | 0 8 | 0 9 | 0 5 | 0 4 | 0 6 | 0 (9 rows) select finsertorder('u','b',2000,1000,'a'); finsertorder -------------------------------- (4,2-4,1,5,1000,4,2000,0,0,{}) (1 row) select finsertorder('v','c',2000,1000,'b'); finsertorder -------------------------------- (5,2-5,2,4,1000,6,2000,0,0,{}) (1 row) select qtt_in,qtt_out from fgetquote('w','a',500,0,'c'); qtt_in | qtt_out --------+--------- 2000 | 500 (1 row) --select finsertorder('w','a',500,2000,'c'); select qtt_in,qtt_out from fgetquote('w','a',500,2000,'c'); qtt_in | qtt_out --------+--------- 2000 | 500 (1 row) select qtt_in,qtt_out from fexecquote('w',1); qtt_in | qtt_out --------+--------- 2000 | 500 (1 row) select id,uuid,nb,oruuid,grp,provider,quality,qtt,receiver from vmvt order by uuid; id | uuid | nb | oruuid | grp | provider | quality | qtt | receiver ----+------+----+--------+-----+----------+---------+------+---------- 4 | 2-4 | 3 | 2-6 | 2-4 | w | a | 500 | u 5 | 2-5 | 3 | 2-4 | 2-4 | u | b | 1000 | v 6 | 2-6 | 3 | 2-5 | 2-4 | v | c | 2000 | w (3 rows) select fremovemvt('2-4'); fremovemvt ------------ 1 (1 row) select fremovemvt('2-5'); fremovemvt ------------ 1 (1 row) select fremovemvt('2-6'); fremovemvt ------------ 1 (1 row) select fgetquote('w','a',500,0,'b'); fgetquote ----------------------------------------------------------------------------------------------- (0,3,4,0,5,500,1000,500,"{""[(4, 1, 5, 1000, 4, 2000, 1000),(0, 3, 4, 0, 5, 500, 500)]""}",,) (1 row) select finsertorder('w','a',500,1000,'b'); finsertorder ------------------------------------------------------------------------------------------------------- (7,2-7,3,4,1000,5,500,1000,500,"{""[(4, 1, 5, 1000, 4, 2000, 1000),(7, 3, 4, 1000, 5, 500, 500)]""}") (1 row) set role admin; select * from fchangestatemarket(true); NOTICE: market_status OPENED->STOPPING NOTICE: The market is now stopping for clients fchangestatemarket -------------------- STOPPING (1 row) select id,market_session,market_status from vmarket; id | market_session | market_status ----+----------------+--------------- 6 | 2 | STOPPING (1 row) -- market is closed set role client; select fremovemvt('2-7'); fremovemvt ------------ 1 (1 row) select fremovemvt('2-8'); fremovemvt ------------ 1 (1 row) set role admin; select id,qtt from tquality; id | qtt ----+----- 1 | 0 2 | 0 3 | 0 7 | 0 8 | 0 9 | 0 6 | 0 5 | 0 4 | 0 (9 rows) select * from fgetstats(true); _name | cnt -----------------------------+----- number of qualities | 9 number of owners | 7 number of quotes | 0 number of orders | 24 number of movements | 26 number of quotes removed | 5 number of orders removed | 24 number of movements removed | 26 number of agreements | 10 number of orders rejected | 0 agreements with 2 partners | 4 agreements with 3 partners | 6 (12 rows) select * from fgeterrs(true) where cnt != 0; _name | cnt -------+----- (0 rows) select * from fchangestatemarket(true); NOTICE: market_status STOPPING->CLOSED fchangestatemarket -------------------- CLOSED (1 row) select * from fchangestatemarket(true); NOTICE: market_session = n->n+1 NOTICE: market_status CLOSED->STARTING NOTICE: Run the command: CONTEXT: PL/pgSQL function fchangestatemarket(boolean) line 60 at assignment NOTICE: VACUUM FULL ANALYZE CONTEXT: PL/pgSQL function fchangestatemarket(boolean) line 60 at assignment NOTICE: before starting the market CONTEXT: PL/pgSQL function fchangestatemarket(boolean) line 60 at assignment fchangestatemarket -------------------- STARTING (1 row) select * from fchangestatemarket(true); NOTICE: market_status STARTING->OPENED NOTICE: The market is now opened for clients fchangestatemarket -------------------- OPENED (1 row) select id,market_session,market_status from vmarket; id | market_session | market_status ----+----------------+--------------- 9 | 3 | OPENED (1 row) -- merket is opened select * from fgetstats(true); _name | cnt -----------------------------+----- number of qualities | 9 number of owners | 7 number of quotes | 0 number of orders | 24 number of movements | 26 number of quotes removed | 5 number of orders removed | 24 number of movements removed | 26 number of agreements | 10 number of orders rejected | 0 agreements with 2 partners | 4 agreements with 3 partners | 6 (12 rows)