Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Null pointer on updating full text index #366

@boxheed

Description

@boxheed

Hi,

When using a full text index on a field if I update a field that is currently null with a value then the full text indexing of the new value throws a NullPointerException. I've put the stack trace below along with example code that demonstrates the issue. I've found this in 3.4.2 I'm wondering if it's possibly related to the fix for #222

Exception in thread "main" java.lang.NullPointerException
	at java.base/java.util.StringTokenizer.<init>(StringTokenizer.java:199)
	at java.base/java.util.StringTokenizer.<init>(StringTokenizer.java:221)
	at org.dizitart.no2.fulltext.BaseTextTokenizer.tokenize(BaseTextTokenizer.java:40)
	at org.dizitart.no2.internals.NitriteTextIndexingService.deleteIndex(NitriteTextIndexingService.java:65)
	at org.dizitart.no2.internals.IndexingService.refreshIndexEntry(IndexingService.java:206)
	at org.dizitart.no2.internals.DataService.update(DataService.java:182)
	at org.dizitart.no2.internals.NitriteService.update(NitriteService.java:443)
	at org.dizitart.no2.internals.DefaultNitriteCollection.update(DefaultNitriteCollection.java:322)
	at scrap.NitriteIndexNull.main(NitriteIndexNull.java:42)
package scrap;

import java.io.File;

import org.dizitart.no2.Document;
import org.dizitart.no2.IndexOptions;
import org.dizitart.no2.IndexType;
import org.dizitart.no2.Nitrite;
import org.dizitart.no2.NitriteCollection;
import org.dizitart.no2.NitriteId;
import org.dizitart.no2.UpdateOptions;
import org.dizitart.no2.WriteResult;
import org.dizitart.no2.filters.Filters;

public class NitriteIndexNull {

    public static void main(String[] args) {
        File dbFile = new File("/tmp/nitrite.db");
        if(dbFile.exists()) {
            dbFile.delete();
        }
        //create database
        Nitrite nitrite = Nitrite.builder().filePath("/tmp/nitrite.db").openOrCreate();
        //create collection
        NitriteCollection collection = nitrite.getCollection("col");
        //add a record
        Document doc = Document.createDocument("FIELD1", "ABC");
        doc.put("FIELD2", null);
        WriteResult result = collection.update(Filters.eq("FIELD1", "ABC"), doc, UpdateOptions.updateOptions(true, true));
        //get the ID        
        Long id = result.iterator().next().getIdValue();
        //create an indexed field
        collection.createIndex("FIELD2", IndexOptions.indexOptions(IndexType.Fulltext));
        //get document back out
        doc = collection.getById(NitriteId.createId(id));
        //insert a null into the field
        doc.put("FIELD2", null);
        collection.update(Filters.eq("FIELD1", "ABC"), doc, UpdateOptions.updateOptions(true, true));
        //update the null field with an value
        doc.put("FIELD2", "DEF");
        collection.update(Filters.eq("FIELD1", "ABC"), doc, UpdateOptions.updateOptions(true, true));
    }

}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions