Skip to content

Commit 741b6d9

Browse files
committed
New schema, more column based
1 parent e781916 commit 741b6d9

File tree

10 files changed

+474
-374
lines changed

10 files changed

+474
-374
lines changed

Entities/Movie.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public Movie(
6161
}
6262

6363
public String generateQueryString(String table){
64-
String query = "insert into " + table +
64+
String query = "insertObject into " + table +
6565
"(studio, releaseDate, imdbId, runtime, description, language, title, version, " +
6666
"trailer, imageUrl, genre, tagline, lastModified, id, homepage) " +
6767
"values( " +

Entities/NodeRelation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public String getName() {
1818
}
1919

2020
public String generateQueryString(String table){
21-
String query = "insert into " + table + "(name) values(" +
21+
String query = "insertObject into " + table + "(name) values(" +
2222
"\"" + this.name + "\"" +
2323
");";
2424
return query;

Entities/Person.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public Person(
4343
}
4444

4545
public String generateQueryString(String table){
46-
String query = "insert into " + table +
46+
String query = "insertObject into " + table +
4747
"(birthday,birthplace,deg,name,lastModified,id," +
4848
"biography,version,profileImageUrl) values(" +
4949
"\"" + this.birthday + "\", " +

Main.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
// Deployment:
44
// Maven add commons-csv-1.4, mongodb-driver-3.4.2
55

6+
import Query.Engine.QueryIndexer;
7+
import Utility.DBSchema;
68
import Utility.FileParser;
79

810
import java.io.IOException;
911

1012

13+
import java.sql.Connection;
14+
import java.sql.DriverManager;
15+
import java.sql.SQLException;
1116
import java.util.Map;
1217

1318

@@ -17,19 +22,19 @@ Sampling, paralleling, condensing, overlapping(DP)
1722
* */
1823
public class Main {
1924

20-
public static void main(String[] args) throws IOException {
25+
public static void main(String[] args) throws IOException, SQLException {
2126
//Parsing this CSV file:
2227

23-
// String url = "jdbc:mysql://localhost:3306/test";
24-
// String username = "root";
25-
// String password = "";
26-
// boolean importData = false;
27-
28+
String url = "jdbc:mysql://localhost:3306/test";
29+
String username = "root";
30+
String password = "";
31+
boolean importData = false;
32+
Connection connection = DriverManager.getConnection(url, username, password);
2833
// try {
2934
// // Connect to MySQL Database
3035
// // Schema is in Tables.sql
3136
//
32-
// Connection connection = DriverManager.getConnection(url, username, password);
37+
//
3338
//
3439
// if(importData) {
3540
// //Create tables;
@@ -45,7 +50,7 @@ public static void main(String[] args) throws IOException {
4550
// connection.close();
4651
// connection = DriverManager.getConnection(url, username, password);
4752
//
48-
// Utility.DBSetupUtil dbSetupUtil = new Utility.DBSetupUtil(connection);
53+
// Utility.DBSetupUtil2 dbSetupUtil = new Utility.DBSetupUtil2(connection);
4954
// BufferedReader br = new BufferedReader(new FileReader("src/sample.csv"));
5055
//
5156
// // Parse file line by line.
@@ -100,9 +105,9 @@ public static void main(String[] args) throws IOException {
100105
//
101106
//
102107

103-
FileParser fileParser = new FileParser("src/sample.csv");
104-
fileParser.run();
105-
108+
FileParser fileParser = new FileParser("src/sample.csv", connection);
109+
DBSchema dbSchema = fileParser.run();
110+
QueryIndexer queryIndexer = new QueryIndexer(connection, dbSchema);
106111

107112
return ;
108113

Query/Engine/QueryIndexer.java

Lines changed: 49 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,146 +1,94 @@
11
package Query.Engine;
22

3+
import Utility.DBSchema;
4+
import Utility.DBUtil;
5+
import Utility.FileParser;
6+
37
import java.sql.Connection;
4-
import java.sql.PreparedStatement;
5-
import java.sql.ResultSet;
6-
import java.sql.SQLException;
78
import java.util.*;
89

910
/**
1011
* Created by liuche on 5/29/17.
12+
*
13+
* Requirements:
14+
* Schema of the imported CSV file should be
15+
* "{node1: n, node1Label: labels(n), relationship: r, rel_type: type(r), node2:m, node2Label: labels(m)}"
16+
*
1117
*/
1218
public class QueryIndexer {
1319
Connection conn;
1420

15-
Map<String, Integer> labelRelation = new HashMap<>();
16-
Map<String, Integer> labelNodes = new HashMap<>();
17-
Map<String, Integer> propertyCountOfNodes = new HashMap<>();
18-
Map<String, Integer> nodeLabelIncoming = new HashMap<>();
19-
Map<String, Integer> nodeLabelOutgoing = new HashMap<>();
20-
Map<String, Map<String, Integer>> nodeRelationInEdgeCount = new HashMap<>();
21-
Map<String, Map<String, Integer>> nodeRelationOutEdgeCount = new HashMap<>();
22-
23-
Integer numberOfNodes = 0, numberOfRelations = 0;
24-
25-
private Integer getIntegerFromSQL(String statement){
26-
try {
27-
PreparedStatement preparedStatement = conn.prepareStatement(statement);
28-
ResultSet result = preparedStatement.executeQuery();
29-
result.next();
30-
return result.getInt(1);
31-
} catch (SQLException e) {
32-
e.printStackTrace();
33-
}
34-
return -1;
35-
}
36-
37-
private List<String> getListFromSQL(String statement){
38-
List<String> resList = new ArrayList<>();
39-
try {
40-
PreparedStatement preparedStatement = conn.prepareStatement(statement);
41-
ResultSet result = preparedStatement.executeQuery();
42-
while(result.next()){
43-
String str = result.getString(1);
44-
resList.add(str);
45-
}
46-
} catch (SQLException e) {
47-
e.printStackTrace();
48-
}
49-
return resList;
50-
}
51-
52-
private Map<String, Integer> getMapFromSQL(String statement){
53-
Map<String, Integer> resMap = new HashMap<>();
54-
try {
55-
PreparedStatement preparedStatement = conn.prepareStatement(statement);
56-
ResultSet result = preparedStatement.executeQuery();
57-
while(result.next()){
58-
String str = result.getString(1);
59-
Integer integer = result.getInt(2);
60-
resMap.put(str, integer);
61-
}
62-
} catch (SQLException e) {
63-
e.printStackTrace();
64-
}
65-
return resMap;
66-
}
21+
private Map<String, Integer> labelRelation = new HashMap<>();
22+
private Map<String, Integer> labelNodes = new HashMap<>();
23+
private Map<String, Integer> propertyCountOfNodes = new HashMap<>();
24+
private Map<String, Integer> nodeLabelIncoming = new HashMap<>();
25+
private Map<String, Integer> nodeLabelOutgoing = new HashMap<>();
26+
private Map<String, Map<String, Integer>> nodeRelationInEdgeCount = new HashMap<>();
27+
private Map<String, Map<String, Integer>> nodeRelationOutEdgeCount = new HashMap<>();
6728

29+
private Integer numberOfNodes = 0, numberOfRelations = 0;
30+
private DBUtil dbUtil;
6831

69-
public QueryIndexer(Connection conn) {
32+
public QueryIndexer(Connection conn, DBSchema dbSchema) {
7033
this.conn = conn;
34+
this.dbUtil = new DBUtil(conn);
7135

7236
// Get number of nodes and relations
73-
String statement = "SELECT COUNT(*) FROM person;";
74-
this.numberOfNodes = getIntegerFromSQL(statement);
75-
statement = "SELECT COUNT(*) FROM movie;";
76-
this.numberOfNodes += getIntegerFromSQL(statement);
37+
String statement = "SELECT COUNT(*) FROM ObjectType WHERE type != \"0\";";
38+
this.numberOfNodes = dbUtil.getIntegerFromSQL(statement);
7739

7840
statement = "SELECT COUNT(*) FROM Edge;";
79-
this.numberOfRelations = getIntegerFromSQL(statement);
41+
this.numberOfRelations = dbUtil.getIntegerFromSQL(statement);
8042

8143
// Get number of nodes with same label
8244
statement = "select label, COUNT(*) from NodeLabel GROUP BY (label);";
83-
labelNodes = getMapFromSQL(statement);
45+
labelNodes = dbUtil.getMapFromSQL(statement);
8446

8547
// Get number of relations with same label
8648
statement = "SELECT rel_type, COUNT(*) from Edge GROUP BY rel_type;";
87-
labelRelation = getMapFromSQL(statement);
49+
labelRelation = dbUtil.getMapFromSQL(statement);
8850

89-
ArrayList<String> node1Fields = new ArrayList<>(Arrays.asList(
90-
"birthday", "birthplace", "deg", "name", "lastModified",
91-
"id", "biography", "version", "profileImageUrl"
92-
));
51+
// Get number of distinct values of each property in nodes.
52+
statement = "SELECT DISTINCT(name) FROM typeProperty WHERE id > 0";
53+
List<String> nodeFields = dbUtil.getListFromSQL(statement);
9354

94-
for(String field : node1Fields){
95-
statement = "SELECT COUNT(distinct " + field + ") FROM Person;";
96-
Integer counts = getIntegerFromSQL(statement);
55+
for(String field : nodeFields){
56+
statement = "SELECT COUNT(distinct value) FROM P_" + field + ";";
57+
Integer counts = dbUtil.getIntegerFromSQL(statement);
9758
Integer prevCount = propertyCountOfNodes.getOrDefault(field, 0);
9859
propertyCountOfNodes.put(field, prevCount + counts);
9960
}
10061

62+
// Get number of edges that comes out of nodes with same label.
63+
statement = "SELECT label, COUNT(DISTINCT eid) from (Edge e LEFT JOIN NodeLabel n ON e.node1 = n.gid) GROUP BY (label);";
64+
nodeLabelOutgoing = dbUtil.getMapFromSQL(statement);
10165

102-
ArrayList<String> node2Fields = new ArrayList<>(Arrays.asList(
103-
"studio", "releaseDate", "imdbId", "runtime", "description",
104-
"language", "title", "version", "trailer", "imageUrl", "genre",
105-
"tagline", "lastModified", "id", "homepage"
106-
));
107-
108-
for(String field : node2Fields){
109-
statement = "SELECT COUNT(distinct " + field + ") FROM Movie;";
110-
Integer counts = getIntegerFromSQL(statement);
111-
Integer prevCount = propertyCountOfNodes.getOrDefault(field, 0);
112-
propertyCountOfNodes.put(field, prevCount + counts);
113-
}
114-
115-
statement = "SELECT label, COUNT(DISTINCT eid) from (Edge e LEFT JOIN NodeLabel n ON e.pid = n.pid) GROUP BY (label);";
116-
nodeLabelOutgoing = getMapFromSQL(statement);
66+
// Get number of edges that goes into nodes with same label.
67+
statement = "SELECT label, COUNT(DISTINCT eid) from (Edge e LEFT JOIN NodeLabel n ON e.node2 = n.gid) GROUP BY (label);";
68+
nodeLabelIncoming = dbUtil.getMapFromSQL(statement);
11769

118-
statement = "SELECT label, COUNT(DISTINCT eid) from (Edge e LEFT JOIN NodeLabel n ON e.mid = n.mid) GROUP BY (label);";
119-
nodeLabelIncoming = getMapFromSQL(statement);
12070

121-
for(String nodeLabel : labelNodes.keySet()){
122-
nodeRelationOutEdgeCount.put(nodeLabel, new HashMap<>());
71+
for(String label : labelNodes.keySet()){
72+
nodeRelationOutEdgeCount.put(label, new HashMap<>());
12373
for(String relationLabel : labelRelation.keySet()){
12474
statement =
12575
"SELECT COUNT(*)\n" +
126-
"from Edge LEFT JOIN Person ON Edge.pid = Person.id " +
127-
" LEFT JOIN NodeLabel ON Person.id = NodeLabel.pid " +
128-
"WHERE label = \"" + nodeLabel + "\" AND rel_type = \"" + relationLabel + "\"";
129-
Integer edges = getIntegerFromSQL(statement);
130-
nodeRelationOutEdgeCount.get(nodeLabel).put(relationLabel, edges);
76+
"from Edge LEFT JOIN NodeLabel ON Edge.node1 = NodeLabel.gid " +
77+
"WHERE label = \"" + label + "\" AND rel_type = \"" + relationLabel + "\"";
78+
Integer edges = dbUtil.getIntegerFromSQL(statement);
79+
nodeRelationOutEdgeCount.get(label).put(relationLabel, edges);
13180
}
13281
}
13382

134-
for(String nodeLabel : labelNodes.keySet()){
135-
nodeRelationInEdgeCount.put(nodeLabel, new HashMap<>());
83+
for(String label : labelNodes.keySet()){
84+
nodeRelationInEdgeCount.put(label, new HashMap<>());
13685
for(String relationLabel : labelRelation.keySet()){
13786
statement =
13887
"SELECT COUNT(*)\n" +
139-
"from Edge LEFT JOIN Movie ON Edge.mid = Movie.id " +
140-
" LEFT JOIN NodeLabel ON Movie.id = NodeLabel.mid " +
141-
"WHERE label = \"" + nodeLabel + "\" AND rel_type = \"" + relationLabel + "\"";
142-
Integer edges = getIntegerFromSQL(statement);
143-
nodeRelationInEdgeCount.get(nodeLabel).put(relationLabel, edges);
88+
"from Edge LEFT JOIN NodeLabel ON Edge.node2 = NodeLabel.gid " +
89+
"WHERE label = \"" + label + "\" AND rel_type = \"" + relationLabel + "\"";
90+
Integer edges = dbUtil.getIntegerFromSQL(statement);
91+
nodeRelationInEdgeCount.get(label).put(relationLabel, edges);
14492
}
14593
}
14694

0 commit comments

Comments
 (0)