提交 d6e400fd 编写于 作者: S serge-rider

#3785 Callable statements execute enhancement (CALL syntax)

上级 9fd7236e
......@@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ext.generic.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ext.generic.GenericConstants;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
......@@ -43,6 +44,7 @@ public class GenericSQLDialect extends JDBCSQLDialect {
private String testSQL;
private boolean hasDelimiterAfterQuery;
private boolean hasDelimiterAfterBlock;
private boolean callableQueryInBrackets;
public GenericSQLDialect() {
super("Generic");
......@@ -126,6 +128,14 @@ public class GenericSQLDialect extends JDBCSQLDialect {
return quoteReservedWords;
}
@Override
public String formatStoredProcedureCall(DBPDataSource dataSource, String sqlText) {
if (callableQueryInBrackets) {
return "{" + sqlText + "}";
}
return super.formatStoredProcedureCall(dataSource, sqlText);
}
@Override
public String getTestSQL() {
return testSQL;
......
......@@ -1026,10 +1026,13 @@ public final class DBUtils {
@NotNull String query,
boolean scrollable) throws DBCException
{
SQLDialect dialect = SQLUtils.getDialectFromObject(session.getDataSource());
DBCStatementType statementType = DBCStatementType.SCRIPT;
query = SQLUtils.makeUnifiedLineFeeds(session.getDataSource(), query);
if (SQLUtils.isExecQuery(SQLUtils.getDialectFromObject(session.getDataSource()), query)) {
if (SQLUtils.isExecQuery(dialect, query)) {
statementType = DBCStatementType.EXEC;
query = dialect.formatStoredProcedureCall(session.getDataSource(), query);
}
return session.prepareStatement(
statementType,
......
......@@ -548,6 +548,11 @@ public class BasicSQLDialect implements SQLDialect {
return null;
}
@Override
public String formatStoredProcedureCall(DBPDataSource dataSource, String sqlText) {
return sqlText;
}
/**
* @param inParameters empty list to collect IN parameters
*/
......
......@@ -313,5 +313,11 @@ public interface SQLDialect {
@Nullable
String getColumnTypeModifiers(@NotNull DBSTypedObject column, @NotNull String typeName, @NotNull DBPDataKind dataKind);
/**
* Formats stored procedure call. By default returns @sqlText.
*/
String formatStoredProcedureCall(DBPDataSource dataSource, String sqlText);
void generateStoredProcedureCall(StringBuilder sql, DBSProcedure proc, Collection<? extends DBSProcedureParameter> parameters);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册