You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by an...@apache.org on 2010/03/10 20:21:02 UTC

svn commit: r921521 - in /cayenne/sandbox/cayenne-gwt/src: main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/ test/java/org/apache/cayenne/gwt/test/client/

Author: andrey
Date: Wed Mar 10 19:21:01 2010
New Revision: 921521

URL: http://svn.apache.org/viewvc?rev=921521&view=rev
Log:
EJBQL support

Added:
    cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQuery.java
    cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQueryMetadata.java
Modified:
    cayenne/sandbox/cayenne-gwt/src/test/java/org/apache/cayenne/gwt/test/client/GwtTestQuery.java

Added: cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQuery.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQuery.java?rev=921521&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQuery.java (added)
+++ cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQuery.java Wed Mar 10 19:21:01 2010
@@ -0,0 +1,204 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.query;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * An EJBQL query representation in Cayenne.
+ * 
+ * @since 3.0
+ */
+public class EJBQLQuery implements Query {
+
+    protected String name;
+    protected String ejbqlStatement;
+    protected Map<String, Object> namedParameters;
+    protected Map<Integer, Object> positionalParameters;
+
+    EJBQLQueryMetadata metadata = new EJBQLQueryMetadata();
+
+    public EJBQLQuery(String ejbqlStatement) {
+        this.ejbqlStatement = ejbqlStatement;
+    }
+
+    public EJBQLQuery() {
+    }
+
+    public void initWithProperties(Map<String, ?> properties) {
+
+        // must init defaults even if properties are empty
+        if (properties == null) {
+            properties = Collections.EMPTY_MAP;
+        }
+        metadata.initWithProperties(properties);
+    }
+
+    public boolean isFetchingDataRows() {
+        return metadata.isFetchingDataRows();
+    }
+
+    public void setFetchingDataRows(boolean flag) {
+        metadata.setFetchingDataRows(flag);
+    }
+
+    public String[] getCacheGroups() {
+        return metadata.getCacheGroups();
+    }
+
+    public QueryCacheStrategy getCacheStrategy() {
+        return metadata.getCacheStrategy();
+    }
+
+    public void setCacheGroups(String... cacheGroups) {
+        this.metadata.setCacheGroups(cacheGroups);
+    }
+
+    public void setCacheStrategy(QueryCacheStrategy strategy) {
+        metadata.setCacheStrategy(strategy);
+    }
+
+    /**
+     * Returns an unparsed EJB QL statement used to initialize this query.
+     */
+    public String getEjbqlStatement() {
+        return ejbqlStatement;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Returns unmodifiable map of combined named and positional parameters. Positional
+     * parameter keys are Integers, while named parameter keys are strings.
+     */
+
+    public Map<String, Object> getNamedParameters() {
+        return namedParameters != null
+                ? Collections.unmodifiableMap(namedParameters)
+                : Collections.EMPTY_MAP;
+    }
+
+    public Map<Integer, Object> getPositionalParameters() {
+        return positionalParameters != null ? Collections
+                .unmodifiableMap(positionalParameters) : Collections.EMPTY_MAP;
+    }
+
+    /**
+     * Sets a named query parameter value.
+     */
+    public void setParameter(String name, Object object) {
+
+        // do a minimal sanity check
+        if (name == null || name.length() < 1) {
+            throw new IllegalArgumentException("Null or empty parameter name");
+        }
+
+        // TODO: andrus, 6/12/2007 - validate against available query parameters - JPA
+        // spec requires it.
+
+        if (namedParameters == null) {
+            namedParameters = new HashMap<String, Object>();
+        }
+
+        namedParameters.put(name, object);
+    }
+
+    /**
+     * Sets a positional query parameter value. Note that parameter indexes are starting
+     * from 1.
+     */
+    public void setParameter(int position, Object object) {
+
+        if (position < 1) {
+            throw new IllegalArgumentException("Parameter position must be >= 1: "
+                    + position);
+        }
+
+        // TODO: andrus, 6/12/2007 - validate against available query parameters - JPA
+        // spec requires it.
+
+        if (positionalParameters == null) {
+            positionalParameters = new HashMap<Integer, Object>();
+        }
+
+        positionalParameters.put(Integer.valueOf(position), object);
+    }
+
+    /**
+     * Returns the fetchLimit property indicating the maximum number of rows this query
+     * would return.
+     */
+    public int getFetchLimit() {
+        return metadata.getFetchLimit();
+    }
+
+    /**
+     * Sets the fetchLimit property indicating the maximum number of rows this query would
+     * return.
+     */
+    public void setFetchLimit(int fetchLimit) {
+        metadata.setFetchLimit(fetchLimit);
+    }
+
+    public int getFetchOffset() {
+        return metadata.getFetchOffset();
+    }
+
+    public void setFetchOffset(int fetchOffset) {
+        metadata.setFetchOffset(fetchOffset);
+    }
+
+    public void setEjbqlStatement(String text) {
+        this.ejbqlStatement = text;
+    }
+
+    public int getPageSize() {
+        return metadata.getPageSize();
+    }
+
+    public void setPageSize(int pageSize) {
+        metadata.setPageSize(pageSize);
+    }
+    
+    /**
+     * Sets statement's fetch size (0 for no default size)
+     * @since 3.0 
+     */
+    public void setStatementFetchSize(int size) {
+        metadata.setStatementFetchSize(size);
+    }
+    
+    /**
+     * @return statement's fetch size
+     * @since 3.0
+     */
+    public int getStatementFetchSize() {
+        return metadata.getStatementFetchSize();
+    }
+    
+    
+}

Added: cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQueryMetadata.java?rev=921521&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQueryMetadata.java (added)
+++ cayenne/sandbox/cayenne-gwt/src/main/resources/org/apache/cayenne/query/emul/org/apache/cayenne/query/EJBQLQueryMetadata.java Wed Mar 10 19:21:01 2010
@@ -0,0 +1,28 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.query;
+
+
+/**
+ * A metadata object for the {@link EJBQLQuery}.
+ * 
+ * @since 3.0
+ */
+class EJBQLQueryMetadata extends BaseQueryMetadata {
+}

Modified: cayenne/sandbox/cayenne-gwt/src/test/java/org/apache/cayenne/gwt/test/client/GwtTestQuery.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-gwt/src/test/java/org/apache/cayenne/gwt/test/client/GwtTestQuery.java?rev=921521&r1=921520&r2=921521&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-gwt/src/test/java/org/apache/cayenne/gwt/test/client/GwtTestQuery.java (original)
+++ cayenne/sandbox/cayenne-gwt/src/test/java/org/apache/cayenne/gwt/test/client/GwtTestQuery.java Wed Mar 10 19:21:01 2010
@@ -26,6 +26,7 @@ import org.apache.cayenne.QueryResponse;
 import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.gwt.client.GWTDataContext;
 import org.apache.cayenne.gwt.test.client.model.Tree;
+import org.apache.cayenne.query.EJBQLQuery;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.SQLTemplate;
 import org.apache.cayenne.query.SelectQuery;
@@ -105,4 +106,18 @@ public class GwtTestQuery extends Cayenn
 		
 		delayTestFinish(500);
 	}
+	
+	public void testEJBQL() {
+		EJBQLQuery query = new EJBQLQuery("select t from Tree t order by t.name desc");
+		
+		testQuery(query, new TestCallback<List<Tree>>() {
+			@Override
+			public void onSuccess(List<Tree> result) {
+				assertEquals(result.size(), 2);
+				Tree pine = result.get(0);
+				assertEquals(pine.getName(), "Pine");
+				assertEquals(result.get(1).getName(), "Fir");
+			}
+		});
+	}
 }