[teiid-commits] teiid SVN: r2851 - in trunk: engine/src/main/java/org/teiid/query/function/metadata and 5 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Jan 18 20:57:18 EST 2011


Author: shawkins
Date: 2011-01-18 20:57:17 -0500 (Tue, 18 Jan 2011)
New Revision: 2851

Modified:
   trunk/build/kits/jboss-container/teiid-releasenotes.html
   trunk/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java
   trunk/engine/src/main/java/org/teiid/query/report/ActivityReport.java
   trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
   trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java
   trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
   trunk/engine/src/main/java/org/teiid/query/validator/ValidatorFailure.java
   trunk/engine/src/main/java/org/teiid/query/validator/ValidatorReport.java
   trunk/engine/src/main/resources/org/teiid/query/i18n.properties
   trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java
Log:
refinement of the update validation api for designer integration

Modified: trunk/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-container/teiid-releasenotes.html	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/build/kits/jboss-container/teiid-releasenotes.html	2011-01-19 01:57:17 UTC (rev 2851)
@@ -38,7 +38,7 @@
 	<LI><B>Predicate Optimization</B> - expanded optimizations for detecting always false conditions when using IS NULL, IN, or comparison predicates with literal values.
 	<LI><B>Partition-wise Optimizations</B> - Views defined by partitioned unions (union alls where each branch has a projected literal or an IN predicate that makes its values mutually exclusive from the other branches) can 
 	be used in aggregation or joins and the optimizer will take advantage of the partitioning information.  For example, when a partitioned union is joined against another partitioned union, the optimizer will reorganize the join of unions into a union of joins.
-	<LI><B>Delegate Translator</B> - A new translator added that is capable of delegating all the calls to another configured translator.
+	<LI><B>Delegate Translator</B> - A new translator base class was added that is capable of delegating all the calls to another configured translator.
 	<LI><B>JDBC Reauthentication</B> - Teiid connections (defined by the org.teiid.jdbc.TeiidConnection interface) now support the changeUser method to reauthenticate a given connection.
 	<LI><B>Lob Caching</B> - Lobs are allowed to cache to disk as part of ResultSet caching. Distributed lob caching is not allowed. 
 </UL>

Modified: trunk/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -23,7 +23,6 @@
 package org.teiid.query.function.metadata;
 
 import java.util.Collection;
-import java.util.Iterator;
 
 import org.teiid.api.exception.query.FunctionMetadataException;
 import org.teiid.core.types.DataTypeManager;
@@ -56,11 +55,9 @@
 	 * @param methods Collection of {@link FunctionMethod} objects
 	 * @param report Report to store validation errors
 	 */
