-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathall.sql
More file actions
123 lines (110 loc) · 3.67 KB
/
Copy pathall.sql
File metadata and controls
123 lines (110 loc) · 3.67 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
CREATE TABLE library (
name CHAR(50),
address CHAR(100),
tel char(20),
PRIMARY KEY (name)
);
CREATE TABLE customers (
CID INT,
name CHAR (50),
address CHAR (100),
tel char(20),
PRIMARY KEY (CID)
);
CREATE TABLE items(
IID INT,
GID INT,
available BOOLEAN,
item_type CHAR (20),
name CHAR(70),
author CHAR (50),
item_year INT,
loanduration INT,
reservable BOOLEAN,
homelib CHAR(50) REFERENCES library(homelib),
PRIMARY KEY (IID)
);
CREATE TABLE loans (
loanID INT,
IID INT REFERENCES items(IID),
CID INT REFERENCES customers(CID),
Sdate DATE,
Ddate DATE,
returned boolean,
PRIMARY KEY (loanID)
);
CREATE TABLE reserve (
RID INT,
CID INT REFERENCES customers(CID),
GID INT,
DelivLib CHAR (50),
resdate DATE,
quepos INT,
PRIMARY KEY (RID)
);
CREATE TABLE fee (
reason CHAR (20),
transID INT,
amount FLOAT,
status CHAR(40) CHECK(status IN ('paid','pending')),
PRIMARY KEY (reason, transID)
);
CREATE TABLE returning (
loanID INT REFERENCES loans(loanID),
retdate DATE,
retlib CHAR (50) REFERENCES library(retlib),
PRIMARY KEY (loanID)
);
-- ---------------
create trigger loansetting2
after insert on loans
for each row
/* WHEN ((Select available from items where IID=NEW.IID)=1) */
begin
delete from loans where IID= NEW.IID AND CID=NEW.CID and ((Select available from items where IID=NEW.IID)=0);
update loans set Sdate=(SELECT date('now')) where CID=NEW.CID and IID=NEW.IID AND ((Select available from items where IID=NEW.IID)=1);
update loans set Ddate= (select date(julianday('now')+(select loanduration from items where items.IID=NEW.IID))) where CID=NEW.CID and IID=NEW.IID and ((Select available from items where IID=NEW.IID)=1);
update loans set loanID=((Select count (*) from loans)) where CID=NEW.CID and IID=NEW.IID and ((Select available from items where IID=NEW.IID)=1);
update items set available= 0 where items.IID=NEW.IID and ((select returned from loans where IID=new.IID)=0);
end;
-- --------------------
create view itemstatus as
select GID, reservable
from items;
create trigger rs1
after insert on reserve
for each row
begin
update reserve set RID=(Select count (*) from reserve) where CID=NEW.CID and GID=NEW.GID;
update reserve set quepos=((Select count (*) from reserve where GID=NEW.GID)) where CID=NEW.CID and GID=NEW.GID and ((Select reservable from itemstatus where GID=NEW.GID)=1);
update reserve set resdate = (Select date('now')) where CID=NEW.CID and GID=NEW.GID;
delete from reserve where GID= NEW.GID AND CID=NEW.CID and ((Select reservable from itemstatus where GID=NEW.GID)=0);
end;
create trigger rs2
after insert on reserve
for each row
when ((Select reservable from itemstatus where GID=NEW.GID)=1)
begin
insert into fee values('Reservation', (Select count (*) from reserve),1,'pending');
end;
-- --------------------------
create trigger ret1
after insert on returning
for each row
begin
update returning set retdate=(SELECT date('now')) where loanID=NEW.loanID;
update items set available=1 where IID= (select IID from loans where loans.loanID=NEW.loanID);
update loans set returned=1 where loans.loanID=NEW.loanID;
end;
create trigger ret2
after insert on returning
for each row
when(abs((select julianday('now')) - (select julianday(Sdate) from loans where loanID=NEW.loanID))> (select loanduration from items where IID=(select IID from loans where loanID=NEW.loanID)))
begin
insert into fee values('Delayed loan',NEW.loanID,1*(abs((select julianday('now')) - (select julianday(Sdate) from loans where loans.loanID=NEW.loanID)) - (select loanduration from items where IID= (select IID from loans where loans.loanID=NEW.loanID))),'pending');
update loans set returned=1 where loans.loanID=NEW.loanID;
end;
.mode csv
.import items.csv items
.import library.csv library
.import customers.csv customers