1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.google.coretests; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.Test; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.sql.Connection; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.sql.DriverManager; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.sql.PreparedStatement; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.sql.ResultSet; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.sql.SQLException; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.sql.Statement; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class StatsStore { 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final String sysVersion = "1.0"; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static Connection conn; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static Statement stmt; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static PreparedStatement insertStmt, selectByNameStmt, updateStmt; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static PreparedStatement insertDetStmt, insertEventStmt; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static PreparedStatement selectAllStmt; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static long now; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int compareDuration(long dur, long refDur) { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long diff = dur - refDur; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (diff <= 0) { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((double)-diff / refDur > 0.5) return 1; // remarkably faster 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else return 0; // equivalent duration (maybe a bit faster) 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (diff < 20) return 0; // not measurably slower: equivalent duration 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if ((double)diff / refDur < 0.2) return 0; // just little slower: equivalent duration 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else return -1; // relevantly SLOWer 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void initStats(PerfStatCollector.Item a) { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statMinDuration = a.duration; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statMaxDuration = a.duration; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statAvgDuration = a.duration; 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statCount = 1; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void adjustStats(PerfStatCollector.Item a) { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (a.duration < a.statMinDuration) a.statMinDuration = a.duration; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (a.duration > a.statMaxDuration) a.statMaxDuration = a.duration; 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statAvgDuration = ((a.statAvgDuration * a.statCount + a.duration) / (a.statCount + 1)); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statCount++; 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void adjustStatsOptimistic(PerfStatCollector.Item a) { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStats(a); 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Could consider reducing a.statMaxDuration. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void use1(PerfStatCollector.Item a) { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Test test; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int pos; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PreparedStatement selectStmt = selectByNameStmt; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertStmt.setString(1, a.test.toString()); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertStmt.execute(); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SQLException e) {} 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectStmt.setString(1, a.test.toString()); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ResultSet row = selectStmt.executeQuery(); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project row.first(); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pos = 1; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.id = row.getInt(pos); pos++; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.bestRes = row.getInt(pos); pos++; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.lastBestAt = row.getLong(pos); pos++; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.lastRes = row.getInt(pos); pos++; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.lastDuration = row.getLong(pos); pos++; 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statCount = row.getInt(pos); pos++; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statAvgDuration = row.getDouble(pos); pos++; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statMinDuration = row.getLong(pos); pos++; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.statMaxDuration = row.getLong(pos); pos++; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (a.res == 0) { 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (a.bestRes == 100) { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.bestRes = 0; a.lastBestAt = now; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 0; // Good from scratch. 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = false; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project initStats(a); 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (a.bestRes != 0) { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.bestRes = 0; a.lastBestAt = now; 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 4; // "Good" for the first time: 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; // was bad before. 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project initStats(a); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (a.lastRes != 0) { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.bestRes = 0; a.lastBestAt = now; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 3; // "good" again: 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; // was bad in between. 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStats(a); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // res == lastRes == bestRes == 0: 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int cmp = compareDuration(a.duration, a.statMinDuration); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cmp >= 0) { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.bestRes = 0; a.lastBestAt = now; 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cmp > 0) { 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 2; // "Fast"er than ever before. 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStatsOptimistic(a); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (compareDuration(a.duration, a.lastDuration) > 0) { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // As fast as best but faster than last run: 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 1; // "fast" again. 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStatsOptimistic(a); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 0; // Equivalent Duration: 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = false; // usual good case. 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStats(a); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (compareDuration(a.duration, a.lastDuration) < 0) { 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = -2; // "SLOW"!!! 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStats(a); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = -2; // Still "SLOW"!!! 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = false; // (But NO transition!) 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStats(a); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (a.bestRes == 0) { 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (a.lastRes == 0) { 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = -4; // "VBAD"!!! 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = -4; // Still "VBAD"!!! 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = false; // (But NO transition!) 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // DON'T adjust statistics: they should reflect good runs, only. 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (a.bestRes == 100) { 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.bestRes = -3; // Just mark as NOT good. 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = -3; // Bad (initial run). 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = true; 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project initStats(a); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.histRelevance = 0; // Still Failure or Error: 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project a.isTransition = false; // usual bad case. 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adjustStats(a); 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pos = 1; 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setInt(pos, a.bestRes); pos++; 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setLong(pos, a.lastBestAt); pos++; 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setInt(pos, a.res); pos++; 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setLong(pos, a.duration); pos++; 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setInt(pos, a.statCount); pos++; 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setDouble(pos, a.statAvgDuration); pos++; 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setLong(pos, a.statMinDuration); pos++; 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setLong(pos, a.statMaxDuration); pos++; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.setInt(pos, a.id); pos++; 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt.execute(); 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pos = 1; 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt.setInt(pos, a.id); pos++; 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt.setLong(pos, now); pos++; 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt.setInt(pos, a.statCount); pos++; 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt.setInt(pos, a.res); pos++; 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt.setLong(pos, a.duration); pos++; 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt.execute(); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (a.isTransition) { 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pos = 1; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt.setInt(pos, a.id); pos++; 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt.setLong(pos, now); pos++; 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt.setInt(pos, a.histRelevance); pos++; 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt.setInt(pos, a.res); pos++; 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt.setLong(pos, a.duration); pos++; 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt.execute(); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (SQLException e) { 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int x = 0; 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// static void use2(PerfStatCollector.Item a) { 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void execOrIgnore(String sql) { 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { stmt.execute(sql); } 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (SQLException e) {} 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void open(String jdbcDriver, String connectionURL) 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// try { 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class.forName(jdbcDriver).newInstance(); 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project conn = DriverManager.getConnection(connectionURL); 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt = conn.createStatement(); 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String dbVersion; 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ResultSet res = stmt.executeQuery("SELECT id FROM Version"); 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.first(); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dbVersion = res.getString(1); 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (SQLException e) { 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dbVersion = ""; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!dbVersion.equals(sysVersion)) { 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project execOrIgnore("DROP TABLE Test_Cases;"); 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("CREATE TABLE Test_Cases (" + 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " id INTEGER PRIMARY KEY AUTOINCREMENT, " + 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " name VARCHAR(255) UNIQUE, " + 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // (best_Res != 0) ==> (last_Best_At == 0) never ran good! 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " best_Res INTEGER, last_Best_At INTEGER, " + 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " last_Res INTEGER, last_Duration INTEGER, " + 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " stat_Cnt INTEGER, stat_Avg NUMBER(20, 2), " + 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " stat_Min INTEGER, stat_Max INTEGER);"); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project execOrIgnore("DROP TABLE Test_Case_Runs;"); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("CREATE TABLE Test_Case_Runs (" + 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " test_Id INTEGER, run_At INTEGER, " + 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " iteration INTEGER, res INTEGER, duration INTEGER, " + 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " PRIMARY KEY (test_Id, run_At));"); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project execOrIgnore("DROP TABLE Test_Case_Events;"); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("CREATE TABLE Test_Case_Events (" + 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " test_Id INTEGER, run_At INTEGER, " + 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " relevance INTEGER, " + 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " res INTEGER, duration INTEGER, " + 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " PRIMARY KEY (test_Id, run_At));"); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// stmt.execute("CREATE PROCEDURE useSample (IN pName TEXT, " + 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// "pRes INTEGER, pDuration INTEGER, pTime INTEGER) " + 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// "BEGIN " + 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// " INSERT OR IGNORE INTO TestCases (name)" + 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// " VALUES (pName);" + 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// "END;"); 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project execOrIgnore("DROP TABLE Version;"); 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("CREATE TABLE Version(id VARCHAR(31));"); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("INSERT INTO Version (id) VALUES ('" + sysVersion + "');"); 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// updateStmt = conn.prepareStatement("useSample(:name, :res, :duration, :time)"); 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // firstConnection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // firstStmt = firstConnection.createStatement(); 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // firstStmt.execute("create table tbl1(one varchar(10), two smallint)"); 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertStmt = conn.prepareStatement("INSERT " + 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "INTO Test_Cases (name, stat_Cnt) VALUES (?, 0);"); 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectByNameStmt = conn.prepareStatement("SELECT id, " + 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " IFNULL(best_Res, 100), IFNULL(last_Best_At, 0), " + 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " IFNULL(last_Res, 100), IFNULL(last_Duration, 0), " + 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " IFNULL(stat_Cnt, 0), IFNULL(stat_Avg, 0), " + 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " IFNULL(stat_Min, 0), IFNULL(stat_Max, 0) " + 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "FROM Test_Cases WHERE name = ?;"); 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project updateStmt = conn.prepareStatement("UPDATE Test_Cases SET " + 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " best_Res = ?, last_Best_At = ?, " + 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " last_Res = ?, last_Duration = ?, " + 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " stat_Cnt = ?, stat_Avg = ?, " + 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project " stat_Min = ?, stat_Max = ? " + 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "WHERE id = ?;"); 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertDetStmt = conn.prepareStatement("INSERT " + 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "INTO Test_Case_Runs (test_Id, run_At, iteration, res, duration) " + 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "VALUES (?, ?, ?, ?, ?);"); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project insertEventStmt = conn.prepareStatement("INSERT " + 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "INTO Test_Case_Events (test_Id, run_At, relevance, res, duration) " + 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "VALUES (?, ?, ?, ?, ?);"); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectAllStmt = conn.prepareStatement("SELECT id, name, " + 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "last_Res, stat_Cnt, " + 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "last_Duration, stat_Avg, stat_Min, stat_Max " + 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "FROM Test_Cases;"); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// ResultSet res = stmt.executeQuery("PRAGMA CACHE_SIZE;"); 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// res.first(); 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// System.out.print("CACHE_SIZE = "); 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// System.out.println(res.getString(1)); 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// stmt.execute("PRAGMA CACHE_SIZE = 5000;"); 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("PRAGMA SYNCHRONOUS = OFF;"); 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.execute("PRAGMA temp_store = MEMORY;"); 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (SQLException e) { 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dbVersion = ""; 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmt.close(); 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project conn.commit(); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// catch (Exception e) { 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// conn = null; 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// return conn != null; 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static void close() { 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project conn.commit(); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project conn.close(); 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project conn = null; 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) { 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project conn = null; 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 310