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

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new 13943507 EMPIREDB-456 RecordData: add function isValueValid to check 
for partial loaded data
13943507 is described below

commit 13943507b322773d4e170c5b25040a91989ff822
Author: Rainer Döbele <[email protected]>
AuthorDate: Thu Mar 20 23:36:50 2025 +0100

    EMPIREDB-456
    RecordData: add function isValueValid to check for partial loaded data
---
 .../src/main/java/org/apache/empire/data/RecordData.java     | 10 +++++++++-
 .../java/org/apache/empire/data/bean/BeanRecordProxy.java    |  9 +++++++++
 .../main/java/org/apache/empire/data/list/DataListEntry.java | 12 +++++++++++-
 empire-db/src/main/java/org/apache/empire/db/DBReader.java   |  9 +++++++++
 .../src/main/java/org/apache/empire/db/DBRecordBase.java     |  1 +
 5 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/empire-db/src/main/java/org/apache/empire/data/RecordData.java 
b/empire-db/src/main/java/org/apache/empire/data/RecordData.java
index 4400344c..278be464 100644
--- a/empire-db/src/main/java/org/apache/empire/data/RecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/data/RecordData.java
@@ -71,6 +71,14 @@ public interface RecordData
      * @return the record value for the given column
      */
     Object get(ColumnExpr column);
+
+    /**
+     * checks if the field at the given index position is valid.
+     * This is useful for partial loading to check whether a value has been 
fetched 
+     * @param index the field index
+     * @return true if the field value is available or false otherwise
+     */
+    boolean isValueValid(int index);
     
     /**
      * checks if the field at the given index position contains no value 
(null) 
@@ -86,7 +94,7 @@ public interface RecordData
      * @return true if the value for the column is null or false otherwise
      */
     boolean isNull(ColumnExpr column);
-
+    
     // ------- Java Bean Support -------
 
     /**
diff --git 
a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java 
b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
index 94adadaf..eb165ec7 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
@@ -240,6 +240,15 @@ public class BeanRecordProxy<T> implements Record
         return get(getColumn(index));
     }
 
+    @Override
+    public boolean isValueValid(int index)
+    {   // Check state
+        if (index < 0 || index >= columns.size())
+            return false;
+        // Always valid
+        return true;
+    }
+
     @Override
     public boolean isNull(ColumnExpr column)
     {
diff --git 
a/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java 
b/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java
index c6e01907..3837f4ae 100644
--- a/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java
+++ b/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java
@@ -141,7 +141,8 @@ public class DataListEntry implements RecordData, 
Serializable
                 continue;
             // update
             try {
-                values[i] = recData.getValue(ri);
+                if (recData.isValueValid(ri))
+                    values[i] = recData.getValue(ri);
             } catch(Exception e) {
                 log.error("Failed to update value for column {}", 
cols[i].getName());
             }
@@ -200,6 +201,15 @@ public class DataListEntry implements RecordData, 
Serializable
             throw new InvalidArgumentException("index", index);
         return values[index];
     }
+
+    @Override
+    public boolean isValueValid(int index)
+    {   // Check state
+        if (index<0 || index>=values.length)
+            return false;
+        // Special check for NO_VALUE
+        return (values[index] != ObjectUtils.NO_VALUE);
+    }
     
     @Override
     public final Object get(ColumnExpr column)
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBReader.java 
b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
index 718828a0..589674ad 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
@@ -412,6 +412,15 @@ public class DBReader extends DBRecordData implements 
Closeable
             throw new EmpireSQLException(context.getDbms(), e);
         }
     }
+
+    @Override
+    public boolean isValueValid(int index)
+    {   // Check state
+        if (index < 0 || index >= columns.length)
+            return false;
+        // Always valid
+        return true;
+    }
     
     /**
      * Returns the record key for a type of entity
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java 
b/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java
index 39a99a48..56907214 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java
@@ -584,6 +584,7 @@ public abstract class DBRecordBase extends DBRecordData 
implements Record, Clone
      *  
      * @return true if a valid value is supplied for the given field or false 
if value is {@link ObjectUtils#NO_VALUE}  
      */
+    @Override
     public boolean isValueValid(int index)
     {   // Check state
         checkValid(index);

Reply via email to