18
18
19
19
import java .sql .Connection ;
20
20
import java .sql .DatabaseMetaData ;
21
+ import java .sql .ParameterMetaData ;
21
22
import java .sql .PreparedStatement ;
22
23
import java .sql .SQLException ;
23
24
import java .sql .Types ;
26
27
import org .junit .Before ;
27
28
import org .junit .Test ;
28
29
30
+ import static org .junit .Assert .*;
29
31
import static org .mockito .BDDMockito .*;
30
32
31
33
/**
@@ -41,46 +43,129 @@ public void setUp() {
41
43
preparedStatement = mock (PreparedStatement .class );
42
44
}
43
45
44
- @ Test public void testSetParameterValueWithNullAndType () throws SQLException {
46
+ @ Test
47
+ public void testSetParameterValueWithNullAndType () throws SQLException {
45
48
StatementCreatorUtils .setParameterValue (preparedStatement , 1 , Types .VARCHAR , null , null );
46
49
verify (preparedStatement ).setNull (1 , Types .VARCHAR );
47
50
}
48
51
49
- @ Test public void testSetParameterValueWithNullAndTypeName () throws SQLException {
52
+ @ Test
53
+ public void testSetParameterValueWithNullAndTypeName () throws SQLException {
50
54
StatementCreatorUtils .setParameterValue (preparedStatement , 1 , Types .VARCHAR , "mytype" , null );
51
55
verify (preparedStatement ).setNull (1 , Types .VARCHAR , "mytype" );
52
56
}
53
57
54
- @ Test public void testSetParameterValueWithNullAndUnknownType () throws SQLException {
58
+ @ Test
59
+ public void testSetParameterValueWithNullAndUnknownType () throws SQLException {
55
60
StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
56
61
verify (preparedStatement ).setNull (1 , Types .NULL );
57
62
}
58
63
59
64
@ Test
60
65
public void testSetParameterValueWithNullAndUnknownTypeOnInformix () throws SQLException {
66
+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
61
67
Connection con = mock (Connection .class );
62
- DatabaseMetaData metaData = mock (DatabaseMetaData .class );
68
+ DatabaseMetaData dbmd = mock (DatabaseMetaData .class );
63
69
given (preparedStatement .getConnection ()).willReturn (con );
64
- given (con .getMetaData ()).willReturn (metaData );
65
- given (metaData .getDatabaseProductName ()).willReturn ("Informix Dynamic Server" );
66
- given (metaData .getDriverName ()).willReturn ("Informix Driver" );
70
+ given (con .getMetaData ()).willReturn (dbmd );
71
+ given (dbmd .getDatabaseProductName ()).willReturn ("Informix Dynamic Server" );
72
+ given (dbmd .getDriverName ()).willReturn ("Informix Driver" );
67
73
StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
68
- verify (metaData ).getDatabaseProductName ();
69
- verify (metaData ).getDriverName ();
74
+ verify (dbmd ).getDatabaseProductName ();
75
+ verify (dbmd ).getDriverName ();
70
76
verify (preparedStatement ).setObject (1 , null );
77
+ assertEquals (1 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
71
78
}
72
79
73
- @ Test public void testSetParameterValueWithNullAndUnknownTypeOnDerbyEmbedded () throws SQLException {
80
+ @ Test
81
+ public void testSetParameterValueWithNullAndUnknownTypeOnDerbyEmbedded () throws SQLException {
82
+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
74
83
Connection con = mock (Connection .class );
75
- DatabaseMetaData metaData = mock (DatabaseMetaData .class );
84
+ DatabaseMetaData dbmd = mock (DatabaseMetaData .class );
76
85
given (preparedStatement .getConnection ()).willReturn (con );
77
- given (con .getMetaData ()).willReturn (metaData );
78
- given (metaData .getDatabaseProductName ()).willReturn ("Apache Derby" );
79
- given (metaData .getDriverName ()).willReturn ("Apache Derby Embedded Driver" );
86
+ given (con .getMetaData ()).willReturn (dbmd );
87
+ given (dbmd .getDatabaseProductName ()).willReturn ("Apache Derby" );
88
+ given (dbmd .getDriverName ()).willReturn ("Apache Derby Embedded Driver" );
80
89
StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
81
- verify (metaData ).getDatabaseProductName ();
82
- verify (metaData ).getDriverName ();
90
+ verify (dbmd ).getDatabaseProductName ();
91
+ verify (dbmd ).getDriverName ();
83
92
verify (preparedStatement ).setNull (1 , Types .VARCHAR );
93
+ assertEquals (1 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
94
+ }
95
+
96
+ @ Test
97
+ public void testSetParameterValueWithNullAndGetParameterTypeWorking () throws SQLException {
98
+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
99
+ ParameterMetaData pmd = mock (ParameterMetaData .class );
100
+ given (preparedStatement .getParameterMetaData ()).willReturn (pmd );
101
+ given (pmd .getParameterType (1 )).willReturn (Types .SMALLINT );
102
+ StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
103
+ verify (pmd ).getParameterType (1 );
104
+ verify (preparedStatement , never ()).getConnection ();
105
+ verify (preparedStatement ).setNull (1 , Types .SMALLINT );
106
+ assertTrue (StatementCreatorUtils .driversWithNoSupportForGetParameterType .isEmpty ());
107
+ }
108
+
109
+ @ Test
110
+ public void testSetParameterValueWithNullAndGetParameterTypeWorkingButNotForOtherDriver () throws SQLException {
111
+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
112
+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .add ("Oracle JDBC Driver" );
113
+ Connection con = mock (Connection .class );
114
+ DatabaseMetaData dbmd = mock (DatabaseMetaData .class );
115
+ ParameterMetaData pmd = mock (ParameterMetaData .class );
116
+ given (preparedStatement .getConnection ()).willReturn (con );
117
+ given (con .getMetaData ()).willReturn (dbmd );
118
+ given (dbmd .getDriverName ()).willReturn ("Apache Derby Embedded Driver" );
119
+ given (preparedStatement .getParameterMetaData ()).willReturn (pmd );
120
+ given (pmd .getParameterType (1 )).willReturn (Types .SMALLINT );
121
+ StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
122
+ verify (dbmd ).getDriverName ();
123
+ verify (pmd ).getParameterType (1 );
124
+ verify (preparedStatement ).setNull (1 , Types .SMALLINT );
125
+ assertEquals (1 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
126
+ }
127
+
128
+ @ Test
129
+ public void testSetParameterValueWithNullAndUnknownTypeAndGetParameterTypeNotWorking () throws SQLException {
130
+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
131
+ Connection con = mock (Connection .class );
132
+ DatabaseMetaData dbmd = mock (DatabaseMetaData .class );
133
+ given (preparedStatement .getConnection ()).willReturn (con );
134
+ given (con .getMetaData ()).willReturn (dbmd );
135
+ given (dbmd .getDatabaseProductName ()).willReturn ("Apache Derby" );
136
+ given (dbmd .getDriverName ()).willReturn ("Apache Derby Embedded Driver" );
137
+ StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
138
+ verify (dbmd ).getDatabaseProductName ();
139
+ verify (dbmd ).getDriverName ();
140
+ verify (preparedStatement ).setNull (1 , Types .VARCHAR );
141
+ assertEquals (1 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
142
+
143
+ reset (preparedStatement , con , dbmd );
144
+ ParameterMetaData pmd = mock (ParameterMetaData .class );
145
+ given (preparedStatement .getConnection ()).willReturn (con );
146
+ given (con .getMetaData ()).willReturn (dbmd );
147
+ given (preparedStatement .getParameterMetaData ()).willReturn (pmd );
148
+ given (pmd .getParameterType (1 )).willThrow (new SQLException ("unsupported" ));
149
+ given (dbmd .getDatabaseProductName ()).willReturn ("Informix Dynamic Server" );
150
+ given (dbmd .getDriverName ()).willReturn ("Informix Driver" );
151
+ StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
152
+ verify (pmd ).getParameterType (1 );
153
+ verify (dbmd ).getDatabaseProductName ();
154
+ verify (dbmd ).getDriverName ();
155
+ verify (preparedStatement ).setObject (1 , null );
156
+ assertEquals (2 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
157
+
158
+ reset (preparedStatement , con , dbmd , pmd );
159
+ given (preparedStatement .getConnection ()).willReturn (con );
160
+ given (con .getMetaData ()).willReturn (dbmd );
161
+ given (dbmd .getDatabaseProductName ()).willReturn ("Informix Dynamic Server" );
162
+ given (dbmd .getDriverName ()).willReturn ("Informix Driver" );
163
+ StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
164
+ verify (preparedStatement , never ()).getParameterMetaData ();
165
+ verify (dbmd ).getDatabaseProductName ();
166
+ verify (dbmd ).getDriverName ();
167
+ verify (preparedStatement ).setObject (1 , null );
168
+ assertEquals (2 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
84
169
}
85
170
86
171
@ Test
0 commit comments