From a7e2deb9c2a8cb7b05d75510b0078069f816e981 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Thu, 16 May 2019 13:34:39 +0300 Subject: [PATCH] Value binder model --- .../gis/handlers/GISGeometryValueHandler.java | 6 ++-- .../dbeaver/model/data/DBDValueBinder.java | 31 +++++++++++++++++++ .../model/impl/data/ExecuteBatchImpl.java | 4 +-- .../model/impl/jdbc/struct/JDBCTable.java | 25 +++++++++++---- 4 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDValueBinder.java diff --git a/plugins/org.jkiss.dbeaver.data.gis/src/org/jkiss/dbeaver/data/gis/handlers/GISGeometryValueHandler.java b/plugins/org.jkiss.dbeaver.data.gis/src/org/jkiss/dbeaver/data/gis/handlers/GISGeometryValueHandler.java index d785513c19..ce136edb9c 100644 --- a/plugins/org.jkiss.dbeaver.data.gis/src/org/jkiss/dbeaver/data/gis/handlers/GISGeometryValueHandler.java +++ b/plugins/org.jkiss.dbeaver.data.gis/src/org/jkiss/dbeaver/data/gis/handlers/GISGeometryValueHandler.java @@ -83,7 +83,7 @@ public class GISGeometryValueHandler extends JDBCAbstractValueHandler { } } - protected void bindGeometryParameter(JDBCSession session, JDBCPreparedStatement statement, int paramIndex, Geometry value) throws SQLException, DBCException { + protected void bindGeometryParameter(@NotNull JDBCSession session, @NotNull JDBCPreparedStatement statement, int paramIndex, @NotNull Geometry value) throws SQLException, DBCException { bindBytes(statement, paramIndex, convertGeometryToBinaryFormat(session, value)); } @@ -141,11 +141,11 @@ public class GISGeometryValueHandler extends JDBCAbstractValueHandler { return super.getValueDisplayString(column, value, format); } - protected byte[] fetchBytes(JDBCResultSet resultSet, int index) throws SQLException { + protected byte[] fetchBytes(@NotNull JDBCResultSet resultSet, int index) throws SQLException { return resultSet.getBytes(index); } - protected void bindBytes(JDBCPreparedStatement dbStat, int index, byte[] bytes) throws SQLException { + protected void bindBytes(@NotNull JDBCPreparedStatement dbStat, int index, @NotNull byte[] bytes) throws SQLException { dbStat.setBytes(index, bytes); } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDValueBinder.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDValueBinder.java new file mode 100644 index 0000000000..b8311f9886 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDValueBinder.java @@ -0,0 +1,31 @@ +/* + * 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.model.data; + +import org.jkiss.dbeaver.model.exec.DBCException; +import org.jkiss.dbeaver.model.struct.DBSAttributeBase; + +/** + * Provides possibility to override default SQL query binding + */ +public interface DBDValueBinder extends DBDValueHandler +{ + + String makeQueryBind(DBSAttributeBase attribute) throws DBCException; + +} diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/data/ExecuteBatchImpl.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/data/ExecuteBatchImpl.java index e5f8b5a9de..95dc4578e6 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/data/ExecuteBatchImpl.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/data/ExecuteBatchImpl.java @@ -148,7 +148,7 @@ public abstract class ExecuteBatchImpl implements DBSDataManipulator.ExecuteBatc } } if (statement == null || !reuse) { - statement = prepareStatement(session, rowValues); + statement = prepareStatement(session, handlers, rowValues); statistics.setQueryText(statement.getQueryString()); statistics.addStatementsCount(); } @@ -324,7 +324,7 @@ public abstract class ExecuteBatchImpl implements DBSDataManipulator.ExecuteBatc } @NotNull - protected abstract DBCStatement prepareStatement(@NotNull DBCSession session, Object[] attributeValues) throws DBCException; + protected abstract DBCStatement prepareStatement(@NotNull DBCSession session, DBDValueHandler[] handlers, Object[] attributeValues) throws DBCException; protected abstract void bindStatement(@NotNull DBDValueHandler[] handlers, @NotNull DBCStatement statement, Object[] attributeValues) throws DBCException; diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTable.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTable.java index 633c14441c..83a8a07b91 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTable.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/struct/JDBCTable.java @@ -325,7 +325,7 @@ public abstract class JDBCTable 0) { query.append("\nWHERE "); //$NON-NLS-1$ @@ -477,7 +490,7 @@ public abstract class JDBCTable