private HashMap<String,SqliteTable> tables = new HashMap<String,SqliteTable>();
public static final int REAPER_INTERVAL_SECONDS = 60 * 60;
+ private static final int DAYS = 24 * 60 * 60 * 1000;
+ public static final int REAP_EXPIRATION = 5 * DAYS;
public Connection getConnection() { return conn; }
conn.prepareStatement("PRAGMA cache_size="+Math.ceil(kilobytes/1.5)+";").executeUpdate();
}
+
+ public void close(ResultSet rs) {
+ if (rs==null) return;
+ try {
+ rs.close();
+ } catch (SQLException s) {
+ Log.error(ResultSet.class, s);
+ }
+ }
+
public SqliteDB(String filename) {
this.filename = filename;
try {
+ Log.error("start", "initializing " + filename);
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:"+filename);
conn.prepareStatement("PRAGMA auto_vacuum = 1").executeUpdate();
- conn.prepareStatement("VACUUM").executeUpdate();
+ //conn.prepareStatement("VACUUM").executeUpdate();
// until we have better assurances about locking on network filesystems...
conn.prepareStatement("PRAGMA locking_mode = EXCLUSIVE").executeQuery();
- conn.prepareStatement("PRAGMA temp_store = MEMORY").executeUpdate();
+ //conn.prepareStatement("PRAGMA temp_store = MEMORY").executeUpdate();
conn.prepareStatement("PRAGMA page_size=4096").executeUpdate();
conn.prepareStatement("PRAGMA cache_size=2000").executeUpdate();
ResultSet rs = conn.prepareStatement("PRAGMA integrity_check").executeQuery();
String result = rs.getString(1);
if (!result.equals("ok"))
throw new RuntimeException("PRAGMA integrity_check returned \""+result+"\"");
+ Log.error(".", "done initializing " + filename);
}
catch (SQLException e) { throw new RuntimeException(e); }
catch (ClassNotFoundException e) { throw new RuntimeException(e); }
try {
Log.warn(Reaper.class, filename + " reaping...");
long when = System.currentTimeMillis();
- when -= 5 * 24 * 60 * 60 * 1000;
+ when -= REAP_EXPIRATION;
synchronized(SqliteDB.this) {
PreparedStatement ps =
conn.prepareStatement("select count(*) from "+reapTable+" where "+reapColumn+"<?");
}
static String streamToString(Stream stream) throws Exception {
- // FIXME
+ // FIXME!!!! This is corrupting line endings!!!!
StringBuffer b = new StringBuffer();
for(String s = stream.readln(); s!=null; s=stream.readln())
b.append(s+"\n");