1
- CREATE TABLE Repository (
2
- url VARCHAR (255 ) PRIMARY KEY ,
3
- owner VARCHAR (50 ) NOT NULL ,
4
- repo VARCHAR (50 ) NOT NULL ,
5
- language VARCHAR (20 ) NOT NULL ,
6
- descriptions TEXT ,
7
- default_branch VARCHAR (50 ),
8
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
1
+ CREATE TABLE IF NOT EXISTS Repository (
2
+ url VARCHAR (255 ) PRIMARY KEY ,
3
+ owner VARCHAR (50 ) NOT NULL ,
4
+ repo VARCHAR (50 ) NOT NULL ,
5
+ language VARCHAR (20 ) NOT NULL ,
6
+ descriptions TEXT ,
7
+ default_branch VARCHAR (50 ),
8
+ stars INT ,
9
+ forks INT
9
10
);
10
11
11
- CREATE TABLE Topics (
12
- topic_name VARCHAR (50 ) PRIMARY KEY
12
+ CREATE TABLE IF NOT EXISTS Topics (
13
+ topic_name VARCHAR (50 ) PRIMARY KEY
13
14
);
14
15
15
- CREATE TABLE RepositoryTopics (
16
- repository_url VARCHAR (255 ),
17
- topic_name VARCHAR (50 ),
16
+ CREATE TABLE IF NOT EXISTS RepositoryTopics (
17
+ repository_url VARCHAR (255 ),
18
+ topic_name VARCHAR (50 ),
18
19
PRIMARY KEY (repository_url, topic_name),
19
20
FOREIGN KEY (repository_url) REFERENCES Repository(url),
20
21
FOREIGN KEY (topic_name) REFERENCES Topics(topic_name)
21
22
);
22
23
23
-
24
24
/* *
25
25
Last Commit SHA length: https://stackoverflow.com/questions/18134627/how-much-of-a-git-sha-is-generally-considered-necessary-to-uniquely-identify-a
26
26
*/
27
- CREATE TABLE Branch (
28
- last_commit_sha VARCHAR (40 ) NOT NULL PRIMARY KEY ,
27
+ CREATE TABLE IF NOT EXISTS Branch (
28
+ branch_id SERIAL PRIMARY KEY ,
29
+ last_commit_sha VARCHAR (40 ) NOT NULL ,
29
30
name VARCHAR (50 ) NOT NULL ,
30
31
repository_url VARCHAR (255 ),
31
32
commit_at TIMESTAMP ,
32
- CONSTRAINT fk_repository FOREIGN KEY (repository_url) REFERENCES Repository(url)
33
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
34
+ ai_summary TEXT ,
35
+ FOREIGN KEY (repository_url) REFERENCES Repository(url),
36
+ CONSTRAINT unique_last_commit_per_repo UNIQUE (repository_url, last_commit_sha)
33
37
);
34
38
35
- CREATE TABLE Folder (
36
- folder_id SERIAL PRIMARY KEY ,
37
- name VARCHAR (30 ) NOT NULL ,
38
- path VARCHAR (100 ),
39
- parent_folder_id SERIAL ,
40
- branch_sha VARCHAR ( 40 ) NOT NULL ,
41
- branch_name VARCHAR ( 50 ) NOT NULL ,
39
+ CREATE TABLE IF NOT EXISTS Folder (
40
+ folder_id SERIAL PRIMARY KEY ,
41
+ name VARCHAR (30 ),
42
+ path VARCHAR (100 ) NOT NULL ,
43
+ parent_folder_id INTEGER ,
44
+ ai_summary TEXT ,
45
+ branch_id INTEGER NOT NULL ,
42
46
FOREIGN KEY (parent_folder_id) REFERENCES Folder(folder_id),
43
- FOREIGN KEY (branch_sha ) REFERENCES Branch(last_commit_sha ),
44
- FOREIGN KEY (branch_name) REFERENCES Branch(name )
47
+ FOREIGN KEY (branch_id ) REFERENCES Branch(branch_id ),
48
+ CHECK ( ( path = ' ' AND parent_folder_id IS NULL ) OR ( path != ' ' AND parent_folder_id IS NOT NULL ) )
45
49
);
46
50
47
- CREATE TABLE File (
48
- file_id SERIAL PRIMARY KEY ,
49
- name VARCHAR (30 ) NOT NULL ,
50
- sha VARCHAR (40 ) NOT NULL ,
51
- language VARCHAR ( 20 ) ,
52
- parent_folder_id SERIAL NOT NULL ,
53
- ai_summary TEXT ,
54
- FOREIGN KEY (parent_folder_id ) REFERENCES Folder(folder_id)
51
+ CREATE TABLE IF NOT EXISTS File (
52
+ file_id SERIAL PRIMARY KEY ,
53
+ name VARCHAR (30 ) NOT NULL ,
54
+ language VARCHAR (20 ) ,
55
+ folder_id INTEGER NOT NULL ,
56
+ content TEXT ,
57
+ ai_summary TEXT ,
58
+ FOREIGN KEY (folder_id ) REFERENCES Folder(folder_id)
55
59
);
0 commit comments