atom feed13 messages in org.apache.openjpa.devRE: svn commit: r774580 - in /openjpa...
FromSent OnAttachments
Michael DickMay 14, 2009 7:53 am 
David EzzioMay 14, 2009 8:11 am 
Ravi PalacherlaMay 14, 2009 8:34 am 
Ravi PalacherlaMay 14, 2009 8:53 am 
Craig L RussellMay 14, 2009 12:36 pm 
Donald WoodsMay 14, 2009 1:16 pm 
David EzzioMay 14, 2009 1:43 pm 
Michael DickMay 14, 2009 2:35 pm 
Craig L RussellMay 14, 2009 3:01 pm 
Craig L RussellMay 14, 2009 3:02 pm 
David EzzioMay 15, 2009 6:33 am 
Ravi PalacherlaMay 15, 2009 6:55 am 
Craig L RussellMay 16, 2009 7:48 pm 
Subject:RE: svn commit: r774580 - in /openjpa/trunk/openjpa-jdbc/src: main/java/org/apache/openjpa/jdbc/meta/ main/java/org/apache/openjpa/jdbc/schema/ test/java/org/apache/openjpa/jdbc/meta/
From:Ravi Palacherla (ravi@oracle.com)
Date:May 14, 2009 8:34:36 am
List:org.apache.openjpa.dev

Hi Mike,

Hiroki Tateno is the author of this test class.

Regarding CLA on file with Apache, I am not sure about it and will check with
him and update accordingly.

Regards, Ravi.

-----Original Message----- From: Michael Dick [mailto:mich@gmail.com] Sent: Thursday, May 14, 2009 8:54 AM To: de@openjpa.apache.org; Ravi Palacherla Subject: Re: svn commit: r774580 - in /openjpa/trunk/openjpa-jdbc/src:
main/java/org/apache/openjpa/jdbc/meta/
main/java/org/apache/openjpa/jdbc/schema/
test/java/org/apache/openjpa/jdbc/meta/

Hi David and Ravi

The patch was contributed by Ravi, but the @author tag lists Hiroki Tateno.

I'm not an expert on proper attribution, Craig can correct me where I go wrong :-). Here's my understanding.

If Hiroki wrote the code we'll have to add his name to the commit message, if not we'll remote the @author tag.

We may want to find out whether Hiroki has a CLA on file with Apache for future patches (same would apply for anyone in an @author tag). It isn't a requirement (AFAIK) but it's always nice to know.

On Wed, May 13, 2009 at 5:54 PM, <dez@apache.org> wrote:

Author: dezzio Date: Wed May 13 22:54:32 2009 New Revision: 774580

URL: http://svn.apache.org/viewvc?rev=774580&view=rev Log: OpenJPA-1051: Fixed MappingDefaultsImpl to avoid column name duplications when long column names are supplied for a database that accepts only shorter names. Changes submitted for Ravi Palacherla.

Added: openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/

openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/TestMappingDefaultsImpl.java (with props) Modified:

openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java

openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java

openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java?rev=774580&r1=774579&r2=774580&view=diff

==============================================================================

--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java (original) +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java Wed May 13 22:54:32 2009 @@ -539,7 +539,9 @@ else if (_dsIdName != null) cols[i].setName(_dsIdName + i); correctName(table, cols[i]); + table.addSubColumn(cols[i].getName()); } + table.resetSubColumns(); }

/** @@ -582,7 +584,9 @@ } else if (_versName != null) cols[i].setName(_versName + i); correctName(table, cols[i]); + table.addSubColumn(cols[i].getName()); } + table.resetSubColumns(); }

public void populateColumns(Discriminator disc, Table table, @@ -593,7 +597,9 @@ else if (_discName != null) cols[i].setName(_discName + i); correctName(table, cols[i]); + table.addSubColumn(cols[i].getName()); } + table.resetSubColumns(); }

public void populateJoinColumn(ClassMapping cm, Table local, Table foreign, @@ -618,8 +624,11 @@

public void populateColumns(ValueMapping vm, String name, Table table, Column[] cols) { - for (int i = 0; i < cols.length; i++) + for (int i = 0; i < cols.length; i++) { correctName(table, cols[i]); + table.addSubColumn(cols[i].getName()); + } + table.resetSubColumns(); }

public boolean populateOrderColumns(FieldMapping fm, Table table, @@ -630,7 +639,9 @@ else if (_orderName != null) cols[i].setName(_orderName + i); correctName(table, cols[i]); + table.addSubColumn(cols[i].getName()); } + table.resetSubColumns(); return _orderLists && (JavaTypes.ARRAY == fm.getTypeCode() || List.class.isAssignableFrom(fm.getType())); } @@ -643,7 +654,9 @@ else if (_nullIndName != null) cols[i].setName(_nullIndName + i); correctName(table, cols[i]); + table.addSubColumn(cols[i].getName()); } + table.resetSubColumns(); return _addNullInd; }

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java?rev=774580&r1=774579&r2=774580&view=diff

==============================================================================

--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java (original) +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java Wed May 13 22:54:32 2009 @@ -39,13 +39,17 @@

private Set _names = null;

+ // an additional names Set for checking name duplication + private Set _subNames = null; + /** * Return true if the given name is in use already. */ public boolean isNameTaken(String name) { if (name == null) return true; - return _names != null && _names.contains(name.toUpperCase()); + return (_names != null && _names.contains(name.toUpperCase())) || + (_subNames != null && _subNames.contains(name.toUpperCase())); }

