File: GenericQuery.java

package info (click to toggle)
derby 10.14.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 79,056 kB
  • sloc: java: 691,961; sql: 42,686; xml: 20,512; sh: 3,373; sed: 96; makefile: 60
file content (155 lines) | stat: -rw-r--r-- 4,785 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
 
 Derby - Class org.apache.derbyTesting.system.langtest.query.GenericQuery;
 
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 
 */
package org.apache.derbyTesting.system.optimizer.query;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Properties;

import org.apache.derbyTesting.system.optimizer.StaticValues;
import org.apache.derbyTesting.system.optimizer.utils.TestUtils;
/**
 * 
 * Class GenericQuery: The generic class that is extended by the Query classes or instantiated
 * when the 'query.list' of custom queries is provided
 *
 */



public  class GenericQuery {
	protected String description="Custom Test Query";
	protected Connection conn=null;
	protected ArrayList<String> queries = new ArrayList<String>();
	protected ArrayList<String[]> prepStmtRunResults = new ArrayList<String[]>(); //times using PreparedStatement
	protected ArrayList<String[]> stmtRunResults = new ArrayList<String[]>(); //times using Statement
	protected int[] rowsExpected=null; //add rows expected
	
	public void setConnection(Connection con){
		conn=con;
	}
	public  void generateQueries(){
		
	}
	public void generateQueries(Properties prop){
		Enumeration qenum=prop.keys();
		while(qenum.hasMoreElements()){
			String queryName=(String)qenum.nextElement();
			queries.add(prop.getProperty(queryName));
		}
	}
		
	public String getDescription(){
		return description;
	}
	public void  executeQueries(boolean prepare,boolean verbose) throws SQLException{
		rowsExpected=new int[queries.size()]; //initialize the array with correct size
		String query="";
		if(prepare){	
			if (verbose)
				System.out.println("=====================> Using java.sql.PreparedStatement <====================");					
		}else{
			if (verbose)
				System.out.println("=====================> Using java.sql.Statement <====================");
			
		}
		try{
			for(int k=0;k<queries.size();k++){
				
				query = queries.get(k);
				String [] times=new String [StaticValues.ITER];
				int rowsReturned=0;
				for (int i=0;i<StaticValues.ITER;i++){ 
					
					Statement stmt=null;
					ResultSet rs=null;
					PreparedStatement pstmt=null;
					if(prepare){	
						pstmt=conn.prepareStatement(query);					
					}else{
						stmt=conn.createStatement();
						
					}
					long start=System.currentTimeMillis();
					if(prepare)
						rs=pstmt.executeQuery();
					else
						rs=stmt.executeQuery(query);
					ResultSetMetaData rsmd=rs.getMetaData();
					int totalCols=rsmd.getColumnCount();
					
					while(rs.next()){
						String row="";
						for(int j=1;j<=totalCols;j++){
							row+=rs.getString(j)+" | ";
						}
						rowsReturned++;
					}
					long time_taken=(System.currentTimeMillis() - start);
					if (verbose){
						System.out.println("Time required to execute:");
						System.out.println(query);
						System.out.println("Total Rows returned = "+rowsReturned);
					
						System.out.println("==> "+time_taken+" milliseconds "+" OR "+TestUtils.getTime(time_taken));
					}
					times[i]=TestUtils.getTime(time_taken);
					rs.close();
					if(prepare){
						pstmt.close();
					}else{
						stmt.close();
					}
					rowsExpected[k]=rowsReturned;//add expected rows for respective queries
					rowsReturned=0;
				}//end for loop to run StaticValues.ITER times
				
				if(prepare){	
					prepStmtRunResults.add(times);
				}else{
					stmtRunResults.add(times);
				}
				
			}
		}catch(SQLException sqe){
			throw new SQLException("Failed query:\n "+query+"\n SQLState= "+sqe.getSQLState()+"\n ErrorCode= "+sqe.getErrorCode()+"\n Message= "+sqe.getMessage());
		}
	}
	public ArrayList<String[]> getPrepStmtRunResults() {
		return prepStmtRunResults;
	}
	public ArrayList<String[]> getStmtRunResults() {
		return stmtRunResults;
	}
	public int getRowsExpected(int index) {
		return rowsExpected[index];
	}
	public ArrayList getQueries() {
		return queries;
	}
	
}