@@ -144,6 +144,82 @@ public void testCreateArrayTypeName() throws SQLException {
144144 assertThat (rs .next ()).isFalse ();
145145 }
146146
147+ // Test that Byte[] arrays are automatically widened to Long[] for INT64 type
148+ Long [] data ;
149+ array = JdbcArray .createArray ("INT64" , new Byte [] {1 , 2 , 3 , null , Byte .MAX_VALUE });
150+ assertThat (array .getBaseType ()).isEqualTo (Types .BIGINT );
151+ // Data should be stored as Long[]
152+ assertThat (array .getArray ()).isInstanceOf (Long [].class );
153+ data = (Long []) array .getArray ();
154+ assertThat (data [0 ]).isEqualTo (1L );
155+ assertThat (data [1 ]).isEqualTo (2L );
156+ assertThat (data [2 ]).isEqualTo (3L );
157+ assertThat (data [3 ]).isNull ();
158+ assertThat (data [4 ]).isEqualTo ((long ) Byte .MAX_VALUE );
159+
160+ try (ResultSet rs = array .getResultSet ()) {
161+ assertThat (rs .next ()).isTrue ();
162+ assertThat (rs .getByte (2 )).isEqualTo ((byte ) 1 );
163+ assertThat (rs .next ()).isTrue ();
164+ assertThat (rs .getByte (2 )).isEqualTo ((byte ) 2 );
165+ assertThat (rs .next ()).isTrue ();
166+ assertThat (rs .getByte (2 )).isEqualTo ((byte ) 3 );
167+ assertThat (rs .next ()).isTrue ();
168+ assertThat (rs .getByte (2 )).isEqualTo ((byte ) 0 );
169+ assertTrue (rs .wasNull ());
170+ assertThat (rs .next ()).isTrue ();
171+ assertThat (rs .getByte (2 )).isEqualTo (Byte .MAX_VALUE );
172+ assertThat (rs .next ()).isFalse ();
173+ }
174+
175+ // Test that Short[] arrays are automatically widened to Long[] for INT64 type
176+ array = JdbcArray .createArray ("INT64" , new Short [] {100 , 200 , null , Short .MAX_VALUE });
177+ assertThat (array .getBaseType ()).isEqualTo (Types .BIGINT );
178+ // Data should be stored as Long[]
179+ assertThat (array .getArray ()).isInstanceOf (Long [].class );
180+ data = (Long []) array .getArray ();
181+ assertThat (data [0 ]).isEqualTo (100L );
182+ assertThat (data [1 ]).isEqualTo (200L );
183+ assertThat (data [2 ]).isNull ();
184+ assertThat (data [3 ]).isEqualTo ((long ) Short .MAX_VALUE );
185+
186+ try (ResultSet rs = array .getResultSet ()) {
187+ assertThat (rs .next ()).isTrue ();
188+ assertThat (rs .getShort (2 )).isEqualTo ((short ) 100 );
189+ assertThat (rs .next ()).isTrue ();
190+ assertThat (rs .getShort (2 )).isEqualTo ((short ) 200 );
191+ assertThat (rs .next ()).isTrue ();
192+ assertThat (rs .getShort (2 )).isEqualTo ((short ) 0 );
193+ assertTrue (rs .wasNull ());
194+ assertThat (rs .next ()).isTrue ();
195+ assertThat (rs .getShort (2 )).isEqualTo (Short .MAX_VALUE );
196+ assertThat (rs .next ()).isFalse ();
197+ }
198+
199+ // Test that Integer[] arrays are automatically widened to Long[] for INT64 type
200+ array = JdbcArray .createArray ("INT64" , new Integer [] {1000 , 2000 , null , Integer .MAX_VALUE });
201+ assertThat (array .getBaseType ()).isEqualTo (Types .BIGINT );
202+ // Data should be stored as Long[]
203+ assertThat (array .getArray ()).isInstanceOf (Long [].class );
204+ data = (Long []) array .getArray ();
205+ assertThat (data [0 ]).isEqualTo (1000L );
206+ assertThat (data [1 ]).isEqualTo (2000L );
207+ assertThat (data [2 ]).isNull ();
208+ assertThat (data [3 ]).isEqualTo ((long ) Integer .MAX_VALUE );
209+
210+ try (ResultSet rs = array .getResultSet ()) {
211+ assertThat (rs .next ()).isTrue ();
212+ assertThat (rs .getInt (2 )).isEqualTo (1000 );
213+ assertThat (rs .next ()).isTrue ();
214+ assertThat (rs .getInt (2 )).isEqualTo (2000 );
215+ assertThat (rs .next ()).isTrue ();
216+ assertThat (rs .getInt (2 )).isEqualTo (0 );
217+ assertTrue (rs .wasNull ());
218+ assertThat (rs .next ()).isTrue ();
219+ assertThat (rs .getInt (2 )).isEqualTo (Integer .MAX_VALUE );
220+ assertThat (rs .next ()).isFalse ();
221+ }
222+
147223 array =
148224 JdbcArray .createArray ("NUMERIC" , new BigDecimal [] {BigDecimal .ONE , null , BigDecimal .TEN });
149225 assertThat (array .getBaseType ()).isEqualTo (Types .NUMERIC );
0 commit comments