Skip to content

Commit b537eff

Browse files
committed
Minimuze use of java.util.Calendar
1 parent 59535bf commit b537eff

File tree

12 files changed

+87
-81
lines changed

12 files changed

+87
-81
lines changed

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/BatchInsert.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package org.embulk.output.jdbc;
22

33
import java.math.BigDecimal;
4-
import java.util.Calendar;
54
import java.io.IOException;
65
import java.sql.SQLException;
76
import java.time.Instant;
7+
import java.time.ZoneId;
88

99
public interface BatchInsert
1010
{
@@ -47,9 +47,9 @@ public interface BatchInsert
4747

4848
public void setBytes(byte[] v) throws IOException, SQLException;
4949

50-
public void setSqlDate(Instant v, Calendar cal) throws IOException, SQLException;
50+
public void setSqlDate(Instant v, ZoneId zone) throws IOException, SQLException;
5151

52-
public void setSqlTime(Instant v, Calendar cal) throws IOException, SQLException;
52+
public void setSqlTime(Instant v, ZoneId zone) throws IOException, SQLException;
5353

54-
public void setSqlTimestamp(Instant v, Calendar cal) throws IOException, SQLException;
54+
public void setSqlTimestamp(Instant v, ZoneId zone) throws IOException, SQLException;
5555
}

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/StandardBatchInsert.java

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package org.embulk.output.jdbc;
22

3-
import java.util.Calendar;
43
import java.io.IOException;
54
import java.math.BigDecimal;
65
import java.sql.BatchUpdateException;
76
import java.sql.PreparedStatement;
87
import java.sql.SQLException;
9-
import java.sql.Date;
108
import java.sql.Time;
119
import java.time.Instant;
10+
import java.time.ZoneId;
11+
import java.util.Locale;
1212
import java.util.Optional;
1313
import org.slf4j.Logger;
1414
import org.slf4j.LoggerFactory;
@@ -184,28 +184,31 @@ public void setBytes(byte[] v) throws IOException, SQLException
184184
nextColumn(v.length + 4);
185185
}
186186

187-
public void setSqlDate(final Instant v, final Calendar cal) throws IOException, SQLException
187+
public void setSqlDate(final Instant v, final ZoneId zone) throws IOException, SQLException
188188
{
189189
// JavaDoc of java.sql.Time says:
190190
// >> To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.
191+
final java.util.Calendar cal = java.util.Calendar.getInstance(java.util.TimeZone.getTimeZone(zone), Locale.ENGLISH);
191192
cal.setTimeInMillis(v.getEpochSecond() * 1000);
192-
cal.set(Calendar.SECOND, 0);
193-
cal.set(Calendar.MINUTE, 0);
194-
cal.set(Calendar.HOUR_OF_DAY, 0);
195-
Date normalized = new Date(cal.getTimeInMillis());
193+
cal.set(java.util.Calendar.SECOND, 0);
194+
cal.set(java.util.Calendar.MINUTE, 0);
195+
cal.set(java.util.Calendar.HOUR_OF_DAY, 0);
196+
final java.sql.Date normalized = new java.sql.Date(cal.getTimeInMillis());
196197
batch.setDate(index, normalized, cal);
197198
nextColumn(32);
198199
}
199200

200-
public void setSqlTime(final Instant v, final Calendar cal) throws IOException, SQLException
201+
public void setSqlTime(final Instant v, final ZoneId zone) throws IOException, SQLException
201202
{
203+
final java.util.Calendar cal = java.util.Calendar.getInstance(java.util.TimeZone.getTimeZone(zone), Locale.ENGLISH);
202204
Time t = new Time(v.toEpochMilli());
203205
batch.setTime(index, t, cal);
204206
nextColumn(32);
205207
}
206208

207-
public void setSqlTimestamp(final Instant v, final Calendar cal) throws IOException, SQLException
209+
public void setSqlTimestamp(final Instant v, final ZoneId zone) throws IOException, SQLException
208210
{
211+
final java.util.Calendar cal = java.util.Calendar.getInstance(java.util.TimeZone.getTimeZone(zone), Locale.ENGLISH);
209212
java.sql.Timestamp t = new java.sql.Timestamp(v.toEpochMilli());
210213
t.setNanos(v.getNano());
211214
batch.setTimestamp(index, t, cal);

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/setter/ColumnSetterFactory.java

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.embulk.output.jdbc.setter;
22

3-
import java.util.Calendar;
4-
import java.util.Locale;
5-
import java.util.TimeZone;
3+
import java.time.ZoneId;
64
import java.util.Optional;
75
import java.sql.Types;
86
import org.embulk.config.ConfigSource;
@@ -59,37 +57,37 @@ public ColumnSetter newColumnSetter(JdbcColumn column, JdbcColumnOption option)
5957
case "nstring":
6058
return new NStringColumnSetter(batch, column, newDefaultValueSetter(column, option), newTimestampFormatter(option));
6159
case "date":
62-
return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
60+
return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
6361
case "time":
64-
return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
62+
return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
6563
case "timestamp":
66-
return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
64+
return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
6765
case "decimal":
6866
return new BigDecimalColumnSetter(batch, column, newDefaultValueSetter(column, option));
6967
case "json":
7068
return new JsonColumnSetter(batch, column, newDefaultValueSetter(column, option));
7169
case "null":
7270
return new NullColumnSetter(batch, column, newDefaultValueSetter(column, option));
7371
case "pass":
74-
return new PassThroughColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
72+
return new PassThroughColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
7573
default:
7674
throw new ConfigException(String.format("Unknown value_type '%s' for column '%s'", option.getValueType(), column.getName()));
7775
}
7876
}
7977

