This is an automated email from the ASF dual-hosted git repository.

nadment pushed a commit to branch 2255
in repository https://gitbox.apache.org/repos/asf/hop.git

commit 2a21dab0473ca4d1ab9b75cf56d248762b8134eb
Author: Nicolas Adment <[email protected]>
AuthorDate: Wed Feb 8 21:28:45 2023 +0100

    Call DB procedure transform allow connection with variables #2255
---
 .../hop/pipeline/transforms/dbproc/DBProc.java     |  4 +-
 .../pipeline/transforms/dbproc/DBProcDialog.java   | 20 ++++----
 .../hop/pipeline/transforms/dbproc/DBProcMeta.java | 55 ++++++++++++++--------
 3 files changed, 47 insertions(+), 32 deletions(-)

diff --git 
a/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProc.java
 
b/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProc.java
index 591c73190d..766b71fdf1 100644
--- 
a/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProc.java
+++ 
b/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProc.java
@@ -21,6 +21,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.RowMetaAndData;
 import org.apache.hop.core.database.Database;
+import org.apache.hop.core.database.DatabaseMeta;
 import org.apache.hop.core.exception.HopDatabaseException;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.exception.HopTransformException;
@@ -207,7 +208,8 @@ public class DBProc extends BaseTransform<DBProcMeta, 
DBProcData> {
         data.readsRows = true;
       }
 
