From e1d2120d77faefbab558c07a0d306330c20c9bcd Mon Sep 17 00:00:00 2001 From: iroqueta Date: Fri, 15 Jul 2022 17:57:30 -0300 Subject: [PATCH 1/3] Error handler rule was not implemented in a SQL Statement context in Java. Issue: 72730 --- .../genexus/specific/android/Application.java | 7 +++-- .../java/com/genexus/ExecuteDirectSQL.java | 25 +++++++++++++++--- .../interfaces/IExtensionApplication.java | 9 ++++--- .../db/DefaultExceptionErrorHandler.java | 26 ++++++++++++------- .../genexus/specific/java/Application.java | 9 +++++-- 5 files changed, 56 insertions(+), 20 deletions(-) diff --git a/android/src/main/java/com/genexus/specific/android/Application.java b/android/src/main/java/com/genexus/specific/android/Application.java index 808cdea54..04401645d 100644 --- a/android/src/main/java/com/genexus/specific/android/Application.java +++ b/android/src/main/java/com/genexus/specific/android/Application.java @@ -11,8 +11,7 @@ import com.genexus.common.interfaces.IClientPreferences; import com.genexus.common.interfaces.IExtensionApplication; import com.genexus.common.interfaces.IPreferences; -import com.genexus.db.DBConnectionManager; -import com.genexus.db.Namespace; +import com.genexus.db.*; import com.genexus.internet.HttpResponse; import com.genexus.util.IniFile; import com.genexus.wrapper.GXCollectionWrapper; @@ -97,6 +96,10 @@ public boolean handlSQLException(int handle, String dataSource, SQLException ex) return com.genexus.Application.getConnectionManager().getDataSource(handle, dataSource).dbms.ObjectNotFound(ex); } + @Override + public void handleSQLError(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, AbstractGXConnection conn, String datastoreName, Cursor cursor) { + } + @Override public Class getModelContextClass() { return ModelContext.class; diff --git a/common/src/main/java/com/genexus/ExecuteDirectSQL.java b/common/src/main/java/com/genexus/ExecuteDirectSQL.java index cd8a7a16f..5e1aa846e 100644 --- a/common/src/main/java/com/genexus/ExecuteDirectSQL.java +++ b/common/src/main/java/com/genexus/ExecuteDirectSQL.java @@ -2,7 +2,7 @@ import java.sql.SQLException; -import com.genexus.ModelContext; +import com.genexus.common.classes.AbstractGXConnection; import com.genexus.common.interfaces.SpecificImplementation; import com.genexus.db.*; import com.genexus.util.*; @@ -10,10 +10,15 @@ public class ExecuteDirectSQL { public static void execute(ModelContext context, int handle, String dataSource, String Statement) + { + execute(context, handle, dataSource, Statement, null); + } + + public static void execute(ModelContext context, int handle, String dataSource, String statement, IErrorHandler errorHandler) { try { - SpecificImplementation.Application.executeStatement(context, handle, dataSource, Statement); + SpecificImplementation.Application.executeStatement(context, handle, dataSource, statement); } catch (SQLException ex) { @@ -27,7 +32,21 @@ public static void execute(ModelContext context, int handle, String dataSource, } else { - SpecificImplementation.Application.GXLocalException(handle, "ExecuteDirectSQL/" + Statement, ex); + if (errorHandler == null) + { + SpecificImplementation.Application.GXLocalException(handle, "ExecuteDirectSQL/" + statement, ex); + } + else + { + try { + AbstractGXConnection conn = new DefaultConnectionProvider().getConnection(context, handle, "DEFAULT", true, true); + SpecificImplementation.Application.handleSQLError(errorHandler, ex, context, handle, conn, "DEFAULT", new DirectStatement(statement)); + } + catch (SQLException e) { + throw new GXRuntimeException(e); + } + } + } } } diff --git a/common/src/main/java/com/genexus/common/interfaces/IExtensionApplication.java b/common/src/main/java/com/genexus/common/interfaces/IExtensionApplication.java index 793da6d4b..cde5152fd 100644 --- a/common/src/main/java/com/genexus/common/interfaces/IExtensionApplication.java +++ b/common/src/main/java/com/genexus/common/interfaces/IExtensionApplication.java @@ -1,15 +1,14 @@ package com.genexus.common.interfaces; import java.sql.SQLException; -import com.genexus.GXDBException; -import com.genexus.ICleanedup; -import com.genexus.ModelContext; -import com.genexus.SdtMessages_Message; + +import com.genexus.*; import com.genexus.common.classes.AbstractGXConnection; import com.genexus.ModelContext; import com.genexus.common.classes.AbstractNamespace; import com.genexus.common.classes.AbstractUserInformation; +import com.genexus.db.Cursor; import com.genexus.util.IniFile; public interface IExtensionApplication { @@ -43,6 +42,8 @@ public interface IExtensionApplication { boolean handlSQLException(int handle, String dataSource, SQLException ex); + void handleSQLError(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, AbstractGXConnection conn, String datastoreName, Cursor cursor); + Class getModelContextClass(); ModelContext createModelContext(Class class1); diff --git a/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java b/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java index db0ab2ad0..f3b56b86f 100644 --- a/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java +++ b/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java @@ -5,6 +5,7 @@ import com.genexus.GXRuntimeException; import com.genexus.IErrorHandler; import com.genexus.ModelContext; +import com.genexus.common.classes.AbstractGXConnection; import com.genexus.db.driver.GXDBMS; import com.genexus.util.ReorgSubmitThreadPool; @@ -22,7 +23,18 @@ public class DefaultExceptionErrorHandler public static void handleSQLError(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, IDataStoreHelper helper, Cursor cursor) { - cursor.status = mapErrorToStatus(DBConnectionManager.getInstance().getUserInformation(remoteHandle).getNamespace().getDataSource(helper.getDataStoreName()).dbms, e); + try { + AbstractGXConnection conn = helper.getConnectionProvider().getConnection(context, remoteHandle, helper.getDataStoreName(), true, true); + handleSQLError1(errorHandler, e, context, remoteHandle, conn, helper.getDataStoreName(), cursor); + } + catch (SQLException exc) { + throw new GXRuntimeException(e); + } + } + + public static void handleSQLError1(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, AbstractGXConnection conn, String datastoreName, Cursor cursor) + { + cursor.status = mapErrorToStatus(DBConnectionManager.getInstance().getUserInformation(remoteHandle).getNamespace().getDataSource(datastoreName).dbms, e); if (cursor.status != Cursor.DUPLICATE) { ReorgSubmitThreadPool.setAnError(); @@ -48,17 +60,13 @@ public static void handleSQLError(IErrorHandler errorHandler, SQLException e, Mo if (context.globals.Gx_eop == ERROPT_DEFAULT) { - defaultSQLErrorHandler(errorHandler, e, context, remoteHandle, helper, cursor); + defaultSQLErrorHandler(context, cursor); } if (context.globals.Gx_eop == ERROPT_CANCEL) { - com.genexus.Application.rollback(context, remoteHandle, helper.getDataStoreName(), null); - try { - helper.getConnectionProvider().getConnection(context, remoteHandle, helper.getDataStoreName(), true, true).setError(); - } - catch (SQLException exc) {} - throw new GXRuntimeException(e); + com.genexus.Application.rollback(context, remoteHandle, datastoreName, null); + conn.setError(); } } } @@ -101,7 +109,7 @@ private static int mapErrorToStatus(GXDBMS dbms, SQLException e) return Cursor.UNEXPECTED_DBMS_ERROR; } - public static void defaultSQLErrorHandler(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, IDataStoreHelper helper, Cursor cursor) + public static void defaultSQLErrorHandler(ModelContext context, Cursor cursor) { context.globals.Gx_eop = ERROPT_CANCEL; diff --git a/java/src/main/java/com/genexus/specific/java/Application.java b/java/src/main/java/com/genexus/specific/java/Application.java index 9d3232aa8..1bfed78a5 100644 --- a/java/src/main/java/com/genexus/specific/java/Application.java +++ b/java/src/main/java/com/genexus/specific/java/Application.java @@ -10,8 +10,8 @@ import com.genexus.common.interfaces.IClientPreferences; import com.genexus.common.interfaces.IExtensionApplication; import com.genexus.common.interfaces.IPreferences; -import com.genexus.db.DBConnectionManager; -import com.genexus.db.Namespace; +import com.genexus.db.*; +import com.genexus.db.Cursor; import com.genexus.internet.HttpResponse; import com.genexus.util.IniFile; import com.genexus.webpanels.GXWebObjectStub; @@ -98,6 +98,11 @@ public boolean handlSQLException(int handle, String dataSource, SQLException ex) return com.genexus.Application.getConnectionManager().getDataSource(handle, dataSource).dbms.ObjectNotFound(ex); } + @Override + public void handleSQLError(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, AbstractGXConnection conn, String datastoreName, Cursor cursor) { + DefaultExceptionErrorHandler.handleSQLError1(errorHandler, e, context, remoteHandle, conn, datastoreName, cursor); + } + @Override public Class getModelContextClass() { return ModelContext.class; From b6c8959c65a6ae1f381f2484dab0b9be2e99cda8 Mon Sep 17 00:00:00 2001 From: iroqueta Date: Tue, 19 Jul 2022 09:02:52 -0300 Subject: [PATCH 2/3] Error handler rule was not implemented in a SQL Statement context in Java. Issue: 72730 --- .../java/com/genexus/db/DefaultExceptionErrorHandler.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java b/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java index f3b56b86f..10a200a60 100644 --- a/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java +++ b/java/src/main/java/com/genexus/db/DefaultExceptionErrorHandler.java @@ -27,9 +27,7 @@ public static void handleSQLError(IErrorHandler errorHandler, SQLException e, Mo AbstractGXConnection conn = helper.getConnectionProvider().getConnection(context, remoteHandle, helper.getDataStoreName(), true, true); handleSQLError1(errorHandler, e, context, remoteHandle, conn, helper.getDataStoreName(), cursor); } - catch (SQLException exc) { - throw new GXRuntimeException(e); - } + catch (SQLException exc) {} } public static void handleSQLError1(IErrorHandler errorHandler, SQLException e, ModelContext context, int remoteHandle, AbstractGXConnection conn, String datastoreName, Cursor cursor) @@ -67,6 +65,7 @@ public static void handleSQLError1(IErrorHandler errorHandler, SQLException e, M { com.genexus.Application.rollback(context, remoteHandle, datastoreName, null); conn.setError(); + throw new GXRuntimeException(e); } } } From d47071e29420c8c1d024a485603bf4f7825c9e7c Mon Sep 17 00:00:00 2001 From: iroqueta Date: Wed, 3 Aug 2022 18:27:19 -0300 Subject: [PATCH 3/3] Error handler rule was not implemented in a SQL Statement context in Java. Issue: 72730 --- common/src/main/java/com/genexus/ExecuteDirectSQL.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/genexus/ExecuteDirectSQL.java b/common/src/main/java/com/genexus/ExecuteDirectSQL.java index 5e1aa846e..83bb2a078 100644 --- a/common/src/main/java/com/genexus/ExecuteDirectSQL.java +++ b/common/src/main/java/com/genexus/ExecuteDirectSQL.java @@ -39,8 +39,8 @@ public static void execute(ModelContext context, int handle, String dataSource, else { try { - AbstractGXConnection conn = new DefaultConnectionProvider().getConnection(context, handle, "DEFAULT", true, true); - SpecificImplementation.Application.handleSQLError(errorHandler, ex, context, handle, conn, "DEFAULT", new DirectStatement(statement)); + AbstractGXConnection conn = new DefaultConnectionProvider().getConnection(context, handle, dataSource, true, true); + SpecificImplementation.Application.handleSQLError(errorHandler, ex, context, handle, conn, dataSource, new DirectStatement(statement)); } catch (SQLException e) { throw new GXRuntimeException(e);