44package de .bytefish .jsqlserverbulkinsert .records ;
55
66import com .microsoft .sqlserver .jdbc .ISQLServerBulkRecord ;
7- import com .microsoft .sqlserver .jdbc .SQLServerBulkCopy ;
87import com .microsoft .sqlserver .jdbc .SQLServerException ;
98import de .bytefish .jsqlserverbulkinsert .model .ColumnDefinition ;
109import de .bytefish .jsqlserverbulkinsert .model .ColumnMetaData ;
1413import java .util .Set ;
1514import java .util .stream .Collectors ;
1615import java .util .stream .IntStream ;
17- import java .util .stream .Stream ;
1816
1917public class SqlServerRecord <TEntity > implements ISQLServerBulkRecord {
2018
19+ private final Set <Integer > columnOrdinals ;
20+
2121 private final Iterator <TEntity > entities ;
2222
2323 private final List <ColumnMetaData > columnMetaData ;
2424
2525 private final SqlServerRecordBuilder <TEntity > builder ;
2626
27- public SqlServerRecord (List <ColumnDefinition <TEntity >> columnDefinition , Iterator <TEntity > entities ) {
28- if (columnDefinition == null ) {
27+ public SqlServerRecord (List <ColumnDefinition <TEntity >> columns , Iterator <TEntity > entities ) {
28+
29+ if (columns == null ) {
2930 throw new IllegalArgumentException ("columnDefinition" );
3031 }
3132
@@ -36,23 +37,25 @@ public SqlServerRecord(List<ColumnDefinition<TEntity>> columnDefinition, Iterato
3637 this .entities = entities ;
3738
3839 // Cache the Column Meta Data, so we don't calculate it for each Record:
39- this .columnMetaData = columnDefinition .stream ()
40- .map (x -> x . getColumnMetaData () )
40+ this .columnMetaData = columns .stream ()
41+ .map (ColumnDefinition :: getColumnMetaData )
4142 .collect (Collectors .toList ());
4243
43- // Cache a Values Builder to populate Records faster:
44- this .builder = new SqlServerRecordBuilder <TEntity >(columnDefinition );
45- }
44+ // Build the Object[] values Builder to populate the records faster:
45+ this .builder = new SqlServerRecordBuilder <>(columns );
4646
47- @ Override
48- public Set <Integer > getColumnOrdinals () {
49- // Simply return the length of the List:
50- return IntStream
47+ // Cache the Column Ordinals:
48+ this .columnOrdinals = IntStream
5149 .range (1 , columnMetaData .size () + 1 )
5250 .boxed ()
5351 .collect (Collectors .toSet ());
5452 }
5553
54+ @ Override
55+ public Set <Integer > getColumnOrdinals () {
56+ return columnOrdinals ;
57+ }
58+
5659 @ Override
5760 public String getColumnName (int i ) {
5861 return columnMetaData .get (i -1 ).getName ();
0 commit comments