Rebuild tables for queries
[proteocache.git] / datadb / compbio / cassandra / CassandraNewTableWriter.java
1 package compbio.cassandra;
2
3 import java.util.Calendar;
4 import java.util.Date;
5
6 import org.apache.log4j.Logger;
7
8 import com.datastax.driver.core.Row;
9 import com.datastax.driver.core.Session;
10 import com.datastax.driver.core.ResultSet;
11 import com.datastax.driver.core.PreparedStatement;
12 import com.datastax.driver.core.BoundStatement;
13 import com.datastax.driver.core.exceptions.QueryExecutionException;
14
15 import compbio.engine.ProteoCachePropertyHelperManager;
16 import compbio.cassandra.CassandraNativeConnector;
17
18 public class CassandraNewTableWriter {
19         private Session session;
20         private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
21
22         public CassandraNewTableWriter() {
23                 Session inis = CassandraNativeConnector.getSession();
24                 setSession(inis);
25         }
26
27         public void setSession(Session s) {
28                 assert s != null;
29                 session = s;
30         }
31
32         public boolean JobisNotInsterted(String jobid) {
33                 ResultSet results1 = session.execute("SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';");
34                 if (results1.isExhausted()) {
35                         return true;
36                 }
37                 return false;
38         }
39
40         public boolean JobisNotArchived(String jobid) {
41                 ResultSet results1 = session.execute("SELECT * FROM JpredArchive WHERE JobID = '" + jobid + "';");
42                 if (results1.isExhausted()) {
43                         return true;
44                 }
45                 return false;
46         }
47
48         /*
49          * fill new table
50          */
51         public void FillNewTable() {
52                 long date1 = CassandraNativeConnector.getEarliestDateInDB();
53                 Calendar start = Calendar.getInstance();
54                 start.setTime(new Date(date1));
55                 Calendar endcal = Calendar.getInstance();
56                 Date end = endcal.getTime();
57                 for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
58                         final long startTime = System.currentTimeMillis();
59                         String query1 = "SELECT * FROM ProteinData WHERE jobtime = " + date.getTime() + ";";
60                         System.out.println("Query db: " + query1);
61                         try {
62                                 ResultSet results = session.execute(query1);
63                                 final long queryTime = System.currentTimeMillis();
64                                 System.out.println("Query time for " + date.toString() + " is " + (queryTime - startTime) + " msec");
65                                 String query2 = "INSERT INTO JobDateInfo " + "(jobday, Total)" + " VALUES (" + date.getTime() + "," + results.all().size()
66                                                 + ");";
67                                 System.out.println("Insert DB: " + query2);
68                                 session.execute(query2);
69                         } catch (QueryExecutionException e) {
70                                 e.printStackTrace();
71                         }
72                 }
73                 System.out.println("Table JobDateInfo filled");
74         }
75
76         /*
77          * fill a table with the database global parameters
78          */
79         public void FillParameters() {
80                 Date bubu = new Date(CassandraNativeConnector.getEarliestDateInDB());
81                 System.out.println("Old EarliestJobDate is " + bubu.toString());
82
83                 String query1 = "SELECT jobtime FROM ProteinData LIMIT 2000000;";
84                 System.out.println("Query db: " + query1);
85                 ResultSet results = session.execute(query1);
86                 Calendar endcal = Calendar.getInstance();
87                 long newearliestday = endcal.getTime().getTime();
88                 while (!results.isExhausted()) {
89                         Row r = results.one();
90                         long day = r.getLong("jobtime");
91                         if (day < newearliestday) {
92                                 newearliestday = day;
93                         }
94                 }
95                 String com = "INSERT INTO MainParameters " + "(Name, Value)" + " VALUES ('EarliestJobDate','" + String.valueOf(newearliestday)
96                                 + "');";
97                 session.execute(com);
98                 Date gaga = new Date(newearliestday);
99                 System.out.println("New EarliestJobDate is " + gaga.toString());
100         }
101 }