Hi Andrew, Functions are automatically loaded as Java Service from Class Loader, so with OSGi you could have some problem. Since 1.7rc2 we fixed A LOT of issues and I remember for sure also something with OSGi.
WDYT to install 1.7.8, put a copy of your db under 1.7.8 and try it again? Lvc@ ᐧ On 21 August 2014 01:03, amoore <[email protected]> wrote: > Hi, > > We are using version v1.7 rc2, and it is an embedded instance in a karaf > osgi container. > > I'm struggling to figure out why the following query runs from the > command-line console, but not programmatically from our java code: > > > select from ( traverse in('EntityParent') from ( select from Entity > where name = 'Entity-A' ) ) where $depth > 0 > > > > I have a directed hierarchy of vertices of a generic class named Entity, > and I'm simply trying to get all the descendents. > > As I stated before, his query works when I run from the command-line > console (console.sh), but when I run it within our application against our > embedded instance of OrientDB, it fails with the following exception: > > Caused by: > com.orientechnologies.orient.core.sql.OCommandSQLParsingException: Error on > parsing command at position #0: No function with name 'in', available names > are : > [ifnull,count,last,set,newexcept,sum,date,distinct,distance,document,if,EXCEPT,map,avg,min,encode,coalesce,max,eval,list,format,difference,decode,unionall,sysdate,intersect,first] > at > com.orientechnologies.orient.core.sql.OSQLEngine.getFunction(OSQLEngine.java:354) > at > com.orientechnologies.orient.core.sql.functions.OSQLFunctionRuntime.setRoot(OSQLFunctionRuntime.java:163) > at > com.orientechnologies.orient.core.sql.filter.OSQLFilterItemAbstract.<init>(OSQLFilterItemAbstract.java:56) > at > com.orientechnologies.orient.core.sql.functions.OSQLFunctionRuntime.<init>(OSQLFunctionRuntime.java:51) > at > com.orientechnologies.orient.core.sql.OSQLHelper.getFunction(OSQLHelper.java:218) > at > com.orientechnologies.orient.core.sql.OSQLHelper.parseValue(OSQLHelper.java:197) > at > com.orientechnologies.orient.core.sql.OCommandExecutorSQLTraverse.parseFields(OCommandExecutorSQLTraverse.java:200) > at > com.orientechnologies.orient.core.sql.OCommandExecutorSQLTraverse.parse(OCommandExecutorSQLTraverse.java:66) > at > com.orientechnologies.orient.core.sql.OCommandExecutorSQLTraverse.parse(OCommandExecutorSQLTraverse.java:51) > at > com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:49) > at > com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:33) > at > com.orientechnologies.orient.core.sql.filter.OSQLTarget.extractTargets(OSQLTarget.java:99) > at > com.orientechnologies.orient.core.sql.filter.OSQLTarget.<init>(OSQLTarget.java:61) > ... 24 more > > I'm pretty sure the classes in the orientdb-graphdb library are being > included in our application... > (as I noticed was necessary in this post: > https://groups.google.com/forum/#!searchin/orient-database/No$20function$20with$20name$20$27in$27/orient-database/648vSSDV_NM/eB5RWaENCIUJ > ) > > Here is a code snippet from our application to show which classes we are > using in our client for querying the OrientDB graph database: > > > ... > import com.orientechnologies.common.io.OIOException; > import com.orientechnologies.orient.core.Orient; > import com.orientechnologies.orient.core.command.OCommandRequest; > import com.orientechnologies.orient.core.db.ODatabase.STATUS; > import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal; > import com.orientechnologies.orient.core.db.document.ODatabaseDocumentPool > ; > import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; > import com.orientechnologies.orient.core.exception.ODatabaseException; > import com.orientechnologies.orient.core.index.OIndexManager; > import com.orientechnologies.orient.core.index.OIndexManagerRemote; > import com.orientechnologies.orient.core.metadata.OMetadata; > import com.orientechnologies.orient.core.metadata.schema.OSchema; > import com.orientechnologies.orient.core.record.impl.ODocument; > import com.orientechnologies.orient.core.sql.OCommandSQL; > import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery; > import com.tinkerpop.blueprints.impls.orient.OrientBaseGraph; > import com.tinkerpop.blueprints.impls.orient.OrientDynaElementIterable; > import com.tinkerpop.blueprints.impls.orient.OrientGraph; > import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx; > import com.tinkerpop.blueprints.impls.orient.OrientVertex; > ... > > public OrientDynaElementIterable runGraphQuery(final String iText, > final int iLimit, final String fetchPlan, > final OrientBaseGraph graph) { > > long start = 0; > if (LOG.isDebugEnabled()) { > start = new Date().getTime(); > LOG.debug(String.format("Executing OrientDB graph > query:\n%s\n\nLimit: %s\nFetch Plan: %s", > iText, iLimit, fetchPlan)); > } > > OCommandRequest command = new OSQLSynchQuery< > OrientDynaElementIterable>(iText, iLimit); > > if (StringUtils.isNotBlank(fetchPlan)) { > command.setFetchPlan(fetchPlan); > } > > command = graph.command(command); > > OrientDynaElementIterable result = null; > try { > result = command.execute(); > } ... > } > > > > > I generally would have guessed if the query worked from the console, it > would also work programmatically. > > Is the syntax of my query not correct? > Are we doing something wrong in our code when submitting the query? > > Thanks in advance for your help! > > Regards, > > Andrew > > -- > > --- > 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. > -- --- 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.
