Search in sources :

Example 11 with Query

use of org.datanucleus.store.query.Query in project datanucleus-api-jdo by datanucleus.

the class JDOQLTypedQueryImpl method saveAsNamedQuery.

/* (non-Javadoc)
     * @see javax.jdo.JDOQLTypedQuery#saveAsNamedQuery(java.lang.String)
     */
@Override
public JDOQLTypedQuery<T> saveAsNamedQuery(String name) {
    assertIsOpen();
    JDOPersistenceManagerFactory.checkJDOPermission(JDOPermission.GET_METADATA);
    QueryMetaData qmd = new QueryMetaData(name);
    qmd.setLanguage(Query.LANGUAGE_JDOQL);
    Query query = getInternalQuery();
    qmd.setQuery(query.toString());
    qmd.setResultClass(query.getResultClassName());
    qmd.setUnique(query.isUnique());
    Map<String, Object> queryExts = query.getExtensions();
    if (queryExts != null && !queryExts.isEmpty()) {
        Iterator<Map.Entry<String, Object>> queryExtsIter = queryExts.entrySet().iterator();
        while (queryExtsIter.hasNext()) {
            Map.Entry<String, Object> queryExtEntry = queryExtsIter.next();
            qmd.addExtension(queryExtEntry.getKey(), "" + queryExtEntry.getValue());
        }
    }
    query.getExecutionContext().getMetaDataManager().registerNamedQuery(qmd);
    return this;
}
Also used : QueryMetaData(org.datanucleus.metadata.QueryMetaData) Query(org.datanucleus.store.query.Query) JDOQLTypedQuery(javax.jdo.JDOQLTypedQuery) JDOQuery(org.datanucleus.api.jdo.JDOQuery) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Example 12 with Query

use of org.datanucleus.store.query.Query in project datanucleus-api-jdo by datanucleus.

the class JDOQLTypedQueryImpl method getInternalQuery.

/**
 * Convenience method to generate an internal DataNucleus Query and apply the generic compilation to it.
 * @return The internal DataNucleus query
 */
protected Query getInternalQuery() {
    // Create a DataNucleus query and set the generic compilation
    Query internalQuery = ec.getStoreManager().newQuery(Query.LANGUAGE_JDOQL, ec, toString());
    if (ec.getFlushMode() == FlushMode.QUERY) {
        // Flush mode implies flush all before executing the query so set the necessary property
        internalQuery.addExtension(Query.EXTENSION_FLUSH_BEFORE_EXECUTION, Boolean.TRUE);
    }
    internalQuery.setIgnoreCache(ignoreCache);
    if (extensions != null) {
        internalQuery.setExtensions(extensions);
    }
    if (fetchPlan != null) {
        internalQuery.setFetchPlan(fetchPlan.getInternalFetchPlan());
    }
    if (serializeRead != null) {
        internalQuery.setSerializeRead(serializeRead);
    }
    if (datastoreReadTimeout != null) {
        internalQuery.setDatastoreReadTimeoutMillis(datastoreReadTimeout);
    }
    if (datastoreWriteTimeout != null) {
        internalQuery.setDatastoreWriteTimeoutMillis(datastoreWriteTimeout);
    }
    if (!subclasses) {
        internalQuery.setSubclasses(false);
    }
    if (type == QueryType.SELECT) {
        internalQuery.setType(Query.QueryType.SELECT);
        if (resultDistinct != null) {
            internalQuery.setResultDistinct(resultDistinct.booleanValue());
        }
        internalQuery.setResultClass(resultClass);
        internalQuery.setUnique(unique);
        if (candidates != null) {
            internalQuery.setCandidates(candidates);
        }
    } else if (type == QueryType.BULK_UPDATE) {
        internalQuery.setType(Query.QueryType.BULK_UPDATE);
    } else if (type == QueryType.BULK_DELETE) {
        internalQuery.setType(Query.QueryType.BULK_DELETE);
    }
    QueryCompilation compilation = getCompilation();
    internalQuery.setCompilation(compilation);
    return internalQuery;
}
Also used : Query(org.datanucleus.store.query.Query) JDOQLTypedQuery(javax.jdo.JDOQLTypedQuery) JDOQuery(org.datanucleus.api.jdo.JDOQuery) QueryCompilation(org.datanucleus.query.compiler.QueryCompilation)

Example 13 with Query

use of org.datanucleus.store.query.Query in project datanucleus-api-jdo by datanucleus.

the class JDOQLTypedQueryImpl method cancel.

/* (non-Javadoc)
     * @see javax.jdo.JDOQLTypedQuery#cancel(java.lang.Thread)
     */
@Override
public void cancel(Thread thread) {
    assertIsOpen();
    if (internalQueries == null || internalQueries.isEmpty()) {
        return;
    }
    try {
        Iterator<Query> iter = internalQueries.iterator();
        while (iter.hasNext()) {
            Query query = iter.next();
            query.cancel(thread);
        }
    } catch (NucleusException ne) {
        throw new JDOException("Error in calling Query.cancelAll. See the nested exception", ne);
    } catch (UnsupportedOperationException uoe) {
        throw new JDOUnsupportedOptionException();
    }
}
Also used : Query(org.datanucleus.store.query.Query) JDOQLTypedQuery(javax.jdo.JDOQLTypedQuery) JDOQuery(org.datanucleus.api.jdo.JDOQuery) JDOUnsupportedOptionException(javax.jdo.JDOUnsupportedOptionException) NucleusException(org.datanucleus.exceptions.NucleusException) JDOException(javax.jdo.JDOException)