-	public static final void validateFunctionMethods(Collection methods, ActivityReport report) {
+	public static final void validateFunctionMethods(Collection<FunctionMethod> methods, ActivityReport report) {
 	    if(methods != null) {
-	    	Iterator methodIter = methods.iterator();
-	    	while(methodIter.hasNext()) {
-	    		FunctionMethod method = (FunctionMethod) methodIter.next();
+	    	for (FunctionMethod method : methods) {
 	    		validateFunctionMethod(method, report);
 	    	}
 	    }

Modified: trunk/engine/src/main/java/org/teiid/query/report/ActivityReport.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/report/ActivityReport.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/report/ActivityReport.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -25,16 +25,15 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 
-import org.teiid.query.QueryPlugin;
+import org.teiid.core.util.Assertion;
 
 
 /**
  * A report holds the output of some activity.  The report collects information during the activity, such
  * as failures or successes.
  */
-public class ActivityReport implements Serializable {
+public class ActivityReport<R extends ReportItem> implements Serializable {
 
 	/**
 	 * Type of report
@@ -44,13 +43,8 @@
 	/**
 	 * Holder for report items.  Holds collection of {@link ReportItem}s.
 	 */
-	private Collection items = new ArrayList();
+	private Collection<R> items = new ArrayList<R>();
 
-	/**
-	 * Holder for report item types.  Holds collection of {@link java.lang.String}s.
-	 */
-	private Collection types = new ArrayList();
-
     /**
      * Construct new report of given type
      * @param reportType Type of report
@@ -71,77 +65,28 @@
 	 * Add a new item to the report.
 	 * @param item Item being added
 	 */
-	public void addItem(ReportItem item) {
-		if(item == null) {
-	    	throw new IllegalArgumentException(QueryPlugin.Util.getString("ERR.015.007.0001")); //$NON-NLS-1$
-	    }
-
+	public void addItem(R item) {
+		Assertion.isNotNull(item);
 	    this.items.add(item);
-	    this.types.add(item.getType());
 	}
 
     /**
      * Add a new collection of items to the report.
      * @param items Items being added
      */
-    public void addItems(Collection items) {
-        if(items == null) {
-            throw new IllegalArgumentException(QueryPlugin.Util.getString("ERR.015.007.0001")); //$NON-NLS-1$
+    public void addItems(Collection<R> items) {
+    	Assertion.isNotNull(items);
+    	for (R r : items) {
+            addItem(r);
         }
-
-        Iterator iter = items.iterator();
-        while(iter.hasNext()) {
-            addItem((ReportItem)iter.next());
-        }
     }
 
 	public boolean hasItems() {
 	    return (this.items.size() > 0);
 	}
-
-	public Collection getItems() {
+	
+	public Collection<R> getItems() {
 		return items;
 	}
 
-	public Collection getItemsByType(String type) {
-	    Collection typedItems = new ArrayList();
-
-		Iterator iter = this.items.iterator();
-		while(iter.hasNext()) {
-			ReportItem item = (ReportItem) iter.next();
-			if(item.getType().equals(type)) {
-			    typedItems.add(item);
-			}
-		}
-
-		return typedItems;
-	}
-
-	public Collection getItemTypes() {
-	    return types;
-	}
-
-    public String toString() {
-       StringBuffer str = new StringBuffer();
-       str.append(getReportType());
-       str.append("\n"); //$NON-NLS-1$
-
-       Iterator typeIter = getItemTypes().iterator();
-       while (typeIter.hasNext()) {
-        	String type = (String) typeIter.next();
-        	str.append(type);
-        	str.append(" items:\n"); //$NON-NLS-1$
-
-        	Collection typeItems = getItemsByType(type);
-			Iterator itemIter = typeItems.iterator();
-			while(itemIter.hasNext()) {
-				ReportItem item = (ReportItem) itemIter.next();
-				str.append("\t"); //$NON-NLS-1$
-				str.append(item.toString());
-				str.append("\n"); //$NON-NLS-1$
-			}
-        }
-
-       return str.toString();
-    }
 }

Modified: trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -30,6 +30,7 @@
 import org.teiid.api.exception.query.QueryResolverException;
 import org.teiid.core.TeiidComponentException;
 import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.util.StringUtil;
 import org.teiid.language.SQLConstants;
 import org.teiid.query.QueryPlugin;
 import org.teiid.query.analysis.AnalysisRecord;
@@ -54,6 +55,7 @@
 import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.validator.UpdateValidator;
 import org.teiid.query.validator.UpdateValidator.UpdateInfo;
+import org.teiid.query.validator.UpdateValidator.UpdateType;
 
 
 public abstract class ProcedureContainerResolver implements CommandResolver {
@@ -276,15 +278,25 @@
     	UpdateInfo info = (UpdateInfo)metadata.getFromMetadataCache(group.getMetadataID(), "UpdateInfo"); //$NON-NLS-1$
     	if (info == null) {
             List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(group, metadata);
-    		UpdateValidator validator = new UpdateValidator(metadata, updatePlan, deletePlan, insertPlan);
+    		UpdateValidator validator = new UpdateValidator(metadata, determineType(insertPlan), determineType(updatePlan), determineType(deletePlan));
     		info = validator.getUpdateInfo();
-    		if (info.isInherentDelete() || info.isInherentInsert() || info.isInherentUpdate()) {
-    			validator.validate(UpdateProcedureResolver.getQueryTransformCmd(group, metadata), elements);
-    		}
+			validator.validate(UpdateProcedureResolver.getQueryTransformCmd(group, metadata), elements);
     		metadata.addToMetadataCache(group.getMetadataID(), "UpdateInfo", info); //$NON-NLS-1$
     	}
 		return info;
 	}
+	
+	private static UpdateType determineType(String plan) {
+		UpdateType type = UpdateType.INHERENT;
+		if (plan != null) {
+			if (StringUtil.startsWithIgnoreCase(plan, SQLConstants.Reserved.CREATE)) {
+				type = UpdateType.UPDATE_PROCEDURE;
+			} else {
+				type = UpdateType.INSTEAD_OF;
+			}
+		}
+		return type;
+	}
     
     /** 
      * @param metadata

Modified: trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -34,8 +34,6 @@
 import org.teiid.api.exception.query.QueryMetadataException;
 import org.teiid.api.exception.query.QueryValidatorException;
 import org.teiid.core.TeiidComponentException;
-import org.teiid.core.util.StringUtil;
-import org.teiid.language.SQLConstants;
 import org.teiid.query.QueryPlugin;
 import org.teiid.query.metadata.QueryMetadataInterface;
 import org.teiid.query.metadata.SupportConstants;
@@ -249,28 +247,20 @@
 	}
 	
 	private QueryMetadataInterface metadata;
+	private UpdateInfo updateInfo = new UpdateInfo();
+	
 	private ValidatorReport report = new ValidatorReport();
-	private UpdateInfo updateInfo = new UpdateInfo();
-
-	public UpdateValidator(QueryMetadataInterface qmi, String updatePlan, String deletePlan, String insertPlan) {
+	private ValidatorReport insertReport = new ValidatorReport();
+	private ValidatorReport updateReport = new ValidatorReport();
+	private ValidatorReport deleteReport = new ValidatorReport();
+	
+	public UpdateValidator(QueryMetadataInterface qmi, UpdateType insertType, UpdateType updateType, UpdateType deleteType) {
 		this.metadata = qmi;
-		this.updateInfo.deleteType = determineType(deletePlan);
-		this.updateInfo.insertType = determineType(insertPlan);
-		this.updateInfo.updateType = determineType(updatePlan);
+		this.updateInfo.deleteType = deleteType;
+		this.updateInfo.insertType = insertType;
+		this.updateInfo.updateType = updateType;
 	}
-
-	private UpdateType determineType(String plan) {
-		UpdateType type = UpdateType.INHERENT;
-		if (plan != null) {
-			if (StringUtil.startsWithIgnoreCase(plan, SQLConstants.Reserved.CREATE)) {
-				type = UpdateType.UPDATE_PROCEDURE;
-			} else {
-				type = UpdateType.INSTEAD_OF;
-			}
-		}
-		return type;
-	}
-	
+		
 	public UpdateInfo getUpdateInfo() {
 		return updateInfo;
 	}
@@ -279,14 +269,41 @@
 		return report;
 	}
 	
+	public ValidatorReport getDeleteReport() {
+		return deleteReport;
+	}
+	
+	public ValidatorReport getInsertReport() {
+		return insertReport;
+	}
+	
+	public ValidatorReport getUpdateReport() {
+		return updateReport;
+	}
+	
 	private void handleValidationError(String error, boolean update, boolean insert, boolean delete) {
-		report.handleValidationError(error);
+		if (update && insert && delete) {
+			report.handleValidationError(error);
+		} else {
+			if (update) {
+				updateReport.handleValidationError(error);
+			}
+			if (insert) {
+				insertReport.handleValidationError(error);
+			}
+			if (delete) {
+				deleteReport.handleValidationError(error);
+			}
+		}
 		updateInfo.updateValidationError |= update;
 		updateInfo.insertValidationError |= insert;
 		updateInfo.deleteValidationError |= delete;
 	}
 	
     public void validate(Command command, List<ElementSymbol> viewSymbols) throws QueryMetadataException, TeiidComponentException {
+    	if (this.updateInfo.deleteType != UpdateType.INHERENT && this.updateInfo.updateType != UpdateType.INHERENT && this.updateInfo.insertType != UpdateType.INHERENT) {
+    		return;
+    	}
     	if (command instanceof SetQuery) {
     		SetQuery setQuery = (SetQuery)command;
         	if (setQuery.getLimit() != null) {
@@ -327,6 +344,15 @@
         	return;
     	}
     	internalValidate(command, viewSymbols);
+    	if (this.updateInfo.deleteType != UpdateType.INHERENT) {
+    		this.deleteReport.getItems().clear();
+    	}
+    	if (this.updateInfo.updateType != UpdateType.INHERENT) {
+    		this.updateReport.getItems().clear();
+    	}
+    	if (this.updateInfo.insertType != UpdateType.INHERENT) {
+    		this.insertReport.getItems().clear();
+    	}
     }
 	
     private void internalValidate(Command command, List<ElementSymbol> viewSymbols) throws QueryMetadataException, TeiidComponentException {
@@ -343,7 +369,9 @@
     	}
     	
     	if (query.getWith() != null) {
-    		report.handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0002")); //$NON-NLS-1$
+    		String warning = QueryPlugin.Util.getString("ERR.015.012.0002"); //$NON-NLS-1$
+    		updateReport.handleValidationWarning(warning);
+    		deleteReport.handleValidationWarning(warning); 
     		updateInfo.isSimple = false;
     	}
 
@@ -395,12 +423,12 @@
             } else {
             	//TODO: look for reversable widening conversions
             	
-                report.handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0007", viewSymbols.get(i), symbol)); //$NON-NLS-1$
+                report.handleValidationWarning(QueryPlugin.Util.getString("ERR.015.012.0007", viewSymbols.get(i), symbol)); //$NON-NLS-1$
             }
     	}
     	
     	if (query.getFrom().getClauses().size() > 1 || (!(query.getFrom().getClauses().get(0) instanceof UnaryFromClause))) {
-    		report.handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0009", query.getFrom())); //$NON-NLS-1$
+    		report.handleValidationWarning(QueryPlugin.Util.getString("ERR.015.012.0009", query.getFrom())); //$NON-NLS-1$
     		updateInfo.isSimple = false;
     	}
     	List<GroupSymbol> allGroups = query.getFrom().getGroups();
@@ -423,7 +451,9 @@
 				if (info == null) {
 					continue; // not projected
 				}
-				report.handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0004", groupSymbol)); //$NON-NLS-1$
+	    		String warning = QueryPlugin.Util.getString("ERR.015.012.0004"); //$NON-NLS-1$
+	    		updateReport.handleValidationWarning(warning);
+	    		deleteReport.handleValidationWarning(warning); 
 			}
 		}
 
@@ -464,7 +494,7 @@
 		}
 
 		if (!metadata.groupSupports(groupSymbol.getMetadataID(), SupportConstants.Group.UPDATE)) {
-			report.handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0003", groupSymbol)); //$NON-NLS-1$
+			report.handleValidationWarning(QueryPlugin.Util.getString("ERR.015.012.0003", groupSymbol)); //$NON-NLS-1$
 			return;
 		}
 
@@ -492,7 +522,7 @@
 			return true;
 		}
 		if (this.updateInfo.insertType == UpdateType.INHERENT) {
-			report.handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0010", element, element.getGroupSymbol())); //$NON-NLS-1$
+			insertReport.handleValidationWarning(QueryPlugin.Util.getString("ERR.015.012.0010", element, element.getGroupSymbol())); //$NON-NLS-1$
 		}
 	    return false;
 	}

Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -102,10 +102,8 @@
 import org.teiid.query.sql.proc.CriteriaSelector;
 import org.teiid.query.sql.proc.DeclareStatement;
 import org.teiid.query.sql.proc.HasCriteria;
-import org.teiid.query.sql.proc.IfStatement;
 import org.teiid.query.sql.proc.LoopStatement;
 import org.teiid.query.sql.proc.TranslateCriteria;
-import org.teiid.query.sql.proc.WhileStatement;
 import org.teiid.query.sql.symbol.AggregateSymbol;
 import org.teiid.query.sql.symbol.Constant;
 import org.teiid.query.sql.symbol.DerivedColumn;
@@ -134,7 +132,6 @@
 import org.teiid.query.sql.visitor.FunctionCollectorVisitor;
 import org.teiid.query.sql.visitor.GroupCollectorVisitor;
 import org.teiid.query.sql.visitor.GroupsUsedByElementsVisitor;
-import org.teiid.query.sql.visitor.PredicateCollectorVisitor;
 import org.teiid.query.sql.visitor.SQLStringVisitor;
 import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
 import org.teiid.query.validator.UpdateValidator.UpdateInfo;

Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidatorFailure.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidatorFailure.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidatorFailure.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -28,11 +28,17 @@
 import org.teiid.query.sql.LanguageObject;
 
 public class ValidatorFailure extends ReportItem {
+	
+	public enum Status {
+		ERROR,
+		WARNING
+	}
 
 	public static final String VALIDATOR_FAILURE = "ValidatorFailure"; //$NON-NLS-1$
 
     // Don't want to pass this around, so make it transient
-    private transient Collection invalidObjects;  
+    private transient Collection<LanguageObject> invalidObjects;  
+    private Status status = Status.ERROR;
         
     public ValidatorFailure(String description) { 
         super(VALIDATOR_FAILURE);
@@ -42,16 +48,24 @@
     public ValidatorFailure(String description, LanguageObject object) {
         super(VALIDATOR_FAILURE);
         setMessage(description);
-        this.invalidObjects = new ArrayList(1);
+        this.invalidObjects = new ArrayList<LanguageObject>(1);
         this.invalidObjects.add(object);
     }
 
-    public ValidatorFailure(String description, Collection objects) { 
+    public ValidatorFailure(String description, Collection<? extends LanguageObject> objects) { 
         super(VALIDATOR_FAILURE);
         setMessage(description);
-        this.invalidObjects = new ArrayList(objects);
+        this.invalidObjects = new ArrayList<LanguageObject>(objects);
     }
     
+    public void setStatus(Status status) {
+		this.status = status;
+	}
+    
+    public Status getStatus() {
+		return status;
+	}
+    
     /** 
      * Get count of invalid objects.
      * @return Count of invalid objects
@@ -67,7 +81,7 @@
      * Get the objects that failed validation.  The collection may be null.
      * @return Invalid objects, may be null
      */
-    public Collection getInvalidObjects() { 
+    public Collection<LanguageObject> getInvalidObjects() { 
         return this.invalidObjects;
     } 
     

Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidatorReport.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidatorReport.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidatorReport.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -28,9 +28,10 @@
 import org.teiid.query.QueryPlugin;
 import org.teiid.query.report.ActivityReport;
 import org.teiid.query.sql.LanguageObject;
+import org.teiid.query.validator.ValidatorFailure.Status;
 
 
-public class ValidatorReport extends ActivityReport {
+public class ValidatorReport extends ActivityReport<ValidatorFailure> {
 
 	public static final String VALIDATOR_REPORT = "Validator Report"; //$NON-NLS-1$
 
@@ -38,10 +39,8 @@
         super(VALIDATOR_REPORT);
     }
 
-    public void collectInvalidObjects(Collection invalidObjects) {
-        Iterator iter = getItemsByType(ValidatorFailure.VALIDATOR_FAILURE).iterator();
-        while(iter.hasNext()) {
-            ValidatorFailure failure = (ValidatorFailure) iter.next();
+    public void collectInvalidObjects(Collection<LanguageObject> invalidObjects) {
+    	for (ValidatorFailure failure : getItems()) {
             if(failure.getInvalidObjectCount() > 0) {
                 invalidObjects.addAll(failure.getInvalidObjects());
             }
@@ -49,7 +48,7 @@
     }
 
     public String getFailureMessage() {
-        Collection failures = getItemsByType(ValidatorFailure.VALIDATOR_FAILURE);
+    	Collection<ValidatorFailure> failures = getItems();
         if(failures.size() == 0) {
             return QueryPlugin.Util.getString("ERR.015.012.0064"); //$NON-NLS-1$
         } else if(failures.size() == 1) {
@@ -58,14 +57,12 @@
             StringBuffer err = new StringBuffer();
             err.append(QueryPlugin.Util.getString("ERR.015.012.0063")); //$NON-NLS-1$
 
-            Iterator iter = failures.iterator();
-            ValidatorFailure failure = (ValidatorFailure) iter.next();
-            err.append(failure);
-
+            Iterator<ValidatorFailure> iter = failures.iterator();
             while(iter.hasNext()) {
-                failure = (ValidatorFailure) iter.next();
-                err.append(", "); //$NON-NLS-1$
-                err.append(failure);
+                err.append(iter.next());
+                if (iter.hasNext()) {
+                	err.append(", "); //$NON-NLS-1$
+                }
             }
             return err.toString();
         }
@@ -75,6 +72,12 @@
         return this.getFailureMessage();
     }
     
+    public void handleValidationWarning(String message) {
+    	ValidatorFailure vf = new ValidatorFailure(message);
+    	vf.setStatus(Status.WARNING);
+        this.addItem(vf);
+    }
+    
     public void handleValidationError(String message) {
         this.addItem(new ValidatorFailure(message));
     }
@@ -83,7 +86,7 @@
         this.addItem(new ValidatorFailure(message, invalidObj));
     }
 
-    public void handleValidationError(String message, Collection invalidObjs) {
+    public void handleValidationError(String message, Collection<? extends LanguageObject> invalidObjs) {
         this.addItem(new ValidatorFailure(message, invalidObjs));
     }
 

Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties	2011-01-19 01:57:17 UTC (rev 2851)
@@ -88,9 +88,6 @@
 ERR.015.006.0057= Unknown subquery comparison predicate quantifier: {0}
 ERR.015.006.0058= The command of this scalar subquery returned more than one value: {0}
 
-# report (007)
-ERR.015.007.0001= Item may not be null
-
 # resolver (008)
 ERR.015.008.0003= Only one XML document may be specified in the FROM clause of a query.
 ERR.015.008.0007= Incorrect number of parameters specified on the stored procedure {2} - expected {0} but got {1}

Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java	2011-01-18 22:14:35 UTC (rev 2850)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestUpdateValidator.java	2011-01-19 01:57:17 UTC (rev 2851)
@@ -52,6 +52,7 @@
 import org.teiid.query.sql.symbol.SingleElementSymbol;
 import org.teiid.query.unittest.RealMetadataFactory;
 import org.teiid.query.validator.UpdateValidator.UpdateInfo;
+import org.teiid.query.validator.UpdateValidator.UpdateType;
 
 @SuppressWarnings("nls")
 public class TestUpdateValidator {
@@ -65,7 +66,7 @@
 			String vGroup = "gx";
 			Command command = createView(sql, md, vGroup);
 			
-			UpdateValidator uv = new UpdateValidator(md, null, null, null);
+			UpdateValidator uv = new UpdateValidator(md, UpdateType.INHERENT, UpdateType.INHERENT, UpdateType.INHERENT);
 			GroupSymbol gs = new GroupSymbol(vGroup);
 			ResolverUtil.resolveGroup(gs, md);
 			uv.validate(command, ResolverUtil.resolveElementsInGroup(gs, md));



More information about the teiid-commits mailing list