Description:
Hello,
I have a table with a TEXT column and I'm trying to read the records from it (one single row inserted).
I get a NullPointerException at runtime. We are using clusterj 7.3.2, but same thing happened when upgrading to 7.3.5
The stack trace below was taken using clusterj-7.3.5.jar:
Caused by: java.lang.NullPointerException
at com.mysql.clusterj.tie.NdbRecordScanResultDataImpl.executeIfRecordsLocked(NdbRecordScanResultDataImpl.java:99)
at com.mysql.clusterj.tie.NdbRecordScanResultDataImpl.next(NdbRecordScanResultDataImpl.java:143)
at com.mysql.clusterj.core.query.QueryDomainTypeImpl.getResultList(QueryDomainTypeImpl.java:183)
Note:
- everything is working fine when we use a VARCHAR column instead of TEXT
How to repeat:
Table:
=========
CREATE TABLE `mvno_profile` (
`mvno_id` INT(11) NOT NULL,
`last_updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`class_version` INT(11) NOT NULL,
`profile_data` TEXT NOT NULL,
PRIMARY KEY (`mvno_id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=ndbcluster;
Data:
=========
INSERT INTO `mvno_profile` (`mvno_id`, `last_updated`, `class_version`, `profile_data`) VALUES (1, '2014-06-10 11:42:05', 1, '{}');
Interface:
==========
@PersistenceCapable(table="mvno_profile")
public interface MvnoProfileInterface {
@PrimaryKey
@Column(name = "mvno_id")
public abstract int getMvnoId();
public abstract void setMvnoId(int mvnoId);
@Column(name = "last_updated")
public abstract Timestamp getLastUpdated();
public abstract void setLastUpdated(Timestamp lastUpdated);
@Column(name = "class_version")
public abstract Integer getClassVersion();
public abstract void setClassVersion(Integer classVersion);
@Column(name = "profile_data")
public abstract String getProfileData();
public abstract void setProfileData(String profileData);
}
Data access:
============
protected <I> List<I> loadDataTable(Session session,
Class<I> intClass, boolean isAscending, String... orderBy) {
QueryBuilder builder = session.getQueryBuilder();
QueryDomainType<I> domain = builder.createQueryDefinition(intClass);
Query<I> query = session.createQuery(domain);
if (orderBy != null && orderBy.length > 0) {
query.setOrdering(isAscending ? Query.Ordering.ASCENDING : Query.Ordering.DESCENDING, orderBy);
}
List<I> results = query.getResultList();
return results;
}
List<MvnoProfileInterface> results = loadDataTable(
session, MvnoProfileInterface.class, true, "mvnoId");