Skip to content

Commit 3323c62

Browse files
committed
Implement the setters
1 parent 0d2aa9c commit 3323c62

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

core/src/main/java/org/apache/calcite/avatica/AvaticaSite.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import java.sql.Time;
3838
import java.sql.Timestamp;
3939
import java.sql.Types;
40+
import java.time.OffsetDateTime;
41+
import java.time.OffsetTime;
4042
import java.util.Calendar;
4143

4244
/**
@@ -191,10 +193,18 @@ public void setTimestamp(Timestamp x, Calendar calendar) {
191193
slots[index] = wrap(ColumnMetaData.Rep.JAVA_SQL_TIMESTAMP, x, calendar);
192194
}
193195

196+
public void setTimestampWithTimezone(OffsetDateTime x) {
197+
slots[index] = wrap(ColumnMetaData.Rep.JAVA_TIME_OFFSETDATETIME, x);
198+
}
199+
194200
public void setTime(Time x, Calendar calendar) {
195201
slots[index] = wrap(ColumnMetaData.Rep.JAVA_SQL_TIME, x, calendar);
196202
}
197203

204+
public void setTimeWithTimezone(OffsetTime x) {
205+
slots[index] = wrap(ColumnMetaData.Rep.JAVA_TIME_OFFSETTIME, x);
206+
}
207+
198208
public void setDate(Date x, Calendar calendar) {
199209
slots[index] = wrap(ColumnMetaData.Rep.JAVA_SQL_DATE, x, calendar);
200210
}
@@ -284,6 +294,12 @@ public void setObject(Object x, int targetSqlType) {
284294
case Types.TINYINT:
285295
setByte(toByte(x));
286296
break;
297+
case Types.TIME_WITH_TIMEZONE:
298+
setTimeWithTimezone(toTimeWithTimezone(x));
299+
break;
300+
case Types.TIMESTAMP_WITH_TIMEZONE:
301+
setTimestampWithTimezone(toTimestampWithTimezone(x));
302+
break;
287303
default:
288304
throw notImplemented();
289305
}
@@ -502,13 +518,37 @@ private static Time toTime(Object x) {
502518
return new Time(toLong(x));
503519
}
504520

521+
private static OffsetTime toTimeWithTimezone(Object x) {
522+
if (x instanceof OffsetTime) {
523+
return (OffsetTime) x;
524+
}
525+
if (x instanceof String) {
526+
// TODO: This parses the string only to serialize it again in `TypeValue.jdbcToSerial`.
527+
// Think about this more.
528+
return OffsetTime.parse((String) x);
529+
}
530+
throw unsupportedCast(x.getClass(), OffsetTime.class);
531+
}
532+
505533
private static Timestamp toTimestamp(Object x) {
506534
if (x instanceof String) {
507535
return Timestamp.valueOf((String) x);
508536
}
509537
return new Timestamp(toLong(x));
510538
}
511539

540+
private static OffsetDateTime toTimestampWithTimezone(Object x) {
541+
if (x instanceof OffsetDateTime) {
542+
return (OffsetDateTime) x;
543+
}
544+
if (x instanceof String) {
545+
// TODO: This parses the string only to serialize it again in `TypeValue.jdbcToSerial`.
546+
// Think about this more.
547+
return OffsetDateTime.parse((String) x);
548+
}
549+
throw unsupportedCast(x.getClass(), OffsetDateTime.class);
550+
}
551+
512552
private static double toDouble(Object x) {
513553
if (x instanceof Number) {
514554
return ((Number) x).doubleValue();

core/src/main/java/org/apache/calcite/avatica/remote/TypedValue.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import java.sql.SQLException;
4040
import java.sql.Time;
4141
import java.sql.Timestamp;
42+
import java.time.OffsetDateTime;
43+
import java.time.OffsetTime;
4244
import java.util.ArrayList;
4345
import java.util.Calendar;
4446
import java.util.Date;
@@ -114,6 +116,18 @@
114116
* <td>ARRAY</td>
115117
* <td>Array</td> <td>List&lt;Object&gt;</td> <td>List&lt;Object&gt;</td>
116118
* </tr>
119+
* <tr>
120+
* <td>TIME_WITH_TIMEZONE</td>
121+
* <td>{@link java.time.OffsetTime}</td>
122+
* <td>{@link String}</td>
123+
* <td>{@link java.time.OffsetTime}</td>
124+
* </tr>
125+
* <tr>
126+
* <td>TIMESTAMP_WITH_TIMEZONE</td>
127+
* <td>{@link java.time.OffsetDateTime}</td>
128+
* <td>{@link String}</td>
129+
* <td>{@link java.time.OffsetDateTime}</td>
130+
* </tr>
117131
* </table>
118132
*
119133
* <p>Note:
@@ -182,6 +196,8 @@ private boolean isSerial(ColumnMetaData.Rep rep, Object value) {
182196
}
183197
switch (rep) {
184198
case BYTE_STRING:
199+
case JAVA_TIME_OFFSETTIME:
200+
case JAVA_TIME_OFFSETDATETIME:
185201
return value instanceof String;
186202
case JAVA_SQL_DATE:
187203
case JAVA_SQL_TIME:
@@ -412,6 +428,10 @@ private static Object jdbcToSerial(ColumnMetaData.Rep rep, Object value,
412428
default:
413429
return t;
414430
}
431+
case JAVA_TIME_OFFSETTIME:
432+
return ((OffsetTime) value).toString();
433+
case JAVA_TIME_OFFSETDATETIME:
434+
return ((OffsetDateTime) value).toString();
415435
case ARRAY:
416436
Array array = (Array) value;
417437
Objects.requireNonNull(componentType, "Component Type must not be null for ARRAYs");

core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetConversionsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,8 @@ private TimestampAccessorTestHelper(Getter g) {
11421142

11431143
@Override public void testGetTimestamp(ResultSet resultSet, Calendar calendar)
11441144
throws SQLException {
1145-
assertEquals(new Timestamp(TEST_TIMESTAMP_MILLIS_SINCE_EPOCH), g.getTimestamp(resultSet, calendar));
1145+
assertEquals(
1146+
new Timestamp(TEST_TIMESTAMP_MILLIS_SINCE_EPOCH), g.getTimestamp(resultSet, calendar));
11461147
}
11471148
}
11481149

0 commit comments

Comments
 (0)