80-
protected TimestampFormatter newTimestampFormatter(JdbcColumnOption option)
78+
protected final TimestampFormatter newTimestampFormatter(JdbcColumnOption option)
8179
{
8280
final String format = option.getTimestampFormat();
8381
final String timezone = option.getTimeZone().orElse(this.defaultTimeZone);
8482
return TimestampFormatter.builder(format, true).setDefaultZoneFromString(timezone).build();
8583
}
8684

87-
protected Calendar newCalendar(JdbcColumnOption option)
85+
protected final ZoneId newZoneId(final JdbcColumnOption option)
8886
{
89-
return Calendar.getInstance(TimeZone.getTimeZone(getTimeZone(option)), Locale.ENGLISH);
87+
return ZoneId.of(this.getTimeZone(option));
9088
}
9189

92-
protected String getTimeZone(JdbcColumnOption option)
90+
protected final String getTimeZone(JdbcColumnOption option)
9391
{
9492
return option.getTimeZone().orElse(defaultTimeZone);
9593
}
@@ -151,11 +149,11 @@ public ColumnSetter newCoalesceColumnSetter(JdbcColumn column, JdbcColumnOption
151149

152150
// Time
153151
case Types.DATE:
154-
return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
152+
return new SqlDateColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
155153
case Types.TIME:
156-
return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
154+
return new SqlTimeColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
157155
case Types.TIMESTAMP:
158-
return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newCalendar(option));
156+
return new SqlTimestampColumnSetter(batch, column, newDefaultValueSetter(column, option), newZoneId(option));
159157

160158
// Null
161159
case Types.NULL:

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/setter/PassThroughColumnSetter.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.embulk.output.jdbc.setter;
22

3-
import java.util.Calendar;
43
import java.io.IOException;
54
import java.sql.SQLException;
65
import java.time.Instant;
6+
import java.time.ZoneId;
77

88
import org.embulk.output.jdbc.JdbcColumn;
99
import org.embulk.output.jdbc.BatchInsert;
@@ -12,14 +12,14 @@
1212
public class PassThroughColumnSetter
1313
extends ColumnSetter
1414
{
15-
private final Calendar calendar;
15+
private final ZoneId zone;
1616

1717
public PassThroughColumnSetter(BatchInsert batch, JdbcColumn column,
1818
DefaultValueSetter defaultValue,
19-
Calendar calendar)
19+
ZoneId zone)
2020
{
2121
super(batch, column, defaultValue);
22-
this.calendar = calendar;
22+
this.zone = zone;
2323
}
2424

2525
@Override
@@ -55,7 +55,7 @@ public void stringValue(String v) throws IOException, SQLException
5555
@Override
5656
public void timestampValue(final Instant v) throws IOException, SQLException
5757
{
58-
batch.setSqlTimestamp(v, calendar);
58+
batch.setSqlTimestamp(v, this.zone);
5959
}
6060

6161
@Override

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/setter/SqlDateColumnSetter.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.embulk.output.jdbc.setter;
22

3-
import java.util.Calendar;
43
import java.io.IOException;
54
import java.sql.SQLException;
65
import java.time.Instant;
6+
import java.time.ZoneId;
77

88
import org.embulk.output.jdbc.JdbcColumn;
99
import org.embulk.output.jdbc.BatchInsert;
@@ -12,14 +12,14 @@
1212
public class SqlDateColumnSetter
1313
extends ColumnSetter
1414
{
15-
protected final Calendar calendar;
15+
protected final ZoneId zone;
1616

1717
public SqlDateColumnSetter(BatchInsert batch, JdbcColumn column,
1818
DefaultValueSetter defaultValue,
19-
Calendar calendar)
19+
ZoneId zone)
2020
{
2121
super(batch, column, defaultValue);
22-
this.calendar = calendar;
22+
this.zone = zone;
2323
}
2424

