日時型および時間間隔型の処理¶
ここでは、日時値を返すカスタムラッパーを開発する方法について説明します。
カスタムラッパーを開発する際には、ラッパーのメインクラスで、カスタムラッパーの出力スキーマを定義する getSchemaParameters(Map<String, String> inputValues)
メソッドをオーバーライドする必要があります。このメソッドは、 CustomWrapperSchemaParameter オブジェクトの配列を返す必要があります。 CustomWrapperSchemaParameter
クラスのコンストラクターの 2 番目のパラメータは type
パラメータです。このパラメータの値は、 java.sql.Types クラスの定数です。
次の表は、以下の間のマッピングを示しています。
Denodo のデータ型と、
CustomWrapperSchemaParameter
のコンストラクターに渡す必要があるjava.sql.Types
クラスの定数Denodo のデータ型と、カスタムラッパーが返す必要がある Java オブジェクトのクラス
Denodo のデータ型 |
java.sql.Types クラスの定数 |
Java クラス |
---|---|---|
localdate |
Types.DATE |
java.time.LocalDate |
time |
Types.TIME |
java.time.LocalTime |
timestamp |
Types.TIMESTAMP |
java.time.LocalDateTime |
timestamptz |
Types.TIMESTAMP_WITH_TIMEZONE |
java.time.OffsetDateTime |
intervaldaysecond |
JDBCTypeUtil.INTERVAL_DAY_SECOND |
java.time.Duration |
intervalyearmonth |
JDBCTypeUtil.INTERVAL_YEAR_MONTH |
java.time.Period |
JDBCTypeUtil = com.denodo.vdb.vdbinterface.common.clientResult.vo.descriptions.type.util.JDBCTypeUtil
public CustomWrapperSchemaParameter[] getSchemaParameters(
Map<String, String> inputValues) {
return new CustomWrapperSchemaParameter[] {
new CustomWrapperSchemaParameter("date_field", Types.DATE)
, new CustomWrapperSchemaParameter("timestamp_field", Types.TIMESTAMP)
, new CustomWrapperSchemaParameter("timestamptz_field", Types.TIMESTAMP_WITH_TIMEZONE)
, new CustomWrapperSchemaParameter("time_field", Types.TIME)
, new CustomWrapperSchemaParameter("intervalyear_month",
JDBCTypeUtil.INTERVAL_YEAR_MONTH)
, new CustomWrapperSchemaParameter("intervalday_second",
JDBCTypeUtil.INTERVAL_DAY_SECOND) };
}
下のコードで、カスタムラッパーが返す Java オブジェクトは、上の表に従った適切なオブジェクトになっていることに注意してください。たとえば、 getSchemaParameters()
メソッドの「date_field」フィールドは Types.DATE
定数を指定して作成されています。上の表では、この型のパラメータは「localdate」型に対応し、結果のオブジェクトは java.time.LocalDate
でなければなりません。
void run(CustomWrapperConditionHolder condition,
List<CustomWrapperFieldExpression> projectedFields,
CustomWrapperResult result,
Map<String,String> inputValues)
throws CustomWrapperException {
// ...
// ...
result.addRow(new Object[]{
LocalDate.parse("2017-10-11"),
LocalDateTime.parse("2015-03-08T01:59:59"),
OffsetDateTime.parse("2015-03-08T01:59:59+01:00"),
LocalTime.parse("21:15:45"),
Duration.ofHours(65).plusMinutes(23),
Period.ofMonths(25)},
projectedFields);
result.addRow(new Object[]{
sdf.parse("2017-10-11"),
sdf.parse("2015-03-08 01:59:59"),
sdf.parse("2015-03-08 01:59:59 +01:00"),
sdf.parse("21:15:45"),
Duration.ofHours(65).plusMinutes(23),
Period.ofMonths(25)},
projectedFields);
}
下位互換性を維持するために、現在ではまだ、カスタムラッパーで「localdate」型、「timestamp」型、「timestamptz」型、および「time」型に対して java.util.Date オブジェクトを返すことができます。ただし、この型のオブジェクトを返す処理は、Denodo の将来のメジャーバージョンではサポートされなくなる可能性があります。