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);