-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserTransactions.sql
More file actions
292 lines (271 loc) · 7.72 KB
/
Copy pathUserTransactions.sql
File metadata and controls
292 lines (271 loc) · 7.72 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
USE pseudobook;
delimiter $
DROP PROCEDURE IF EXISTS registerUser;
CREATE PROCEDURE registerUser (
OUT userID INTEGER,
firstName VARCHAR(20),
lastName VARCHAR(20),
email VARCHAR(60),
passwordHash CHAR(128),
address VARCHAR(40),
city VARCHAR(20),
state CHAR(2),
zipCode CHAR(5),
telephone CHAR(10),
accountCreationDate DATETIME,
rating INTEGER,
creditCardNumber VARCHAR(16)
)
BEGIN
INSERT INTO `User` (firstName, lastName, email, passwordHash, address, city, state, zipCode, telephone, accountCreationDate, rating)
VALUES (firstName, lastName, email, passwordHash, address, city, state, zipCode, telephone, accountCreationDate, rating);
SET userID = last_insert_id();
INSERT INTO `Page` (userID, postCount, pageType)
VALUES (userID, 0, "pr");
INSERT INTO `UserAccounts` (userID, accountNumber, creditCardNumber)
VALUES (userID, 1, creditCardNumber);
END$
DROP PROCEDURE IF EXISTS sendMessage;
CREATE PROCEDURE sendMessage(
fromID INTEGER,
toID INTEGER,
`subject` CHAR(100),
content TEXT
)
BEGIN
INSERT INTO Messages (fromID, toID, `subject`, content)
VALUES (fromID, toID, `subject`, content);
END$
DROP PROCEDURE IF EXISTS deleteMessage;
CREATE PROCEDURE deleteMessage(
selfID INTEGER,
messageID INTEGER
)
BEGIN
DECLARE frID INTEGER;
DECLARE tID INTEGER;
SELECT fromID into frID FROM Messages WHERE (messageID = Messages.messageID);
SELECT toID into tID FROM Messages WHERE (messageID = Messages.messageID);
IF(selfID = frID OR tID = selfID) THEN
DELETE FROM Messages
WHERE messageID = Messages.messageID;
END IF;
END$
DROP PROCEDURE IF EXISTS createGroup;
CREATE PROCEDURE createGroup(
OUT groupID INTEGER,
groupName VARCHAR(60),
groupType CHAR(2),
ownerID INTEGER
)
BEGIN
DECLARE lastID INTEGER;
INSERT INTO `Group` (groupName, groupType, ownerID)
VALUES (groupName, groupType, ownerID);
SET groupID = last_insert_id();
INSERT INTO `Page` (groupID, postCount, pageType)
VALUES (groupID, 0, "gr");
INSERT INTO GroupUsers (groupID, userID)
VALUES (groupID, ownerID);
END$
DROP PROCEDURE IF EXISTS searchForUser;
CREATE PROCEDURE searchForUser(
userID INTEGER,
firstName VARCHAR(20),
lastName VARCHAR(20)
)
BEGIN
SELECT *
FROM `User`
WHERE ((firstName = `User`.firstName AND lastName = `User`.lastName) OR userID = `User`.userID);
END$
DROP PROCEDURE IF EXISTS addUserToOwnGroup;
CREATE PROCEDURE addUserToOwnGroup(
selfID INTEGER,
groupID INTEGER,
userID INTEGER
)
BEGIN
IF (SELECT EXISTS(SELECT 1 FROM `Group` WHERE (selfID = `Group`.ownerID AND groupID = `Group`.groupID))) THEN
INSERT INTO GroupUsers (groupID, userID)
VALUES (groupID, userID);
END IF;
END$
DROP PROCEDURE IF EXISTS makePost;
CREATE PROCEDURE makePost(
OUT postID INTEGER,
selfID INTEGER,
pageID INTEGER,
pageType CHAR(2),
postDate DATETIME,
postContent VARCHAR(140)
) -- makePost(1, 1, 'gr', now(), 'test content');
BEGIN
DECLARE pgType CHAR(2);
DECLARE ownID INTEGER;
-- SELECT pageType into pgType FROM `Page` WHERE (pageID = `Page`.pageID);
IF (pageType = 'gr') THEN
SELECT groupID into ownID FROM `Page` WHERE (pageID = `Page`.pageID);
ELSE SELECT userID into ownID FROM `Page` WHERE (pageID = `Page`.pageID);
END IF;
IF (pageType = 'gr') THEN
INSERT INTO Post (pageID, postDate, postContent, authorID)
VALUES (pageID, postDate, postContent, selfID);
ELSEIF (pageType = 'pr') THEN
INSERT INTO Post (pageID, postDate, postContent, authorID)
VALUES (pageID, postDate, postContent, selfID);
END IF;
SET postID = last_insert_id();
END$
DROP PROCEDURE IF EXISTS makeComment;
CREATE PROCEDURE makeComment(
OUT commentID INTEGER,
postID INTEGER,
commentDate DATETIME,
content VARCHAR(140),
authorID INTEGER
) -- (1, now(), "blah", 6, "us");
BEGIN
-- DECLARE pgID INTEGER;
-- DECLARE grID INTEGER;
-- DECLARE userExistsInGroup TINYINT;
-- SELECT pageID into pgID FROM Post WHERE (postID = Post.postID) LIMIT 1;
-- IF (authorType = "gr") THEN
-- SELECT groupID into ownID FROM `Page` WHERE (pageID = `Page`.pageID) LIMIT 1;
-- ELSE SELECT userID into ownID FROM `Page` WHERE (pageID = `Page`.pageID) LIMIT 1;
-- END IF;
-- SELECT 1 into userExistsInGroup FROM GroupUsers WHERE (authorID = GroupUsers.userID AND ownID = GroupUsers.groupID) LIMIT 1;
-- IF (userExistsInGroup != 0) THEN
INSERT INTO `Comment`(postID, commentDate, content, authorID)
VALUES (postID, commentDate, content, authorID);
SET commentID = last_insert_id();
-- END IF;
END$
DROP PROCEDURE IF EXISTS `like`;
CREATE PROCEDURE `like`(
parentID INTEGER,
authorID INTEGER,
contentType CHAR(2)
)
BEGIN
IF (contentType = 'cm') THEN
INSERT INTO `Likes` (parentID, authorID, commentID, contentType)
VALUES (parentID, authorID, parentID, contentType);
ELSE
INSERT INTO `Likes` (parentID, authorID, postID, contentType)
VALUES (parentID, authorID, parentID, contentType);
END IF;
END$
DROP PROCEDURE IF EXISTS removeUserFromGroup;
CREATE PROCEDURE removeUserFromGroup(
selfID INTEGER,
groupID INTEGER,
userID INTEGER
)
BEGIN
IF (SELECT EXISTS(SELECT 1 FROM `Group` WHERE (selfID = `Group`.ownerID AND groupID = `Group`.groupID))) THEN
DELETE FROM GroupUsers
WHERE (groupID = GroupUsers.groupID AND userID = GroupUsers.userID);
END IF;
END$
DROP PROCEDURE IF EXISTS unlike;
CREATE PROCEDURE unlike(
parentID INTEGER,
authorID INTEGER,
contentType CHAR(2)
)
BEGIN
DELETE FROM `Likes`
WHERE (
parentID = `Likes`.parentID
AND authorID = `Likes`.authorID
AND contentType = `Likes`.contentType
);
END$
DROP PROCEDURE IF EXISTS removeComment;
CREATE PROCEDURE removeComment(
commentID INTEGER
)
BEGIN
DELETE FROM `Comment`
WHERE (commentID = `Comment`.commentID);
END$
DROP PROCEDURE IF EXISTS removePost;
CREATE PROCEDURE removePost(
postID INTEGER
)
BEGIN
DELETE FROM Post
WHERE postID = Post.postID;
END$
DROP PROCEDURE IF EXISTS modifyPost;
CREATE PROCEDURE modifyPost(
postID INTEGER,
postContent VARCHAR(140)
)
BEGIN
UPDATE Post
SET Post.postContent = postContent
WHERE postID = Post.postID;
END$
DROP PROCEDURE IF EXISTS modifyComment;
CREATE PROCEDURE modifyComment(
commentID INTEGER,
content VARCHAR(140)
)
BEGIN
UPDATE `Comment`
SET `Comment`.content = content
WHERE commentID = `Comment`.commentID;
END$
DROP PROCEDURE IF EXISTS deleteGroup;
CREATE PROCEDURE deleteGroup(
selfID INTEGER,
groupID INTEGER
)
BEGIN
DELETE FROM `Group`
WHERE (groupID = `Group`.groupID AND selfID = `Group`.ownerID);
END$
DROP PROCEDURE IF EXISTS renameGroup;
CREATE PROCEDURE renameGroup(
selfID INTEGER,
groupID INTEGER,
groupName VARCHAR(60)
)
BEGIN
UPDATE `Group`
SET `Group`.groupName = groupName
WHERE (groupID = `Group`.groupID AND selfID = `Group`.ownerID);
END$
DROP PROCEDURE IF EXISTS joinGroup;
CREATE PROCEDURE joinGroup(
selfID INTEGER,
groupID INTEGER
)
BEGIN
DECLARE userExists INTEGER;
SELECT 1 into userExists FROM GroupUsers WHERE(GroupUsers.groupID = groupID AND GroupUsers.userID = selfID);
IF (userExists IS NULL) THEN
INSERT INTO GroupUsers(userID , groupID)
VALUES(selfID, groupID);
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'User is already a member of this group.';
END IF;
END$
DROP PROCEDURE IF EXISTS unjoinGroup;
CREATE PROCEDURE unjoinGroup(
selfID INTEGER,
groupID INTEGER
)
BEGIN
DECLARE userExists INTEGER;
SELECT 1 into userExists FROM GroupUsers WHERE(GroupUsers.groupID = groupID AND GroupUsers.userID = selfID);
IF (userExists IS NOT NULL) THEN
DELETE FROM GroupUsers WHERE(selfID = GroupUsers.userID AND groupID = GroupUsers.groupID);
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'User is not a member of this group.';
END IF;
END$