1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/******************************************************************************* 2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Copyright (c) 2000, 2009 IBM Corporation and others. 3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * All rights reserved. This program and the accompanying materials 4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * are made available under the terms of the Eclipse Public License v1.0 5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * which accompanies this distribution, and is available at 6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * http://www.eclipse.org/legal/epl-v10.html 7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Contributors: 9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * IBM Corporation - initial API and implementation 10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *******************************************************************************/ 11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpackage org.eclipse.test.internal.performance.results.db; 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.sql.Connection; 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.sql.PreparedStatement; 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.sql.ResultSet; 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.sql.SQLException; 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.sql.Timestamp; 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.InternalDimensions; 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.data.Dim; 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.db.SQL; 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Specific implementation for massive database requests. 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class SQL_Results extends SQL { 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprivate PreparedStatement queryBuildAllScenarios, 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryBuildScenarios, 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryScenarioSummaries, 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryAllComments, 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryScenariosBuilds, 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryScenarioDataPoints, 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryScenarioTimestampDataPoints, 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryScenarioBuildDataPoints, 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryDimScalars, 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll queryAllVariations; 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollSQL_Results(Connection con) throws SQLException { 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super(con); 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // TODO Auto-generated constructor stub 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprotected void dispose() throws SQLException { 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.dispose(); 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryBuildScenarios != null) 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildScenarios.close(); 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryBuildAllScenarios != null) 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildAllScenarios.close(); 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenarioSummaries != null) 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioSummaries.close(); 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryAllComments != null) 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryAllComments.close(); 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenariosBuilds != null) 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenariosBuilds.close(); 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenarioDataPoints != null) 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioDataPoints.close(); 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryDimScalars != null) 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryDimScalars.close(); 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryAllVariations != null) 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryAllVariations.close(); 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get all comments from database 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return A set of the query result 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryAllComments() throws SQLException { 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryAllComments == null) 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryAllComments = this.fConnection.prepareStatement("select ID, KIND, TEXT from COMMENT"); //$NON-NLS-1$ 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.queryAllComments.executeQuery(); 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get all variations from database. 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param configPattern The pattern for all the concerned configurations 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return A set of the query result 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryAllVariations(String configPattern) throws SQLException { 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll long start = System.currentTimeMillis(); 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print("[SQL query (config pattern="+configPattern); //$NON-NLS-1$ 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryAllVariations == null) { 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryAllVariations = this.fConnection.prepareStatement("select KEYVALPAIRS from VARIATION where KEYVALPAIRS like ? order by KEYVALPAIRS"); //$NON-NLS-1$ 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryAllVariations.setString(1, "%"+configPattern+"%"); //$NON-NLS-1$ //$NON-NLS-2$ 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ResultSet resultSet = this.queryAllVariations.executeQuery(); 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print(")=" + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$ 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return resultSet; 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Query all scenarios corresponding to the default scenario pattern 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param scenarioPattern The pattern for all the concerned scenarios 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Set of the query result 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryBuildAllScenarios(String scenarioPattern) throws SQLException { 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryBuildAllScenarios == null) { 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String statement = "select distinct SCENARIO.ID, SCENARIO.NAME , SCENARIO.SHORT_NAME from SCENARIO where " + //$NON-NLS-1$ 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SCENARIO.NAME LIKE ? " + //$NON-NLS-1$ 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "order by SCENARIO.NAME"; //$NON-NLS-1$ 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildAllScenarios = this.fConnection.prepareStatement(statement); 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildAllScenarios.setString(1, scenarioPattern); 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.queryBuildAllScenarios.executeQuery(); 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Query all scenarios corresponding to a given scenario pattern 115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * and for a specific build name. 116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param scenarioPattern The pattern for all the concerned scenarios 118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param buildName The name of the concerned build 119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Set of the query result 120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryBuildScenarios(String scenarioPattern, String buildName) throws SQLException { 123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryBuildScenarios == null) { 124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String statement = "select distinct SCENARIO.ID, SCENARIO.NAME , SCENARIO.SHORT_NAME from SCENARIO, SAMPLE, VARIATION where " + //$NON-NLS-1$ 125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.VARIATION_ID = VARIATION.ID and VARIATION.KEYVALPAIRS LIKE ? and " + //$NON-NLS-1$ 126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.SCENARIO_ID = SCENARIO.ID and SCENARIO.NAME LIKE ? " + //$NON-NLS-1$ 127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "order by SCENARIO.NAME"; //$NON-NLS-1$ 128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildScenarios = this.fConnection.prepareStatement(statement); 129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildScenarios.setString(1, "|build=" + buildName + '%'); //$NON-NLS-1$ 131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryBuildScenarios.setString(2, scenarioPattern); 132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.queryBuildScenarios.executeQuery(); 133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Query all scalars for a given data point. 137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param datapointId The id of the data point 139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Set of the query result 140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryDimScalars(int datapointId) throws SQLException { 143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryDimScalars == null) { 144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll StringBuffer buffer = new StringBuffer("select DIM_ID, VALUE from SCALAR where "); //$NON-NLS-1$ 145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append("DATAPOINT_ID = ? and "); //$NON-NLS-1$ 146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Dim[] dimensions = DB_Results.getResultsDimensions(); 147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int length = dimensions.length; 148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i=0; i<length; i++) { 149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (i==0) { 150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append("("); 151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append(" or "); 153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append("DIM_ID = "); 155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append(dimensions[i].getId()); 156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append(") order by DIM_ID"); 158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryDimScalars = this.fConnection.prepareStatement(buffer.toString()); 159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryDimScalars.setInt(1, datapointId); 161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.queryDimScalars.executeQuery(); 162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get all data points for a given scenario and configuration. 166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param config The name of the concerned configuration 168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param scenarioID The id of the scenario 169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param lastBuildName Name of the last build on which data were stored locally 170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param lastBuildTime Date in ms of the last build on which data were stored locally 171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return A set of the query result 172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryScenarioTimestampDataPoints(String config, int scenarioID, String lastBuildName, long lastBuildTime) throws SQLException { 175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.LOG) DB_Results.LOG_WRITER.starts(" + SQL query (config="+config+", scenario ID="+scenarioID+", build name="+lastBuildName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenarioTimestampDataPoints== null) { 177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String statement = "select DATAPOINT.ID, DATAPOINT.STEP, VARIATION.KEYVALPAIRS from SAMPLE, DATAPOINT, VARIATION where " + //$NON-NLS-1$ 178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.SCENARIO_ID = ? and " + //$NON-NLS-1$ 179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "DATAPOINT.SAMPLE_ID = SAMPLE.ID and " + //$NON-NLS-1$ 180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.STARTTIME > ? and " + //$NON-NLS-1$ 181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.VARIATION_ID = VARIATION.ID " + //$NON-NLS-1$ 182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "ORDER BY DATAPOINT.ID, DATAPOINT.STEP"; //$NON-NLS-1$ 183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioTimestampDataPoints = this.fConnection.prepareStatement(statement); 184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioTimestampDataPoints.setInt(1, scenarioID); 186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Timestamp timestamp = new Timestamp(lastBuildTime+(5*3600L*1000)); // create a time-stamp 5h after the given build time 187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioTimestampDataPoints.setTimestamp(2, timestamp); 188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ResultSet resultSet = this.queryScenarioTimestampDataPoints.executeQuery(); 189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.LOG) DB_Results.LOG_WRITER.ends(")"); //$NON-NLS-1$ 190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return resultSet; 191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryScenarioBuildDataPoints(String config, int scenarioID, String buildName) throws SQLException { 193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.LOG) DB_Results.LOG_WRITER.starts(" + SQL query (config="+config+", scenario ID="+scenarioID+", build name="+buildName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenarioBuildDataPoints== null) { 195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String statement = "select DATAPOINT.ID, DATAPOINT.STEP, VARIATION.KEYVALPAIRS from SAMPLE, DATAPOINT, VARIATION where " + //$NON-NLS-1$ 196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.VARIATION_ID = VARIATION.ID and VARIATION.KEYVALPAIRS LIKE ? and " + //$NON-NLS-1$ 197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.SCENARIO_ID = ? and " + //$NON-NLS-1$ 198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "DATAPOINT.SAMPLE_ID = SAMPLE.ID " + //$NON-NLS-1$ 199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "ORDER BY DATAPOINT.ID, DATAPOINT.STEP"; //$NON-NLS-1$ 200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioBuildDataPoints = this.fConnection.prepareStatement(statement); 201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioBuildDataPoints.setString(1, "|build=" + buildName + '%'); //$NON-NLS-1$ 203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioBuildDataPoints.setInt(2, scenarioID); 204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ResultSet resultSet = this.queryScenarioBuildDataPoints.executeQuery(); 205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.LOG) DB_Results.LOG_WRITER.ends(")"); //$NON-NLS-1$ 206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return resultSet; 207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get all data points for a given scenario and configuration. 211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param config The name of the concerned configuration 213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param scenarioID The id of the scenario 214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return A set of the query result 215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryScenarioDataPoints(String config, int scenarioID) throws SQLException { 218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll long start = System.currentTimeMillis(); 219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print("[SQL query (config="+config+", scenario ID="+scenarioID); //$NON-NLS-1$ //$NON-NLS-2$ 220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenarioDataPoints== null) { 221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String statement = "select DATAPOINT.ID, DATAPOINT.STEP, VARIATION.KEYVALPAIRS from VARIATION, SAMPLE, DATAPOINT where " + //$NON-NLS-1$ 222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "VARIATION.KEYVALPAIRS like ? and SAMPLE.VARIATION_ID = VARIATION.ID and " + //$NON-NLS-1$ 223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SAMPLE.SCENARIO_ID = ? and " + //$NON-NLS-1$ 224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "DATAPOINT.SAMPLE_ID = SAMPLE.ID " + //$NON-NLS-1$ 225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "ORDER BY DATAPOINT.ID, DATAPOINT.STEP"; //$NON-NLS-1$ 226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioDataPoints = this.fConnection.prepareStatement(statement); 227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioDataPoints.setString(1, "%"+config+"%"); //$NON-NLS-1$ //$NON-NLS-2$ 229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioDataPoints.setInt(2, scenarioID); 230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ResultSet resultSet = this.queryScenarioDataPoints.executeQuery(); 231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print(")=" + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$ 232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return resultSet; 233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Query all summaries from database for a given scenario, 237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * configuration and builds. 238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param config The name of the concerned configuration 240402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param scenarioID The id of the scenario 241402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param builds The list of builds to get summaries. When <code>null</code> 242402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * summaries for all DB builds will be read. 243402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 244402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Set of the query result 245402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @throws SQLException 246402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 247402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollResultSet queryScenarioSummaries(int scenarioID, String config, String[] builds) throws SQLException { 248402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int length = builds==null ? 0 : builds.length; 249402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String buildPattern; 250402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll switch (length) { 251402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll case 0: 252402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buildPattern = "%"; //$NON-NLS-1$ 253402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 254402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll case 1: 255402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buildPattern = builds[0]; 256402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 257402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll default: 258402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll StringBuffer buffer = new StringBuffer(); 259402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll loop: for (int idx=0; idx < builds[0].length(); idx++) { 260402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll char ch = builds[0].charAt(idx); 261402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i=1; i<length; i++) { 262402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (idx == builds[i].length()) { 263402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break loop; 264402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 265402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (builds[i].charAt(idx) != ch) { 266402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append('_'); 267402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll continue loop; 268402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 269402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 270402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append(ch); 271402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 272402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buffer.append("%"); //$NON-NLS-1$ 273402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buildPattern = buffer.toString(); 274402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 275402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 276402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.queryScenarioSummaries == null) { 277402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioSummaries= this.fConnection.prepareStatement("select KEYVALPAIRS , IS_GLOBAL, COMMENT_ID, DIM_ID from VARIATION, SUMMARYENTRY where " + //$NON-NLS-1$ 278402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "KEYVALPAIRS like ? and " + //$NON-NLS-1$ 279402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "VARIATION_ID = VARIATION.ID and " + //$NON-NLS-1$ 280402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "SCENARIO_ID = ? and " + //$NON-NLS-1$ 281402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "(DIM_ID = "+InternalDimensions.ELAPSED_PROCESS.getId()+" or DIM_ID = 0)" + //$NON-NLS-1$ //$NON-NLS-2$ 282402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll " order by VARIATION_ID, DIM_ID"); //$NON-NLS-1$ 283402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 284402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioSummaries.setString(1, "|build="+buildPattern+"||config="+ config + "||jvm=sun|"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 285402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.queryScenarioSummaries.setInt(2, scenarioID); 286402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.queryScenarioSummaries.executeQuery(); 287402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 288402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 289402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 290