I am trying to understand the JAVA API when they have sub-queries

String query = "select name, $sungbyrecord as x_sungby from V " +
 "let $sungby = outE()[ @class = 'sung_by' ],  " +
 "$sungbyrecord = list( (select in.name from $sungby ) ) " +
 "where name='HEY BO DIDDLEY'";
ODatabaseDocumentTx databaseDocumentTx = new ODatabaseDocumentTx( 
"remote:localhost/GratefulDeadConcerts" );
databaseDocumentTx.open( "admin", "admin" );
List<ODocument> result = databaseDocumentTx
  .query( new OSQLSynchQuery<ODocument>( query ) );

for ( ODocument d : result ) {
System.out.println( d.toString() ); *//prints #-2:0{name:HEY BO 
DIDDLEY,x_sungby:[1]} v0*
System.out.println( d.toJSON() ); */*prints (doesn't matter if I add 
"**fetchplan 
x_sungby:1" to the query or not*
Mar 26, 2015 10:30:39 AM com.orientechnologies.common.log.OLogManager log
SEVERE: Fetching error on record #-2:0
java.lang.ArrayIndexOutOfBoundsException: -2
at 
com.orientechnologies.orient.client.remote.OStorageRemote.getPhysicalClusterNameById(OStorageRemote.java:1319)
at 
com.orientechnologies.orient.client.remote.OStorageRemoteThread.getPhysicalClusterNameById(OStorageRemoteThread.java:526)
at 
com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.executeReadRecord(ODatabaseDocumentTx.java:1605)
at 
com.orientechnologies.orient.core.tx.OTransactionNoTx.loadRecord(OTransactionNoTx.java:80)
at 
com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.load(ODatabaseDocumentTx.java:1424)
at 
com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.load(ODatabaseDocumentTx.java:117)
at 
com.orientechnologies.orient.core.id.ORecordId.getRecord(ORecordId.java:313)
at 
com.orientechnologies.orient.core.fetch.OFetchHelper.fetchCollection(OFetchHelper.java:491)
at 
com.orientechnologies.orient.core.fetch.OFetchHelper.fetch(OFetchHelper.java:372)
at 
com.orientechnologies.orient.core.fetch.OFetchHelper.processRecord(OFetchHelper.java:311)
at 
com.orientechnologies.orient.core.fetch.OFetchHelper.fetch(OFetchHelper.java:72)
at 
com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.toString(ORecordSerializerJSON.java:337)
at 
com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerStringAbstract.toString(ORecordSerializerStringAbstract.java:665)
at 
com.orientechnologies.orient.core.record.ORecordAbstract.toJSON(ORecordAbstract.java:192)
at 
com.orientechnologies.orient.core.record.ORecordAbstract.toJSON(ORecordAbstract.java:188)
at ft.orientdb.test.Test01.testQuery(Test01.java:681)
at ft.orientdb.test.Test01.main(Test01.java:100)

*{"@type":"d","@rid":"#-2:0","@version":0,"name":"HEY BO 
DIDDLEY","x_sungby":[]}*
**/*
}

When trying the Async query

databaseDocumentTx.query( new OSQLAsynchQuery<ODocument>( query, new 
OCommandResultListener() {
List<ODocument> result = new ArrayList<ODocument>();
@Override
public boolean result(Object arg0) {
System.out.println( "Async result: " + ((ODocument)arg0).toString() );
result.add( (ODocument)arg0 );
return false;
}
 @Override
public void end() {
System.out.println( "Async result finished... " + result.size() + " record" 
);
}
} ) );

it only returns Async result: #-2:0{name:HEY BO DIDDLEY,x_sungby:[1]} v0
regardless if I add *fetchplan x_sungby:1* to the query or not.
toJSON shows the same exception as in the SYNCH version.

*So how should I do it to also fetch the records pointed to in the subquery 
be done using the java API? How can I make toJSON work?*


-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to