1 package com.opencsv;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import org.junit.jupiter.api.Test;
19
20 import java.io.IOException;
21 import java.sql.*;
22 import java.text.DecimalFormat;
23 import java.text.DecimalFormatSymbols;
24 import java.text.SimpleDateFormat;
25 import java.util.Calendar;
26 import java.util.GregorianCalendar;
27 import java.util.Locale;
28
29 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
30 import static org.mockito.Mockito.mock;
31 import static org.mockito.Mockito.when;
32
33 public class ResultSetHelperServiceTest {
34
35 private static final String BUILDSTRING = "abcdefghijklmnopqrstuvwxyz";
36
37 @Test
38 public void canPrintColumnNames() throws SQLException {
39
40 ResultSet resultSet = mock(ResultSet.class);
41
42 String[] expectedNames = {"name1", "name2", "name3"};
43
44 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames);
45
46 when(resultSet.getMetaData()).thenReturn(metaData);
47
48
49
50 ResultSetHelperService service = new ResultSetHelperService();
51
52 String[] columnNames = service.getColumnNames(resultSet);
53 assertArrayEquals(expectedNames, columnNames);
54 }
55
56 @Test
57 public void getObjectFromResultSet() throws SQLException, IOException {
58 String[] expectedNames = {"object", "Null Object"};
59 String[] realValues = {"foo", null};
60 String[] expectedValues = {"foo", ""};
61 int[] expectedTypes = {Types.JAVA_OBJECT, Types.JAVA_OBJECT};
62
63 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
64 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
65
66 ResultSetHelperService service = new ResultSetHelperService();
67
68 String[] columnValues = service.getColumnValues(resultSet);
69 assertArrayEquals(expectedValues, columnValues);
70 }
71
72 @Test
73 public void getBitFromResultSet() throws SQLException, IOException {
74
75 String[] expectedNames = {"bit", "Null bit"};
76 String[] realValues = {"1", null};
77 String[] expectedValues = {"1", ""};
78 int[] expectedTypes = {Types.BIT, Types.BIT};
79
80 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
81 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
82
83 ResultSetHelperService service = new ResultSetHelperService();
84
85 String[] columnValues = service.getColumnValues(resultSet);
86 assertArrayEquals(expectedValues, columnValues);
87 }
88
89 @Test
90 public void getBooleanFromResultSet() throws SQLException, IOException {
91 String[] expectedNames = {"true", "false", "TRUE", "FALSE", "Null"};
92 String[] realValues = {"true", "false", "TRUE", "FALSE", null};
93 String[] expectedValues = {"true", "false", "true", "false", ""};
94 int[] expectedTypes = {Types.BOOLEAN, Types.BOOLEAN, Types.BOOLEAN, Types.BOOLEAN, Types.BOOLEAN};
95
96 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
97 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
98
99 ResultSetHelperService service = new ResultSetHelperService();
100
101 String[] columnValues = service.getColumnValues(resultSet);
102 assertArrayEquals(expectedValues, columnValues);
103 }
104
105 @Test
106 public void getBigIntFromResultSet() throws SQLException, IOException {
107 String[] expectedNames = {"BigInt", "Null BigInt"};
108 String[] realValues = {"11772935803167061222", null};
109 String[] expectedValues = {"11772935803167061222", ""};
110 int[] expectedTypes = {Types.BIGINT, Types.BIGINT};
111
112 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
113 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
114
115 ResultSetHelperService service = new ResultSetHelperService();
116
117 String[] columnValues = service.getColumnValues(resultSet);
118 assertArrayEquals(expectedValues, columnValues);
119 }
120
121 @Test
122 public void getBigDecimalFromResultSet() throws SQLException, IOException {
123
124 String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
125 String[] realValues = {"1.1", "2.2", "3.3", "4.4", "5.5", null};
126 String[] expectedValues = {"1.1", "2.2", "3.3", "4.4", "5.5", ""};
127 int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
128
129 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
130 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
131
132 ResultSetHelperService service = new ResultSetHelperService();
133
134 String[] columnValues = service.getColumnValues(resultSet);
135 assertArrayEquals(expectedValues, columnValues);
136 }
137
138 @Test
139 public void issue121ConvertingNaNForDoubleOrFloat() throws SQLException, IOException {
140 String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
141 String[] realValues = {"1.1", Double.toString(Double.NaN), Float.toString(Float.NaN), "4.4", "5.5", null};
142 String[] expectedValues = {"1.1", "NaN", "NaN", "4.4", "5.5", ""};
143 int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
144
145 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
146 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
147
148 ResultSetHelperService service = new ResultSetHelperService();
149
150 String[] columnValues = service.getColumnValues(resultSet);
151 assertArrayEquals(expectedValues, columnValues);
152 }
153
154 @Test
155 public void issue121ConvertingPositiveInfinityForDoubleOrFloat() throws SQLException, IOException {
156 String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
157 String[] realValues = {"1.1", Double.toString(Double.POSITIVE_INFINITY), Float.toString(Float.POSITIVE_INFINITY), "4.4", "5.5", null};
158 String[] expectedValues = {"1.1", "Infinity", "Infinity", "4.4", "5.5", ""};
159 int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
160
161 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
162 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
163
164 ResultSetHelperService service = new ResultSetHelperService();
165
166 String[] columnValues = service.getColumnValues(resultSet);
167 assertArrayEquals(expectedValues, columnValues);
168 }
169
170 @Test
171 public void issue121ConvertingNegativeInfinityForDoubleOrFloat() throws SQLException, IOException {
172 String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
173 String[] realValues = {"1.1", Double.toString(Double.NEGATIVE_INFINITY), Float.toString(Float.NEGATIVE_INFINITY), "4.4", "5.5", null};
174 String[] expectedValues = {"1.1", "-Infinity", "-Infinity", "4.4", "5.5", ""};
175 int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
176
177 System.out.println(realValues[1]);
178 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
179 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
180
181 ResultSetHelperService service = new ResultSetHelperService();
182
183 String[] columnValues = service.getColumnValues(resultSet);
184 assertArrayEquals(expectedValues, columnValues);
185 }
186
187 @Test
188 public void getIntegerFromResultSet() throws SQLException, IOException {
189 String[] expectedNames = {"Integer", "tinyint", "smallint", "Null"};
190 String[] realValues = {"1", "2", "3", null};
191 String[] expectedValues = {"1", "2", "3", ""};
192 int[] expectedTypes = {Types.INTEGER, Types.TINYINT, Types.SMALLINT, Types.INTEGER};
193
194 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
195 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
196
197 ResultSetHelperService service = new ResultSetHelperService();
198
199 String[] columnValues = service.getColumnValues(resultSet);
200 assertArrayEquals(expectedValues, columnValues);
201 }
202
203 @Test
204 public void getCharFromResultSet() throws SQLException, IOException {
205
206 String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
207 String[] realValues = {"a", "b", "c", null};
208 String[] expectedValues = {"a", "b", "c", ""};
209 int[] expectedTypes = {Types.LONGVARCHAR, Types.VARCHAR, Types.CHAR, Types.CHAR};
210
211 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
212 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
213
214 ResultSetHelperService service = new ResultSetHelperService();
215
216 String[] columnValues = service.getColumnValues(resultSet);
217 assertArrayEquals(expectedValues, columnValues);
218 }
219
220 @Test
221 public void getCharHandlesNulls() throws SQLException, IOException {
222
223 String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
224 String[] realValues = {"a", "b", "c", null};
225 String[] expectedValues = {"a", "b", "c", ""};
226 int[] expectedTypes = {Types.LONGVARCHAR, Types.VARCHAR, Types.CHAR, Types.CHAR};
227
228 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
229 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
230
231 ResultSetHelperService service = new ResultSetHelperService();
232
233 String[] columnValues = service.getColumnValues(resultSet, true);
234 assertArrayEquals(expectedValues, columnValues);
235 }
236
237 @Test
238 public void getNCharFromResultSet() throws SQLException, IOException {
239
240 String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
241 String[] realValues = {"a", "b", "c", null};
242 String[] expectedValues = {"a", "b", "c", ""};
243 int[] expectedTypes = {Types.LONGNVARCHAR, Types.NVARCHAR, Types.NCHAR, Types.NCHAR};
244
245 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
246 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
247
248 ResultSetHelperService service = new ResultSetHelperService();
249
250 String[] columnValues = service.getColumnValues(resultSet);
251 assertArrayEquals(expectedValues, columnValues);
252 }
253
254 @Test
255 public void getNCharHandlesNulls() throws SQLException, IOException {
256
257 String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
258 String[] realValues = {"a", "b", "c", null};
259 String[] expectedValues = {"a", "b", "c", ""};
260 int[] expectedTypes = {Types.LONGNVARCHAR, Types.NVARCHAR, Types.NCHAR, Types.NCHAR};
261
262 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
263 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
264
265 ResultSetHelperService service = new ResultSetHelperService();
266
267 String[] columnValues = service.getColumnValues(resultSet, true);
268 assertArrayEquals(expectedValues, columnValues);
269 }
270
271 @Test
272 public void getUnsupportedFromResultSet() throws SQLException, IOException {
273
274 String[] expectedNames = {"Array", "Null"};
275 String[] realValues = {"1", null};
276 String[] expectedValues = {"", ""};
277 int[] expectedTypes = {Types.ARRAY, Types.ARRAY};
278
279 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
280 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
281
282 ResultSetHelperService service = new ResultSetHelperService();
283
284 String[] columnValues = service.getColumnValues(resultSet);
285 assertArrayEquals(expectedValues, columnValues);
286 }
287
288 @Test
289 public void getDateFromResultSet() throws SQLException, IOException {
290
291 Date date = new Date(new GregorianCalendar(2009, Calendar.DECEMBER, 15).getTimeInMillis());
292 long dateInMilliSeconds = date.getTime();
293 SimpleDateFormat dateFormat = new SimpleDateFormat(ResultSetHelperService.DEFAULT_DATE_FORMAT);
294
295 String[] expectedNames = {"Date", "Null"};
296 String[] realValues = {Long.toString(dateInMilliSeconds), null};
297 String[] expectedValues = {dateFormat.format(date), ""};
298 int[] expectedTypes = {Types.DATE, Types.DATE};
299
300 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
301 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
302
303 ResultSetHelperService service = new ResultSetHelperService();
304
305 String[] columnValues = service.getColumnValues(resultSet);
306 assertArrayEquals(expectedValues, columnValues);
307 }
308
309 @Test
310 public void getDateFromResultSetUsingCustomFormat() throws SQLException, IOException {
311
312 String customDateFormat = "mm/dd/yy";
313 Date date = new Date(new GregorianCalendar(2009, Calendar.DECEMBER, 15).getTimeInMillis());
314 long dateInMilliSeconds = date.getTime();
315 SimpleDateFormat dateFormat = new SimpleDateFormat(customDateFormat);
316
317 String[] expectedNames = {"Date", "Null"};
318 String[] realValues = {Long.toString(dateInMilliSeconds), null};
319 String[] expectedValues = {dateFormat.format(date), ""};
320 int[] expectedTypes = {Types.DATE, Types.DATE};
321
322 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
323 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
324
325 ResultSetHelperService service = new ResultSetHelperService();
326
327 String[] columnValues = service.getColumnValues(resultSet, false, customDateFormat, null);
328 assertArrayEquals(expectedValues, columnValues);
329 }
330
331 @Test
332 public void setDateFormat() throws SQLException, IOException {
333
334 String customDateFormat = "mm/dd/yy";
335 Date date = new Date(new GregorianCalendar(2009, Calendar.DECEMBER, 15).getTimeInMillis());
336 long dateInMilliSeconds = date.getTime();
337 SimpleDateFormat dateFormat = new SimpleDateFormat(customDateFormat);
338
339 String[] expectedNames = {"Date", "Null"};
340 String[] realValues = {Long.toString(dateInMilliSeconds), null};
341 String[] expectedValues = {dateFormat.format(date), ""};
342 int[] expectedTypes = {Types.DATE, Types.DATE};
343
344 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
345 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
346
347 ResultSetHelperService service = new ResultSetHelperService();
348 service.setDateFormat(customDateFormat);
349
350 String[] columnValues = service.getColumnValues(resultSet, false);
351 assertArrayEquals(expectedValues, columnValues);
352 }
353
354 @Test
355 public void getTimeFromResultSet() throws SQLException, IOException {
356
357
358 Time time = Time.valueOf("12:00:00");
359 long dateInMilliSeconds = time.getTime();
360
361 String[] expectedNames = {"Time", "Null"};
362 String[] realValues = {Long.toString(dateInMilliSeconds), null};
363 String[] expectedValues = {time.toString(), ""};
364 int[] expectedTypes = {Types.TIME, Types.TIME};
365
366 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
367 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
368
369 ResultSetHelperService service = new ResultSetHelperService();
370
371 String[] columnValues = service.getColumnValues(resultSet);
372 assertArrayEquals(expectedValues, columnValues);
373 }
374
375 @Test
376 public void getTimestampFromResultSet() throws SQLException, IOException {
377 Timestamp date = new Timestamp(new GregorianCalendar(2009, Calendar.DECEMBER, 15, 12, 0, 0).getTimeInMillis());
378 long dateInMilliSeconds = date.getTime();
379 SimpleDateFormat timeFormat = new SimpleDateFormat(ResultSetHelperService.DEFAULT_TIMESTAMP_FORMAT);
380
381 String[] expectedNames = {"Timestamp", "Null"};
382 String[] realValues = {Long.toString(dateInMilliSeconds), null};
383 String[] expectedValues = {timeFormat.format(date), ""};
384 int[] expectedTypes = {Types.TIMESTAMP, Types.TIMESTAMP};
385
386 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
387 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
388
389 ResultSetHelperService service = new ResultSetHelperService();
390
391 String[] columnValues = service.getColumnValues(resultSet);
392 assertArrayEquals(expectedValues, columnValues);
393 }
394
395 @Test
396 public void getTimestampFromResultSetWithCustomFormat() throws SQLException, IOException {
397 Timestamp date = new Timestamp(new GregorianCalendar(2009, Calendar.DECEMBER, 15, 12, 0, 0).getTimeInMillis());
398 long dateInMilliSeconds = date.getTime();
399 String customFormat = "mm/dd/yy HH:mm:ss";
400 SimpleDateFormat timeFormat = new SimpleDateFormat(customFormat);
401
402 String[] expectedNames = {"Timestamp", "Null"};
403 String[] realValues = {Long.toString(dateInMilliSeconds), null};
404 String[] expectedValues = {timeFormat.format(date), ""};
405 int[] expectedTypes = {Types.TIMESTAMP, Types.TIMESTAMP};
406
407 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
408 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
409
410 ResultSetHelperService service = new ResultSetHelperService();
411
412 String[] columnValues = service.getColumnValues(resultSet, false, null, customFormat);
413 assertArrayEquals(expectedValues, columnValues);
414 }
415
416 @Test
417 public void setDateTimeFormat() throws SQLException, IOException {
418 Timestamp date = new Timestamp(new GregorianCalendar(2009, Calendar.DECEMBER, 15, 12, 0, 0).getTimeInMillis());
419 long dateInMilliSeconds = date.getTime();
420 String customFormat = "mm/dd/yy HH:mm:ss";
421 SimpleDateFormat timeFormat = new SimpleDateFormat(customFormat);
422
423 String[] expectedNames = {"Timestamp", "Null"};
424 String[] realValues = {Long.toString(dateInMilliSeconds), null};
425 String[] expectedValues = {timeFormat.format(date), ""};
426 int[] expectedTypes = {Types.TIMESTAMP, Types.TIMESTAMP};
427
428 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
429 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
430
431 ResultSetHelperService service = new ResultSetHelperService();
432 service.setDateTimeFormat(customFormat);
433
434 String[] columnValues = service.getColumnValues(resultSet, false);
435 assertArrayEquals(expectedValues, columnValues);
436 }
437
438 @Test
439 public void getClobFromResultSet() throws SQLException, IOException {
440 String clobString = buildClobString(20);
441
442 String[] expectedNames = {"Clob", "Null"};
443 String[] realValues = {clobString, null};
444 String[] expectedValues = {clobString, ""};
445 int[] expectedTypes = {Types.CLOB, Types.CLOB};
446
447 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
448 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
449
450 ResultSetHelperService service = new ResultSetHelperService();
451
452 String[] columnValues = service.getColumnValues(resultSet);
453 assertArrayEquals(expectedValues, columnValues);
454 }
455
456 @Test
457 public void getEmptyClobFromResultSet() throws SQLException, IOException {
458 String clobString = buildClobString(0);
459
460 String[] expectedNames = {"Clob", "Null"};
461 String[] realValues = {clobString, null};
462 String[] expectedValues = {clobString, ""};
463 int[] expectedTypes = {Types.CLOB, Types.CLOB};
464
465 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
466 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
467
468 ResultSetHelperService service = new ResultSetHelperService();
469
470 String[] columnValues = service.getColumnValues(resultSet);
471 assertArrayEquals(expectedValues, columnValues);
472 }
473
474 @Test
475 public void getLargeClobFromResultSet() throws SQLException, IOException {
476 String clobString = buildClobString(ResultSetHelperService.CLOBBUFFERSIZE + 1);
477
478 String[] expectedNames = {"Clob", "Null"};
479 String[] realValues = {clobString, null};
480 String[] expectedValues = {clobString, ""};
481 int[] expectedTypes = {Types.CLOB, Types.CLOB};
482
483 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
484 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
485
486 ResultSetHelperService service = new ResultSetHelperService();
487
488 String[] columnValues = service.getColumnValues(resultSet);
489 assertArrayEquals(expectedValues, columnValues);
490 }
491
492 @Test
493 public void getNClobFromResultSet() throws SQLException, IOException {
494 String clobString = buildClobString(20);
495
496 String[] expectedNames = {"Clob", "Null"};
497 String[] realValues = {clobString, null};
498 String[] expectedValues = {clobString, ""};
499 int[] expectedTypes = {Types.NCLOB, Types.NCLOB};
500
501 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
502 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
503
504 ResultSetHelperService service = new ResultSetHelperService();
505
506 String[] columnValues = service.getColumnValues(resultSet);
507 assertArrayEquals(expectedValues, columnValues);
508 }
509
510 @Test
511 public void getEmptyNClobFromResultSet() throws SQLException, IOException {
512 String clobString = buildClobString(0);
513
514 String[] expectedNames = {"Clob", "Null"};
515 String[] realValues = {clobString, null};
516 String[] expectedValues = {clobString, ""};
517 int[] expectedTypes = {Types.NCLOB, Types.NCLOB};
518
519 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
520 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
521
522 ResultSetHelperService service = new ResultSetHelperService();
523
524 String[] columnValues = service.getColumnValues(resultSet);
525 assertArrayEquals(expectedValues, columnValues);
526 }
527
528 @Test
529 public void getLargeNClobFromResultSet() throws SQLException, IOException {
530 String clobString = buildClobString(ResultSetHelperService.CLOBBUFFERSIZE + 1);
531
532 String[] expectedNames = {"Clob", "Null"};
533 String[] realValues = {clobString, null};
534 String[] expectedValues = {clobString, ""};
535 int[] expectedTypes = {Types.NCLOB, Types.NCLOB};
536
537 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
538 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
539
540 ResultSetHelperService service = new ResultSetHelperService();
541
542 String[] columnValues = service.getColumnValues(resultSet);
543 assertArrayEquals(expectedValues, columnValues);
544 }
545
546 private String buildClobString(int clobsize) {
547 int iterations = clobsize / BUILDSTRING.length();
548 int substrsize = clobsize % BUILDSTRING.length();
549 StringBuilder sb = new StringBuilder(clobsize);
550
551 for (int i = 0; i < iterations; i++) {
552 sb.append(BUILDSTRING);
553 }
554
555 if (substrsize > 0) {
556 sb.append(BUILDSTRING, 0, substrsize);
557 }
558
559 return sb.toString();
560 }
561
562 @Test
563 public void formatNumbersIntPrimitives() throws SQLException, IOException {
564 String[] expectedNames = {"Integer", "tinyint", "smallint", "Null"};
565 String[] realValues = {"1", "2", "3", null};
566 String[] expectedValues = {"001", "002", "003", ""};
567 int[] expectedTypes = {Types.INTEGER, Types.TINYINT, Types.SMALLINT, Types.INTEGER};
568
569 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
570 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
571
572 ResultSetHelperService service = new ResultSetHelperService();
573 service.setIntegerFormat(new DecimalFormat("000"));
574 service.setFloatingPointFormat(new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH)));
575
576 String[] columnValues = service.getColumnValues(resultSet);
577 assertArrayEquals(expectedValues, columnValues);
578 }
579
580 @Test
581 public void formatNumbersFloatPrimitives() throws SQLException, IOException {
582 String[] expectedNames = {"double", "float"};
583 String[] realValues = {"2.2", "3.3"};
584 String[] expectedValues = {"2.20", "3.30"};
585 int[] expectedTypes = {Types.DOUBLE, Types.FLOAT};
586
587 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
588 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
589
590 ResultSetHelperService service = new ResultSetHelperService();
591 service.setIntegerFormat(new DecimalFormat("000"));
592 service.setFloatingPointFormat(new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH)));
593
594 String[] columnValues = service.getColumnValues(resultSet);
595 assertArrayEquals(expectedValues, columnValues);
596 }
597
598 @Test
599 public void formatNumbersObjects() throws SQLException, IOException {
600 String[] expectedNames = {"Decimal", "real", "numeric", "Null"};
601 String[] realValues = {"1.1", "4.4", "5.5", null};
602 String[] expectedValues = {"1.10", "4.40", "5.50", ""};
603 int[] expectedTypes = {Types.DECIMAL, Types.REAL, Types.NUMERIC, Types.DECIMAL};
604
605 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
606 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
607
608 ResultSetHelperService service = new ResultSetHelperService();
609 service.setIntegerFormat(new DecimalFormat("000"));
610 service.setFloatingPointFormat(new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH)));
611
612 String[] columnValues = service.getColumnValues(resultSet);
613 assertArrayEquals(expectedValues, columnValues);
614 }
615
616 @Test
617 public void formatBigInt() throws SQLException, IOException {
618 String[] expectedNames = {"BigInt", "Null BigInt"};
619 String[] realValues = {"11772935803167061222", null};
620 String[] expectedValues = {"1.177E19", ""};
621 int[] expectedTypes = {Types.BIGINT, Types.BIGINT};
622
623 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
624 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
625
626 ResultSetHelperService service = new ResultSetHelperService();
627 service.setIntegerFormat(new DecimalFormat("0.###E0", new DecimalFormatSymbols(Locale.ENGLISH)));
628
629 String[] columnValues = service.getColumnValues(resultSet);
630 assertArrayEquals(expectedValues, columnValues);
631 }
632
633 @Test
634 public void customNullDefault() throws SQLException, IOException {
635 final String customDefaultValue = "\\N";
636
637 String[] expectedNames = {"Null Column", "Not Null Column"};
638 String[] realValues = {null, "abcdef"};
639 String[] expectedValues = {customDefaultValue, "abcdef"};
640 int[] expectedTypes = {Types.VARCHAR, Types.VARCHAR};
641
642 ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
643 ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
644
645 ResultSetHelperService service = new ResultSetHelperService();
646 service.setNullDefault(customDefaultValue);
647
648 String[] columnValues = service.getColumnValues(resultSet);
649 assertArrayEquals(expectedValues, columnValues);
650 }
651
652 }