forked from zanfranceschi/rinha-de-backend-2024-q1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.sql
51 lines (51 loc) · 1.42 KB
/
script.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
CREATE UNLOGGED TABLE Customer
(
Id SERIAL NOT NULL PRIMARY KEY,
"Limit" INT NOT NULL,
Balance INT NOT NULL
);
CREATE UNLOGGED TABLE Balance_Transaction
(
Id SERIAL NOT NULL PRIMARY KEY,
CustomerId INT NOT NULL,
ValueInCents INT NOT NULL,
IsCredit boolean NOT NULL, -- i think here could be a bit, but i had troubles to pass the value in c#
Description VARCHAR(10) NOT NULL,
CreateDate timestamp NOT NULL
);
ALTER TABLE Balance_Transaction ADD CONSTRAINT FK_Balance_Transaction_Customer FOREIGN KEY (CustomerId) References Customer(Id);
CREATE OR REPLACE FUNCTION Stp_DebtTransaction(
CustomerId INT,
Value INT
)
RETURNS TABLE(l int, b int)
LANGUAGE 'plpgsql'
AS $$
BEGIN
RETURN QUERY
UPDATE Customer
SET Balance = Balance - Value
WHERE Id = CustomerId AND (Balance - Value) >= -"Limit"
RETURNING Customer."Limit", Customer.Balance;
END;
$$;
CREATE OR REPLACE FUNCTION Stp_CreditTransaction(
CustomerId INT,
Value INT
)
RETURNS TABLE(l int, b int)
LANGUAGE 'plpgsql'
AS $$
BEGIN
RETURN QUERY
UPDATE Customer
SET Balance = Balance + Value
WHERE Id = CustomerId
RETURNING Customer."Limit", Customer.Balance;
END;
$$;
INSERT INTO Customer ("Limit",Balance) VALUES (100000, 0);
INSERT INTO Customer ("Limit",Balance) VALUES (80000, 0);
INSERT INTO Customer ("Limit",Balance) VALUES (1000000, 0);
INSERT INTO Customer ("Limit",Balance) VALUES (10000000, 0);
INSERT INTO Customer ("Limit",Balance) VALUES (500000, 0);