diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreServerExtension.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreServerExtension.java index 0feaca76a2caa001190831c411bbf46da3f93904..62bf72f2e7120ad57f0de82446d9ec71ff11c272 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreServerExtension.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreServerExtension.java @@ -103,4 +103,6 @@ public interface PostgreServerExtension boolean supportsExplainPlanVerbose(); boolean supportsDatabaseDescription(); + + boolean supportsTemporalAccessor(); } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreDateTimeValueHandler.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreDateTimeValueHandler.java index 5b23969ace87a0c102b6e68ecc546d0e9f594521..f49d901c2c278296105dc111fcf59793c2d9b1db 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreDateTimeValueHandler.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreDateTimeValueHandler.java @@ -16,8 +16,10 @@ */ package org.jkiss.dbeaver.ext.postgresql.model.data; +import org.jkiss.code.NotNull; import org.jkiss.dbeaver.model.data.DBDDataFormatterProfile; import org.jkiss.dbeaver.model.exec.DBCException; +import org.jkiss.dbeaver.model.exec.DBCResultSet; import org.jkiss.dbeaver.model.exec.DBCSession; import org.jkiss.dbeaver.model.exec.DBCStatement; import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement; @@ -29,7 +31,7 @@ import java.sql.SQLException; import java.sql.Types; /** - * JDBC strict string value handler. + * PostgreDateTimeValueHandler. */ public class PostgreDateTimeValueHandler extends JDBCDateTimeValueHandler { @@ -38,6 +40,13 @@ public class PostgreDateTimeValueHandler extends JDBCDateTimeValueHandler { super(formatterProfile); } + @Override + public Object fetchValueObject(@NotNull DBCSession session, @NotNull DBCResultSet resultSet, @NotNull DBSTypedObject type, int index) throws DBCException { + Object value = super.fetchValueObject(session, resultSet, type, index); + //if (value instanceof ) + return value; + } + @Override public void bindValueObject(DBCSession session, DBCStatement statement, DBSTypedObject type, int index, Object value) throws DBCException { if (value instanceof String) { @@ -51,4 +60,5 @@ public class PostgreDateTimeValueHandler extends JDBCDateTimeValueHandler { } super.bindValueObject(session, statement, type, index, value); } + } \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreTemporalAccessorValueHandler.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreTemporalAccessorValueHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..5470f9353ece258f294ffc73e01d8d1bd8f69516 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreTemporalAccessorValueHandler.java @@ -0,0 +1,33 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ext.postgresql.model.data; + +import org.jkiss.dbeaver.model.data.DBDDataFormatterProfile; +import org.jkiss.dbeaver.model.impl.jdbc.data.handlers.JDBCTemporalAccessorValueHandler; + +/** + * PostgreTemporalAccessorValueHandler. + */ +public class PostgreTemporalAccessorValueHandler extends JDBCTemporalAccessorValueHandler { + + + public PostgreTemporalAccessorValueHandler(DBDDataFormatterProfile formatterProfile) { + super(formatterProfile); + } + + +} \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreValueHandlerProvider.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreValueHandlerProvider.java index 595d605ae04a8503be825bac46b049077cd77e86..08f402021a4efca8a2ec7f567877c2e96b5e017f 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreValueHandlerProvider.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreValueHandlerProvider.java @@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.postgresql.model.data; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; +import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource; import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.data.DBDPreferences; import org.jkiss.dbeaver.model.data.DBDValueHandler; @@ -46,7 +47,11 @@ public class PostgreValueHandlerProvider implements DBDValueHandlerProvider { case Types.TIME_WITH_TIMEZONE: case Types.TIMESTAMP: case Types.TIMESTAMP_WITH_TIMEZONE: - return new PostgreDateTimeValueHandler(preferences.getDataFormatterProfile()); + if (((PostgreDataSource)dataSource).getServerType().supportsTemporalAccessor()) { + return new PostgreTemporalAccessorValueHandler(preferences.getDataFormatterProfile()); + } else { + return new PostgreDateTimeValueHandler(preferences.getDataFormatterProfile()); + } default: switch (typedObject.getTypeName()) { case PostgreConstants.TYPE_JSONB: diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/impls/PostgreServerExtensionBase.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/impls/PostgreServerExtensionBase.java index 64a99b9f66ea28700c9bb5ca809596a04e446a73..b3518102a40e55ee9986ca6828eb43e6af80b4a1 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/impls/PostgreServerExtensionBase.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/impls/PostgreServerExtensionBase.java @@ -329,6 +329,14 @@ public abstract class PostgreServerExtensionBase implements PostgreServerExtensi return dataSource.isServerVersionAtLeast(9, 4); } + @Override + public boolean supportsTemporalAccessor() { + // Disable temporal accessor (which stands for java.util.Date). + // It doesn't make sense as PG server doesn't support timezones. + // Everything is in UTC. + return false; + } + public String createWithClause(PostgreTableRegular table, PostgreTableBase tableBase) { StringBuilder withClauseBuilder = new StringBuilder();