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.datanucleus.ClassLoaderResolver;
025 import org.datanucleus.query.compiler.QueryCompilation;
026 import org.datanucleus.store.query.Query;
027
028 /**
029 * JDO-specific sub-class of {@link QueryEvaluator} binding the JDO-agnostic query logic
030 * to the JDO API.
031 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
032 */
033 public class JDOQueryEvaluator extends QueryEvaluator {
034
035 public JDOQueryEvaluator(Query query, QueryCompilation compilation, Map<String, Object> parameterValues,
036 ClassLoaderResolver clr, PersistenceManagerConnection pmConn)
037 {
038 super("JDOQL", query, compilation, parameterValues, clr, pmConn);
039 }
040
041 @Override
042 protected Collection<Object> evaluateSubquery(
043 Query subquery, QueryCompilation compilation, Object outerCandidate
044 )
045 {
046 JDOQueryEvaluator evaluator = new JDOQueryEvaluator(getQuery(), compilation, getParameterValues(),
047 getClassLoaderResolver(), getPersistenceManagerConnection());
048 return evaluator.execute();
049 }
050 }