Bug #72933 NullPointerException related to TEXT columns
Submitted: 10 Jun 2014 9:40 Modified: 1 Jun 2018 17:43
Reporter: Marius Cosma Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Cluster: Cluster/J Severity:S2 (Serious)
Version:7.3.5 / 7.3.2 OS:Windows (7)
Assigned to: CPU Architecture:Any

[10 Jun 2014 9:40] Marius Cosma
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");
[1 Jun 2018 17:43] Lakshmi Narayanan Sreethar
Unable to reproduce in recent versions.