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

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


The following commit(s) were added to refs/heads/master by this push:
     new a9450cf99d Dimension lookup/update does not load/store "type of return 
field" in read only mode #2221
     new bdecfb89f5 Merge pull request #2246 from nadment/2221
a9450cf99d is described below

commit a9450cf99dd9fe11c710da7e81a03f292d17fd2e
Author: Nicolas Adment <[email protected]>
AuthorDate: Mon Feb 6 21:35:25 2023 +0100

    Dimension lookup/update does not load/store "type of return field" in
    read only mode #2221
    
    Before v2.2 ReturnType is stored in update property but are never used,
    for now I only fix the error. In futur we could remove return type or
    use it to change the ValueMeta.
---
 .../dimensionlookup/DimensionLookup.java           | 32 ++++++++-----
 .../dimensionlookup/DimensionLookupDialog.java     | 14 ++++--
 .../dimensionlookup/DimensionLookupMeta.java       | 53 ++++++++++++++--------
 .../messages/messages_en_US.properties             |  1 +
 .../dimensionlookup/DimensionLookupMetaTest.java   | 14 +++++-
 .../test/resources/dimension-lookup-transform.xml  | 14 +++---
 ...ransform.xml => dimension-update-transform.xml} |  0
 7 files changed, 82 insertions(+), 46 deletions(-)

diff --git 
a/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookup.java
 