Example 14 with Query

use of org.datanucleus.store.query.Query in project datanucleus-api-jdo by datanucleus.

the class JDOQLTypedQueryImpl method cancelAll.

/* (non-Javadoc)
     * @see javax.jdo.JDOQLTypedQuery#cancelAll()
     */
@Override
public void cancelAll() {
    assertIsOpen();
    if (internalQueries == null || internalQueries.isEmpty()) {
        return;
    }
    try {
        Iterator<Query> iter = internalQueries.iterator();
        while (iter.hasNext()) {
            Query query = iter.next();
            query.cancel();
        }
    } catch (NucleusException ne) {
        throw new JDOException("Error in calling Query.cancelAll. See the nested exception", ne);
    } catch (UnsupportedOperationException uoe) {
        throw new JDOUnsupportedOptionException();
    }
}
Also used : Query(org.datanucleus.store.query.Query) JDOQLTypedQuery(javax.jdo.JDOQLTypedQuery) JDOQuery(org.datanucleus.api.jdo.JDOQuery) JDOUnsupportedOptionException(javax.jdo.JDOUnsupportedOptionException) NucleusException(org.datanucleus.exceptions.NucleusException) JDOException(javax.jdo.JDOException)

Example 15 with Query

use of org.datanucleus.store.query.Query in project datanucleus-core by datanucleus.

the class AbstractPersistenceHandler method findObjectForUnique.

/* (non-Javadoc)
     * @see org.datanucleus.store.StorePersistenceHandler#findObjectForUnique(org.datanucleus.ExecutionContext, org.datanucleus.metadata.AbstractClassMetaData, java.lang.String[], java.lang.Object[])
     */
@Override
public Object findObjectForUnique(ExecutionContext ec, AbstractClassMetaData cmd, String[] memberNames, Object[] values) {
    if (memberNames.length != values.length) {
        throw new NucleusUserException("findObjectForUnique should have same number of member names and values");
    }
    // Fallback to using a simple JDOQL query (which is what would be performed for the majority of datastores anyway)
    StringBuilder jdoqlStr = new StringBuilder("SELECT FROM ").append(cmd.getFullClassName()).append(" WHERE ");
    Map<String, Object> paramValueMap = new HashMap<>();
    for (int i = 0; i < memberNames.length; i++) {
        jdoqlStr.append("this.").append(memberNames[i]).append(" == :val").append(i);
        paramValueMap.put("val" + i, values[i]);
        if (i != memberNames.length - 1) {
            jdoqlStr.append(" && ");
        }
    }
    Query q = storeMgr.newQuery(Query.LANGUAGE_JDOQL, ec, jdoqlStr.toString());
    List results = (List) q.executeWithMap(paramValueMap);
    if (results == null || results.size() == 0) {
        throw new NucleusObjectNotFoundException("No object found for specified members and values of type " + cmd.getFullClassName());
    } else if (results.size() == 1) {
        return results.get(0);
    }
    throw new NucleusUserException("Specified members for class " + cmd.getFullClassName() + " finds multiple objects!");
}
Also used : Query(org.datanucleus.store.query.Query) HashMap(java.util.HashMap) NucleusUserException(org.datanucleus.exceptions.NucleusUserException) List(java.util.List) NucleusObjectNotFoundException(org.datanucleus.exceptions.NucleusObjectNotFoundException)

Aggregations

Query (org.datanucleus.store.query.Query)24 JDOQuery (org.datanucleus.api.jdo.JDOQuery)21 List (java.util.List)16 QueryCompilation (org.datanucleus.query.compiler.QueryCompilation)16 ArrayList (java.util.ArrayList)15 HashMap (java.util.HashMap)15 ClassLoaderResolver (org.datanucleus.ClassLoaderResolver)15 PersistenceManager (javax.jdo.PersistenceManager)14 Transaction (javax.jdo.Transaction)14 JDOQLCompiler (org.datanucleus.query.compiler.JDOQLCompiler)14 JavaQueryCompiler (org.datanucleus.query.compiler.JavaQueryCompiler)14 JDOQLInMemoryEvaluator (org.datanucleus.query.inmemory.JDOQLInMemoryEvaluator)14 JavaQueryInMemoryEvaluator (org.datanucleus.query.inmemory.JavaQueryInMemoryEvaluator)14 Person (org.jpox.samples.models.company.Person)10 JDOQLTypedQuery (javax.jdo.JDOQLTypedQuery)7 NucleusException (org.datanucleus.exceptions.NucleusException)4 Iterator (java.util.Iterator)3 JDOException (javax.jdo.JDOException)2 JDOUnsupportedOptionException (javax.jdo.JDOUnsupportedOptionException)2 Employee (org.jpox.samples.models.company.Employee)2