You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by di...@apache.org on 2012/06/08 15:58:36 UTC

svn commit: r1348076 - in /openjpa/trunk: openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/...

Author: dianner
Date: Fri Jun  8 13:58:36 2012
New Revision: 1348076

URL: http://svn.apache.org/viewvc?rev=1348076&view=rev
Log:
OPENJPA-2207 Fix single numeric db identifier problem

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsAnnotation.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsXml.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsAnnotation.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsXml.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/query-result-orm.xml   (with props)
Modified:
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java?rev=1348076&r1=1348075&r2=1348076&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java Fri Jun  8 13:58:36 2012
@@ -323,7 +323,7 @@ public class IdentifierUtilImpl implemen
     }
 
     public boolean isDelimited(IdentifierConfiguration config, IdentifierRule rule, String name) {
-        if (name == null || name.length() <= 3) {
+         if (name == null || name.length() < 3) {
             return false;
         }
         return name.startsWith(config.getLeadingDelimiter()) &&

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsAnnotation.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsAnnotation.java?rev=1348076&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsAnnotation.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsAnnotation.java Fri Jun  8 13:58:36 2012
@@ -0,0 +1,82 @@
+/*
+ * 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.openjpa.persistence.results.cls;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+@NamedNativeQueries({
+@NamedNativeQuery(name = "ResultClsQueryDoubleQuotes", 
+    query = "select \"1\",\"2\" FROM ResultClsAnnoEntity",
+    resultSetMapping = "ResultClsRSMapping", 
+    resultClass = ResultClsAnnotation.class),
+@NamedNativeQuery(name = "ResultClsQueryBackTicks", 
+    query = "select `1`,`2` FROM ResultClsAnnoEntity",
+    resultSetMapping = "ResultClsRSMapping", 
+    resultClass = ResultClsAnnotation.class),
+@NamedNativeQuery(name = "ResultClsQueryBrackets", 
+    query = "select [1],[2] FROM ResultClsAnnoEntity",
+    resultSetMapping = "ResultClsRSMapping", 
+    resultClass = ResultClsAnnotation.class),   
+@NamedNativeQuery(name = "ResultClsQueryDefault", 
+    query = "select * FROM ResultClsAnnoEntity",
+    resultSetMapping = "ResultClsRSMapping", 
+    resultClass = ResultClsAnnotation.class)
+})
+
+@SqlResultSetMapping(name = "ResultClsRSMapping", 
+    entities = @EntityResult(entityClass = ResultClsAnnotation.class, fields = {
+        @FieldResult(name = "id", column = "1"),
+        @FieldResult(name = "description", column = "2") }))
+@Entity(name = "ResultClsAnnoEntity")
+public class ResultClsAnnotation {
+    public ResultClsAnnotation() {
+    }
+
+    @Id
+    @Column(name = "1")
+    public String id;
+    @Basic
+    @Column(name = "2")
+    public String description;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsAnnotation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsXml.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsXml.java?rev=1348076&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsXml.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsXml.java Fri Jun  8 13:58:36 2012
@@ -0,0 +1,44 @@
+/*
+ * 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.openjpa.persistence.results.cls;
+
+public class ResultClsXml {
+    public ResultClsXml() {
+    }
+
+    public String id;
+    public String description;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/ResultClsXml.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsAnnotation.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsAnnotation.java?rev=1348076&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsAnnotation.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsAnnotation.java Fri Jun  8 13:58:36 2012
@@ -0,0 +1,87 @@
+/*
+ * 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.openjpa.persistence.results.cls;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
+
+public class TestResultClsAnnotation extends SQLListenerTestCase {
+    public void setUp() {
+        setUp(ResultClsAnnotation.class, DROP_TABLES);
+        assertNotNull(emf);
+
+        populate();
+    }
+
+    public void testIt() {
+        EntityManager em = emf.createEntityManager();
+
+        try {
+            Query q = getQuery(em);
+            List<ResultClsAnnotation> result = q.getResultList();
+            assertEquals(1, result.size());
+
+            for (Iterator it = result.iterator(); it.hasNext();) {
+                Object obj = (Object) it.next();
+                ResultClsAnnotation ct = (ResultClsAnnotation) obj;
+                assertEquals("id1", ct.getId());
+                assertEquals("description1", ct.getDescription());
+            }
+        } catch (Exception ex) {
+            fail("unexpected exception: " + ex.getMessage());
+            ex.printStackTrace();
+        } finally {
+            em.close();
+        }
+    }
+
+    private void populate() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+
+        ResultClsAnnotation ct = new ResultClsAnnotation();
+        ct.setId("id1");
+        ct.setDescription("description1");
+        em.persist(ct);
+
+        em.getTransaction().commit();
+        em.close();
+    }
+    
+    private Query getQuery(EntityManager em) {
+        DBDictionary dict = getDBDictionary();
+        Query query = null;
+        if (dict.getLeadingDelimiter().equals("\"") && dict.getTrailingDelimiter().equals("\"")) {
+            query = em.createNamedQuery("ResultClsQueryDoubleQuotes");
+        } else if (dict.getLeadingDelimiter().equals("`") && dict.getTrailingDelimiter().equals("`")) {
+            query = em.createNamedQuery("ResultClsQueryBackTicks");
+        } else if (dict.getLeadingDelimiter().equals("[") && dict.getTrailingDelimiter().equals("]")) {
+            query = em.createNamedQuery("ResultClsQueryBrackets");
+        } else {
+            query = em.createNamedQuery("ResultClsQueryDefault");
+        }
+        return query;
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsAnnotation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsXml.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsXml.java?rev=1348076&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsXml.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsXml.java Fri Jun  8 13:58:36 2012
@@ -0,0 +1,94 @@
+/*
+ * 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.openjpa.persistence.results.cls;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
+
+public class TestResultClsXml extends SQLListenerTestCase {
+    public void setUp() {
+        setUp(ResultClsXml.class, DROP_TABLES);
+        assertNotNull(emf);
+
+        populate();
+    }
+
+    public void testIt() {
+        EntityManager em = emf.createEntityManager();
+
+        try {
+            Query q = getQuery(em);
+
+            List<ResultClsXml> result = q.getResultList();
+            assertEquals(1, result.size());
+
+            for (Iterator it = result.iterator(); it.hasNext();) {
+                Object obj = (Object) it.next();
+                ResultClsXml ct = (ResultClsXml) obj;
+                assertEquals("id1", ct.getId());
+                assertEquals("description1", ct.getDescription());
+            }
+
+        } catch (Exception ex) {
+            fail("unexpected exception: " + ex.getMessage());
+            ex.printStackTrace();
+
+        } finally {
+            em.close();
+        }
+    }
+
+    protected String getPersistenceUnitName() {
+        return "query-result";
+    }
+
+    private void populate() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+
+        ResultClsXml ct = new ResultClsXml();
+        ct.setId("id1");
+        ct.setDescription("description1");
+        em.persist(ct);
+
+        em.getTransaction().commit();
+        em.close();
+    }
+
+    private Query getQuery(EntityManager em) {
+        DBDictionary dict = getDBDictionary();
+        Query query = null;
+        if (dict.getLeadingDelimiter().equals("\"") && dict.getTrailingDelimiter().equals("\"")) {
+            query = em.createNamedQuery("ResultClsQueryDoubleQuotes");
+        } else if (dict.getLeadingDelimiter().equals("`") && dict.getTrailingDelimiter().equals("`")) {
+            query = em.createNamedQuery("ResultClsQueryBackTicks");
+        } else if (dict.getLeadingDelimiter().equals("[") && dict.getTrailingDelimiter().equals("]")) {
+            query = em.createNamedQuery("ResultClsQueryBrackets");
+        } else {
+            query = em.createNamedQuery("ResultClsQueryDefault");
+        }
+        return query;
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/results/cls/TestResultClsXml.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml?rev=1348076&r1=1348075&r2=1348076&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml Fri Jun  8 13:58:36 2012
@@ -55,6 +55,7 @@
         <mapping-file>org/apache/openjpa/persistence/enhance/identity/mapsId-orm.xml</mapping-file>
         <mapping-file>org/apache/openjpa/persistence/entity/orm.xml</mapping-file>
         <mapping-file>META-INF/arrays-orm.xml</mapping-file>
+        <mapping-file>META-INF/query-result-orm.xml</mapping-file>
         <properties>
             <property name="openjpa.jdbc.SynchronizeMappings"
                 value="buildSchema(ForeignKeys=true)"/>
@@ -430,5 +431,15 @@
                   value="buildSchema(ForeignKeys=true)"/>
         </properties>
     </persistence-unit>
+    
+    <persistence-unit name="query-result">
+        <mapping-file>META-INF/query-result-orm.xml</mapping-file>
+        <class>org.apache.openjpa.persistence.results.cls.ResultClsXml</class>
+        <properties>
+            <property name="openjpa.jdbc.SynchronizeMappings"
+                  value="buildSchema(ForeignKeys=true)"/>
+        </properties>
+    </persistence-unit>
+    
 
 </persistence>

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/query-result-orm.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/query-result-orm.xml?rev=1348076&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/query-result-orm.xml (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/query-result-orm.xml Fri Jun  8 13:58:36 2012
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.   
+-->
+<entity-mappings version="1.0"
+	xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm  
+
+   http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+
+	<sql-result-set-mapping name="ResultClsRSMapping">
+			<entity-result entity-class="org.apache.openjpa.persistence.results.cls.ResultClsXml">
+				<field-result name="id" column="1"></field-result>
+				<field-result name="description" column="2"></field-result>
+			</entity-result>
+	</sql-result-set-mapping>
+	<entity class="org.apache.openjpa.persistence.results.cls.ResultClsXml"
+		name="ResultClsXmlEntity" access="PROPERTY">
+		<description>ResultQueryDesc</description>
+		<named-native-query name="ResultClsQueryDoubleQuotes"
+			result-set-mapping="ResultClsRSMapping">
+			<query>select "1","2" FROM ResultClsXmlEntity</query>
+		</named-native-query>
+		<named-native-query name="ResultClsQueryBackTicks"
+			result-set-mapping="ResultClsRSMapping">
+			<query>select `1`,`2` FROM ResultClsXmlEntity</query>
+		</named-native-query>
+		<named-native-query name="ResultClsQueryBrackets"
+			result-set-mapping="ResultClsRSMapping">
+			<query>select [1],[2]" FROM ResultClsXmlEntity</query>
+		</named-native-query>
+		<attributes>
+			<id name="id">
+				<column name="1" />
+			</id>
+			<basic name="description">
+				<column name="2" />
+			</basic>
+		</attributes>
+	</entity>
+	
+</entity-mappings>  
\ No newline at end of file

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/META-INF/query-result-orm.xml
------------------------------------------------------------------------------
    svn:eol-style = native