Unexpected Server Error when inserting an Entity
You can create a server state with the following snippet, that can cause the problem.
import caosdb as db
p1 = db.Property(name='p1', datatype=db.DOUBLE, unit='min').insert()
#p1 = db.Property(name='p1').retrieve()
p2 = db.Property(name='p2', datatype=db.TEXT).insert()
#p2 = db.Property(name='p2').retrieve()
#p1 = db.Property(name='p1', datatype=db.DOUBLE, unit='min').insert()
A = db.RecordType(name='A').add_property(p1).insert()
B = db.RecordType(name='B').add_parent(name='A').add_property(p2).insert()
cont = db.Container()
cont.append(db.RecordType(id=A.id, name=A.name)
.add_property(id=p1.id, name=p1.name, datatype=db.DOUBLE,
importance=db.RECOMMENDED)
.add_property(id=p1.id, name=p1.name, importance=db.RECOMMENDED))
cont.append(db.Property(id=p1.id, name=p1.name, datatype=db.DOUBLE, unit='min'))
cont.append(db.RecordType(id=B.id, name=B.name)
.add_parent(id=A.id, name=A.name, inheritance=db.SUGGESTED))
cont.update()
When you now submit a query with "FIND RECORDTYPE B" you should get an unexpected server error. The server logs show the following:
java.lang.NullPointerException: Replacement was null
at org.caosdb.server.database.DatabaseUtils.replace(DatabaseUtils.java:271) ~[classes/:?]
at org.caosdb.server.database.DatabaseUtils.transformToDeepPropertyTree(DatabaseUtils.java:333) ~[classes/:?]
at org.caosdb.server.database.backend.transaction.RetrieveProperties.process(RetrieveProperties.java:97) ~[classes/:?]
at org.caosdb.server.database.backend.transaction.RetrieveProperties.process(RetrieveProperties.java:1) ~[classes/:?]
at org.caosdb.server.database.CacheableBackendTransaction.execute(CacheableBackendTransaction.java:47) ~[classes/:?]
at org.caosdb.server.database.BackendTransaction.execute(BackendTransaction.java:239) ~[classes/:?]
at org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction.retrieveFullEntity(RetrieveFullEntityTransaction.java:121) ~[classes/:?]
at org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction.retrieveFullEntitiesInContainer(RetrieveFullEntityTransaction.java:89) ~[classes/:?]
at org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction.execute(RetrieveFullEntityTransaction.java:77) ~[classes/:?]
at org.caosdb.server.database.BackendTransaction.executeTransaction(BackendTransaction.java:152) ~[classes/:?]
at org.caosdb.server.transaction.TransactionInterface.execute(TransactionInterface.java:49) ~[classes/:?]
at org.caosdb.server.transaction.Retrieve.retrieveFullEntities(Retrieve.java:117) ~[classes/:?]
at org.caosdb.server.transaction.Retrieve.transaction(Retrieve.java:112) ~[classes/:?]
This was tested with the server having caching enabled and disabled.
Edited by Timm Fitschen