b/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookup.java
index b9f807885d..36231f8c8f 100644
--- 
a/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookup.java
+++ 
b/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookup.java
@@ -142,17 +142,11 @@ public class DimensionLookup extends 
BaseTransform<DimensionLookupMeta, Dimensio
       data.fieldnrs = new int[f.getFields().size()];
       for (int i = 0; i < data.fieldnrs.length; i++) {
         DLField field = f.getFields().get(i);
-        DimensionUpdateType updateType = field.getUpdateType();
-        if (updateType == null) {
-          throw new HopTransformException(
-              "Please specify an update type for field nr " + (i + 1) + " : " 
+ field.getName());
-        }
-        if (meta.isUpdate() && updateType.isWithArgument()) {
+        if (isLookupOrUpdateTypeWithArgument(meta.isUpdate(), field)) {
           data.fieldnrs[i] = data.outputRowMeta.indexOfValue(field.getName());
           if (data.fieldnrs[i] < 0) {
-            throw new HopTransformException(
-                BaseMessages.getString(
-                    PKG, "DimensionLookup.Exception.KeyFieldNotFound", 
field.getName()));
+            throw new HopTransformException(BaseMessages.getString(PKG,
+                "DimensionLookup.Exception.KeyFieldNotFound", 
field.getName()));
           }
         } else {
           data.fieldnrs[i] = -1;
@@ -227,6 +221,21 @@ public class DimensionLookup extends 
BaseTransform<DimensionLookupMeta, Dimensio
     return true;
   }
 
+  public boolean isLookupOrUpdateTypeWithArgument(final boolean update, final 
DLField field) throws HopTransformException {
+    // Lookup
+    if (!update) {
+      return true;
+    }
+
+    // Update type field
+    DimensionUpdateType updateType = field.getUpdateType();
+    if (updateType == null) {
+      throw new HopTransformException(BaseMessages.getString(
+          PKG, "DimensionLookup.Exception.MissingUpdateTypeField ", 
field.getName()));
+    }     
+    return updateType.isWithArgument();
+  }
+  
   private Date determineDimensionUpdatedDate(Object[] row) throws HopException 
{
     if (data.datefieldnr < 0) {
       return getPipeline().getExecutionStartDate(); // start of pipeline...
@@ -822,7 +831,7 @@ public class DimensionLookup extends 
BaseTransform<DimensionLookupMeta, Dimensio
    * table: dimension table keys[]: which dim-fields do we use to look up key? 
retval: name of the
    * key to return datefield: do we have a datefield? datefrom, dateto: 
date-range, if any.
    */
-  private void setDimLookup(IRowMeta rowMeta) throws HopDatabaseException {
+  private void setDimLookup(IRowMeta rowMeta) throws HopException {
     DLFields f = meta.getFields();
     DatabaseMeta databaseMeta = meta.getDatabaseMeta();
 
@@ -847,8 +856,7 @@ public class DimensionLookup extends 
BaseTransform<DimensionLookupMeta, Dimensio
 
     for (DLField field : f.getFields()) {
       // Don't retrieve the fields without input
-      if (StringUtils.isNotEmpty(field.getLookup())
-          && meta.isUpdate() && field.getUpdateType().isWithArgument()) {
+      if (StringUtils.isNotEmpty(field.getLookup()) && 
isLookupOrUpdateTypeWithArgument(meta.isUpdate(), field)) {
         sql += ", " + databaseMeta.quoteField(field.getLookup());
 
         if (StringUtils.isNotEmpty(field.getName()) && 
!field.getLookup().equals(field.getName())) {
diff --git 
a/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupDialog.java
 
b/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupDialog.java
index e207c2a3fa..4f4f27743a 100644
--- 
a/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupDialog.java
+++ 
b/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupDialog.java
@@ -1108,8 +1108,7 @@ public class DimensionLookupDialog extends 
BaseTransformDialog implements ITrans
         DimensionUpdateType updateType = field.getUpdateType();
         item.setText(3, updateType == null ? "" : updateType.getDescription());
       } else {
-        // String -> int -> String
-        item.setText(3, 
ValueMetaFactory.getValueMetaName(field.getReturnType()));
+        item.setText(3, Const.NVL(field.getReturnType(),""));
       }
     }
 
@@ -1227,10 +1226,15 @@ public class DimensionLookupDialog extends 
BaseTransformDialog implements ITrans
       DLField field = new DLField();
       field.setLookup(item.getText(1));
       field.setName(item.getText(2));
-      DimensionUpdateType updateType = 
DimensionUpdateType.lookupDescription(item.getText(3));       
-      if ( updateType!=null) {
-        field.setUpdate(updateType.getCode());
+      if (in.isUpdate()) {
+        DimensionUpdateType updateType = 
DimensionUpdateType.lookupDescription(item.getText(3));
+        if (updateType != null) {
+          field.setUpdate(updateType.getCode());
+        }
+      } else {
+        field.setReturnType(item.getText(3));
       }
+
       f.getFields().add(field);
     }
     if (log.isDebug()) {
diff --git 
a/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMeta.java
 
b/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMeta.java
index 4dbbb17510..30087dfad5 100644
--- 
a/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMeta.java
+++ 
b/plugins/transforms/dimensionlookup/src/main/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMeta.java
@@ -37,7 +37,6 @@ import org.apache.hop.core.row.value.ValueMetaBoolean;
 import org.apache.hop.core.row.value.ValueMetaDate;
 import org.apache.hop.core.row.value.ValueMetaFactory;
 import org.apache.hop.core.row.value.ValueMetaInteger;
-import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
@@ -643,7 +642,7 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
               new CheckResult(
                   ICheckResult.TYPE_RESULT_ERROR,
                   "The update type specified is not valid for field '"
-                      + field.getName()
+                      + Const.NVL(field.getName(), field.getLookup())
                       + "' : '"
                       + field.getUpdate()
                       + "'",
@@ -653,14 +652,15 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
       } else {
         // Check the type of the dimension field to look up
         //
-        if (field.getReturnType() <= 0) {
+        int type = ValueMetaFactory.getIdForValueMeta(field.getReturnType());
+        if (type == IValueMeta.TYPE_NONE) {
           remarks.add(
               new CheckResult(
                   ICheckResult.TYPE_RESULT_ERROR,
                   "The return type specified is not valid for field '"
-                      + field.getName()
+                      + Const.NVL(field.getName(), field.getLookup())
                       + "' : '"
-                      + field.getUpdate()
+                      + field.getReturnType()
                       + "'",
                   transformMeta));
           allOk = false;
@@ -1510,14 +1510,18 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
         injectionKeyDescription = "DimensionLookup.Injection.UPDATE_TYPE")
     private String update;
 
+    @HopMetadataProperty(        
+        key = "type",
+        injectionKey = "TYPE_OF_RETURN_FIELD",
+        injectionKeyDescription = 
"DimensionLookup.Injection.TYPE_OF_RETURN_FIELD")
+    private String returnType;
+    
     /** Not serialized. This is used to cache the lookup of the dimension type 
*/
     private DimensionUpdateType updateType;
-    /** Not serialized. This is used to cache the lookup of the Hop value 
return type */
-    private int returnType;
 
     public DLField() {
       this.updateType = null;
-      this.returnType = -1;
+      this.returnType = null;
     }
 
     public DLField(DLField f) {
@@ -1525,7 +1529,7 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
       this.lookup = f.lookup;
       this.update = f.update;
       this.updateType = null;
-      this.returnType = -1;
+      this.returnType = f.returnType;
     }
 
     public DimensionUpdateType getUpdateType() {
@@ -1541,14 +1545,6 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
       return null;
     }
 
-    public int getReturnType() {
-      if (returnType >= 0) {
-        return returnType;
-      }
-      returnType = ValueMetaFactory.getIdForValueMeta(update);
-      return returnType;
-    }
-
     /**
      * Gets name
      *
@@ -1586,7 +1582,7 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
     }
 
     /**
-     * Gets update
+     * Gets update type code
      *
      * @return value of update
      */
@@ -1595,14 +1591,31 @@ public class DimensionLookupMeta extends 
BaseTransformMeta<DimensionLookup, Dime
     }
 
     /**
-     * Sets update
+     * Sets update type code
      *
      * @param update value of update
      */
     public void setUpdate(String update) {
       this.update = update;
       this.updateType = null;
-      this.returnType = -1;
+    }
+    
+    /**
+     * Gets return type for read only lookup
+     *
+     * @return type of 
+     */
+    public String getReturnType() {
+      return returnType;
+    }
+    
+    /**
+     * Sets return type for read only lookup
+     *
+     * @param type the return type
+     */
+    public void setReturnType(String type) {
+      this.returnType = type;
     }
   }
 
diff --git 
a/plugins/transforms/dimensionlookup/src/main/resources/org/apache/hop/pipeline/transforms/dimensionlookup/messages/messages_en_US.properties
 
b/plugins/transforms/dimensionlookup/src/main/resources/org/apache/hop/pipeline/transforms/dimensionlookup/messages/messages_en_US.properties
index 01af25051f..df08d5dbb6 100644
--- 
a/plugins/transforms/dimensionlookup/src/main/resources/org/apache/hop/pipeline/transforms/dimensionlookup/messages/messages_en_US.properties
+++ 
b/plugins/transforms/dimensionlookup/src/main/resources/org/apache/hop/pipeline/transforms/dimensionlookup/messages/messages_en_US.properties
@@ -188,6 +188,7 @@ DimensionLookupDialog.DateField.Label=Stream Datefield
 DimensionLookupDialog.UseCache.Label=Enable the cache?
 DimensionLookup.Exception.NullDimensionUpdatedDate=Invalid data - dimension 
updated date cannot be null - {0}
 DimensionLookup.Exception.ErrorDetectedInComparingFields=Error comparing 
fields - cannot find lookup field [{0}]
+DimensionLookup.Exception.MissingUpdateTypeField=Please specify an update type 
for field [{0}]
 DimensionLookup.Injection.TARGET_SCHEMA=The name of the database schema to use.
 DimensionLookup.Injection.TARGET_TABLE=The name of the target table to write 
data to.
 DimensionLookup.Injection.CONNECTION_NAME=The name of the database connection.
diff --git 
a/plugins/transforms/dimensionlookup/src/test/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMetaTest.java
 
b/plugins/transforms/dimensionlookup/src/test/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMetaTest.java
index f26af94a9b..7adb82a7ad 100644
--- 
a/plugins/transforms/dimensionlookup/src/test/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMetaTest.java
+++ 
b/plugins/transforms/dimensionlookup/src/test/java/org/apache/hop/pipeline/transforms/dimensionlookup/DimensionLookupMetaTest.java
@@ -18,7 +18,6 @@
 package org.apache.hop.pipeline.transforms.dimensionlookup;
 
 import org.apache.hop.core.HopClientEnvironment;
-import org.apache.hop.core.HopEnvironment;
 import org.apache.hop.core.database.DatabaseMeta;
 import org.apache.hop.metadata.serializer.memory.MemoryMetadataProvider;
 import org.apache.hop.pipeline.transform.TransformSerializationTestUtil;
@@ -26,7 +25,9 @@ import org.junit.Before;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 public class DimensionLookupMetaTest {
 
@@ -44,11 +45,12 @@ public class DimensionLookupMetaTest {
 
     DimensionLookupMeta meta =
         TransformSerializationTestUtil.testSerialization(
-            "/dimension-lookup-transform.xml", DimensionLookupMeta.class, 
metadataProvider);
+            "/dimension-update-transform.xml", DimensionLookupMeta.class, 
metadataProvider);
 
     assertNotNull(meta.getDatabaseMeta());
     assertNotNull(meta.getTableName());
     assertNotNull(meta.getSchemaName());
+    assertTrue(meta.isUpdate());
     assertEquals(100, meta.getCommitSize());
     assertEquals(5000, meta.getCacheSize());
     assertEquals(1, meta.getFields().getKeys().size());
@@ -63,5 +65,13 @@ public class DimensionLookupMetaTest {
     assertEquals("lastVersionLookup", 
meta.getFields().getFields().get(1).getLookup());
     assertEquals("LastVersion", 
meta.getFields().getFields().get(1).getUpdate());
     assertEquals(DimensionLookupMeta.DimensionUpdateType.LAST_VERSION, 
meta.getFields().getFields().get(1).getUpdateType());
+    
+    meta =
+        TransformSerializationTestUtil.testSerialization(
+            "/dimension-lookup-transform.xml", DimensionLookupMeta.class, 
metadataProvider);
+
+    assertFalse(meta.isUpdate());
+    assertEquals("Number", 
meta.getFields().getFields().get(0).getReturnType());
+    assertEquals("String", 
meta.getFields().getFields().get(1).getReturnType());
   }
 }
diff --git 
a/plugins/transforms/dimensionlookup/src/test/resources/dimension-lookup-transform.xml
 
b/plugins/transforms/dimensionlookup/src/test/resources/dimension-lookup-transform.xml
index 6bf1a30b66..be294db0ff 100644
--- 
a/plugins/transforms/dimensionlookup/src/test/resources/dimension-lookup-transform.xml
+++ 
b/plugins/transforms/dimensionlookup/src/test/resources/dimension-lookup-transform.xml
@@ -31,7 +31,7 @@
     <table>dimension</table>
     <connection>unit-test-db</connection>
     <commit>100</commit>
-    <update>Y</update>
+    <update>N</update>
     <fields>
         <key>
             <name>key</name>
@@ -43,14 +43,14 @@
             <to>date_to</to>
         </date>
         <field>
-            <name>value</name>
-            <lookup>valueLookup</lookup>
-            <update>Insert</update>
+            <name>valueNumber</name>
+            <lookup>fieldNumber</lookup>
+            <type>Number</type>
         </field>
         <field>
-            <name>lastVersion</name>
-            <lookup>lastVersionLookup</lookup>
-            <update>LastVersion</update>
+            <name>valueString</name>
+            <lookup>fieldString</lookup>
+            <type>String</type>
         </field>
         <return>
             <name>dimension_id</name>
diff --git 
a/plugins/transforms/dimensionlookup/src/test/resources/dimension-lookup-transform.xml
 
b/plugins/transforms/dimensionlookup/src/test/resources/dimension-update-transform.xml
similarity index 100%
copy from 
plugins/transforms/dimensionlookup/src/test/resources/dimension-lookup-transform.xml
copy to 
plugins/transforms/dimensionlookup/src/test/resources/dimension-update-transform.xml

Reply via email to