-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sql
More file actions
242 lines (198 loc) · 6.28 KB
/
setup.sql
File metadata and controls
242 lines (198 loc) · 6.28 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
USE master;
-- TODO add premision for each scheme
IF DB_ID('QAIDA') IS NOT NULL DROP DATABASE QAIDA;
IF @@ERROR = 3702
RAISERROR ('Database cannot be dropped because there are still open connections.', 127, 127)
WITH NOWAIT, LOG;
CREATE DATABASE QAIDA;
GO
USE QAIDA;
GO
CREATE SCHEMA SIJL AUTHORIZATION dbo;
GO
CREATE SCHEMA DISCUSS AUTHORIZATION dbo;
GO
CREATE TABLE SIJL.USERS
(
id INT IDENTITY (1, 1) NOT NULL,
password_hash BINARY(64) NOT NULL,
first_name VARCHAR(30) NOT NULL,
last_name VARCHAR(30) NOT NULL,
email VARCHAR(254) NOT NULL UNIQUE,
username VARCHAR(64) NOT NULL UNIQUE,
age TINYINT NOT NULL,
CONSTRAINT [PK_SIJL_UserID] PRIMARY KEY CLUSTERED (id ASC)
)
ALTER TABLE SIJL.USERS
ADD github varchar(60) NULL;
ALTER TABLE SIJL.USERS
ADD home VARCHAR(300) NULL;
ALTER TABLE SIJL.USERS
ADD about NVARCHAR(1500) NULL;
-- TODO check in the backend for size
ALTER TABLE SIJL.USERS
ADD twitter VARCHAR(40) NULL;
ALTER TABLE SIJL.USERS
ADD date_joined DATE NOT NULL DEFAULT GETDATE();
CREATE TABLE DISCUSS.ARGUMENTS
(
id INT IDENTITY (1, 1) NOT NULL,
sijl_id INT NOT NULL,
in_response INT NULL,
argument NVARCHAR(MAX) NOT NULL, -- TODO constraint size in the backend
title NVARCHAR(200) NULL,
argument_start SMALLINT NULL, -- argument start point [0-index] for responses
argument_end SMALLINT NULL, -- argument end point [0-index] for responses
CONSTRAINT [PK_DISCUSS_ArgumentID] PRIMARY KEY CLUSTERED (id ASC),
FOREIGN KEY (in_response) REFERENCES DISCUSS.ARGUMENTS (id),
FOREIGN KEY (sijl_id) REFERENCES SIJL.USERS (id),
CONSTRAINT [CHECK1] CHECK
(
(argument_end IS NOT NULL
AND argument_start IS NOT NULL
AND in_response IS NOT NULL
AND argument_end > 0
)
OR
(argument_start IS NULL
AND argument_end IS NULL
AND in_response IS NULL)
)
)
ALTER TABLE DISCUSS.ARGUMENTS
ADD date DATE NOT NULL DEFAULT GETDATE();
CREATE TABLE DISCUSS.TAGS
(
id INT IDENTITY (1, 1) NOT NULL,
tag_name NVARCHAR(200) UNIQUE, -- TODO Constraint in the backend side
CONSTRAINT [PK_DISCUSS_TagsID] PRIMARY KEY CLUSTERED (id ASC),
)
CREATE TABLE DISCUSS.ARGUMENTS_TAGS
(
id INT IDENTITY (1, 1) NOT NULL,
argument_id INT NOT NULL,
tag_id INT NOT NULL,
UNIQUE (argument_id, tag_id),
CONSTRAINT [PK_DISCUSS_ArgumentTagsID] PRIMARY KEY CLUSTERED (id ASC),
FOREIGN KEY (argument_id) REFERENCES DISCUSS.ARGUMENTS (id),
FOREIGN KEY (tag_id) REFERENCES DISCUSS.TAGS (id),
)
CREATE TABLE DISCUSS.VOTES
(
id INT IDENTITY (1, 1) NOT NULL,
sijl_id INT NOT NULL,
argument_id INT NOT NULL,
UNIQUE (sijl_id, argument_id),
CONSTRAINT [PK_DISCUSS_Vote_ID] PRIMARY KEY CLUSTERED (id ASC),
FOREIGN KEY (argument_id) REFERENCES DISCUSS.ARGUMENTS (id),
FOREIGN KEY (sijl_id) REFERENCES SIJL.USERS (id),
)
-- CREATE TABLE DISCUSS.VOTES (
-- argument_id int NOT NULL,
-- CONSTRAINT []
-- )
-- SELECT
-- first_name,
-- last_name,
-- username,
-- github,
-- home,
-- about,
-- twitter
-- FROM
-- SIJL.USERS
-- WHERE
-- username = 'saleh'
-- UPDATE
-- SOMEONE
-- SET
-- SOMEONE.first_name = @firstname,
-- SOMEONE.last_name = @lastname,
-- SOMEONE.github = @github,
-- SOMEONE.home = @home,
-- SOMEONE.about = @about,
-- SOMEONE.twitter = @twitter,
-- FROM
-- SIJL.USERS as SOMEONE
-- WHERE
-- SOMEONE.username = 'saleh'
-- INSERT INTO SIJL.USERS(hash, first_name, last_name, email,username,age) VALUES (HashBytes('SHA2_512', "Test" ), "Test" , "Test" , "Test" , "Test" , 31 )
-- stmt, err := s.DB.Prepare(``)
-- INSERT INTO DISCUSS.ARGUMENTS (sijl_id, in_response, argument, argument_start, argument_end) VALUES ()
-- INSERT INTO DISCUSS.ARGUMENTS_TAGS (id, argument_id, tag_id) VALUES ()
-- INSERT INTO DISCUSS.TAGS(id, tag_name) VALUES ()
--
--
--
--
-- USE QAIDA;
-- INSERT INTO DISCUSS.ARGUMENTS (sijl_id, argument) VALUES (1, 'qtqt') SELECT SCOPE_IDENTITY() AS id
--
--
-- INSERT INTO SIJL.USERS(password_hash, first_name, last_name,
-- email, username, age)
-- VALUES (HashBytes('SHA2_512', 'saleh'), 'Saleh', 'Muhammed',
-- 'wa@fq.com', 'saleh', 12)
-- INSERT INTO DISCUSS.ARGUMENTS (in_response, argument, argument_start, argument_end) VALUES ()
-- INSERT INTO DISCUSS.ARGUMENTS_TAGS(argument_id, tag_id) VALUES ()
-- SELECT COUNT(*) FROM DISCUSS.VOTES votes WHERE votes.argument_id == @id
-- SELECT id FROM DISCUSS.ARGUMENTS arg WHERE arg.in_response is NULL ORDER BY id DESC;
-- SELECT id FROM DISCUSS.ARGUMENTS arg WHERE arg.in_response IS NOT NULL ORDER BY id DESC;
-- SELECT id FROM DISCUSS.ARGUMENTS arg WHERE arg.sijl_id = @id ORDER BY id DESC;
-- MERGE INTO DISCUSS. AS target
-- USING (
-- SELECT '<username>' AS username, '<email>' AS email
-- ) AS source
-- ON (target.username = source.username AND target.email = source.email)
--
-- WHEN MATCHED THEN
-- DELETE
--
-- WHEN NOT MATCHED THEN
-- INSERT (hash, first_name, last_name, email, username, age)
-- VALUES (HASHBYTES('SHA2_256', '<password>'), '<first_name>', '<last_name>', '<email>', '<username>', <age>);
--
--
--
--
--
--
-- -- MERGE INTO DISCUSS.VOTES AS target
-- USING (
-- SELECT '<sijl_id>' AS sijl_id, '<argument_id>' AS argument_id
-- ) AS source
-- ON (target.sijl_id = source.sijl_id AND target.argument_id = source.argument_id)
--
-- WHEN MATCHED THEN
-- DELETE
--
-- WHEN NOT MATCHED THEN
-- INSERT (sijl_id, argument_id)
-- VALUES ('<sijl_id>', '<argument_id>')
-- ;
-- INSERT INTO DISCUSS.TAGS(tag_name) VALUES (@tag)
-- SELECT sjl.id FROM SIJL.USERS sjl WHERE sjl.username = @username
-- SELECT id
-- FROM DISCUSS.TAGS
--
--
--
--
--
--
-- SELECT * from DISCUSS.TAGS
--
-- SELECT
-- first_name,
-- last_name,
-- username,
-- github,
-- home,
-- about,
-- twitter,
-- date_joined,
-- age
-- FROM
-- SIJL.USERS
-- WHERE
-- id = 1