001 /*
002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org
003 * Copyright (C) 2011 NightLabs Consulting GmbH
004 *
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program. If not, see <http://www.gnu.org/licenses/>.
017 */
018 package org.cumulus4j.store.query;
019
020 import java.util.Collection;
021 import java.util.Map;
022
023 import org.cumulus4j.store.PersistenceManagerConnection;
024 import org.cumulus4j.store.crypto.CryptoContext;
025 import org.datanucleus.ClassLoaderResolver;
026 import org.datanucleus.query.compiler.QueryCompilation;
027 import org.datanucleus.store.query.Query;
028
029 /**
030 * JDO-specific sub-class of {@link QueryEvaluator} binding the JDO-agnostic query logic
031 * to the JDO API.
032 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
033 */
034 public class JDOQueryEvaluator extends QueryEvaluator {
035
036 public JDOQueryEvaluator(Query query, QueryCompilation compilation, Map<String, Object> parameterValues,
037 ClassLoaderResolver clr, PersistenceManagerConnection pmConn, CryptoContext cryptoContext)
038 {
039 super("JDOQL", query, compilation, parameterValues, clr, pmConn, cryptoContext);
040 }
041
042 @Override
043 protected Collection<Object> evaluateSubquery(
044 Query subquery, QueryCompilation compilation, Object outerCandidate
045 )
046 {
047 JDOQueryEvaluator evaluator = new JDOQueryEvaluator(getQuery(), compilation, getParameterValues(),
048 getClassLoaderResolver(), getPersistenceManagerConnection(), getCryptoContext());
049 return evaluator.execute();
050 }
051 }