-      data.db = new Database(this, this, meta.getDatabase());
+      DatabaseMeta databaseMeta = 
getPipelineMeta().findDatabase(meta.getConnection(), variables);
+      data.db = new Database(this, this, databaseMeta);
       try {
         data.db.connect();
 
diff --git 
a/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcDialog.java
 
b/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcDialog.java
index dac17ba98a..b91cd68123 100644
--- 
a/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcDialog.java
+++ 
b/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcDialog.java
@@ -143,7 +143,8 @@ public class DBProcDialog extends BaseTransformDialog 
implements ITransformDialo
     wTransformName.setLayoutData(fdTransformName);
 
     // Connection line
-    wConnection = addConnectionLine(shell, wTransformName, 
input.getDatabase(), null);
+    DatabaseMeta databaseMeta = 
pipelineMeta.findDatabase(input.getConnection(), variables);
+    wConnection = addConnectionLine(shell, wTransformName, databaseMeta, null);
 
     // ProcName line...
     // add button to get list of procedures on selected connection...
@@ -314,10 +315,9 @@ public class DBProcDialog extends BaseTransformDialog 
implements ITransformDialo
   }
 
   private void selectProcedure(Event event) {
-    DatabaseMeta dbInfo = pipelineMeta.findDatabase(wConnection.getText());
-    if (dbInfo != null) {
-      Database db = new Database(loggingObject, variables, dbInfo);
-      try {
+    DatabaseMeta databaseMeta = 
pipelineMeta.findDatabase(wConnection.getText(), variables);
+    if (databaseMeta != null) {      
+      try (Database db = new Database(loggingObject, variables, databaseMeta)) 
{
         db.connect();
         String[] procs = db.getProcedures();
         if (procs != null && procs.length > 0) {
@@ -344,8 +344,6 @@ public class DBProcDialog extends BaseTransformDialog 
implements ITransformDialo
             BaseMessages.getString(PKG, 
"DBProcDialog.ErrorGettingProceduresList.DialogTitle"),
             BaseMessages.getString(PKG, 
"DBProcDialog.ErrorGettingProceduresList.DialogMessage"),
             dbe);
-      } finally {
-        db.disconnect();
       }
     }
   }
@@ -381,8 +379,8 @@ public class DBProcDialog extends BaseTransformDialog 
implements ITransformDialo
       item.setText(3, Const.NVL(argument.getType(), ""));
     }
 
-    if (input.getDatabase() != null) {
-      wConnection.setText(input.getDatabase().getName());
+    if (input.getConnection() != null) {
+      wConnection.setText(input.getConnection());
     }
     wProcName.setText(Const.NVL(input.getProcedure(), ""));
 
@@ -415,7 +413,7 @@ public class DBProcDialog extends BaseTransformDialog 
implements ITransformDialo
       argument.setType(item.getText(3));
       input.getArguments().add(argument);
     }
-    input.setDatabase(wConnection.loadSelectedElement());
+    input.setConnection(wConnection.getText());
     input.setProcedure(wProcName.getText());
     input.getResult().setName(wResult.getText());
     input.getResult().setType(wResultType.getText());
@@ -423,7 +421,7 @@ public class DBProcDialog extends BaseTransformDialog 
implements ITransformDialo
 
     transformName = wTransformName.getText(); // return value
 
-    if (input.getDatabase() == null) {
+    if (input.getConnection() == null) {
       MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
       mb.setMessage(BaseMessages.getString(PKG, 
"DBProcDialog.InvalidConnection.DialogMessage"));
       mb.setText(BaseMessages.getString(PKG, 
"DBProcDialog.InvalidConnection.DialogTitle"));
diff --git 
a/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcMeta.java
 
b/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcMeta.java
index 0ef13e00c2..4ee1dc924f 100644
--- 
a/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcMeta.java
+++ 
b/plugins/transforms/dbproc/src/main/java/org/apache/hop/pipeline/transforms/dbproc/DBProcMeta.java
@@ -26,7 +26,6 @@ import org.apache.hop.core.database.DatabaseMeta;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.exception.HopPluginException;
 import org.apache.hop.core.exception.HopTransformException;
-import org.apache.hop.core.logging.LoggingObject;
 import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.row.IValueMeta;
 import org.apache.hop.core.row.value.ValueMetaBase;
@@ -55,10 +54,10 @@ public class DBProcMeta extends BaseTransformMeta<DBProc, 
DBProcData> {
   private static final Class<?> PKG = DBProcMeta.class; // For Translator
 
   /** database connection */
-  @HopMetadataProperty(key = "connection", storeWithName = true)
-  private DatabaseMeta database;
-
-  /** proc.-name to be called */
+  @HopMetadataProperty(key = "connection")
+  private String connection;
+  
+  /** procedure name to be called */
   @HopMetadataProperty private String procedure;
 
   /** function arguments */
@@ -79,7 +78,7 @@ public class DBProcMeta extends BaseTransformMeta<DBProc, 
DBProcData> {
 
   public DBProcMeta(DBProcMeta m) {
     this();
-    this.database = database == null ? null : new DatabaseMeta(m.database);
+    this.connection = m.connection;
     this.procedure = m.procedure;
     for (ProcArgument argument : m.arguments) {
       this.arguments.add(new ProcArgument(argument));
@@ -95,7 +94,7 @@ public class DBProcMeta extends BaseTransformMeta<DBProc, 
DBProcData> {
 
   @Override
   public void setDefault() {
-    database = null;
+    connection = null;
     result.name = "result";
     result.type = "Number";
     autoCommit = true;
@@ -153,9 +152,25 @@ public class DBProcMeta extends BaseTransformMeta<DBProc, 
DBProcData> {
     CheckResult cr;
     String errorMessage = "";
 
-    if (database != null) {
-      Database db = new Database(new LoggingObject(pipelineMeta), variables, 
database);
-      try {
+    DatabaseMeta databaseMeta = null;
+
+    try {
+      databaseMeta =
+          
metadataProvider.getSerializer(DatabaseMeta.class).load(variables.resolve(connection));
+    } catch (HopException e) {
+      cr =
+          new CheckResult(
+              ICheckResult.TYPE_RESULT_ERROR,
+              BaseMessages.getString(
+                  PKG,
+                  "DBProcMeta.CheckResult.DatabaseMetaError",
+                  variables.resolve(connection)),
+              transformMeta);
+      remarks.add(cr);
+    }
+
+    if (databaseMeta != null) {
+      try (Database db = new Database(loggingObject, variables, databaseMeta)) 
{
         db.connect();
 
         // Look up fields in the input stream <prev>
@@ -209,13 +224,13 @@ public class DBProcMeta extends BaseTransformMeta<DBProc, 
DBProcData> {
               BaseMessages.getString(PKG, 
"DBProcMeta.CheckResult.CouldNotReadFields") + Const.CR;
           cr = new CheckResult(ICheckResult.TYPE_RESULT_ERROR, errorMessage, 
transformMeta);
           remarks.add(cr);
-        }
+        }        
       } catch (HopException e) {
         errorMessage =
             BaseMessages.getString(PKG, 
"DBProcMeta.CheckResult.ErrorOccurred") + e.getMessage();
         cr = new CheckResult(ICheckResult.TYPE_RESULT_ERROR, errorMessage, 
transformMeta);
         remarks.add(cr);
-      }
+     }          
     } else {
       errorMessage = BaseMessages.getString(PKG, 
"DBProcMeta.CheckResult.InvalidConnection");
       cr = new CheckResult(ICheckResult.TYPE_RESULT_ERROR, errorMessage, 
transformMeta);
@@ -393,21 +408,21 @@ public class DBProcMeta extends BaseTransformMeta<DBProc, 
DBProcData> {
   }
 
   /**
-   * Gets database
+   * Gets database connection
    *
-   * @return value of database
+   * @return value of connection
    */
-  public DatabaseMeta getDatabase() {
-    return database;
+  public String getConnection() {
+    return connection;
   }
 
   /**
-   * Sets database
+   * Sets database connection
    *
-   * @param database value of database
+   * @param connection value of database connection
    */
-  public void setDatabase(DatabaseMeta database) {
-    this.database = database;
+  public void setConnection(String connection) {
+    this.connection = connection;
   }
 
   /**

Reply via email to