Author: shawkins
Date: 2011-04-28 21:37:38 -0400 (Thu, 28 Apr 2011)
New Revision: 3131
Added:
trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterProcedure.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterView.java
trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestAlterResolving.java
trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java
Modified:
trunk/api/src/main/java/org/teiid/language/SQLConstants.java
trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
trunk/api/src/main/java/org/teiid/metadata/Table.java
trunk/client/src/main/java/org/teiid/jdbc/DatabaseMetaDataImpl.java
trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java
trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/BatchedUpdateCommand.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
trunk/engine/src/main/resources/org/teiid/query/i18n.properties
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java
trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java
trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
trunk/engine/src/test/java/org/teiid/query/processor/TestTriggerActions.java
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestAccessNode.java
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java
trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
trunk/engine/src/test/java/org/teiid/query/sql/proc/TestCreateUpdateProcedureCommand.java
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestEvaluatableVisitor.java
trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java
Log:
TEIID-1326 adding alter commands for runtime update of metadata
Modified: trunk/api/src/main/java/org/teiid/language/SQLConstants.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2011-04-29 01:33:21 UTC
(rev 3130)
+++ trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2011-04-29 01:37:38 UTC
(rev 3131)
@@ -106,6 +106,9 @@
public static final String TEXTAGG = "TEXTAGG"; //$NON-NLS-1$
public static final String ARRAYTABLE = "ARRAYTABLE"; //$NON-NLS-1$
+
+ public static final String VIEW = "VIEW"; //$NON-NLS-1$
+ public static final String INSTEAD = "INSTEAD"; //$NON-NLS-1$
}
public interface Reserved {
Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2011-04-29 01:33:21
UTC (rev 3130)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2011-04-29 01:37:38
UTC (rev 3131)
@@ -27,12 +27,6 @@
*/
public interface MetadataRepository {
- public enum TriggerOperation {
- INSERT,
- UPDATE,
- DELETE
- }
-
/**
* Returns an updated view definition (AS SQL only) or null if the current view
definition should be used
* should be used.
@@ -52,7 +46,7 @@
* Returns an updated trigger definition (FOR EACH ROW ...) or null if the current view
definition should be used
* should be used.
*/
- String getInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table,
TriggerOperation triggerOperation);
+ String getInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table,
Table.TriggerOperation triggerOperation);
/**
*
@@ -62,7 +56,7 @@
* @param triggerOperation
* @param triggerDefinition
*/
- void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table,
TriggerOperation triggerOperation, String triggerDefinition);
+ void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table,
Table.TriggerOperation triggerOperation, String triggerDefinition);
/**
* Returns an updated procedure definition (CREATE PROCEDURE ...) or null if the current
procedure definition should be used
Modified: trunk/api/src/main/java/org/teiid/metadata/Table.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Table.java 2011-04-29 01:33:21 UTC (rev
3130)
+++ trunk/api/src/main/java/org/teiid/metadata/Table.java 2011-04-29 01:37:38 UTC (rev
3131)
@@ -41,7 +41,13 @@
MaterializedTable
}
- private int cardinality;
+ public static enum TriggerOperation {
+ INSERT,
+ UPDATE,
+ DELETE
+ }
+
+ private int cardinality;
private Type tableType;
private boolean isVirtual;
private boolean isSystem;
Modified: trunk/client/src/main/java/org/teiid/jdbc/DatabaseMetaDataImpl.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/DatabaseMetaDataImpl.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/client/src/main/java/org/teiid/jdbc/DatabaseMetaDataImpl.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -754,17 +754,6 @@
return getDriverMajorVersion()+"."+getDriverMinorVersion ();
//$NON-NLS-1$
}
- /**
- * <p>This method gets a description of the forignkey columns that reference
the
- * primary key columns in the given table. Catalog and schema names are not
- * used to narrow down the search, but they should match the virtualdatabasename
- * and version used to obtain this driver connection.
- * @param name of the catalog which contains the given table.
- * @param schema name which contains the given table.
- * @param table name which contains the primary keys.
- * @return ResultSet object giving the exported key info.
- * @throws SQLException if there is an error obtaining server results
- */
public ResultSet getExportedKeys(String catalog, String schema, String table) throws
SQLException {
if (catalog == null) {
catalog = PERCENT;
@@ -824,17 +813,6 @@
return DOUBLE_QUOTE;
}
- /**
- * <p>Gets a description of the primary key columns that are referenced by the
- * foreign key columns in the given table. Catalog and schema names are not
- * used to narrow down the search, but they should match the virtualdatabasename
- * and version used to obtain this driver connection.
- * @param name of the catalog which contains the given table.
- * @param schema name which contains the given table.
- * @param table name which contains the foreign keys.
- * @return ResultSet object giving the imported key info.
- * @throws SQLException if there is an error obtaining server results
- */
public ResultSet getImportedKeys(String catalog, String schema, String table) throws
SQLException {
if (catalog == null) {
catalog = PERCENT;
@@ -875,17 +853,6 @@
}
}
- /**
- * <p>Gets a description of the indexes that are present on a given table.
- *
- * @param name of the catalog which contains the given table.
- * @param schema name which contains the given table.
- * @param table name which contains the indexes.
- * @param boolean indicating if unique key info needs to be returned.
- * @param boolean indicating if approximate value are to be allowed.
- * @return ResultSet object containing metadata info of index columns.
- * @throws SQLException if catalog/schema info does not match for this connection.
- */
public ResultSet getIndexInfo(String catalog, String schema, String table, boolean
unique, boolean approximate) throws SQLException {
if (catalog == null) {
catalog = PERCENT;
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -36,7 +36,6 @@
import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.core.util.Assertion;
import org.teiid.core.util.StringUtil;
import org.teiid.dqp.internal.process.Request;
import org.teiid.language.SQLConstants;
@@ -49,6 +48,7 @@
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.metadata.TempMetadataStore;
import org.teiid.query.parser.QueryParser;
+import org.teiid.query.resolver.command.AlterResolver;
import org.teiid.query.resolver.command.BatchedUpdateResolver;
import org.teiid.query.resolver.command.DeleteResolver;
import org.teiid.query.resolver.command.DynamicCommandResolver;
@@ -108,6 +108,7 @@
private static final CommandResolver BATCHED_UPDATE_RESOLVER = new
BatchedUpdateResolver();
private static final CommandResolver DYNAMIC_COMMAND_RESOLVER = new
DynamicCommandResolver();
private static final CommandResolver TEMP_TABLE_RESOLVER = new TempTableResolver();
+ private static final CommandResolver ALTER_RESOLVER = new AlterResolver();
public static Command expandCommand(ProcedureContainer proc, QueryMetadataInterface
metadata, AnalysisRecord analysisRecord) throws QueryResolverException,
QueryMetadataException, TeiidComponentException {
ProcedureContainerResolver cr = (ProcedureContainerResolver)chooseResolver(proc,
metadata);
@@ -194,8 +195,8 @@
ResolverVisitor.resolveLanguageObject(elementSymbol, metadata);
elementSymbol.setIsExternalReference(true);
if (!positional) {
- symbolMap.put(new ElementSymbol(ProcedureReservedWords.INPUT +
ElementSymbol.SEPARATOR + name), (ElementSymbol)elementSymbol.clone());
- symbolMap.put(new ElementSymbol(ProcedureReservedWords.INPUTS +
ElementSymbol.SEPARATOR + name), (ElementSymbol)elementSymbol.clone());
+ symbolMap.put(new ElementSymbol(ProcedureReservedWords.INPUT +
ElementSymbol.SEPARATOR + name), elementSymbol.clone());
+ symbolMap.put(new ElementSymbol(ProcedureReservedWords.INPUTS +
ElementSymbol.SEPARATOR + name), elementSymbol.clone());
elementSymbol.setShortName(name);
}
elements.add(elementSymbol);
@@ -211,7 +212,7 @@
if (!ref.isPositional()) {
return ref;
}
- return (ElementSymbol)elements.get(ref.getIndex()).clone();
+ return elements.get(ref.getIndex()).clone();
}
};
DeepPostOrderNavigator.doVisit(currentCommand, emv);
@@ -329,6 +330,9 @@
case Command.TYPE_DYNAMIC: return DYNAMIC_COMMAND_RESOLVER;
case Command.TYPE_CREATE: return TEMP_TABLE_RESOLVER;
case Command.TYPE_DROP: return TEMP_TABLE_RESOLVER;
+ case Command.TYPE_ALTER_PROC:
+ case Command.TYPE_ALTER_TRIGGER:
+ case Command.TYPE_ALTER_VIEW: return ALTER_RESOLVER;
default:
throw new AssertionError("Unknown command type");
//$NON-NLS-1$
}
@@ -357,7 +361,7 @@
return false;
}
- FromClause clause = (FromClause)from.getClauses().get(0);
+ FromClause clause = from.getClauses().get(0);
if (!(clause instanceof UnaryFromClause)) {
return false;
@@ -456,19 +460,7 @@
}
Request.validateWithVisitor(new ValidationVisitor(), qmi, result);
- //ensure that null types match the view
- List<ElementSymbol> symbols =
ResolverUtil.resolveElementsInGroup(virtualGroup, qmi);
- List<SingleElementSymbol> projectedSymbols =
result.getProjectedSymbols();
- if (symbols.size() != projectedSymbols.size()) {
- Assertion.failed("View " + virtualGroup + " does not have the
correct number of projected symbols"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- for (int i = 0; i < projectedSymbols.size(); i++) {
- SingleElementSymbol projectedSymbol = projectedSymbols.get(i);
- if (projectedSymbol.getType() != DataTypeManager.DefaultDataClasses.NULL) {
- continue;
- }
- ResolverUtil.setSymbolType(projectedSymbol, symbols.get(i).getType());
- }
+ validateProjectedSymbols(virtualGroup, qmi, result);
cachedNode = new QueryNode(qnode.getQuery());
cachedNode.setCommand((Command)result.clone());
@@ -488,6 +480,34 @@
return cachedNode;
}
+ public static void validateProjectedSymbols(GroupSymbol virtualGroup,
+ QueryMetadataInterface qmi, Command result)
+ throws QueryMetadataException, TeiidComponentException, QueryValidatorException {
+ //ensure that null types match the view
+ List<ElementSymbol> symbols = ResolverUtil.resolveElementsInGroup(virtualGroup,
qmi);
+ List<SingleElementSymbol> projectedSymbols = result.getProjectedSymbols();
+ validateProjectedSymbols(virtualGroup, symbols, projectedSymbols);
+ }
+
+ public static void validateProjectedSymbols(GroupSymbol virtualGroup,
+ List<ElementSymbol> symbols,
+ List<SingleElementSymbol> projectedSymbols)
+ throws QueryValidatorException {
+ if (symbols.size() != projectedSymbols.size()) {
+ throw new
QueryValidatorException(QueryPlugin.Util.getString("QueryResolver.wrong_view_symbols",
virtualGroup, symbols.size(), projectedSymbols.size())); //$NON-NLS-1$
+ }
+ for (int i = 0; i < projectedSymbols.size(); i++) {
+ SingleElementSymbol projectedSymbol = projectedSymbols.get(i);
+
+ ResolverUtil.setTypeIfNull(projectedSymbol, symbols.get(i).getType());
+
+ if (projectedSymbol.getType() != symbols.get(i).getType()) {
+ throw new
QueryValidatorException(QueryPlugin.Util.getString("QueryResolver.wrong_view_symbol_type",
virtualGroup, i+1, //$NON-NLS-1$
+ DataTypeManager.getDataTypeName(symbols.get(i).getType()),
DataTypeManager.getDataTypeName(projectedSymbol.getType())));
+ }
+ }
+ }
+
public static boolean isView(GroupSymbol virtualGroup,
QueryMetadataInterface qmi) throws TeiidComponentException,
QueryMetadataException {
Added: trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java
(rev 0)
+++
trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -0,0 +1,72 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.resolver.command;
+
+import org.teiid.api.exception.query.QueryMetadataException;
+import org.teiid.api.exception.query.QueryResolverException;
+import org.teiid.core.TeiidComponentException;
+import org.teiid.metadata.Table.TriggerOperation;
+import org.teiid.query.QueryPlugin;
+import org.teiid.query.metadata.TempMetadataAdapter;
+import org.teiid.query.resolver.CommandResolver;
+import org.teiid.query.resolver.QueryResolver;
+import org.teiid.query.resolver.util.ResolverUtil;
+import org.teiid.query.sql.lang.Alter;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.Command;
+
+public class AlterResolver implements CommandResolver {
+
+ @Override
+ public void resolveCommand(Command command, TempMetadataAdapter metadata,
+ boolean resolveNullLiterals) throws QueryMetadataException,
+ QueryResolverException, TeiidComponentException {
+ Alter<? extends Command> alter = (Alter<? extends Command>)command;
+ ResolverUtil.resolveGroup(alter.getTarget(), metadata);
+ int type = Command.TYPE_QUERY;
+ boolean viewTarget = true;
+ if (alter instanceof AlterTrigger) {
+ TriggerOperation op = ((AlterTrigger)alter).getOperation();
+ switch (op) {
+ case DELETE:
+ type = Command.TYPE_DELETE;
+ break;
+ case INSERT:
+ type = Command.TYPE_INSERT;
+ break;
+ case UPDATE:
+ type = Command.TYPE_UPDATE;
+ break;
+ }
+ } else if (alter instanceof AlterProcedure) {
+ type = Command.TYPE_STORED_PROCEDURE;
+ viewTarget = false;
+ }
+ if (viewTarget && !QueryResolver.isView(alter.getTarget(), metadata)) {
+ throw new
QueryResolverException(QueryPlugin.Util.getString("AlterResolver.not_a_view",
alter.getTarget())); //$NON-NLS-1$
+ }
+ QueryResolver.resolveCommand(alter.getDefinition(), alter.getTarget(), type,
metadata.getDesignTimeMetadata());
+ }
+
+}
Property changes on:
trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -22,8 +22,6 @@
package org.teiid.query.resolver.command;
-import java.util.Iterator;
-
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
@@ -45,8 +43,7 @@
BatchedUpdateCommand batchedUpdateCommand = (BatchedUpdateCommand) command;
- for (Iterator i = batchedUpdateCommand.getSubCommands().iterator(); i.hasNext();)
{
- Command subCommand = (Command)i.next();
+ for (Command subCommand : batchedUpdateCommand.getUpdateCommands()) {
QueryResolver.setChildMetadata(subCommand, command);
QueryResolver.resolveCommand(subCommand, metadata.getMetadata());
}
Modified:
trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -73,26 +73,24 @@
query.setIsXML(true);
// get the group on this query
- Collection groups = GroupCollectorVisitor.getGroups(query, true);
- GroupSymbol group = (GroupSymbol) groups.iterator().next();
+ Collection<GroupSymbol> groups = GroupCollectorVisitor.getGroups(query, true);
+ GroupSymbol group = groups.iterator().next();
//external groups
GroupContext externalGroups = query.getExternalGroupContexts();
// valid elements for select
- List validSelectElems = getElementsInDocument(group, metadata);
+ List<ElementSymbol> validSelectElems = getElementsInDocument(group, metadata);
resolveXMLSelect(query, group, validSelectElems, metadata);
// valid elements for criteria and order by
- Collection validCriteriaElements = collectValidCriteriaElements(group, metadata);
+ Collection<ElementSymbol> validCriteriaElements =
collectValidCriteriaElements(group, metadata);
Criteria crit = query.getCriteria();
OrderBy orderBy = query.getOrderBy();
- List commands = CommandCollectorVisitor.getCommands(query);
- for (Iterator i = commands.iterator(); i.hasNext();) {
- Command subCommand = (Command)i.next();
-
+ List<Command> commands = CommandCollectorVisitor.getCommands(query);
+ for (Command subCommand : commands) {
QueryResolver.setChildMetadata(subCommand, command);
QueryResolver.resolveCommand(subCommand, metadata.getMetadata());
@@ -130,7 +128,7 @@
* @throws QueryMetadataException if resolving fails
* @throws TeiidComponentException if resolving fails
*/
- void resolveXMLSelect(Query query, GroupSymbol group, List validElements,
QueryMetadataInterface metadata)
+ void resolveXMLSelect(Query query, GroupSymbol group, List<ElementSymbol>
validElements, QueryMetadataInterface metadata)
throws QueryMetadataException, TeiidComponentException, QueryResolverException {
GroupContext externalGroups = null;
@@ -188,7 +186,7 @@
resolveElement(elementSymbol, validElements, externalGroups,
metadata);
// now find all the elements under this node and set as elements.
- List elementsInNode = getElementsUnderNode(elementSymbol,
validElements, metadata);
+ List<ElementSymbol> elementsInNode =
getElementsUnderNode(elementSymbol, validElements, metadata);
((AllInGroupSymbol)ss).setElementSymbols(elementsInNode);
}
} else if (ss instanceof AllSymbol) {
@@ -217,11 +215,11 @@
* @throws TeiidComponentException
* @throws QueryResolverException
*/
- public static Collection collectValidCriteriaElements(GroupSymbol group,
QueryMetadataInterface metadata)
+ public static Collection<ElementSymbol>
collectValidCriteriaElements(GroupSymbol group, QueryMetadataInterface metadata)
throws QueryMetadataException, TeiidComponentException, QueryResolverException {
// Get all groups and elements
- List validElements = getElementsInDocument(group, metadata);
+ List<ElementSymbol> validElements = getElementsInDocument(group,
metadata);
// Create GroupSymbol for temp groups and add to groups
Collection tempGroups = metadata.getXMLTempGroups(group.getMetadataID());
@@ -257,14 +255,12 @@
* @param metadata QueryMetadataInterface the metadata(for resolving criteria on temp
groups)
* @throws QueryResolverException if any of the above fail conditions are met
*/
- public static void resolveXMLCriteria(Criteria criteria,GroupContext externalGroups,
Collection validElements, QueryMetadataInterface metadata)
+ public static void resolveXMLCriteria(Criteria criteria,GroupContext externalGroups,
Collection<ElementSymbol> validElements, QueryMetadataInterface metadata)
throws QueryMetadataException, TeiidComponentException, QueryResolverException {
// Walk through each element in criteria and check against valid elements
- Collection critElems = ElementCollectorVisitor.getElements(criteria, false);
- Iterator critElemIter = critElems.iterator();
- while(critElemIter.hasNext()) {
- ElementSymbol critElem = (ElementSymbol) critElemIter.next();
+ Collection<ElementSymbol> critElems =
ElementCollectorVisitor.getElements(criteria, false);
+ for (ElementSymbol critElem : critElems) {
if(! critElem.isExternalReference()) {
resolveElement(critElem, validElements, externalGroups, metadata);
}
@@ -282,14 +278,12 @@
* @throws QueryMetadataException if resolving fails
* @throws TeiidComponentException if resolving fails
*/
- static void resolveXMLOrderBy(OrderBy orderBy, GroupContext externalGroups,
Collection validElements, QueryMetadataInterface metadata)
+ static void resolveXMLOrderBy(OrderBy orderBy, GroupContext externalGroups,
Collection<ElementSymbol> validElements, QueryMetadataInterface metadata)
throws QueryMetadataException, TeiidComponentException, QueryResolverException {
// Walk through each element in OrderBy clause and check against valid elements
- Collection orderElems = ElementCollectorVisitor.getElements(orderBy, false);
- Iterator orderElemIter = orderElems.iterator();
- while(orderElemIter.hasNext()) {
- ElementSymbol orderElem = (ElementSymbol) orderElemIter.next();
+ Collection<ElementSymbol> orderElems =
ElementCollectorVisitor.getElements(orderBy, false);
+ for (ElementSymbol orderElem : orderElems) {
resolveElement(orderElem, validElements, externalGroups, metadata);
}
}
@@ -304,7 +298,7 @@
* @throws QueryMetadataException
* @throws TeiidComponentException
*/
- static void resolveElement(ElementSymbol elem, Collection validElements, GroupContext
externalGroups, QueryMetadataInterface metadata)
+ static void resolveElement(ElementSymbol elem, Collection<ElementSymbol>
validElements, GroupContext externalGroups, QueryMetadataInterface metadata)
throws QueryResolverException, QueryMetadataException, TeiidComponentException {
// Get exact matching name
@@ -313,11 +307,11 @@
// Prepare results
ElementSymbol exactMatch = null;
- List partialMatches = new ArrayList(2); // anything over 1 is an error and
should be rare
+ List<ElementSymbol> partialMatches = new ArrayList<ElementSymbol>(2);
// anything over 1 is an error and should be rare
//List of XML attributes that might match the criteria element,
//if the criteria is specified without the optional "@" sign
- List attributeMatches = new ArrayList(2);
+ List<ElementSymbol> attributeMatches = new
ArrayList<ElementSymbol>(2);
// look up name based on ID match - will work for uuid version
try {
@@ -333,10 +327,7 @@
}
// Walk through each valid element looking for a match
- Iterator elemIter = validElements.iterator();
- while(elemIter.hasNext()) {
- ElementSymbol currentElem = (ElementSymbol) elemIter.next();
-
+ for (ElementSymbol currentElem : validElements) {
// Look for exact match
if(currentElem.getName().equalsIgnoreCase(critElemName)) {
exactMatch = currentElem;
@@ -368,9 +359,9 @@
// Check for single partial match
if(exactMatch == null){
if (partialMatches.size() == 1) {
- exactMatch = (ElementSymbol) partialMatches.get(0);
+ exactMatch = partialMatches.get(0);
} else if (partialMatches.size() == 0 && attributeMatches.size() ==
1){
- exactMatch = (ElementSymbol) attributeMatches.get(0);
+ exactMatch = attributeMatches.get(0);
}
}
@@ -395,18 +386,17 @@
}
}
- static List getElementsInDocument(GroupSymbol group, QueryMetadataInterface
metadata)
- throws QueryMetadataException, QueryResolverException, TeiidComponentException {
+ static List<ElementSymbol> getElementsInDocument(GroupSymbol group,
QueryMetadataInterface metadata)
+ throws QueryMetadataException, TeiidComponentException {
return ResolverUtil.resolveElementsInGroup(group, metadata);
}
- static List getElementsUnderNode(ElementSymbol node, List validElements,
QueryMetadataInterface metadata)
+ static List<ElementSymbol> getElementsUnderNode(ElementSymbol node,
List<ElementSymbol> validElements, QueryMetadataInterface metadata)
throws TeiidComponentException, QueryMetadataException {
- List elements = new ArrayList();
+ List<ElementSymbol> elements = new ArrayList<ElementSymbol>();
String nodeName = metadata.getFullName(node.getMetadataID());
- for (Iterator i = validElements.iterator(); i.hasNext();) {
- ElementSymbol validElement = (ElementSymbol)i.next();
+ for (ElementSymbol validElement : validElements) {
String qualifiedName = validElement.getName();
if (qualifiedName.equals(nodeName) ||
qualifiedName.startsWith(nodeName+ElementSymbol.SEPARATOR)) {
elements.add(validElement);
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -627,16 +627,15 @@
SingleElementSymbol symbol = (SingleElementSymbol)selectSymbol;
- if(!DataTypeManager.DefaultDataClasses.NULL.equals(symbol.getType())
&& symbol.getType() != null) {
- continue;
- }
-
- setSymbolType(symbol, DataTypeManager.DefaultDataClasses.STRING);
+ setTypeIfNull(symbol, DataTypeManager.DefaultDataClasses.STRING);
}
}
- public static void setSymbolType(SingleElementSymbol symbol,
+ public static void setTypeIfNull(SingleElementSymbol symbol,
Class<?> replacement) {
+ if(!DataTypeManager.DefaultDataClasses.NULL.equals(symbol.getType()) &&
symbol.getType() != null) {
+ return;
+ }
if(symbol instanceof AliasSymbol) {
symbol = ((AliasSymbol)symbol).getSymbol();
}
@@ -659,10 +658,7 @@
}
} else if(symbol instanceof ElementSymbol) {
ElementSymbol elementSymbol = (ElementSymbol)symbol;
- Class elementType = elementSymbol.getType();
- if(elementType != null &&
elementType.equals(DataTypeManager.DefaultDataClasses.NULL)) {
- elementSymbol.setType(replacement);
- }
+ elementSymbol.setType(replacement);
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -22,9 +22,88 @@
package org.teiid.query.sql;
-import org.teiid.query.sql.lang.*;
-import org.teiid.query.sql.proc.*;
-import org.teiid.query.sql.symbol.*;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
+import org.teiid.query.sql.lang.ArrayTable;
+import org.teiid.query.sql.lang.BatchedUpdateCommand;
+import org.teiid.query.sql.lang.BetweenCriteria;
+import org.teiid.query.sql.lang.CompareCriteria;
+import org.teiid.query.sql.lang.CompoundCriteria;
+import org.teiid.query.sql.lang.Create;
+import org.teiid.query.sql.lang.Delete;
+import org.teiid.query.sql.lang.DependentSetCriteria;
+import org.teiid.query.sql.lang.Drop;
+import org.teiid.query.sql.lang.DynamicCommand;
+import org.teiid.query.sql.lang.ExistsCriteria;
+import org.teiid.query.sql.lang.ExpressionCriteria;
+import org.teiid.query.sql.lang.From;
+import org.teiid.query.sql.lang.GroupBy;
+import org.teiid.query.sql.lang.Insert;
+import org.teiid.query.sql.lang.Into;
+import org.teiid.query.sql.lang.IsNullCriteria;
+import org.teiid.query.sql.lang.JoinPredicate;
+import org.teiid.query.sql.lang.JoinType;
+import org.teiid.query.sql.lang.Limit;
+import org.teiid.query.sql.lang.MatchCriteria;
+import org.teiid.query.sql.lang.NotCriteria;
+import org.teiid.query.sql.lang.Option;
+import org.teiid.query.sql.lang.OrderBy;
+import org.teiid.query.sql.lang.OrderByItem;
+import org.teiid.query.sql.lang.ProcedureContainer;
+import org.teiid.query.sql.lang.Query;
+import org.teiid.query.sql.lang.Select;
+import org.teiid.query.sql.lang.SetClause;
+import org.teiid.query.sql.lang.SetClauseList;
+import org.teiid.query.sql.lang.SetCriteria;
+import org.teiid.query.sql.lang.SetQuery;
+import org.teiid.query.sql.lang.StoredProcedure;
+import org.teiid.query.sql.lang.SubqueryCompareCriteria;
+import org.teiid.query.sql.lang.SubqueryFromClause;
+import org.teiid.query.sql.lang.SubquerySetCriteria;
+import org.teiid.query.sql.lang.TextTable;
+import org.teiid.query.sql.lang.UnaryFromClause;
+import org.teiid.query.sql.lang.Update;
+import org.teiid.query.sql.lang.WithQueryCommand;
+import org.teiid.query.sql.lang.XMLTable;
+import org.teiid.query.sql.proc.AssignmentStatement;
+import org.teiid.query.sql.proc.Block;
+import org.teiid.query.sql.proc.BreakStatement;
+import org.teiid.query.sql.proc.CommandStatement;
+import org.teiid.query.sql.proc.ContinueStatement;
+import org.teiid.query.sql.proc.CreateUpdateProcedureCommand;
+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.RaiseErrorStatement;
+import org.teiid.query.sql.proc.TranslateCriteria;
+import org.teiid.query.sql.proc.TriggerAction;
+import org.teiid.query.sql.proc.WhileStatement;
+import org.teiid.query.sql.symbol.AggregateSymbol;
+import org.teiid.query.sql.symbol.AliasSymbol;
+import org.teiid.query.sql.symbol.AllInGroupSymbol;
+import org.teiid.query.sql.symbol.AllSymbol;
+import org.teiid.query.sql.symbol.CaseExpression;
+import org.teiid.query.sql.symbol.Constant;
+import org.teiid.query.sql.symbol.DerivedColumn;
+import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.ExpressionSymbol;
+import org.teiid.query.sql.symbol.Function;
+import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.QueryString;
+import org.teiid.query.sql.symbol.Reference;
+import org.teiid.query.sql.symbol.ScalarSubquery;
+import org.teiid.query.sql.symbol.SearchedCaseExpression;
+import org.teiid.query.sql.symbol.TextLine;
+import org.teiid.query.sql.symbol.XMLAttributes;
+import org.teiid.query.sql.symbol.XMLElement;
+import org.teiid.query.sql.symbol.XMLForest;
+import org.teiid.query.sql.symbol.XMLNamespaces;
+import org.teiid.query.sql.symbol.XMLParse;
+import org.teiid.query.sql.symbol.XMLQuery;
+import org.teiid.query.sql.symbol.XMLSerialize;
/**
* <p>The LanguageVisitor can be used to visit a LanguageObject as if it were a
tree
@@ -140,4 +219,8 @@
public void visit(WithQueryCommand obj) {}
public void visit(TriggerAction obj) {}
public void visit(ArrayTable obj) {}
+
+ public void visit(AlterView obj) {}
+ public void visit(AlterProcedure obj) {}
+ public void visit(AlterTrigger obj) {}
}
Added: trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
(rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java 2011-04-29 01:37:38 UTC
(rev 3131)
@@ -0,0 +1,87 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.sql.lang;
+
+import java.util.List;
+
+import org.teiid.core.util.EquivalenceUtil;
+import org.teiid.core.util.HashCodeUtil;
+import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.SingleElementSymbol;
+
+public abstract class Alter<T extends Command> extends Command {
+
+ private GroupSymbol target;
+ private T definition;
+
+ public GroupSymbol getTarget() {
+ return target;
+ }
+
+ public void setTarget(GroupSymbol target) {
+ this.target = target;
+ }
+
+ public T getDefinition() {
+ return definition;
+ }
+
+ public void setDefinition(T definition) {
+ this.definition = definition;
+ }
+
+ @Override
+ public boolean areResultsCachable() {
+ return false;
+ }
+
+ @Override
+ public List<SingleElementSymbol> getProjectedSymbols() {
+ return Command.getUpdateCommandSymbol();
+ }
+
+ public void cloneOnTo(Alter<T> clone) {
+ copyMetadataState(clone);
+ clone.setDefinition((T)getDefinition().clone());
+ clone.setTarget(getTarget().clone());
+ }
+
+ @Override
+ public int hashCode() {
+ return HashCodeUtil.hashCode(this.target.hashCode(), this.definition);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (obj.getClass() != this.getClass()) {
+ return false;
+ }
+ Alter<?> other = (Alter<?>)obj;
+ return EquivalenceUtil.areEqual(this.target, other.target)
+ && EquivalenceUtil.areEqual(this.definition, other.definition);
+ }
+
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterProcedure.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterProcedure.java
(rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterProcedure.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -0,0 +1,45 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.query.sql.lang;
+
+import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.proc.CreateUpdateProcedureCommand;
+
+public class AlterProcedure extends Alter<CreateUpdateProcedureCommand> {
+
+ @Override
+ public void acceptVisitor(LanguageVisitor visitor) {
+ visitor.visit(this);
+ }
+
+ @Override
+ public AlterProcedure clone() {
+ AlterProcedure clone = new AlterProcedure();
+ this.cloneOnTo(clone);
+ return clone;
+ }
+
+ @Override
+ public int getType() {
+ return TYPE_ALTER_PROC;
+ }
+}
Property changes on:
trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterProcedure.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java
(rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.sql.lang;
+
+import org.teiid.metadata.Table;
+import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.proc.TriggerAction;
+
+public class AlterTrigger extends Alter<TriggerAction> {
+
+ private Table.TriggerOperation operation;
+
+ public Table.TriggerOperation getOperation() {
+ return operation;
+ }
+
+ public void setOperation(Table.TriggerOperation operation) {
+ this.operation = operation;
+ }
+
+ @Override
+ public void acceptVisitor(LanguageVisitor visitor) {
+ visitor.visit(this);
+ }
+
+ @Override
+ public AlterTrigger clone() {
+ AlterTrigger clone = new AlterTrigger();
+ cloneOnTo(clone);
+ clone.operation = operation;
+ return clone;
+ }
+
+ @Override
+ public int getType() {
+ return TYPE_ALTER_TRIGGER;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!super.equals(obj)) {
+ return false;
+ }
+ if (obj == this) {
+ return true;
+ }
+ AlterTrigger other = (AlterTrigger)obj;
+ return other.operation == this.operation;
+ }
+}
Property changes on:
trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterView.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterView.java
(rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterView.java 2011-04-29 01:37:38
UTC (rev 3131)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.query.sql.lang;
+
+import org.teiid.query.sql.LanguageVisitor;
+
+public class AlterView extends Alter<QueryCommand> {
+
+ @Override
+ public void acceptVisitor(LanguageVisitor visitor) {
+ visitor.visit(this);
+ }
+
+ @Override
+ public AlterView clone() {
+ AlterView clone = new AlterView();
+ this.cloneOnTo(clone);
+ return clone;
+ }
+
+ @Override
+ public int getType() {
+ return TYPE_ALTER_VIEW;
+ }
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterView.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/BatchedUpdateCommand.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/sql/lang/BatchedUpdateCommand.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/sql/lang/BatchedUpdateCommand.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -40,13 +40,6 @@
protected List<Command> commands;
private List<VariableContext> variableContexts; //processing state
- /**
- * @see org.teiid.query.sql.lang.Command#getSubCommands()
- */
- public List<Command> getSubCommands() {
- return commands;
- }
-
/**
*
* @param updateCommands
@@ -62,7 +55,7 @@
* @since 4.2
*/
public List<Command> getUpdateCommands() {
- return getSubCommands();
+ return commands;
}
/**
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-04-29 01:33:21
UTC (rev 3130)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-04-29 01:37:38
UTC (rev 3131)
@@ -26,7 +26,6 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -103,6 +102,12 @@
public static final int TYPE_DROP = 12;
public static final int TYPE_TRIGGER_ACTION = 13;
+
+ public static final int TYPE_ALTER_VIEW = 14;
+
+ public static final int TYPE_ALTER_PROC = 15;
+
+ public static final int TYPE_ALTER_TRIGGER = 16;
private static List<SingleElementSymbol> updateCommandSymbol;
@@ -144,15 +149,6 @@
this.correlatedReferences = correlatedReferences;
}
- /**
- * Gets the subCommands (both embedded and non-embedded) under this command. In
general the returned list
- * is not safe to manipulate (see @link#CommandContainer insead)
- * @return
- */
- public List<Command> getSubCommands() {
- return CommandCollectorVisitor.getCommands(this);
- }
-
public void setTemporaryMetadata(Map metadata) {
this.tempGroupIDs = metadata;
}
@@ -264,9 +260,7 @@
// Add children recursively
tabLevel++;
- Iterator iter = getSubCommands().iterator();
- while(iter.hasNext()) {
- Command subCommand = (Command) iter.next();
+ for (Command subCommand : CommandCollectorVisitor.getCommands(this)) {
subCommand.printCommandTree(str, tabLevel);
}
}
Modified:
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -26,6 +26,9 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.ArrayTable;
import org.teiid.query.sql.lang.BatchedUpdateCommand;
import org.teiid.query.sql.lang.BetweenCriteria;
@@ -667,6 +670,30 @@
postVisitVisitor(obj);
}
+ @Override
+ public void visit(AlterProcedure obj) {
+ preVisitVisitor(obj);
+ visitNode(obj.getTarget());
+ visitNode(obj.getDefinition());
+ postVisitVisitor(obj);
+ }
+
+ @Override
+ public void visit(AlterTrigger obj) {
+ preVisitVisitor(obj);
+ visitNode(obj.getTarget());
+ visitNode(obj.getDefinition());
+ postVisitVisitor(obj);
+ }
+
+ @Override
+ public void visit(AlterView obj) {
+ preVisitVisitor(obj);
+ visitNode(obj.getTarget());
+ visitNode(obj.getDefinition());
+ postVisitVisitor(obj);
+ }
+
public static void doVisit(LanguageObject object, LanguageVisitor visitor, boolean
order) {
doVisit(object, visitor, order, false);
}
Modified:
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -27,6 +27,9 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.BatchedUpdateCommand;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.ExistsCriteria;
@@ -116,6 +119,21 @@
this.commands.addAll(obj.getUpdateCommands());
}
+ @Override
+ public void visit(AlterProcedure alterProcedure) {
+ this.commands.add(alterProcedure.getDefinition());
+ }
+
+ @Override
+ public void visit(AlterTrigger alterTrigger) {
+ this.commands.add(alterTrigger.getDefinition());
+ }
+
+ @Override
+ public void visit(AlterView alterView) {
+ this.commands.add(alterView.getDefinition());
+ }
+
/**
* Helper to quickly get the commands from obj
* @param obj Language object
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -38,6 +38,9 @@
import org.teiid.metadata.BaseColumn.NullType;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.ArrayTable;
import org.teiid.query.sql.lang.AtomicCriteria;
import org.teiid.query.sql.lang.BetweenCriteria;
@@ -1955,6 +1958,55 @@
append(SPACE);
outputDisplayName(obj.getName());
}
+
+ @Override
+ public void visit(AlterProcedure alterProcedure) {
+ append(ALTER);
+ append(SPACE);
+ append(PROCEDURE);
+ append(SPACE);
+ append(alterProcedure.getTarget());
+ beginClause(1);
+ append(AS);
+ addCacheHint(alterProcedure.getCacheHint());
+ append(alterProcedure.getDefinition().getBlock());
+ }
+
+ @Override
+ public void visit(AlterTrigger alterTrigger) {
+ append(ALTER);
+ append(SPACE);
+ append(TRIGGER);
+ append(SPACE);
+ append(ON);
+ append(SPACE);
+ append(alterTrigger.getTarget());
+ beginClause(0);
+ append(NonReserved.INSTEAD);
+ append(SPACE);
+ append(OF);
+ append(SPACE);
+ append(alterTrigger.getOperation());
+ beginClause(0);
+ append(AS);
+ append("\n"); //$NON-NLS-1$
+ addTabs(0);
+ append(alterTrigger.getDefinition());
+ }
+
+ @Override
+ public void visit(AlterView alterView) {
+ append(ALTER);
+ append(SPACE);
+ append(NonReserved.VIEW);
+ append(SPACE);
+ append(alterView.getTarget());
+ beginClause(0);
+ append(AS);
+ append("\n"); //$NON-NLS-1$
+ addTabs(0);
+ append(alterView.getDefinition());
+ }
public static String escapeSinglePart( String part ) {
if (isReservedWord(part)) {
Modified:
trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -128,18 +128,18 @@
return false;
}
- protected Collection validateElementsSupport(Collection elements, int supportsFlag)
{
+ protected Collection<ElementSymbol>
validateElementsSupport(Collection<ElementSymbol> elements, int supportsFlag) {
// Collect any identifiers not supporting flag
- List dontSupport = null;
+ List<ElementSymbol> dontSupport = null;
ElementSymbol symbol = null;
try {
- Iterator elemIter = elements.iterator();
+ Iterator<ElementSymbol> elemIter = elements.iterator();
while(elemIter.hasNext()) {
- symbol = (ElementSymbol) elemIter.next();
+ symbol = elemIter.next();
if(! getMetadata().elementSupports(symbol.getMetadataID(), supportsFlag))
{
if(dontSupport == null) {
- dontSupport = new ArrayList();
+ dontSupport = new ArrayList<ElementSymbol>();
}
dontSupport.add(symbol);
}
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -49,11 +49,16 @@
import org.teiid.query.function.FunctionLibrary;
import org.teiid.query.function.FunctionMethods;
import org.teiid.query.function.source.XMLSystemFunctions;
+import org.teiid.query.metadata.StoredProcedureInfo;
import org.teiid.query.metadata.SupportConstants;
+import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.ProcedureReservedWords;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.BatchedUpdateCommand;
import org.teiid.query.sql.lang.BetweenCriteria;
import org.teiid.query.sql.lang.Command;
@@ -175,11 +180,11 @@
// ############### Visitor methods for language objects ##################
public void visit(BatchedUpdateCommand obj) {
- List commands = obj.getUpdateCommands();
+ List<Command> commands = obj.getUpdateCommands();
Command command = null;
int type = 0;
for (int i = 0; i < commands.size(); i++) {
- command = (Command)commands.get(i);
+ command = commands.get(i);
type = command.getType();
if (type != Command.TYPE_INSERT &&
type != Command.TYPE_UPDATE &&
@@ -295,7 +300,7 @@
}
this.validateRowLimitFunctionNotInInvalidCriteria(obj);
- Collection projSymbols = obj.getCommand().getProjectedSymbols();
+ Collection<SingleElementSymbol> projSymbols =
obj.getCommand().getProjectedSymbols();
//Subcommand should have one projected symbol (query with one expression
//in SELECT or stored procedure execution that returns a single value).
@@ -358,8 +363,8 @@
handleValidationError(QueryPlugin.Util.getString("ERR.015.004.0036"), obj);
//$NON-NLS-1$
}
- for (Iterator functions =
FunctionCollectorVisitor.getFunctions(obj.getArg(1), false).iterator();
functions.hasNext();) {
- Function function = (Function)functions.next();
+ for (Iterator<Function> functions =
FunctionCollectorVisitor.getFunctions(obj.getArg(1), false).iterator();
functions.hasNext();) {
+ Function function = functions.next();
if
(function.getFunctionDescriptor().getName().equalsIgnoreCase(FunctionLibrary.CONTEXT)) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.Context_function_nested"),
obj); //$NON-NLS-1$
@@ -522,7 +527,7 @@
// CompareCriteria which is entirely it's own conjunct (not OR'ed with
anything else)
if (isXML) {
// Collect all occurrances of rowlimit and rowlimitexception functions
- List rowLimitFunctions = new ArrayList();
+ List<Function> rowLimitFunctions = new ArrayList<Function>();
FunctionCollectorVisitor visitor = new
FunctionCollectorVisitor(rowLimitFunctions, FunctionLibrary.ROWLIMIT);
PreOrderNavigator.doVisit(obj, visitor);
visitor = new FunctionCollectorVisitor(rowLimitFunctions,
FunctionLibrary.ROWLIMITEXCEPTION);
@@ -532,7 +537,7 @@
// Verify each use of rowlimit function is in a compare criteria that is
// entirely it's own conjunct
- Iterator conjunctIter = Criteria.separateCriteriaByAnd(obj).iterator();
+ Iterator<Criteria> conjunctIter =
Criteria.separateCriteriaByAnd(obj).iterator();
int i = 0;
while (conjunctIter.hasNext() && i<functionCount ) {
@@ -587,7 +592,7 @@
return;
}
- Collection transleElmnts = ElementCollectorVisitor.getElements(obj, true);
+ Collection<ElementSymbol> transleElmnts =
ElementCollectorVisitor.getElements(obj, true);
Collection<GroupSymbol> groups =
GroupCollectorVisitor.getGroups(this.currentCommand, true);
int selectType = obj.getSelector().getSelectorType();
@@ -616,10 +621,10 @@
}
}
}
- Iterator critEmlntIter = ElementCollectorVisitor.getElements(predCrit,
true).iterator();
+ Iterator<ElementSymbol> critEmlntIter =
ElementCollectorVisitor.getElements(predCrit, true).iterator();
// collect all elements elements on the criteria map to
while(critEmlntIter.hasNext()) {
- ElementSymbol criteriaElement = (ElementSymbol) critEmlntIter.next();
+ ElementSymbol criteriaElement = critEmlntIter.next();
if(transleElmnts.contains(criteriaElement)) {
Expression mappedExpr = (Expression) symbolMap.get(criteriaElement);
if(mappedExpr instanceof AggregateSymbol) {
@@ -639,9 +644,9 @@
return;
}
- Collection elements = ElementCollectorVisitor.getElements(obj, true);
+ Collection<ElementSymbol> elements =
ElementCollectorVisitor.getElements(obj, true);
- Collection cantSelect = validateElementsSupport(
+ Collection<ElementSymbol> cantSelect = validateElementsSupport(
elements,
SupportConstants.Element.SELECT );
@@ -771,10 +776,8 @@
}
// Validate SELECT
- List projectedSymbols = select.getProjectedSymbols();
- Iterator symbolIter = projectedSymbols.iterator();
- while(symbolIter.hasNext()) {
- SingleElementSymbol symbol = (SingleElementSymbol) symbolIter.next();
+ List<SingleElementSymbol> projectedSymbols =
select.getProjectedSymbols();
+ for (SingleElementSymbol symbol : projectedSymbols) {
AggregateValidationVisitor.validate(symbol, visitor);
}
@@ -922,13 +925,13 @@
* @since 4.2
*/
protected void validateSelectInto(Query query) {
- List symbols = query.getSelect().getProjectedSymbols();
+ List<SingleElementSymbol> symbols =
query.getSelect().getProjectedSymbols();
GroupSymbol intoGroup = query.getInto().getGroup();
validateInto(query, symbols, intoGroup);
}
private void validateInto(LanguageObject query,
- List symbols,
+ List<SingleElementSymbol> symbols,
GroupSymbol intoGroup) {
try {
List elementIDs =
getMetadata().getElementIDsInGroupID(intoGroup.getMetadataID());
@@ -940,14 +943,14 @@
}
for (int symbolNum = 0; symbolNum < symbols.size(); symbolNum++) {
- SingleElementSymbol symbol =
(SingleElementSymbol)symbols.get(symbolNum);
+ SingleElementSymbol symbol = symbols.get(symbolNum);
Object elementID = elementIDs.get(symbolNum);
// Check if supports updates
if (!getMetadata().elementSupports(elementID,
SupportConstants.Element.UPDATE)) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.element_updates_not_allowed",
getMetadata().getFullName(elementID)), intoGroup); //$NON-NLS-1$
}
- Class symbolType = symbol.getType();
+ Class<?> symbolType = symbol.getType();
String symbolTypeName = DataTypeManager.getDataTypeName(symbolType);
String targetTypeName = getMetadata().getElementType(elementID);
if (symbolTypeName.equals(targetTypeName)) {
@@ -970,17 +973,16 @@
* @since 4.2
*/
protected void validateContainsRowsUpdatedVariable(CreateUpdateProcedureCommand obj)
{
- final Collection assignVars = new ArrayList();
+ final Collection<ElementSymbol> assignVars = new
ArrayList<ElementSymbol>();
// Use visitor to find assignment statements
LanguageVisitor visitor = new LanguageVisitor() {
- public void visit(AssignmentStatement obj) {
- assignVars.add(obj.getVariable());
+ public void visit(AssignmentStatement stmt) {
+ assignVars.add(stmt.getVariable());
}
};
PreOrderNavigator.doVisit(obj, visitor);
boolean foundVar = false;
- for(Iterator varIter = assignVars.iterator(); varIter.hasNext();) {
- ElementSymbol variable = (ElementSymbol) varIter.next();
+ for (ElementSymbol variable : assignVars) {
if(variable.getShortName().equalsIgnoreCase(ProcedureReservedWords.ROWS_UPDATED)) {
foundVar = true;
break;
@@ -993,7 +995,7 @@
private void validateRowLimitFunctionNotInInvalidCriteria(Criteria obj) {
// Collect all occurrances of rowlimit and rowlimitexception functions
- List rowLimitFunctions = new ArrayList();
+ List<Function> rowLimitFunctions = new ArrayList<Function>();
FunctionCollectorVisitor visitor = new
FunctionCollectorVisitor(rowLimitFunctions, FunctionLibrary.ROWLIMIT);
PreOrderNavigator.doVisit(obj, visitor);
visitor = new FunctionCollectorVisitor(rowLimitFunctions,
FunctionLibrary.ROWLIMITEXCEPTION);
@@ -1062,16 +1064,16 @@
}
public void visit(Option obj) {
- List dep = obj.getDependentGroups();
- List notDep = obj.getNotDependentGroups();
+ List<String> dep = obj.getDependentGroups();
+ List<String> notDep = obj.getNotDependentGroups();
if (dep != null && !dep.isEmpty()
&& notDep != null && !notDep.isEmpty()) {
String groupName = null;
String notDepGroup = null;
- for (Iterator i = dep.iterator(); i.hasNext();) {
- groupName = (String)i.next();
- for (Iterator j = notDep.iterator(); j.hasNext();) {
- notDepGroup = (String)j.next();
+ for (Iterator<String> i = dep.iterator(); i.hasNext();) {
+ groupName = i.next();
+ for (Iterator<String> j = notDep.iterator(); j.hasNext();) {
+ notDepGroup = j.next();
if (notDepGroup.equalsIgnoreCase(groupName)) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.group_in_both_dep",
groupName), obj); //$NON-NLS-1$
return;
@@ -1428,9 +1430,46 @@
public void visit(WithQueryCommand obj) {
validateSubquery(obj);
}
+
+ public void visit(AlterView obj) {
+ try {
+ QueryResolver.validateProjectedSymbols(obj.getTarget(), getMetadata(),
obj.getDefinition());
+ } catch (QueryValidatorException e) {
+ handleValidationError(e.getMessage(), obj.getDefinition());
+ } catch (TeiidComponentException e) {
+ handleException(e);
+ }
+ }
- //TODO: it may be simplier to catch this in the parser
- private void validateSubquery(SubqueryContainer subQuery) {
+ @Override
+ public void visit(AlterProcedure obj) {
+ GroupSymbol gs = obj.getTarget();
+ try {
+ if (!gs.isProcedure() ||
!getMetadata().isVirtualModel(getMetadata().getModelID(gs.getMetadataID()))) {
+
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.not_a_procedure",
gs), gs); //$NON-NLS-1$
+ return;
+ }
+ StoredProcedureInfo info =
getMetadata().getStoredProcedureInfoForProcedure(gs.getName());
+ for (SPParameter param : info.getParameters()) {
+ if (param.getParameterType() == SPParameter.RESULT_SET) {
+ QueryResolver.validateProjectedSymbols(gs, param.getResultSetColumns(),
obj.getDefinition().getProjectedSymbols());
+ break;
+ }
+ }
+ } catch (QueryValidatorException e) {
+ handleValidationError(e.getMessage(), obj.getDefinition().getBlock());
+ } catch (TeiidComponentException e) {
+ handleException(e);
+ }
+ }
+
+ @Override
+ public void visit(AlterTrigger obj) {
+ validateGroupSupportsUpdate(obj.getTarget());
+ }
+
+ //TODO: it may be simpler to catch this in the parser
+ private void validateSubquery(SubqueryContainer<?> subQuery) {
if (subQuery.getCommand() instanceof Query &&
((Query)subQuery.getCommand()).getInto() != null) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.subquery_insert"),
subQuery.getCommand()); //$NON-NLS-1$
}
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-04-29 01:33:21
UTC (rev 3130)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-04-29 01:37:38
UTC (rev 3131)
@@ -491,23 +491,45 @@
QueryCommand command = null;
Block block = null;
TriggerAction triggerAction = null;
+ Token comment = null;
+ Table.TriggerOperation op = null;
}
{
<ALTER>
(
- (nonReserved("VIEW") target = id() <AS> command =
queryExpression(info))
+ (nonReserved("VIEW") target = id() <AS> { comment =
getToken(1).specialToken; } command = queryExpression(info))
{
+ if (comment != null) {
+ command.setCacheHint(getQueryCacheOption(comment.image));
+ }
+ AlterView alterView = new AlterView();
+ alterView.setTarget(new GroupSymbol(target));
+ alterView.setDefinition(command);
+ return alterView;
}
- | (<PROCEDURE> target = id() <AS> block = block(info))
+ | (<PROCEDURE> target = id() <AS> { comment = getToken(1).specialToken; }
block = block(info))
{
+ CreateUpdateProcedureCommand cup = new CreateUpdateProcedureCommand(block);
+ cup.setUpdateProcedure(false);
+ if (comment != null) {
+ cup.setCacheHint(getQueryCacheOption(comment.image));
+ }
+ AlterProcedure alterProc = new AlterProcedure();
+ alterProc.setTarget(new GroupSymbol(target));
+ alterProc.setDefinition(cup);
+ return alterProc;
}
- | (<TRIGGER> <ON> target = id() nonReserved("INSTEAD") <OF>
(<INSERT>|<UPDATE>|<DELETE>) <AS> triggerAction =
triggerAction(info))
+ | (<TRIGGER> <ON> target = id() nonReserved("INSTEAD") <OF>
+ (<INSERT> {op = Table.TriggerOperation.INSERT;} |<UPDATE> {op =
Table.TriggerOperation.UPDATE;}|<DELETE> {op = Table.TriggerOperation.DELETE;})
+ <AS> triggerAction = triggerAction(info))
{
+ AlterTrigger alterTrigger = new AlterTrigger();
+ alterTrigger.setTarget(new GroupSymbol(target));
+ alterTrigger.setDefinition(triggerAction);
+ alterTrigger.setOperation(op);
+ return alterTrigger;
}
)
- {
- return null;
- }
}
TriggerAction triggerAction(ParseInfo info) :
@@ -2733,23 +2755,11 @@
QueryCommand subquery(ParseInfo info) :
{
- Object[] result = null;
-}
-{
- result = subqueryAndHint(info)
- {
- return (QueryCommand)result[0];
- }
-}
-
-Object[] subqueryAndHint(ParseInfo info) :
-{
QueryCommand subquery = null;
StoredProcedure proc = null;
- Token lparen = null;
}
{
- lparen = <LPAREN>
+ <LPAREN>
( subquery = queryExpression(info) |
(
proc = storedProcedure(info, new StoredProcedure()) //deprecated
@@ -2760,6 +2770,19 @@
)
<RPAREN>
{
+ return subquery;
+ }
+}
+
+Object[] subqueryAndHint(ParseInfo info) :
+{
+ QueryCommand subquery = null;
+ Token lparen = null;
+}
+{
+ {lparen = getToken(1);}
+ subquery = subquery(info)
+ {
return new Object[] {subquery, getSubqueryHint(lparen)};
}
}
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-04-29 01:33:21
UTC (rev 3130)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-04-29 01:37:38
UTC (rev 3131)
@@ -668,6 +668,8 @@
SimpleQueryResolver.duplicate_with=Duplicate WITH clause item name {0}
SimpleQueryResolver.mismatched_with_columns=The number of WITH clause columns for item
{0} do not match the query expression
QueryResolver.invalid_xpath=Invalid xpath value: {0}
+QueryResolver.wrong_view_symbols=The definition for {0} does not have the correct number
of projected symbols. Expected {1}, but was {2}.
+QueryResolver.wrong_view_symbol_type=The definition for {0} has the wrong type for column
{1}. Expected {2}, but was {3}.
ResolveVariablesVisitor.reserved_word_for_temporary_used=Cursor names cannot begin with
"#" as that indicates the name of a temporary table: {0}.
SimpleQueryResolver.materialized_table_not_used=The query against {0} did not use
materialization table {1} due to the use of OPTION NOCACHE.
SimpleQueryResolver.cache_hint_used=Loading materialized view {1} for view {0} using
cache hint {2}.
@@ -907,4 +909,7 @@
FunctionMethods.not_array_value=Expected a java.sql.Array, or java array type, but got:
{0}
FunctionMethods.array_index=Array index out of range: {0}
-ArrayTableNode.conversion_error=Could not convert value for column: {0}
\ No newline at end of file
+ArrayTableNode.conversion_error=Could not convert value for column: {0}
+
+AlterResolver.not_a_view={0} is not a valid view.
+ValidationVisitor.not_a_procedure={0} is not a valid virtual procedure.
\ No newline at end of file
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -64,7 +64,7 @@
@Before public void setUp() throws Exception {
agds = new AutoGenDataService();
- DQPWorkContext context =
FakeMetadataFactory.buildWorkContext(RealMetadataFactory.exampleBQTCached());
+ DQPWorkContext context =
FakeMetadataFactory.buildWorkContext(RealMetadataFactory.createTransformationMetadata(RealMetadataFactory.exampleBQTCached().getMetadataStore(),
"bqt"));
context.getVDB().getModel("BQT3").setVisible(false); //$NON-NLS-1$
context.getVDB().getModel("VQT").setVisible(false); //$NON-NLS-1$
Modified:
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -104,7 +104,7 @@
MultiSourceMetadataWrapper wrapper = new MultiSourceMetadataWrapper(metadata,
multiSourceModels);
AnalysisRecord analysis = new AnalysisRecord(false, DEBUG);
- Command command = TestResolver.helpResolve(userSql, wrapper, analysis);
+ Command command = TestResolver.helpResolve(userSql, wrapper);
// Plan
command = QueryRewriter.rewrite(command, wrapper, null);
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -637,13 +637,13 @@
new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING });
List vm1a1e = FakeMetadataFactory.createElements(vm1a1,
new String[] { "e1", "sum_e2" }, //$NON-NLS-1$
//$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.LONG });
List vm1a2e = FakeMetadataFactory.createElements(vm1a2,
new String[] { "e1", "sum_e2" }, //$NON-NLS-1$
//$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.LONG });
List vm1a3e = FakeMetadataFactory.createElements(vm1a3,
new String[] { "sum_e2" }, //$NON-NLS-1$
- new String[] { DataTypeManager.DefaultDataTypes.INTEGER });
+ new String[] { DataTypeManager.DefaultDataTypes.LONG });
List vm1a4e = FakeMetadataFactory.createElements(vm1a4,
new String[] { "count" }, //$NON-NLS-1$
new String[] { DataTypeManager.DefaultDataTypes.INTEGER });
Modified:
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/TestAliasGenerator.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -45,7 +45,7 @@
String expected,
boolean aliasGroups,
boolean stripColumnAliases, QueryMetadataInterface metadata)
throws TeiidComponentException, TeiidProcessingException {
- Command command = TestResolver.helpResolve(sql, metadata, null);
+ Command command = TestResolver.helpResolve(sql, metadata);
command = QueryRewriter.rewrite(command, metadata, null);
command.acceptVisitor(new AliasGenerator(aliasGroups, stripColumnAliases));
assertEquals(expected, command.toString());
Added: trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java
(rev 0)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.parser;
+
+import static org.teiid.query.parser.TestParser.*;
+
+import org.junit.Test;
+import org.teiid.metadata.Table.TriggerOperation;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
+import org.teiid.query.sql.lang.QueryCommand;
+import org.teiid.query.sql.proc.TriggerAction;
+import org.teiid.query.sql.symbol.GroupSymbol;
+
+@SuppressWarnings("nls")
+public class TestParseAlter {
+
+ @Test public void testAlterView() throws Exception {
+ AlterView alterView = new AlterView();
+ alterView.setTarget(new GroupSymbol("x"));
+ alterView.setDefinition((QueryCommand)
QueryParser.getQueryParser().parseCommand("/*+ cache */ SELECT 1"));
+ helpTest("alter view x as /*+ cache */ select 1", "ALTER VIEW x AS\n/*+
cache */ SELECT 1", alterView);
+ }
+
+ @Test public void testAlterProc() throws Exception {
+ AlterView alterView = new AlterView();
+ alterView.setTarget(new GroupSymbol("x"));
+ alterView.setDefinition((QueryCommand)
QueryParser.getQueryParser().parseCommand("/*+ cache */ SELECT 1"));
+ helpTest("alter view x as /*+ cache */ select 1", "ALTER VIEW x AS\n/*+
cache */ SELECT 1", alterView);
+ }
+
+ @Test public void testAlterTrigger() throws Exception {
+ AlterTrigger alterTrigger = new AlterTrigger();
+ alterTrigger.setTarget(new GroupSymbol("x"));
+ alterTrigger.setOperation(TriggerOperation.UPDATE);
+ alterTrigger.setDefinition((TriggerAction)
QueryParser.getQueryParser().parseUpdateProcedure("for each row begin end"));
+ helpTest("alter trigger on x instead of update as for each row begin end",
"ALTER TRIGGER ON x INSTEAD OF UPDATE AS\nFOR EACH ROW\nBEGIN\nEND",
alterTrigger);
+ }
+
+}
Property changes on:
trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -128,8 +128,9 @@
} else if (command instanceof ProcedureContainer) {
group = ((ProcedureContainer) command).getGroup();
} else if ( command instanceof BatchedUpdateCommand ) {
- if ( command.getSubCommands().get(0) instanceof Update ) {
- group = ((Update)command.getSubCommands().get(0)).getGroup();
+ BatchedUpdateCommand buc = (BatchedUpdateCommand)command;
+ if ( buc.getUpdateCommands().get(0) instanceof Update ) {
+ group = ((Update)buc.getUpdateCommands().get(0)).getGroup();
}
if (this.recordingCommands) {
for ( Iterator<Command> it = ((BatchedUpdateCommand)
command).getUpdateCommands().iterator(); it.hasNext(); ) {
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -6168,15 +6168,11 @@
FakeMetadataObject v1 = FakeMetadataFactory.createVirtualModel("v1");
//$NON-NLS-1$
QueryNode n1 = new QueryNode("SELECT convert(a, integer) as c, b FROM
p1.t"); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vt1 =
FakeMetadataFactory.createVirtualGroup("v1.t1", v1, n1); //$NON-NLS-1$
- List vte1 = FakeMetadataFactory.createElements(vt1, new String[] {"c",
"b" }, new String[] { "string", "string" }); //$NON-NLS-1$
//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ List vte1 = FakeMetadataFactory.createElements(vt1, new String[] {"c",
"b" }, new String[] { "integer", "string" }); //$NON-NLS-1$
//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- QueryNode n2 = new QueryNode("SELECT convert(a, integer) as c, b FROM
p1.t"); //$NON-NLS-1$ //$NON-NLS-2$
- FakeMetadataObject vt2 =
FakeMetadataFactory.createVirtualGroup("v1.t2", v1, n2); //$NON-NLS-1$
- List vte2 = FakeMetadataFactory.createElements(vt2, new String[] {"c",
"b" }, new String[] { "string", "string" }); //$NON-NLS-1$
//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-
QueryNode n3 = new QueryNode("SELECT c, b FROM v1.t1 UNION ALL SELECT c, b
FROM v1.t1"); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vu1 =
FakeMetadataFactory.createVirtualGroup("v1.u1", v1, n3); //$NON-NLS-1$
- List vtu1 = FakeMetadataFactory.createElements(vu1, new String[] {"c",
"b" }, new String[] { "string", "string" }); //$NON-NLS-1$
//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ List vtu1 = FakeMetadataFactory.createElements(vu1, new String[] {"c",
"b" }, new String[] { "integer", "string" }); //$NON-NLS-1$
//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
FakeMetadataStore store = new FakeMetadataStore();
store.addObject(p1);
@@ -6185,8 +6181,6 @@
store.addObject(v1);
store.addObject(vt1);
store.addObjects(vte1);
- store.addObject(vt2);
- store.addObjects(vte2);
store.addObject(vu1);
store.addObjects(vtu1);
return new FakeMetadataFacade(store);
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestTriggerActions.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/processor/TestTriggerActions.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/processor/TestTriggerActions.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -59,7 +59,7 @@
CommandContext context = createCommandContext();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata, null), metadata, new DefaultCapabilitiesFinder(caps), context);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata), metadata, new DefaultCapabilitiesFinder(caps), context);
List[] expected = new List[] {Arrays.asList(1)};
helpProcess(plan, context, dm, expected);
}
@@ -78,7 +78,7 @@
FakeDataStore.addTable("pm1.g1", dm, metadata);
CommandContext context = createCommandContext();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata, null), metadata, new DefaultCapabilitiesFinder(caps), context);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata), metadata, new DefaultCapabilitiesFinder(caps), context);
List[] expected = new List[] {Arrays.asList(6)};
helpProcess(plan, context, dm, expected);
}
@@ -98,7 +98,7 @@
CommandContext context = createCommandContext();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata, null), metadata, new DefaultCapabilitiesFinder(caps), context);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata), metadata, new DefaultCapabilitiesFinder(caps), context);
List[] expected = new List[] {Arrays.asList(1)};
helpProcess(plan, context, dm, expected);
}
@@ -118,7 +118,7 @@
CommandContext context = createCommandContext();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata, null), metadata, new DefaultCapabilitiesFinder(caps), context);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata), metadata, new DefaultCapabilitiesFinder(caps), context);
List[] expected = new List[] {Arrays.asList(1)};
helpProcess(plan, context, dm, expected);
assertEquals("UPDATE pm1.g1 SET e2 = 5 WHERE e2 = 2",
dm.getQueries().get(0));
@@ -139,7 +139,7 @@
CommandContext context = createCommandContext();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata, null), metadata, new DefaultCapabilitiesFinder(caps), context);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql,
metadata), metadata, new DefaultCapabilitiesFinder(caps), context);
List[] expected = new List[] {Arrays.asList(1)};
helpProcess(plan, context, dm, expected);
assertEquals("UPDATE pm1.g1 SET e2 = 1 WHERE e2 = 2",
dm.getQueries().get(0));
Modified:
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestAccessNode.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestAccessNode.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestAccessNode.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -74,7 +74,7 @@
}
@Test public void testOpen_Defect16059() throws Exception {
- Query query = (Query)TestResolver.helpResolve("SELECT e1, e2 FROM pm1.g1 WHERE
e2 = 5 AND ? IS NULL", FakeMetadataFactory.example1Cached(), null); //$NON-NLS-1$
+ Query query = (Query)TestResolver.helpResolve("SELECT e1, e2 FROM pm1.g1 WHERE
e2 = 5 AND ? IS NULL", FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
IsNullCriteria nullCrit =
(IsNullCriteria)((CompoundCriteria)query.getCriteria()).getCriteria(1);
nullCrit.setExpression(new Constant(null));
@@ -82,7 +82,7 @@
}
@Test public void testOpen_Defect16059_2() throws Exception {
- Query query = (Query)TestResolver.helpResolve("SELECT e1, e2 FROM pm1.g1 WHERE
e2 = 5 AND ? IS NOT NULL", FakeMetadataFactory.example1Cached(), null);
//$NON-NLS-1$
+ Query query = (Query)TestResolver.helpResolve("SELECT e1, e2 FROM pm1.g1 WHERE
e2 = 5 AND ? IS NOT NULL", FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
IsNullCriteria nullCrit =
(IsNullCriteria)((CompoundCriteria)query.getCriteria()).getCriteria(1);
nullCrit.setExpression(new Constant(null));
@@ -92,7 +92,7 @@
@Test public void testExecCount()throws Exception{
// Setup
AccessNode node = new AccessNode(1);
- Query query = (Query)TestResolver.helpResolve("SELECT e1, e2 FROM pm1.g1 WHERE
e2 = 5", FakeMetadataFactory.example1Cached(), null); //$NON-NLS-1$
+ Query query = (Query)TestResolver.helpResolve("SELECT e1, e2 FROM pm1.g1 WHERE
e2 = 5", FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
node.setCommand(query);
CommandContext context = new CommandContext();
context.setProcessorID("processorID"); //$NON-NLS-1$
Modified:
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -161,7 +161,7 @@
}
} else if ( command instanceof BatchedUpdateCommand ){
BatchedUpdateCommand bu = (BatchedUpdateCommand)command;
- List batch = bu.getSubCommands();
+ List<Command> batch = bu.getUpdateCommands();
batchSize = batch.size();
assertEquals("Unexpected batch on call " + callCount,
expectedBatchSize, batchSize); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/processor/xml/TestXMLProcessor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -260,7 +260,7 @@
List rsElements12260 = FakeMetadataFactory.createElements(rs12260,
new String[] { "itemNum", "itemName",
"itemQuantity", "itemStatus", "numSuppliers" },
//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING });
//
======================================================================================================================
// ALTERNATE METADATA E (mapping class w/ Union)
Added: trunk/engine/src/test/java/org/teiid/query/resolver/TestAlterResolving.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestAlterResolving.java
(rev 0)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestAlterResolving.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -0,0 +1,64 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.resolver;
+
+import static org.junit.Assert.*;
+import static org.teiid.query.resolver.TestResolver.*;
+
+import org.junit.Test;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
+import org.teiid.query.sql.lang.Query;
+import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.unittest.RealMetadataFactory;
+
+@SuppressWarnings("nls")
+public class TestAlterResolving {
+
+ @Test public void testAlterView() {
+ AlterView alterView = (AlterView) helpResolve("alter view SmallA_2589 as select
2", RealMetadataFactory.exampleBQTCached());
+ assertNotNull(alterView.getTarget().getMetadataID());
+ }
+
+ @Test public void testAlterProcedure() {
+ AlterProcedure alterProc = (AlterProcedure) helpResolve("alter procedure MMSP5 as
begin select param1; end", RealMetadataFactory.exampleBQTCached());
+ assertNotNull(alterProc.getTarget().getMetadataID());
+ Query q = (Query)alterProc.getDefinition().getResultsCommand();
+ assertTrue(((ElementSymbol)q.getSelect().getSymbol(0)).isExternalReference());
+ }
+
+ @Test public void testAlterTriggerInsert() {
+ AlterTrigger alterTrigger = (AlterTrigger) helpResolve("alter trigger on
SmallA_2589 instead of insert as for each row select new.intkey;",
RealMetadataFactory.exampleBQTCached());
+ assertNotNull(alterTrigger.getTarget().getMetadataID());
+ }
+
+ @Test public void testAlterTriggerInsert_Invalid() {
+ helpResolveException("alter trigger on SmallA_2589 instead of insert as for each
row select old.intkey;", RealMetadataFactory.exampleBQTCached());
+ }
+
+ @Test public void testAlterView_Invalid() {
+ helpResolveException("alter view bqt1.SmallA as select 2",
RealMetadataFactory.exampleBQTCached());
+ }
+
+}
Property changes on:
trunk/engine/src/test/java/org/teiid/query/resolver/TestAlterResolving.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -51,6 +51,7 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.visitor.CommandCollectorVisitor;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.unittest.FakeMetadataFacade;
import org.teiid.query.unittest.FakeMetadataFactory;
@@ -66,7 +67,7 @@
FakeMetadataObject rs2 = FakeMetadataFactory.createResultSet("pm1.rs1",
pm1, new String[] { "e1" }, new String[] {
DataTypeManager.DefaultDataTypes.STRING }); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret",
1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2);
//$NON-NLS-1$
FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("in", 2,
ParameterInfo.IN, DataTypeManager.DefaultDataTypes.STRING, null); //$NON-NLS-1$
- QueryNode sq2n1 = new QueryNode(procedure); //$NON-NLS-1$
+ QueryNode sq2n1 = new QueryNode(procedure);
FakeMetadataObject sq1 =
FakeMetadataFactory.createVirtualProcedure("pm1.sq1", pm1, Arrays.asList(new
FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1); //$NON-NLS-1$
metadata.getStore().addObject(rs2);
@@ -117,13 +118,13 @@
assertNull(tempIDs.get("LOOPCURSOR")); //$NON-NLS-1$
assertNull(tempIDs.get("LOOPCURSOR2")); //$NON-NLS-1$
- Command subCommand = command.getSubCommands().get(0);
+ Command subCommand = CommandCollectorVisitor.getCommands(command).get(0);
tempIDs = subCommand.getTemporaryMetadata();
assertNotNull(tempIDs);
assertNull(tempIDs.get("LOOPCURSOR")); //$NON-NLS-1$
assertNull(tempIDs.get("LOOPCURSOR2")); //$NON-NLS-1$
- subCommand = command.getSubCommands().get(1);
+ subCommand = CommandCollectorVisitor.getCommands(command).get(1);
tempIDs = subCommand.getTemporaryMetadata();
assertNotNull(tempIDs);
assertNotNull(tempIDs.get("LOOPCURSOR")); //$NON-NLS-1$
@@ -1054,7 +1055,7 @@
procedure = procedure + "VARIABLES.NLEVELS = SELECT COUNT(*) FROM (SELECT
oi.e1 AS Col1, oi.e2 AS Col2, oi.e3 FROM pm1.g2 AS oi) AS TOBJ, pm2.g2 AS TModel WHERE
TModel.e3 = TOBJ.e3;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
- TestResolver.helpResolve(procedure, FakeMetadataFactory.example1Cached(), null);
+ TestResolver.helpResolve(procedure, FakeMetadataFactory.example1Cached());
}
@Test public void testIssue174102() throws Exception {
@@ -1065,7 +1066,7 @@
procedure = procedure + "EXECUTE STRING ('SELECT e1 FROM pm1.sq2 '
|| crit ) AS e1 string INTO #TTable;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
- TestResolver.helpResolve(procedure, FakeMetadataFactory.example1Cached(), null);
+ TestResolver.helpResolve(procedure, FakeMetadataFactory.example1Cached());
}
// Address Issue 174519.
@@ -1573,7 +1574,7 @@
.append("\n y = '1';") //$NON-NLS-1$
.append("\nEND"); //$NON-NLS-1$
- TestResolver.helpResolve(proc.toString(), FakeMetadataFactory.example1Cached(),
null);
+ TestResolver.helpResolve(proc.toString(), FakeMetadataFactory.example1Cached());
}
@Test public void testVDBQualified() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -87,6 +87,7 @@
import org.teiid.query.sql.symbol.Reference;
import org.teiid.query.sql.symbol.SelectSymbol;
import org.teiid.query.sql.symbol.SingleElementSymbol;
+import org.teiid.query.sql.visitor.CommandCollectorVisitor;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
import org.teiid.query.sql.visitor.FunctionCollectorVisitor;
import org.teiid.query.sql.visitor.GroupCollectorVisitor;
@@ -157,7 +158,7 @@
return variables;
}
- public static Command helpResolve(String sql, QueryMetadataInterface queryMetadata,
AnalysisRecord analysis){
+ public static Command helpResolve(String sql, QueryMetadataInterface queryMetadata){
return helpResolve(helpParse(sql), queryMetadata);
}
@@ -1115,7 +1116,7 @@
"WHERE (y.IntKey >= 10) AND (y.IntKey < 30) " +
//$NON-NLS-1$
"ORDER BY IntKey, FloatNum"; //$NON-NLS-1$
- helpResolve(sql, FakeMetadataFactory.exampleBQTCached(), null);
+ helpResolve(sql, FakeMetadataFactory.exampleBQTCached());
}
@Test public void testSubQueryINClause1(){
@@ -2111,7 +2112,7 @@
QueryMetadataInterface metadata = FakeMetadataFactory.exampleBQTCached();
AnalysisRecord analysis = AnalysisRecord.createNonRecordingRecord();
- Query query = (Query) helpResolve(userSql, metadata, analysis);
+ Query query = (Query) helpResolve(userSql, metadata);
From from = query.getFrom();
Collection fromClauses = from.getClauses();
SPParameter params[] = new SPParameter[2];
@@ -2707,7 +2708,7 @@
@Test public void testUpdateSetClauseReferenceType() {
String sql = "UPDATE pm1.g1 SET pm1.g1.e1 = 1, pm1.g1.e2 = ?;";
//$NON-NLS-1$
- Update update = (Update)helpResolve(sql, FakeMetadataFactory.example1Cached(),
null);
+ Update update = (Update)helpResolve(sql, FakeMetadataFactory.example1Cached());
Expression ref = update.getChangeList().getClauses().get(1).getValue();
assertTrue(ref instanceof Reference);
@@ -2722,21 +2723,21 @@
@Test public void testReferenceInSelect() {
String sql = "select ?, e1 from pm1.g1"; //$NON-NLS-1$
- Query command = (Query)helpResolve(sql, FakeMetadataFactory.example1Cached(),
null);
- assertEquals(DataTypeManager.DefaultDataClasses.STRING,
((SingleElementSymbol)command.getProjectedSymbols().get(0)).getType());
+ Query command = (Query)helpResolve(sql, FakeMetadataFactory.example1Cached());
+ assertEquals(DataTypeManager.DefaultDataClasses.STRING,
command.getProjectedSymbols().get(0).getType());
}
@Test public void testReferenceInSelect1() {
String sql = "select convert(?, integer), e1 from pm1.g1"; //$NON-NLS-1$
- Query command = (Query)helpResolve(sql, FakeMetadataFactory.example1Cached(),
null);
- assertEquals(DataTypeManager.DefaultDataClasses.INTEGER,
((SingleElementSymbol)command.getProjectedSymbols().get(0)).getType());
+ Query command = (Query)helpResolve(sql, FakeMetadataFactory.example1Cached());
+ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER,
command.getProjectedSymbols().get(0).getType());
}
@Test public void testUnionWithObjectTypeConversion() {
String sql = "select convert(null, xml) from pm1.g1 union all select 1";
//$NON-NLS-1$
- SetQuery query = (SetQuery)helpResolve(sql, FakeMetadataFactory.example1Cached(),
null);
+ SetQuery query = (SetQuery)helpResolve(sql, FakeMetadataFactory.example1Cached());
assertEquals(DataTypeManager.DefaultDataClasses.OBJECT,
((SingleElementSymbol)query.getProjectedSymbols().get(0)).getType());
}
@@ -2745,7 +2746,7 @@
SetQuery command = (SetQuery)helpResolve(sql);
- assertEquals(1, command.getSubCommands().size());
+ assertEquals(1, CommandCollectorVisitor.getCommands(command).size());
}
@Test public void testOrderBy_J658a() {
Query resolvedQuery = (Query) helpResolve("SELECT pm1.g1.e1, e2, e3 as x,
(5+2) as y FROM pm1.g1 ORDER BY e3"); //$NON-NLS-1$
@@ -2779,7 +2780,7 @@
}
@Test public void testSPOutParamWithExec() {
- StoredProcedure proc = (StoredProcedure)helpResolve("exec pm2.spTest8(1)",
FakeMetadataFactory.exampleBQTCached(), null);
+ StoredProcedure proc = (StoredProcedure)helpResolve("exec pm2.spTest8(1)",
FakeMetadataFactory.exampleBQTCached());
assertEquals(2, proc.getProjectedSymbols().size());
}
@@ -2788,7 +2789,7 @@
* That hack is handled by the PreparedStatementRequest
*/
@Test public void testSPOutParamWithCallableStatement() {
- StoredProcedure proc = (StoredProcedure)helpResolve("{call
pm2.spTest8(1)}", FakeMetadataFactory.exampleBQTCached(), null);
+ StoredProcedure proc = (StoredProcedure)helpResolve("{call
pm2.spTest8(1)}", FakeMetadataFactory.exampleBQTCached());
assertEquals(3, proc.getProjectedSymbols().size());
}
@@ -2797,12 +2798,12 @@
}
@Test public void testProcRelationalWithOutParam() {
- Query proc = (Query)helpResolve("select * from pm2.spTest8 where inkey =
1", FakeMetadataFactory.exampleBQTCached(), null);
+ Query proc = (Query)helpResolve("select * from pm2.spTest8 where inkey =
1", FakeMetadataFactory.exampleBQTCached());
assertEquals(3, proc.getProjectedSymbols().size());
}
@Test public void testSPReturnParamWithNoResultSet() {
- StoredProcedure proc = (StoredProcedure)helpResolve("exec pm4.spTest9(1)",
FakeMetadataFactory.exampleBQTCached(), null);
+ StoredProcedure proc = (StoredProcedure)helpResolve("exec pm4.spTest9(1)",
FakeMetadataFactory.exampleBQTCached());
assertEquals(1, proc.getProjectedSymbols().size());
}
@@ -2954,7 +2955,7 @@
//return should be first, then out
@Test public void testParamOrder() {
- Query resolvedQuery = (Query)helpResolve("SELECT * FROM (exec
pm4.spRetOut()) as a", RealMetadataFactory.exampleBQTCached(), null); //$NON-NLS-1$
+ Query resolvedQuery = (Query)helpResolve("SELECT * FROM (exec
pm4.spRetOut()) as a", RealMetadataFactory.exampleBQTCached()); //$NON-NLS-1$
assertEquals("a.ret",
resolvedQuery.getProjectedSymbols().get(0).getName());
}
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-04-29
01:33:21 UTC (rev 3130)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -24,7 +24,6 @@
import junit.framework.TestCase;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.sql.lang.Command;
@@ -42,7 +41,7 @@
public class TestXMLResolver extends TestCase {
public Command helpResolve(String sql) {
- Command cmd = TestResolver.helpResolve(sql, FakeMetadataFactory.example1Cached(),
AnalysisRecord.createNonRecordingRecord());
+ Command cmd = TestResolver.helpResolve(sql,
FakeMetadataFactory.example1Cached());
ResolverUtil.fullyQualifyElements(cmd);
return cmd;
}
Modified:
trunk/engine/src/test/java/org/teiid/query/sql/proc/TestCreateUpdateProcedureCommand.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/sql/proc/TestCreateUpdateProcedureCommand.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/sql/proc/TestCreateUpdateProcedureCommand.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -200,7 +200,7 @@
public void testProjectedSymbols() {
CreateUpdateProcedureCommand cupc = new CreateUpdateProcedureCommand();
cupc.setUpdateProcedure(false);
- StoredProcedure sp = (StoredProcedure)TestResolver.helpResolve("call
TEIIDSP9(p1=>1, p2=>?)", RealMetadataFactory.exampleBQTCached(), null);
+ StoredProcedure sp = (StoredProcedure)TestResolver.helpResolve("call
TEIIDSP9(p1=>1, p2=>?)", RealMetadataFactory.exampleBQTCached());
sp.setCallableStatement(true);
cupc.setResultsCommand(sp);
assertEquals(1, cupc.getProjectedSymbols().size());
Modified:
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestEvaluatableVisitor.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestEvaluatableVisitor.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestEvaluatableVisitor.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -33,7 +33,7 @@
public class TestEvaluatableVisitor {
@Test public void testNestedNeedsEvaluation() throws Exception {
- Query command = (Query)TestResolver.helpResolve("select * from pm1.g1 where e1 in
(select e1 from pm1.g2 where e2 = ?)", FakeMetadataFactory.example1Cached(), null);
//$NON-NLS-1$
+ Query command = (Query)TestResolver.helpResolve("select * from pm1.g1 where e1 in
(select e1 from pm1.g2 where e2 = ?)", FakeMetadataFactory.example1Cached());
//$NON-NLS-1$
assertTrue(EvaluatableVisitor.needsProcessingEvaluation(command));
}
Modified: trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -492,22 +492,22 @@
new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN,
DataTypeManager.DefaultDataTypes.DOUBLE, DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER });
List vm1g12e = createElements(vm1g12,
new String[] { "e1", "e2", "e3", "e4"
}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN,
DataTypeManager.DefaultDataTypes.DOUBLE });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.DATE, DataTypeManager.DefaultDataTypes.TIME,
DataTypeManager.DefaultDataTypes.TIMESTAMP });
List vm1g13e = createElements(vm1g13,
new String[] { "e1", "e2", "e3", "e4"
}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN,
DataTypeManager.DefaultDataTypes.DOUBLE });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.DATE, DataTypeManager.DefaultDataTypes.TIME,
DataTypeManager.DefaultDataTypes.TIMESTAMP });
List vm1g14e = createElements(vm1g14,
new String[] { "e1", "e2", "e3", "e4"
}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN,
DataTypeManager.DefaultDataTypes.DOUBLE });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.DATE, DataTypeManager.DefaultDataTypes.TIME,
DataTypeManager.DefaultDataTypes.TIMESTAMP });
List vm1g15e = createElements(vm1g15,
new String[] { "e1", "x" }, //$NON-NLS-1$ //$NON-NLS-2$
new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING });
List vm1g16e = createElements(vm1g16,
new String[] { "e", "e2" }, //$NON-NLS-1$ //$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.DATE });
List vm1g17e = createElements(vm1g17,
new String[] { "e1", "e2" }, //$NON-NLS-1$ //$NON-NLS-2$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER });
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.DATE });
List vm1g18e = createElements(vm1g18,
new String[] { "x" }, //$NON-NLS-1$
new String[] { DataTypeManager.DefaultDataTypes.DOUBLE });
@@ -1083,7 +1083,7 @@
FakeMetadataObject vm1g35 = createVirtualGroup("vm1.g35", vm1, vm1g35n1);
//$NON-NLS-1$
FakeMetadataObject vm1g35e1 =
FakeMetadataFactory.createElement("vm1.g35.e1", vm1g35,
DataTypeManager.DefaultDataTypes.STRING, 1); //$NON-NLS-1$
vm1g35e1.putProperty(FakeMetadataObject.Props.SELECT, Boolean.FALSE);
- FakeMetadataObject vm1g35e2 =
FakeMetadataFactory.createElement("vm1.g35.e2", vm1g35,
DataTypeManager.DefaultDataTypes.STRING, 2); //$NON-NLS-1$
+ FakeMetadataObject vm1g35e2 =
FakeMetadataFactory.createElement("vm1.g35.e2", vm1g35,
DataTypeManager.DefaultDataTypes.INTEGER, 2); //$NON-NLS-1$
FakeMetadataObject vsprs36 = createResultSet("pm1.vsprs36", pm1, new
String[] { "x" }, new String[] { DataTypeManager.DefaultDataTypes.INTEGER });
//$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vsp36p1 = createParameter("ret", 1,
ParameterInfo.RESULT_SET, null, vsprs36); //$NON-NLS-1$
@@ -2432,11 +2432,11 @@
List rsOrdersElements = FakeMetadataFactory.createElements(rsOrders,
new String[] { "orderNum", "orderDate",
"orderQty", "orderStatus", "itemFK", "supplierFK"
}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,
DataTypeManager.DefaultDataTypes.STRING});
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING});
List rsEmployeesElements = FakeMetadataFactory.createElements(rsEmployees,
new String[] { "employeeNum", "firstName",
"lastName", "supervisorNum", "specializesInItemNum",
"supplierNumFK" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
//$NON-NLS-5$ //$NON-NLS-6$
- new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER,
DataTypeManager.DefaultDataTypes.STRING});
+ new String[] { DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.STRING});
// MAPPING DOC
======================================================================
MappingDocument doc = new MappingDocument(true);
Added: trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java
(rev 0)
+++
trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.validator;
+
+import org.junit.Test;
+import org.teiid.query.unittest.RealMetadataFactory;
+
+@SuppressWarnings("nls")
+public class TestAlterValidation {
+
+ @Test public void testValidateAlterView() {
+ TestValidator.helpValidate("alter view SmallA_2589 as select 2", new String[]
{"SELECT 2"}, RealMetadataFactory.exampleBQTCached());
+ TestValidator.helpValidate("alter view Defect15355 as select 'a', 1",
new String[] {"SELECT 'a', 1"},
RealMetadataFactory.exampleBQTCached());
+
+ TestValidator.helpValidate("alter view SmallA_2589 as select * from
bqt1.smalla", new String[] {}, RealMetadataFactory.exampleBQTCached());
+ }
+
+ @Test public void testValidateAlterTrigger() {
+ TestValidator.helpValidate("alter trigger on SmallA_2589 instead of insert as for
each row select 1;", new String[] {"SmallA_2589"},
RealMetadataFactory.exampleBQTCached());
+ }
+
+ @Test public void testValidateAlterProcedure() {
+ TestValidator.helpValidate("alter procedure spTest8a as begin select 1; end",
new String[] {"spTest8a"}, RealMetadataFactory.exampleBQTCached());
+ TestValidator.helpValidate("alter procedure MMSP1 as begin select 1; end",
new String[] {"BEGIN\nSELECT 1;\nEND"},
RealMetadataFactory.exampleBQTCached());
+ }
+
+}
Property changes on:
trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2011-04-29 01:33:21
UTC (rev 3130)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2011-04-29 01:37:38
UTC (rev 3131)
@@ -53,7 +53,6 @@
import org.teiid.metadata.Schema;
import org.teiid.metadata.Table;
import org.teiid.metadata.TableStats;
-import org.teiid.metadata.MetadataRepository.TriggerOperation;
import org.teiid.query.function.SystemFunctionManager;
import org.teiid.query.metadata.TransformationMetadata.Resource;
import org.teiid.runtime.RuntimePlugin;
@@ -133,15 +132,15 @@
t.setSelectTransformation(def);
}
if (t.supportsUpdate()) {
- def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t,
TriggerOperation.INSERT);
+ def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t,
Table.TriggerOperation.INSERT);
if (def != null) {
t.setInsertPlan(def);
}
- def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t,
TriggerOperation.UPDATE);
+ def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t,
Table.TriggerOperation.UPDATE);
if (def != null) {
t.setUpdatePlan(def);
}
- def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t,
TriggerOperation.DELETE);
+ def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t,
Table.TriggerOperation.DELETE);
if (def != null) {
t.setDeletePlan(def);
}
Modified:
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java
===================================================================
---
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java 2011-04-29
01:33:21 UTC (rev 3130)
+++
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java 2011-04-29
01:37:38 UTC (rev 3131)
@@ -39,7 +39,7 @@
import org.teiid.metadata.MetadataRepository;
import org.teiid.metadata.Procedure;
import org.teiid.metadata.Table;
-import org.teiid.metadata.MetadataRepository.TriggerOperation;
+import org.teiid.metadata.Table.TriggerOperation;
@SuppressWarnings("nls")
public class TestMetadataUpdates {
@@ -72,7 +72,7 @@
return null;
}
});
- Mockito.stub(repo.getInsteadOfTriggerDefinition(Mockito.anyString(),
Mockito.anyInt(), (Table)Mockito.anyObject(), (TriggerOperation)
Mockito.anyObject())).toAnswer(new Answer<String>() {
+ Mockito.stub(repo.getInsteadOfTriggerDefinition(Mockito.anyString(),
Mockito.anyInt(), (Table)Mockito.anyObject(), (Table.TriggerOperation)
Mockito.anyObject())).toAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
return "for each row select 1/0; begin end";