/** @@ -77,4 +81,20 @@ if (name != null && _names != null) _names.remove(name.toUpperCase()); } + + /** + * Attempt to add the given name to the set. + * + * @param name the name to add + */ + protected void addSubName(String name) { + if (_subNames == null) { + _subNames = new HashSet(); + } + _subNames.add(name.toUpperCase()); + } + + protected void resetSubNames() { + _subNames = null; + } }

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java?rev=774580&r1=774579&r2=774580&view=diff

==============================================================================

--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java (original) +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java Wed May 13 22:54:32 2009 @@ -255,8 +255,8 @@ }

public String[] getColumnNames() { - return _colMap == null ? new String[0] : - (String[])_colMap.keySet().toArray(new String[_colMap.size()]); + return _colMap == null ? new String[0] : + (String[])_colMap.keySet().toArray(new String[_colMap.size()]); }

/** @@ -275,8 +275,8 @@ * for dynamic table implementation. */ public boolean containsColumn(String name) { - return name != null && _colMap != null - && _colMap.containsKey(name.toUpperCase()); + return name != null && _colMap != null + && _colMap.containsKey(name.toUpperCase()); }

/** @@ -756,4 +756,15 @@ public void setColNumber(int colNum) { _colNum = colNum; } + + /** + * Add a column to the subNames set to avoid naming conflict. + */ + public void addSubColumn(String name) { + addSubName(name); + } + + public void resetSubColumns() { + resetSubNames(); + } }

Added: openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/TestMappingDefaultsImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/TestMappingDefaultsImpl.java?rev=774580&view=auto

==============================================================================

--- openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/TestMappingDefaultsImpl.java (added) +++ openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/TestMappingDefaultsImpl.java Wed May 13 22:54:32 2009 @@ -0,0 +1,63 @@ +/* + * 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.jdbc.meta; + +import org.apache.openjpa.jdbc.schema.Table; +import org.apache.openjpa.jdbc.schema.Column; +import org.apache.openjpa.jdbc.conf.JDBCConfiguration; +import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl; + +import junit.framework.TestCase; + +public class TestMappingDefaultsImpl extends TestCase { + + public void setUp() { + } + + /** + * For databases that accept only short column names, test avoidance of + * duplicate column names when populating the table with long column names. + * + * @author Hiroki Tateno + */ + public void testPopulateWithLongColumnNames() { + MappingDefaultsImpl mapping = new MappingDefaultsImpl(); + JDBCConfiguration conf = new JDBCConfigurationImpl(false, false); + conf.setDBDictionary("oracle"); + mapping.setConfiguration(conf); + Table table = new Table("testtable", null); + Column[] cols = new Column[3]; + cols[0] = new + Column("longnamelongnamelongnamelongnamelongnamelongname1", null); + cols[1] = new + Column("longnamelongnamelongnamelongnamelongnamelongname2", null); + cols[2] = new + Column("longnamelongnamelongnamelongnamelongnamelongname3", null); + MappingRepository mr = new MappingRepository(); + mr.setConfiguration(conf); + Version version = new Version(new ClassMapping(String.class,mr)); + mapping.populateColumns(version, table, cols); + assertFalse("column names are conflicted : " + cols[0].getName(), + cols[0].getName().equals(cols[1].getName())); + assertFalse("column names are conflicted : " + cols[0].getName(), + cols[0].getName().equals(cols[2].getName())); + assertFalse("column names are conflicted : " + cols[1].getName(), + cols[1].getName().equals(cols[2].getName())); + } +}

Propchange: openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/TestMappingDefaultsImpl.java

------------------------------------------------------------------------------ svn:eol-style = native