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