-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetupDatabase.sql
More file actions
executable file
·131 lines (108 loc) · 4.17 KB
/
setupDatabase.sql
File metadata and controls
executable file
·131 lines (108 loc) · 4.17 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
124
125
126
127
128
129
130
131
DROP TABLE IF EXISTS inprogress;
CREATE TABLE inprogress (PhoneNumber CHAR(10) NOT NULL,
DeviceId VARCHAR(36) NOT NULL,
InitialLatitude REAL NOT NULL,
InitialLongitude REAL NOT NULL,
InitialTime TIMESTAMP NOT NULL,
LatestLatitude REAL NOT NULL,
LatestLongitude REAL NOT NULL,
LatestTime TIMESTAMP NOT NULL,
ConfirmTime TIMESTAMP NOT NULL,
CompleteTime TIMESTAMP NOT NULL,
Status INT NOT NULL,
Version INT NOT NULL DEFAULT 0,
CONSTRAINT inprogress_pkey PRIMARY KEY (PhoneNumber, DeviceId),
CONSTRAINT Check_PhoneNumber CHECK (CHAR_LENGTH(PhoneNumber) = 10));
DROP TABLE IF EXISTS pastpickups;
CREATE TABLE pastpickups (PhoneNumber CHAR(10) NOT NULL,
DeviceId VARCHAR(36) NOT NULL,
InitialLatitude REAL NOT NULL,
InitialLongitude REAL NOT NULL,
InitialTime TIMESTAMP NOT NULL,
LatestLatitude REAL NOT NULL,
LatestLongitude REAL NOT NULL,
LatestTime TIMESTAMP NOT NULL,
ConfirmTime TIMESTAMP NOT NULL,
CompleteTime TIMESTAMP NOT NULL,
Status INT NOT NULL,
Version INT NOT NULL DEFAULT 0,
CONSTRAINT Check_PhoneNumber CHECK (CHAR_LENGTH(PhoneNumber) = 10));
DROP TABLE IF EXISTS vanlocations;
CREATE TABLE vanlocations (VanId INT NOT NULL PRIMARY KEY,
LatestLatitude REAL NOT NULL,
LatestLongitude REAL NOT NULL,
LatestTime TIMESTAMP NOT NULL,
Version INT NOT NULL DEFAULT 0);
#View public schema tables
SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_schema,table_name;
#Check for table existence
SELECT EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'inprogress'
);
#View inprogress table columns
SELECT *
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'inprogress'
#Insert new pickup
INSERT INTO inprogress (PhoneNumber, DeviceId, InitialLatitude, InitialLongitude, InitialTime, LatestLatitude, LatestLongitude, LatestTime, ConfirmTime, CompleteTime, Status)
VALUES ('1234567890', '68753A44-4D6F-1226-9C60-0050E4C00067', 38.9844, 76.4889, '2002-10-02T10:00:00-05:00', 38.9844, 76.4889, '2002-10-02T10:00:00-05:00', DEFAULT, DEFAULT, 0);
SELECT * from inprogress;
#Update existing pickup by phone number
UPDATE inprogress SET LatestLatitude = 38.9855, LatestLongitude = 76.4900, LatestTime = '1111-11-11T11:11:11-05:00'
WHERE PhoneNumber = '1234567890';
SELECT * from inprogress;
#Update existing pickup location by phone number
UPDATE inprogress SET LatestLatitude = 38.9855, LatestLongitude = 76.4900, LatestTime = '1111-11-11T11:11:11-05:00'
WHERE PhoneNumber = '1234567890';
SELECT * from inprogress;
#confirm pickup by phone number
UPDATE inprogress SET Status = 2
WHERE PhoneNumber = '1234567890';
SELECT * from inprogress;
#complete pickup by phone number
UPDATE inprogress SET Status = 3
WHERE PhoneNumber = '1234567890';
SELECT * from inprogress;
(PhoneNumber, DeviceId, InitialLatitude, InitialLongitude, InitialTime, LatestLatitude, LatestLongitude, LatestTime, ConfirmTime, CompleteTime)
VALUES ('1234567890', '68753A44-4D6F-1226-9C60-0050E4C00067', 38.9844, 76.4889, '2002-10-02T10:00:00-05:00', 38.9844, 76.4889, '2002-10-02T10:00:00-05:00', DEFAULT, DEFAULT);
#more pickup into pastpickups table and delete from inprogress table
INSERT INTO pastpickups
SELECT *
FROM inprogress
WHERE PhoneNumber = '1234567890';
DELETE FROM inprogress
WHERE PhoneNumber = '1234567890';
SELECT * from inprogress;
#trigger for telling when a phone number row has been changed
DROP TRIGGER inprogresschange ON inprogress;
CREATE or REPLACE FUNCTION notifyPhoneNumber() RETURNS trigger AS $$
BEGIN
IF TG_OP='DELETE' THEN
EXECUTE FORMAT('NOTIFY notifyphonenumber, ''%s''', OLD.PhoneNumber);
ELSE
EXECUTE FORMAT('NOTIFY notifyphonenumber, ''%s''', NEW.PhoneNumber);
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER inprogresschange AFTER INSERT OR UPDATE OR DELETE
ON inprogress
FOR EACH ROW
EXECUTE PROCEDURE notifyPhoneNumber();
CREATE TRIGGER inprogressdelete AFTER DELETE
ON inprogress
FOR EACH ROW
EXECUTE PROCEDURE notifyPhoneNumber();
#find own pid
SELECT * FROM pg_stat_activity WHERE pid = pg_backend_pid();
SELECT EXISTS(
SELECT 1
FROM pg_trigger
WHERE tgname='inprogresschange')