2525
@Override
@@ -55,7 +55,7 @@ public void stringValue(String v) throws IOException, SQLException
5555
@Override
5656
public void timestampValue(final Instant v) throws IOException, SQLException
5757
{
58-
batch.setSqlDate(v, calendar);
58+
batch.setSqlDate(v, this.zone);
5959
}
6060

6161
@Override

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/setter/SqlTimeColumnSetter.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.embulk.output.jdbc.setter;
22

3-
import java.util.Calendar;
43
import java.io.IOException;
54
import java.sql.SQLException;
65
import java.time.Instant;
6+
import java.time.ZoneId;
77

88
import org.embulk.output.jdbc.JdbcColumn;
99
import org.embulk.output.jdbc.BatchInsert;
@@ -12,14 +12,14 @@
1212
public class SqlTimeColumnSetter
1313
extends ColumnSetter
1414
{
15-
protected final Calendar calendar;
15+
protected final ZoneId zone;
1616

1717
public SqlTimeColumnSetter(BatchInsert batch, JdbcColumn column,
1818
DefaultValueSetter defaultValue,
19-
Calendar calendar)
19+
ZoneId zone)
2020
{
2121
super(batch, column, defaultValue);
22-
this.calendar = calendar;
22+
this.zone = zone;
2323
}
2424

2525
@Override
@@ -55,7 +55,7 @@ public void stringValue(String v) throws IOException, SQLException
5555
@Override
5656
public void timestampValue(final Instant v) throws IOException, SQLException
5757
{
58-
batch.setSqlTime(v, calendar);
58+
batch.setSqlTime(v, this.zone);
5959
}
6060

6161
@Override

Diff for: embulk-output-jdbc/src/main/java/org/embulk/output/jdbc/setter/SqlTimestampColumnSetter.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.embulk.output.jdbc.setter;
22

3-
import java.util.Calendar;
43
import java.io.IOException;
54
import java.sql.SQLException;
65
import java.time.Instant;
6+
import java.time.ZoneId;
77

88
import org.embulk.output.jdbc.JdbcColumn;
99
import org.embulk.output.jdbc.BatchInsert;
@@ -12,14 +12,14 @@
1212
public class SqlTimestampColumnSetter
1313
extends ColumnSetter
1414
{
15-
protected final Calendar calendar;
15+
protected final ZoneId zone;
1616

1717
public SqlTimestampColumnSetter(BatchInsert batch, JdbcColumn column,
1818
DefaultValueSetter defaultValue,
19-
Calendar calendar)
19+
ZoneId zone)
2020
{
2121
super(batch, column, defaultValue);
22-
this.calendar = calendar;
22+
this.zone = zone;
2323
}
2424

2525
@Override
@@ -55,7 +55,7 @@ public void stringValue(String v) throws IOException, SQLException
5555
@Override
5656
public void timestampValue(final Instant v) throws IOException, SQLException
5757
{
58-
batch.setSqlTimestamp(v, calendar);
58+
batch.setSqlTimestamp(v, this.zone);
5959
}
6060

6161
@Override

Diff for: embulk-output-oracle/src/main/java/org/embulk/output/oracle/DirectBatchInsert.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import java.text.DateFormat;
88
import java.text.SimpleDateFormat;
99
import java.time.Instant;
10+
import java.time.ZoneId;
1011
import java.util.ArrayList;
1112
import java.util.Arrays;
12-
import java.util.Calendar;
1313
import java.util.List;
1414

1515
import org.embulk.output.jdbc.BatchInsert;
@@ -260,24 +260,24 @@ public void setBytes(byte[] v) throws IOException, SQLException
260260
}
261261

262262
@Override
263-
public void setSqlDate(final Instant v, final Calendar calendar) throws IOException, SQLException
263+
public void setSqlDate(final Instant v, final ZoneId zone) throws IOException, SQLException
264264
{
265265
throw new SQLException("Unsupported");
266266
}
267267

268268
@Override
269-
public void setSqlTime(final Instant v, final Calendar calendar) throws IOException, SQLException
269+
public void setSqlTime(final Instant v, final ZoneId zone) throws IOException, SQLException
270270
{
271271
throw new SQLException("Unsupported");
272272
}
273273

274274
@Override
275-
public void setSqlTimestamp(final Instant v, final Calendar calendar) throws IOException, SQLException
275+
public void setSqlTimestamp(final Instant v, final ZoneId zone) throws IOException, SQLException
276276
{
277277
java.sql.Timestamp t = new java.sql.Timestamp(v.toEpochMilli());
278278
t.setNanos(v.getNano());
279279
DateFormat format = formats[buffer.getCurrentColumn()];
280-
format.setTimeZone(calendar.getTimeZone());
280+
format.setTimeZone(java.util.TimeZone.getTimeZone(zone));
281281
buffer.addValue(format.format(t));
282282
}
283283
}

0 commit comments

Comments
 (0)