You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2013/04/15 19:00:54 UTC
svn commit: r1468143 - in /db/derby/code/trunk/java/engine/org/apache/derby:
catalog/types/ iapi/services/io/ impl/sql/compile/ impl/sql/execute/
Author: rhillegas
Date: Mon Apr 15 17:00:53 2013
New Revision: 1468143
URL: http://svn.apache.org/r1468143
Log:
DERBY-3177: Cleanup suspect coding practices in the types package.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/DefaultInfoImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/IndexDescriptorImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/ReferencedColumnsDescriptorImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RowMultiSetImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/ArrayUtil.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/DefaultInfoImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/DefaultInfoImpl.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/DefaultInfoImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/DefaultInfoImpl.java Mon Apr 15 17:00:53 2013
@@ -21,6 +21,7 @@
package org.apache.derby.catalog.types;
+import org.apache.derby.iapi.services.io.ArrayUtil;
import org.apache.derby.iapi.services.io.StoredFormatIds;
import org.apache.derby.iapi.services.io.Formatable;
@@ -116,7 +117,7 @@ public class DefaultInfoImpl implements
*/
public String[] getReferencedColumnNames()
{
- return referencedColumnNames;
+ return ArrayUtil.copy( referencedColumnNames );
}
/**
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/IndexDescriptorImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/IndexDescriptorImpl.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/IndexDescriptorImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/IndexDescriptorImpl.java Mon Apr 15 17:00:53 2013
@@ -23,6 +23,7 @@ package org.apache.derby.catalog.types;
import org.apache.derby.catalog.IndexDescriptor;
+import org.apache.derby.iapi.services.io.ArrayUtil;
import org.apache.derby.iapi.services.io.Formatable;
import org.apache.derby.iapi.services.io.StoredFormatIds;
@@ -98,8 +99,8 @@ public class IndexDescriptorImpl impleme
this.indexType = indexType;
this.isUnique = isUnique;
this.isUniqueWithDuplicateNulls = isUniqueWithDuplicateNulls;
- this.baseColumnPositions = baseColumnPositions;
- this.isAscending = isAscending;
+ this.baseColumnPositions = ArrayUtil.copy( baseColumnPositions );
+ this.isAscending = ArrayUtil.copy( isAscending );
this.numberOfOrderedColumns = numberOfOrderedColumns;
}
@@ -127,7 +128,7 @@ public class IndexDescriptorImpl impleme
/** @see IndexDescriptor#baseColumnPositions */
public int[] baseColumnPositions()
{
- return baseColumnPositions;
+ return ArrayUtil.copy( baseColumnPositions );
}
/** @see IndexDescriptor#getKeyColumnPosition */
@@ -182,19 +183,19 @@ public class IndexDescriptorImpl impleme
/** @see IndexDescriptor#isAscending */
public boolean[] isAscending()
{
- return isAscending;
+ return ArrayUtil.copy( isAscending );
}
/** @see IndexDescriptor#setBaseColumnPositions */
public void setBaseColumnPositions(int[] baseColumnPositions)
{
- this.baseColumnPositions = baseColumnPositions;
+ this.baseColumnPositions = ArrayUtil.copy( baseColumnPositions );
}
/** @see IndexDescriptor#setIsAscending */
public void setIsAscending(boolean[] isAscending)
{
- this.isAscending = isAscending;
+ this.isAscending = ArrayUtil.copy( isAscending );
}
/** @see IndexDescriptor#setNumberOfOrderedColumns */
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/ReferencedColumnsDescriptorImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/ReferencedColumnsDescriptorImpl.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/ReferencedColumnsDescriptorImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/ReferencedColumnsDescriptorImpl.java Mon Apr 15 17:00:53 2013
@@ -22,6 +22,7 @@
package org.apache.derby.catalog.types;
+import org.apache.derby.iapi.services.io.ArrayUtil;
import org.apache.derby.iapi.services.io.Formatable;
import org.apache.derby.iapi.services.io.StoredFormatIds;
import org.apache.derby.catalog.ReferencedColumns;
@@ -80,7 +81,7 @@ public class ReferencedColumnsDescriptor
public ReferencedColumnsDescriptorImpl( int[] referencedColumns)
{
- this.referencedColumns = referencedColumns;
+ this.referencedColumns = ArrayUtil.copy( referencedColumns );
}
/**
@@ -94,8 +95,8 @@ public class ReferencedColumnsDescriptor
public ReferencedColumnsDescriptorImpl( int[] referencedColumns,
int[] referencedColumnsInTriggerAction)
{
- this.referencedColumns = referencedColumns;
- this.referencedColumnsInTriggerAction = referencedColumnsInTriggerAction;
+ this.referencedColumns = ArrayUtil.copy( referencedColumns );
+ this.referencedColumnsInTriggerAction = ArrayUtil.copy( referencedColumnsInTriggerAction );
}
/** Zero-argument constructor for Formatable interface */
@@ -107,7 +108,7 @@ public class ReferencedColumnsDescriptor
*/
public int[] getReferencedColumnPositions()
{
- return referencedColumns;
+ return ArrayUtil.copy( referencedColumns );
}
/**
@@ -115,7 +116,7 @@ public class ReferencedColumnsDescriptor
*/
public int[] getTriggerActionReferencedColumnPositions()
{
- return referencedColumnsInTriggerAction;
+ return ArrayUtil.copy( referencedColumnsInTriggerAction );
}
/* Externalizable interface */
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java Mon Apr 15 17:00:53 2013
@@ -172,9 +172,9 @@ public class RoutineAliasInfo extends Me
super(methodName);
this.parameterCount = parameterCount;
- this.parameterNames = parameterNames;
- this.parameterTypes = parameterTypes;
- this.parameterModes = parameterModes;
+ this.parameterNames = ArrayUtil.copy( parameterNames );
+ setParameterTypes( parameterTypes );
+ this.parameterModes = ArrayUtil.copy( parameterModes );
this.dynamicResultSets = dynamicResultSets;
this.parameterStyle = parameterStyle;
this.sqlOptions = (short) (sqlAllowed & SQL_ALLOWED_MASK);
@@ -232,22 +232,25 @@ public class RoutineAliasInfo extends Me
* Types of the parameters. If there are no parameters
* then this may return null (or a zero length array).
*/
- public TypeDescriptor[] getParameterTypes() {
- return parameterTypes;
+ public TypeDescriptor[] getParameterTypes()
+ {
+ return TypeDescriptorImpl.copyTypeDescriptors( parameterTypes );
}
- public int[] getParameterModes() {
- return parameterModes;
- }
+ /** Set the paramter types. Useful if they need to be bound. */
+ public void setParameterTypes( TypeDescriptor[] parameterTypes )
+ {
+ this.parameterTypes = TypeDescriptorImpl.copyTypeDescriptors( parameterTypes );
+ }
+
+ public int[] getParameterModes() { return ArrayUtil.copy( parameterModes ); }
/**
* Returns an array containing the names of the parameters.
* As of DERBY 10.3, parameter names are optional (see DERBY-183
* for more information). If the i-th parameter was unnamed,
* parameterNames[i] will contain a string of length 0.
*/
- public String[] getParameterNames() {
- return parameterNames;
- }
+ public String[] getParameterNames() { return ArrayUtil.copy( parameterNames );}
public int getMaxDynamicResultSets() {
return dynamicResultSets;
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RowMultiSetImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RowMultiSetImpl.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RowMultiSetImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RowMultiSetImpl.java Mon Apr 15 17:00:53 2013
@@ -22,6 +22,7 @@
package org.apache.derby.catalog.types;
import org.apache.derby.catalog.TypeDescriptor;
import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.services.io.ArrayUtil;
import org.apache.derby.iapi.services.io.StoredFormatIds;
import java.io.ObjectOutput;
import java.io.ObjectInput;
@@ -86,8 +87,8 @@ public class RowMultiSetImpl extends Bas
*/
public RowMultiSetImpl( String[] columnNames, TypeDescriptor[] types )
{
- _columnNames = columnNames;
- _types = types;
+ _columnNames = ArrayUtil.copy( columnNames );
+ setTypes( types );
if (
(columnNames == null ) ||
@@ -107,10 +108,13 @@ public class RowMultiSetImpl extends Bas
///////////////////////////////////////////////////////////////////////////////////
/** Get the names of the columns in this row set */
- public String[] getColumnNames() { return _columnNames; }
+ public String[] getColumnNames() { return ArrayUtil.copy( _columnNames ); }
/** Get the types of the columns in this row set */
- public TypeDescriptor[] getTypes() { return _types; }
+ public TypeDescriptor[] getTypes() { return TypeDescriptorImpl.copyTypeDescriptors( _types ); }
+
+ /** Set the types of the columns in this row set */
+ public void setTypes( TypeDescriptor[] types ) { _types = TypeDescriptorImpl.copyTypeDescriptors( types ); }
///////////////////////////////////////////////////////////////////////////////////
//
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java Mon Apr 15 17:00:53 2013
@@ -204,6 +204,12 @@ public class TypeDescriptorImpl implemen
this.maximumWidth = maximumWidth;
}
+ /** copy an array of type descriptors */
+ public static TypeDescriptor[] copyTypeDescriptors( TypeDescriptor[] original )
+ {
+ return (original == null) ? null : (TypeDescriptor[]) original.clone();
+ }
+
/**
* @see TypeDescriptor#getMaximumWidth
*/
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/ArrayUtil.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/ArrayUtil.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/ArrayUtil.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/ArrayUtil.java Mon Apr 15 17:00:53 2013
@@ -29,7 +29,7 @@ import java.lang.reflect.Array;
/**
Utility class for constructing and reading and writing arrays from/to
- formatId streams.
+ formatId streams and for performing other operations on arrays.
@version 0.1
*/
@@ -37,6 +37,31 @@ public abstract class ArrayUtil
{
///////////////////////////////////////////////////////////////////
//
+ // Methods to copy arrays. We'd like to use java.util.copyOf(), but
+ // we have to run on Java 5.
+ //
+ ///////////////////////////////////////////////////////////////////
+
+ /** Copy an array of strings; the original array could be null */
+ public static String[] copy( String[] original )
+ {
+ return (original == null) ? null : (String[]) original.clone();
+ }
+
+ /** Copy a (possibly null) array of booleans */
+ public static boolean[] copy( boolean[] original )
+ {
+ return (original == null) ? null : (boolean[]) original.clone();
+ }
+
+ /** Copy a (possibly null) array of ints */
+ public static int[] copy( int[] original )
+ {
+ return (original == null) ? null : (int[]) original.clone();
+ }
+
+ ///////////////////////////////////////////////////////////////////
+ //
// Methods for Arrays of OBJECTS. Cannot be used for an
// array of primitives, see below for something for primitives
//
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java Mon Apr 15 17:00:53 2013
@@ -531,6 +531,8 @@ public class CreateAliasNode extends DDL
{
parameterTypes[ i ] = bindUserCatalogType( parameterTypes[ i ] );
}
+
+ aliasInfo.setParameterTypes( parameterTypes );
}
/**
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java Mon Apr 15 17:00:53 2013
@@ -1678,7 +1678,6 @@ public abstract class QueryTreeNode impl
if ( !originalDTD.getCatalogType().isRowMultiSet() ) { return originalDTD; }
RowMultiSetImpl originalMultiSet = (RowMultiSetImpl) originalDTD.getTypeId().getBaseTypeId();
- String[] columnNames = originalMultiSet.getColumnNames();
TypeDescriptor[] columnTypes = originalMultiSet.getTypes();
int columnCount = columnTypes.length;
@@ -1686,6 +1685,7 @@ public abstract class QueryTreeNode impl
{
columnTypes[ i ] = bindUserCatalogType( columnTypes[ i ] );
}
+ originalMultiSet.setTypes( columnTypes );
return originalDTD;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java?rev=1468143&r1=1468142&r2=1468143&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java Mon Apr 15 17:00:53 2013
@@ -2766,17 +2766,27 @@ class AlterTableConstantAction extends D
boolean[] isAscending = compressIRGs[j].isAscending();
boolean reMakeArrays = false;
+ boolean rewriteBaseColumnPositions = false;
int size = baseColumnPositions.length;
for (int k = 0; k < size; k++)
{
if (baseColumnPositions[k] > droppedColumnPosition)
+ {
baseColumnPositions[k]--;
+ rewriteBaseColumnPositions = true;
+ }
else if (baseColumnPositions[k] == droppedColumnPosition)
{
baseColumnPositions[k] = 0; // mark it
reMakeArrays = true;
}
}
+
+ if ( rewriteBaseColumnPositions )
+ {
+ compressIRGs[j].setBaseColumnPositions( baseColumnPositions );
+ }
+
if (reMakeArrays)
{
size--;