-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
BasicPreparedStatementObserver.java
76 lines (67 loc) · 2.23 KB
/
BasicPreparedStatementObserver.java
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
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.util.jdbc;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author Vlad Mihalcea
* @author Gail Badner
*/
public class BasicPreparedStatementObserver implements PreparedStatementObserver {
private final Map<PreparedStatement, String> sqlByPreparedStatement = new LinkedHashMap<PreparedStatement, String>();
@Override
public void preparedStatementCreated(PreparedStatement preparedStatement, String sql) {
sqlByPreparedStatement.put( preparedStatement, sql );
}
@Override
public void preparedStatementMethodInvoked(
PreparedStatement preparedStatement,
Method method,
Object[] args,
Object invocationReturnValue) {
// do nothing by default
}
@Override
public PreparedStatement getPreparedStatement(String sql) {
List<PreparedStatement> preparedStatements = getPreparedStatements( sql );
if ( preparedStatements.isEmpty() ) {
throw new IllegalArgumentException(
"There is no PreparedStatement for this SQL statement " + sql );
}
else if ( preparedStatements.size() > 1 ) {
throw new IllegalArgumentException( "There are " + preparedStatements
.size() + " PreparedStatements for this SQL statement " + sql );
}
return preparedStatements.get( 0 );
}
@Override
public List<PreparedStatement> getPreparedStatements(String sql) {
final List<PreparedStatement> preparedStatements = new ArrayList<PreparedStatement>();
for ( Map.Entry<PreparedStatement,String> entry : sqlByPreparedStatement.entrySet() ) {
if ( entry.getValue().equals( sql ) ) {
preparedStatements.add( entry.getKey() );
}
}
return preparedStatements;
}
@Override
public List<PreparedStatement> getPreparedStatements() {
return new ArrayList<PreparedStatement>( sqlByPreparedStatement.keySet() );
}
@Override
public void connectionProviderStopped() {
clear();
}
@Override
public void clear() {
sqlByPreparedStatement.clear();
}
}