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;
}
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;
}
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();
}
}
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();
}
}
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!");
}
Aggregations