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