1818
1919import java .sql .Connection ;
2020import java .sql .DatabaseMetaData ;
21+ import java .sql .ParameterMetaData ;
2122import java .sql .PreparedStatement ;
2223import java .sql .SQLException ;
2324import java .sql .Types ;
2627import org .junit .Before ;
2728import org .junit .Test ;
2829
30+ import static org .junit .Assert .*;
2931import static org .mockito .BDDMockito .*;
3032
3133/**
@@ -41,46 +43,129 @@ public void setUp() {
4143 preparedStatement = mock (PreparedStatement .class );
4244 }
4345
44- @ Test public void testSetParameterValueWithNullAndType () throws SQLException {
46+ @ Test
47+ public void testSetParameterValueWithNullAndType () throws SQLException {
4548 StatementCreatorUtils .setParameterValue (preparedStatement , 1 , Types .VARCHAR , null , null );
4649 verify (preparedStatement ).setNull (1 , Types .VARCHAR );
4750 }
4851
49- @ Test public void testSetParameterValueWithNullAndTypeName () throws SQLException {
52+ @ Test
53+ public void testSetParameterValueWithNullAndTypeName () throws SQLException {
5054 StatementCreatorUtils .setParameterValue (preparedStatement , 1 , Types .VARCHAR , "mytype" , null );
5155 verify (preparedStatement ).setNull (1 , Types .VARCHAR , "mytype" );
5256 }
5357
54- @ Test public void testSetParameterValueWithNullAndUnknownType () throws SQLException {
58+ @ Test
59+ public void testSetParameterValueWithNullAndUnknownType () throws SQLException {
5560 StatementCreatorUtils .setParameterValue (preparedStatement , 1 , SqlTypeValue .TYPE_UNKNOWN , null , null );
5661 verify (preparedStatement ).setNull (1 , Types .NULL );
5762 }
5863
5964 @ Test
6065 public void testSetParameterValueWithNullAndUnknownTypeOnInformix () throws SQLException {
66+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
6167 Connection con = mock (Connection .class );
62- DatabaseMetaData metaData = mock (DatabaseMetaData .class );
68+ DatabaseMetaData dbmd = mock (DatabaseMetaData .class );
6369 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" );
6773 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 ();
7076 verify (preparedStatement ).setObject (1 , null );
77+ assertEquals (1 , StatementCreatorUtils .driversWithNoSupportForGetParameterType .size ());
7178 }
7279
73- @ Test public void testSetParameterValueWithNullAndUnknownTypeOnDerbyEmbedded () throws SQLException {
80+ @ Test
81+ public void testSetParameterValueWithNullAndUnknownTypeOnDerbyEmbedded () throws SQLException {
82+ StatementCreatorUtils .driversWithNoSupportForGetParameterType .clear ();
7483 Connection con = mock (Connection .class );
75- DatabaseMetaData metaData = mock (DatabaseMetaData .class );
84+ DatabaseMetaData dbmd = mock (DatabaseMetaData .class );
7685 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" );
8089 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 ();
8392 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 ());
84169 }
85170
86171 @ Test
0 commit comments