teiid SVN: r1888 - in trunk/engine/src: test/java/com/metamatrix/query/optimizer and 1 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-03-02 22:29:06 -0500 (Tue, 02 Mar 2010)
New Revision: 1888
Modified:
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleAssignOutputElements.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleMergeVirtual.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java
trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java
Log:
TEIID-1007 enhancing the rulemergevirtual logic to check for columns used in a group by clause
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleAssignOutputElements.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleAssignOutputElements.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleAssignOutputElements.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -162,7 +162,26 @@
case NodeConstants.Types.SOURCE: {
outputElements = (List<SingleElementSymbol>)determineSourceOutput(root, outputElements);
root.setProperty(NodeConstants.Info.OUTPUT_COLS, outputElements);
- assignOutputElements(root.getFirstChild(), filterVirtualElements(root, outputElements, metadata), metadata, capFinder, rules, analysisRecord, context);
+ List<SingleElementSymbol> childElements = filterVirtualElements(root, outputElements, metadata);
+ SymbolMap symbolMap = (SymbolMap)root.getProperty(NodeConstants.Info.SYMBOL_MAP);
+ int size = symbolMap.asMap().size();
+ symbolMap.asUpdatableMap().keySet().retainAll(outputElements);
+ //if we have removed projected symbols, then we need to update the sort columns
+ if (size > outputElements.size()) {
+ PlanNode sortNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.SORT, NodeConstants.Types.PROJECT);
+ if (sortNode != null && !sortNode.hasBooleanProperty(NodeConstants.Info.UNRELATED_SORT)) {
+ List<Expression> symbolOrder = symbolMap.getValues();
+ OrderBy elements = (OrderBy) sortNode.getProperty(NodeConstants.Info.SORT_ORDER);
+ for (OrderByItem item : elements.getOrderByItems()) {
+ int position = symbolOrder.indexOf(SymbolMap.getExpression(item.getSymbol()));
+ item.setExpressionPosition(position);
+ if (position == -1) {
+ sortNode.setProperty(NodeConstants.Info.UNRELATED_SORT, true);
+ }
+ }
+ }
+ }
+ assignOutputElements(root.getFirstChild(), childElements, metadata, capFinder, rules, analysisRecord, context);
break;
}
case NodeConstants.Types.SET_OP: {
@@ -228,31 +247,7 @@
SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP);
return symbolMap.getKeys();
}
- PlanNode limit = NodeEditor.findNodePreOrder(root, NodeConstants.Types.TUPLE_LIMIT, NodeConstants.Types.PROJECT);
- if (limit == null) {
- return outputElements;
- }
- //reset the output elements to be the output columns + what's required by the sort
- PlanNode sort = NodeEditor.findNodePreOrder(limit, NodeConstants.Types.SORT, NodeConstants.Types.PROJECT);
- if (sort == null) {
- return outputElements;
- }
- OrderBy sortOrder = (OrderBy)sort.getProperty(NodeConstants.Info.SORT_ORDER);
- List<SingleElementSymbol> topCols = FrameUtil.findTopCols(sort);
-
- SymbolMap symbolMap = (SymbolMap)root.getProperty(NodeConstants.Info.SYMBOL_MAP);
-
- List<ElementSymbol> symbolOrder = symbolMap.getKeys();
-
- for (OrderByItem item : sortOrder.getOrderByItems()) {
- final Expression expr = item.getSymbol();
- int index = topCols.indexOf(expr);
- ElementSymbol symbol = symbolOrder.get(index);
- if (!outputElements.contains(symbol)) {
- outputElements.add(symbol);
- }
- }
- return outputElements;
+ return outputElements;
}
/**
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleMergeVirtual.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleMergeVirtual.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleMergeVirtual.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -133,15 +133,20 @@
}
PlanNode parentGroup = NodeEditor.findParent(frame, NodeConstants.Types.GROUP, NodeConstants.Types.SOURCE);
+ List<SingleElementSymbol> groupCols = null;
+ if (parentGroup != null) {
+ groupCols = (List<SingleElementSymbol>)parentGroup.getProperty(NodeConstants.Info.GROUP_COLS);
+ }
- if (!checkProjectedSymbols(projectNode, virtualGroup, parentJoin, parentGroup, metadata)) {
+ SymbolMap symbolMap = (SymbolMap)frame.getProperty(NodeConstants.Info.SYMBOL_MAP);
+
+ if (!checkProjectedSymbols(projectNode, virtualGroup, parentJoin, groupCols, symbolMap, metadata)) {
return root;
}
// Otherwise merge should work
// Convert parent frame before merge
- SymbolMap symbolMap = (SymbolMap)frame.getProperty(NodeConstants.Info.SYMBOL_MAP);
FrameUtil.convertFrame(frame, virtualGroup, FrameUtil.findJoinSourceNode(projectNode).getGroups(), symbolMap.asMap(), metadata);
PlanNode parentBottom = frame.getParent();
@@ -195,7 +200,7 @@
return root;
}
- List<? extends SingleElementSymbol> requiredElements = RuleAssignOutputElements.determineSourceOutput(frame, new ArrayList<SingleElementSymbol>());
+ List<? extends SingleElementSymbol> requiredElements = getNecessaryOutput(frame);
List<SingleElementSymbol> selectSymbols = (List<SingleElementSymbol>)parentProject.getProperty(NodeConstants.Info.PROJECT_COLS);
// check that it only performs simple projection and that all required symbols are projected
@@ -267,6 +272,42 @@
return root;
}
+
+ private static List<? extends SingleElementSymbol> getNecessaryOutput(PlanNode root) {
+ List<SingleElementSymbol> outputElements = new ArrayList<SingleElementSymbol>();
+ List<? extends SingleElementSymbol> result = RuleAssignOutputElements.determineSourceOutput(root, outputElements);
+ if (!result.isEmpty()) {
+ return result;
+ }
+ PlanNode limit = NodeEditor.findNodePreOrder(root, NodeConstants.Types.TUPLE_LIMIT, NodeConstants.Types.PROJECT);
+ if (limit == null) {
+ return outputElements;
+ }
+ //reset the output elements to be the output columns + what's required by the sort
+ PlanNode sort = NodeEditor.findNodePreOrder(limit, NodeConstants.Types.SORT, NodeConstants.Types.PROJECT);
+ if (sort == null) {
+ return outputElements;
+ }
+ OrderBy sortOrder = (OrderBy)sort.getProperty(NodeConstants.Info.SORT_ORDER);
+ List<SingleElementSymbol> topCols = FrameUtil.findTopCols(sort);
+
+ SymbolMap symbolMap = (SymbolMap)root.getProperty(NodeConstants.Info.SYMBOL_MAP);
+
+ List<ElementSymbol> symbolOrder = symbolMap.getKeys();
+
+ for (OrderByItem item : sortOrder.getOrderByItems()) {
+ final Expression expr = item.getSymbol();
+ int index = topCols.indexOf(expr);
+ if (index < 0) {
+ continue;
+ }
+ ElementSymbol symbol = symbolOrder.get(index);
+ if (!outputElements.contains(symbol)) {
+ outputElements.add(symbol);
+ }
+ }
+ return outputElements;
+ }
/**
* Check to ensure that we are not projecting a subquery or null dependent expressions
@@ -274,7 +315,8 @@
private static boolean checkProjectedSymbols(PlanNode projectNode,
GroupSymbol virtualGroup,
PlanNode parentJoin,
- PlanNode parentGroup,
+ List<SingleElementSymbol> parentGroupingCols,
+ SymbolMap symbolMap,
QueryMetadataInterface metadata) {
List<SingleElementSymbol> selectSymbols = (List<SingleElementSymbol>)projectNode.getProperty(NodeConstants.Info.PROJECT_COLS);
@@ -302,7 +344,9 @@
}
//TODO: in each of the cases below, check to see if the offending projected symbol is actually used in the upper frame
- for (SingleElementSymbol symbol : selectSymbols) {
+ List<ElementSymbol> virtualElements = symbolMap.getKeys();
+ for (int i = 0; i < selectSymbols.size(); i++) {
+ SingleElementSymbol symbol = selectSymbols.get(i);
Collection scalarSubqueries = ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(symbol);
if (!scalarSubqueries.isEmpty()) {
return false;
@@ -310,7 +354,7 @@
if (checkForNullDependent && JoinUtil.isNullDependent(metadata, groups, SymbolMap.getExpression(symbol))) {
return false;
}
- if (parentGroup != null && !(SymbolMap.getExpression(symbol) instanceof SingleElementSymbol)) {
+ if (parentGroupingCols != null && !(SymbolMap.getExpression(symbol) instanceof SingleElementSymbol) && parentGroupingCols.contains(virtualElements.get(i))) {
return false;
}
// TEIID-16: We do not want to merge a non-deterministic scalar function
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -205,7 +205,7 @@
0, // MergeJoinStrategy
0, // Null
0, // PlanExecution
- 2, // Project
+ 1, // Project
0, // Select
0, // Sort
0 // UnionAll
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -865,7 +865,7 @@
public void testSortWithLimitInlineView() {
String sql = "select e1 from (select pm1.g1.e1, pm1.g1.e2 from pm1.g1 order by pm1.g1.e1, pm1.g1.e2 limit 1) x"; //$NON-NLS-1$
- ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(), new String[] {"SELECT g_0.e1 AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0, c_1"}); //$NON-NLS-1$
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(), new String[] {"SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0, g_0.e2"}); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -287,7 +287,7 @@
@Test public void testOptionalJoinWithNestedOrderBy() {
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT pm1.g3.e1 FROM pm1.g3 inner join (select pm1.g2.e1, pm1.g1.e2 as y from /* optional */ pm1.g1 inner join pm1.g2 on pm1.g1.e1 = pm1.g2.e1 order by pm1.g2.e1 limit 10000) AS x on pm1.g3.e2=x.y", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
- new String[] {"SELECT g_0.e2 AS c_0, g_0.e1 AS c_1 FROM pm1.g3 AS g_0 ORDER BY c_0", "SELECT g_0.e2 AS c_0, g_1.e1 AS c_1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE g_0.e1 = g_1.e1 ORDER BY c_1"} ); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.e2 AS c_0, g_0.e1 AS c_1 FROM pm1.g3 AS g_0 ORDER BY c_0", "SELECT g_0.e2 AS c_0 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE g_0.e1 = g_1.e1 ORDER BY g_1.e1"} ); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -22,11 +22,13 @@
package com.metamatrix.query.optimizer;
+import static junit.framework.Assert.*;
+
import org.junit.Test;
-import static junit.framework.Assert.*;
-
+import com.metamatrix.query.optimizer.TestOptimizer.ComparisonMode;
import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
+import com.metamatrix.query.optimizer.capabilities.DefaultCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
import com.metamatrix.query.processor.ProcessorPlan;
@@ -303,5 +305,16 @@
SortNode node = (SortNode)plan.getRootNode();
assertTrue("Alias was not accounted for in sort node", node.getElements().containsAll(node.getSortElements())); //$NON-NLS-1$
}
+
+ @Test public void testMergeImplicitGroupBy() throws Exception {
+ BasicSourceCapabilities caps = TestAggregatePushdown.getAggregateCapabilities();
+ caps.setFunctionSupport("+", true); //$NON-NLS-1$
+ ProcessorPlan plan = TestOptimizer.helpPlan("SELECT x FROM (SELECT min(y), max(x) as x FROM (select e1 x, e2 + 1 y from pm1.g1) a) AS b", //$NON-NLS-1$
+ FakeMetadataFactory.example1Cached(), null, new DefaultCapabilitiesFinder(caps),
+ new String[] {
+ "SELECT MAX(g_0.e1) FROM pm1.g1 AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+
+ TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
+ }
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java 2010-03-02 23:23:00 UTC (rev 1887)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java 2010-03-03 03:29:06 UTC (rev 1888)
@@ -6971,7 +6971,26 @@
sampleData1(manager);
helpProcess(plan, manager, expected);
}
+
+ /**
+ * A more direct test of 1, where the nested order by is unrelated
+ */
+ @Test public void testSortWithLimit3() {
+ String sql = "select c from (select pm1.g1.e3 c from pm1.g1 order by pm1.g1.e2 limit 1) x"; //$NON-NLS-1$
+
+ FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql), metadata, TestOptimizer.getGenericFinder());
+
+ List[] expected = new List[] {
+ Arrays.asList(new Object[] { Boolean.FALSE }),
+ };
+ FakeDataManager manager = new FakeDataManager();
+ sampleData1(manager);
+ helpProcess(plan, manager, expected);
+ }
+
@Test public void testCountWithHaving() {
String sql = "select e1, count(*) from pm1.g1 group by e1 having count(*) > 1"; //$NON-NLS-1$
15 years
teiid SVN: r1887 - trunk/test-integration/db/src/main/java/org/teiid/test/client.
by teiid-commits@lists.jboss.org
Author: vhalbert(a)redhat.com
Date: 2010-03-02 18:23:00 -0500 (Tue, 02 Mar 2010)
New Revision: 1887
Modified:
trunk/test-integration/db/src/main/java/org/teiid/test/client/TestResultsSummary.java
Log:
Teiid-773 - added time totals to the summary report
Modified: trunk/test-integration/db/src/main/java/org/teiid/test/client/TestResultsSummary.java
===================================================================
--- trunk/test-integration/db/src/main/java/org/teiid/test/client/TestResultsSummary.java 2010-03-02 14:32:21 UTC (rev 1886)
+++ trunk/test-integration/db/src/main/java/org/teiid/test/client/TestResultsSummary.java 2010-03-02 23:23:00 UTC (rev 1887)
@@ -49,6 +49,7 @@
private static final SimpleDateFormat FILE_NAME_DATE_FORMATER = new SimpleDateFormat(
"yyyyMMdd_HHmmss"); //$NON-NLS-1$
+
private static final String NL = System.getProperty("line.separator"); //$NON-NLS-1$
// totals for scenario
@@ -57,6 +58,7 @@
private int total_pass = 0;
private int total_fail = 0;
private int total_querysets = 0;
+ private long total_seconds = 0;
private List<String> failed_queries = new ArrayList<String>();
private List<String> query_sets = new ArrayList<String>(10);
@@ -144,14 +146,21 @@
}
private void printQueryTestResults(PrintStream outputStream,
- long testStartTS, long endTS, int numberOfClients,
+ Date testStartTS, Date endTS, Date length, int numberOfClients,
SimpleDateFormat formatter, Collection results) {
outputStream.println("Query Test Results [" + this.resultMode + "]"); //$NON-NLS-1$
outputStream.println("=================="); //$NON-NLS-1$
- outputStream.println("Start Time: " + new Date(testStartTS)); //$NON-NLS-1$
- outputStream.println("End Time: " + new Date(endTS)); //$NON-NLS-1$
+ outputStream.println("Start Time: " + testStartTS); //$NON-NLS-1$
+ outputStream.println("End Time: " + endTS); //$NON-NLS-1$
outputStream
- .println("Elapsed Time: " + ((endTS - testStartTS) / 1000) + " seconds"); //$NON-NLS-1$ //$NON-NLS-2$
+ .println("Elapsed Time: " + (length.getTime() / 1000) + " seconds"); //$NON-NLS-1$ //$NON-NLS-2$
+
+// outputStream.println("Start Time: " + new Date(testStartTS)); //$NON-NLS-1$
+// outputStream.println("End Time: " + new Date(endTS)); //$NON-NLS-1$
+// outputStream
+// .println("Elapsed Time: " + ((endTS - testStartTS) / 1000) + " seconds"); //$NON-NLS-1$ //$NON-NLS-2$
+//
+
outputStream.println("Number of Clients: " + numberOfClients); //$NON-NLS-1$
Map passFailGenMap = getPassFailGen(results);
@@ -207,7 +216,7 @@
return passFailGenMap;
}
- private void addTotalPassFailGen(String scenario_name, Collection results) {
+ private void addTotalPassFailGen(String scenario_name, Collection results, Date testStartTS, Date endTS, Date lengthTime) {
int queries = 0;
int pass = 0;
int fail = 0;
@@ -240,7 +249,7 @@
}
}
- this.query_sets.add("\t" + queryset + "\t\t" + pass + "\t" + fail + "\t" + queries);
+ this.query_sets.add("\t" + queryset + "\t\t" + pass + "\t" + fail + "\t" + queries + "\t" + (lengthTime.getTime() / 1000) );
total_fail = total_fail + fail;
total_pass = total_pass + pass;
@@ -296,11 +305,28 @@
// logError("Unable to get output stream for file: " + outputFileName); //$NON-NLS-1$
throw e;
}
- addTotalPassFailGen(testname, testResults);
+
+ Date starttest = new Date(testStartTS);
+ Date endtest = new Date(endTS);
+ long diff = endtest.getTime() - starttest.getTime();
+
+ total_seconds = total_seconds + diff;
+
+ Date diffdate = new Date( diff);
+
+// endtest - starttest;
+//
+// outputStream.println("Start Time: " + new Date(testStartTS)); //$NON-NLS-1$
+// outputStream.println("End Time: " + new Date(endTS)); //$NON-NLS-1$
+// outputStream
+// .println("Elapsed Time: " + ((endTS - testStartTS) / 1000) + " seconds"); //$NON-NLS-1$ //$NON-NLS-2$
+
+
+ addTotalPassFailGen(testname, testResults, starttest, endtest, diffdate);
// Text File output
- printQueryTestResults(outputStream, testStartTS, endTS,
+ printQueryTestResults(outputStream, starttest, endtest, diffdate,
numberOfClients, TestClient.TSFORMAT, testResults);
- printQueryTestResults(overwriteStream, testStartTS, endTS,
+ printQueryTestResults(overwriteStream, starttest, endtest, diffdate,
numberOfClients, TestClient.TSFORMAT, testResults);
// HTML Vesion of output
@@ -392,7 +418,7 @@
outputStream.println("=================="); //$NON-NLS-1$
outputStream.println("Test Query Set"); //$NON-NLS-1$
- outputStream.println("\t" + "Name" + "\t\t" + "Pass" + "\t" + "Fail" + "\t" + "Total"); //$NON-NLS-1$
+ outputStream.println("\t" + "Name" + "\t\t\t\t" + "Pass" + "\t" + "Fail" + "\t" + "Total" + "\t" + "Time(sec)"); //$NON-NLS-1$
if (!this.query_sets.isEmpty()) {
// sort so that like failed queries are show together
@@ -410,7 +436,7 @@
outputStream
- .println("\t" + "Totals" + "\t\t" + total_pass + "\t" + total_fail + "\t" + total_queries);
+ .println("\t" + "Totals" + "\t\t\t\t" + total_pass + "\t" + total_fail + "\t" + total_queries+ "\t" + total_seconds / 1000 );
// outputStream
// .println("Number of Queries: " + total_queries); //$NON-NLS-1$ //$NON-NLS-2$
15 years
teiid SVN: r1886 - in branches/JCA: common-core/src/main/java/com/metamatrix/common/types and 42 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-03-02 09:32:21 -0500 (Tue, 02 Mar 2010)
New Revision: 1886
Added:
branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java
Removed:
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java
Modified:
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java
branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java
branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml
branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java
branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java
branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java
branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java
branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java
branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java
branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java
branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java
branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java
branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java
branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj
branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java
branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java
branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java
branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java
branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java
branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java
branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java
branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java
branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java
branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java
branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java
branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java
branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java
branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java
branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
Log:
TEIID-1005 TEIID-1003 consolidating reserved words and adding initial set of 2003 reserved words. also added searchedwhenclause to the connector api
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,10 +22,8 @@
package org.teiid.adminapi.impl;
import java.io.Serializable;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -42,7 +40,12 @@
private String name;
- private LinkedHashMap<String, PropertyMetadata> properties = new LinkedHashMap<String, PropertyMetadata>();
+ private ListOverMap<PropertyMetadata> properties = new ListOverMap<PropertyMetadata>(new KeyBuilder<PropertyMetadata>() {
+ @Override
+ public String getKey(PropertyMetadata entry) {
+ return entry.getName();
+ }
+ });
private transient Map<String, Object> attachments = Collections.synchronizedMap(new HashMap<String, Object>());
@@ -58,7 +61,7 @@
@Override
public Properties getProperties() {
Properties props = new Properties();
- for (PropertyMetadata p:this.properties.values()) {
+ for (PropertyMetadata p:this.properties.getMap().values()) {
props.setProperty(p.getName(), p.getValue());
}
return props;
@@ -72,21 +75,16 @@
}
protected List<PropertyMetadata> getPropertiesDirect(){
- return new ListOverMap<PropertyMetadata>(this.properties, new KeyBuilder<PropertyMetadata>() {
- @Override
- public String getKey(PropertyMetadata entry) {
- return entry.getName();
- }
- });
+ return properties;
}
@Override
public String getPropertyValue(String name) {
- return this.properties.get(name).getValue();
+ return this.properties.getMap().get(name).getValue();
}
public void addProperty(String key, String value) {
- this.properties.put(key, new PropertyMetadata(key, value));
+ this.properties.getMap().put(key, new PropertyMetadata(key, value));
}
/**
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,39 +29,42 @@
final class ListOverMap<E> extends AbstractList<E> {
- private LinkedHashMap<String, E> parent;
- private KeyBuilder builder;
+ private LinkedHashMap<String, E> map = new LinkedHashMap<String, E>();
+ private KeyBuilder<E> builder;
- public ListOverMap(LinkedHashMap<String, E> parent, KeyBuilder builder) {
- this.parent = parent;
+ public ListOverMap(KeyBuilder<E> builder) {
this.builder = builder;
}
+ public LinkedHashMap<String, E> getMap() {
+ return map;
+ }
+
@Override
public void add(int index, E element) {
- this.parent.put(builder.getKey(element), element);
+ this.map.put(builder.getKey(element), element);
}
@Override
public E remove(int index) {
String key = getKey(index);
if (key == null) {
- throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());
+ throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size()); //$NON-NLS-1$ //$NON-NLS-2$
}
- return this.parent.remove(key);
+ return this.map.remove(key);
}
@Override
public E get(int index) {
String key = getKey(index);
if (key == null) {
- throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());
+ throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size()); //$NON-NLS-1$ //$NON-NLS-2$
}
- return this.parent.get(key);
+ return this.map.get(key);
}
private String getKey(int index) {
- Set<String> keys = this.parent.keySet();
+ Set<String> keys = this.map.keySet();
int i = 0;
for (String key:keys) {
if (i == index) {
@@ -74,7 +77,7 @@
@Override
public int size() {
- return this.parent.size();
+ return this.map.size();
}
}
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,7 +25,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Properties;
import java.util.Set;
@@ -64,7 +63,12 @@
private static final long serialVersionUID = -4723595252013356436L;
- private LinkedHashMap<String, ModelMetaData> models = new LinkedHashMap<String, ModelMetaData>();
+ private ListOverMap<ModelMetaData> models = new ListOverMap<ModelMetaData>(new KeyBuilder<ModelMetaData>() {
+ @Override
+ public String getKey(ModelMetaData entry) {
+ return entry.getName();
+ }
+ });
@XmlAttribute(name = "version", required = true)
private int version = 1;
@@ -73,7 +77,12 @@
private String description;
@XmlElement(name = "connector-mapping")
- protected List<ReferenceMappingMetadata> connectorMappings;
+ protected ListOverMap<ReferenceMappingMetadata> connectorMappings = new ListOverMap<ReferenceMappingMetadata>(new KeyBuilder<ReferenceMappingMetadata>() {
+ @Override
+ public String getKey(ReferenceMappingMetadata entry) {
+ return entry.getRefName();
+ }
+ });
@XmlElement(name = "security-role-mapping")
protected List<ReferenceMappingMetadata> securityRoleMappings;
@@ -146,7 +155,7 @@
@ManagementProperty(description="Model list in a VDB", managed=true)
public List<ModelMetaData> getModels(){
- return new ArrayList<ModelMetaData>(this.models.values());
+ return new ArrayList<ModelMetaData>(this.models.getMap().values());
}
/**
@@ -156,16 +165,11 @@
*/
@XmlElement(name = "model", required = true, type = ModelMetaData.class)
protected List<ModelMetaData> getModelsDirect(){
- return new ListOverMap(this.models, new KeyBuilder<ModelMetaData>() {
- @Override
- public String getKey(ModelMetaData entry) {
- return entry.getName();
- }
- });
+ return models;
}
public void addModel(ModelMetaData m) {
- this.models.put(m.getName(), m);
+ this.models.getMap().put(m.getName(), m);
}
@Override
@@ -190,7 +194,7 @@
}
return errors;
}
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
@Override
@@ -203,7 +207,7 @@
if (getModels().isEmpty()) {
return false;
}
- for(ModelMetaData m: this.models.values()) {
+ for(ModelMetaData m: this.models.getMap().values()) {
if (m.isSource()) {
String connectorReference = m.getConnectorReference();
if (connectorReference == null) {
@@ -220,17 +224,17 @@
}
public String toString() {
- return getName()+"."+getVersion()+ models;
+ return getName()+"."+getVersion()+ models; //$NON-NLS-1$
}
@ManagementOperation(description = "Get the model with given name")
public ModelMetaData getModel(String modelName) {
- return this.models.get(modelName);
+ return this.models.getMap().get(modelName);
}
public Set<String> getMultiSourceModelNames(){
Set<String> list = new HashSet<String>();
- for(ModelMetaData m: models.values()) {
+ for(ModelMetaData m: models.getMap().values()) {
if (m.isSupportsMultiSourceBindings()) {
list.add(m.getName());
}
@@ -240,26 +244,19 @@
@ManagementProperty(description="Connector reference mappings")
public List<ReferenceMappingMetadata> getConnectorMappings() {
- return this.connectorMappings;
+ return connectorMappings;
}
public List<String> getConnectorBindingNames(String referenceName) {
- if (this.connectorMappings == null) {
- return Collections.EMPTY_LIST;
+ ReferenceMappingMetadata rmm = this.connectorMappings.getMap().get(referenceName);
+ if (rmm != null) {
+ return rmm.getResourceNames();
}
- for (ReferenceMappingMetadata data:this.connectorMappings) {
- if (data.getRefName().equals(referenceName)) {
- return data.getResourceNames();
- }
- }
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
public void addConnectorMapping(ReferenceMappingMetadata data) {
- if (this.connectorMappings == null) {
- this.connectorMappings = new ArrayList<ReferenceMappingMetadata>();
- }
- this.connectorMappings.add(data);
+ this.connectorMappings.getMap().put(data.getRefName(), data);
}
@ManagementProperty(description="Security refrence mappings")
@@ -300,7 +297,10 @@
"value"
})
public static class ProblemMarker implements Serializable{
- @XmlValue
+
+ private static final long serialVersionUID = -2939032879707369197L;
+
+ @XmlValue
protected String value;
@XmlAttribute(name = "severity")
protected String severity;
Modified: branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
===================================================================
--- branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -40,7 +40,9 @@
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -138,6 +140,15 @@
private static Map<Class<?>, ValueCache<?>> valueMaps = new HashMap<Class<?>, ValueCache<?>>(128);
public static final int MAX_STRING_LENGTH = 4000;
+
+ public static final class DataTypeAliases {
+ public static final String VARCHAR = "varchar"; //$NON-NLS-1$
+ public static final String TINYINT = "tinyint"; //$NON-NLS-1$
+ public static final String SMALLINT = "smallint"; //$NON-NLS-1$
+ public static final String BIGINT = "bigint"; //$NON-NLS-1$
+ public static final String REAL = "real"; //$NON-NLS-1$
+ public static final String DECIMAL = "decimal"; //$NON-NLS-1$
+ }
public static final class DefaultDataTypes {
public static final String STRING = "string"; //$NON-NLS-1$
@@ -217,7 +228,7 @@
/** Base data type names and classes, Type class --> Type name */
private static Map<Class, String> dataTypeClasses = new LinkedHashMap<Class, String>(128);
- private static Set<String> DATA_TYPE_NAMES = Collections.unmodifiableSet(dataTypeNames.keySet());
+ private static Set<String> DATA_TYPE_NAMES;
private static Set<Class> DATA_TYPE_CLASSES = Collections.unmodifiableSet(dataTypeClasses.keySet());
@@ -491,6 +502,13 @@
DataTypeManager.addDataType(DefaultDataTypes.OBJECT, DefaultDataClasses.OBJECT);
DataTypeManager.addDataType(DefaultDataTypes.NULL, DefaultDataClasses.NULL);
DataTypeManager.addDataType(DefaultDataTypes.BLOB, DefaultDataClasses.BLOB);
+ DATA_TYPE_NAMES = Collections.unmodifiableSet(new LinkedHashSet<String>(dataTypeNames.keySet()));
+ dataTypeNames.put(DataTypeAliases.BIGINT, DefaultDataClasses.LONG);
+ dataTypeNames.put(DataTypeAliases.DECIMAL, DefaultDataClasses.BIG_DECIMAL);
+ dataTypeNames.put(DataTypeAliases.REAL, DefaultDataClasses.FLOAT);
+ dataTypeNames.put(DataTypeAliases.SMALLINT, DefaultDataClasses.SHORT);
+ dataTypeNames.put(DataTypeAliases.TINYINT, DefaultDataClasses.BYTE);
+ dataTypeNames.put(DataTypeAliases.VARCHAR, DefaultDataClasses.STRING);
if (USE_VALUE_CACHE) {
valueMaps.put(DefaultDataClasses.BOOLEAN, new ValueCache<Boolean>() {
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,8 +22,8 @@
package org.teiid.connector.language;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
import org.teiid.connector.visitor.framework.LanguageObjectVisitor;
-import org.teiid.connector.visitor.util.SQLReservedWords;
/**
* Represents a comparison between two expressions connected with
@@ -32,12 +32,12 @@
public class Comparison extends Condition implements Predicate {
public enum Operator {
- EQ(SQLReservedWords.EQ),
- NE(SQLReservedWords.NE),
- LT(SQLReservedWords.LT),
- LE(SQLReservedWords.LE),
- GT(SQLReservedWords.GT),
- GE(SQLReservedWords.GE);
+ EQ(Tokens.EQ),
+ NE(Tokens.NE),
+ LT(Tokens.LT),
+ LE(Tokens.LE),
+ GT(Tokens.GT),
+ GE(Tokens.GE);
private String toString;
Operator(String toString) {
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -155,12 +155,15 @@
}
public SearchedCase createSearchedCaseExpression(
- List<? extends Condition> whenExpressions,
- List<? extends Expression> thenExpressions,
+ List<SearchedWhenClause> cases,
Expression elseExpression,
Class<?> type) {
- return new SearchedCase(new ArrayList<Condition>(whenExpressions), new ArrayList<Expression>(thenExpressions), elseExpression, type);
+ return new SearchedCase(cases, elseExpression, type);
}
+
+ public SearchedWhenClause createSearchedWhenCondition(Condition condition, Expression result) {
+ return new SearchedWhenClause(condition, result);
+ }
public DerivedColumn createSelectSymbol(String name, Expression expression) {
return new DerivedColumn(name, expression);
Copied: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java (from rev 1878, branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java)
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java (rev 0)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -0,0 +1,323 @@
+/*
+ * 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.connector.language;
+
+import java.lang.reflect.Field;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * Reserved words for Teiid.
+ */
+public class SQLReservedWords {
+
+ public interface Tokens {
+ public static final String ALL_COLS = "*"; //$NON-NLS-1$
+ public static final String SPACE = " "; //$NON-NLS-1$
+ public static final String COMMA = ","; //$NON-NLS-1$
+ public static final String DOT = "."; //$NON-NLS-1$
+ public static final String QUOTE = "'"; //$NON-NLS-1$
+ public static final String EQ = "="; //$NON-NLS-1$
+ public static final String NE = "<>"; //$NON-NLS-1$
+ public static final String LT = "<"; //$NON-NLS-1$
+ public static final String GT = ">"; //$NON-NLS-1$
+ public static final String LE = "<="; //$NON-NLS-1$
+ public static final String GE = ">="; //$NON-NLS-1$
+ public static final String LPAREN = "("; //$NON-NLS-1$
+ public static final String RPAREN = ")"; //$NON-NLS-1$
+ }
+
+ public static final String ADD = "ADD"; //$NON-NLS-1$
+ public static final String ANY = "ANY"; //$NON-NLS-1$
+ public static final String ALL = "ALL"; //$NON-NLS-1$
+ public static final String ALTER = "ALTER"; //$NON-NLS-1$
+ public static final String AND = "AND"; //$NON-NLS-1$
+ public static final String ARRAY = "ARRAY"; //$NON-NLS-1$s
+ public static final String AS = "AS"; //$NON-NLS-1$
+ public static final String ASC = "ASC"; //$NON-NLS-1$
+ public static final String ATOMIC = "ATOMIC"; //$NON-NLS-1$
+ public static final String AUTHORIZATION = "autorization"; //$NON-NLS-1$
+ public static final String AVG = "AVG"; //$NON-NLS-1$
+ public static final String BEGIN = "BEGIN"; //$NON-NLS-1$
+ public static final String BETWEEN = "BETWEEN"; //$NON-NLS-1$
+ public static final String BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
+ public static final String BIGINT = "BIGINT"; //$NON-NLS-1$
+ public static final String BIGINTEGER = "BIGINTEGER"; //$NON-NLS-1$
+ public static final String BINARY = "BINARY"; //$NON-NLS-1$
+ public static final String BLOB = "BLOB"; //$NON-NLS-1$
+ public static final String BOTH = "BOTH"; //$NON-NLS-1$
+ public static final String BREAK = "BREAK"; //$NON-NLS-1$
+ public static final String BY = "BY"; //$NON-NLS-1$
+ public static final String BYTE = "BYTE"; //$NON-NLS-1$
+ public static final String CALL = "CALL"; //$NON-NLS-1$
+ public static final String CALLED = "CALLED"; //$NON-NLS-1$
+ public static final String CASE = "CASE"; //$NON-NLS-1$
+ public static final String CAST = "CAST"; //$NON-NLS-1$
+ public static final String CASCADED = "CASCADED"; //$NON-NLS-1$
+ public static final String CHAR = "CHAR"; //$NON-NLS-1$
+ public static final String CHARACTER = "CHARACTER"; //$NON-NLS-1$
+ public static final String CHECK = "CHECK"; //$NON-NLS-1$
+ public static final String CLOB = "CLOB"; //$NON-NLS-1$
+ public static final String CLOSE = "CLOSE"; //$NON-NLS-1$
+ public static final String COLLATE = "COLLATE"; //$NON-NLS-1$
+ public static final String COLUMN = "COLUMN"; //$NON-NLS-1$
+ public static final String COMMIT = "COMMIT"; //$NON-NLS-1$
+ public static final String CONNECT = "CONNECT"; //$NON-NLS-1$
+ public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
+ public static final String CONSTRAINT = "CONSTRAINT"; //$NON-NLS-1$
+ public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
+ public static final String COUNT = "COUNT"; //$NON-NLS-1$
+ public static final String CORRESPONDING = "CORRESPONDING"; //$NON-NLS-1$
+ public static final String CRITERIA = "CRITERIA"; //$NON-NLS-1$
+ public static final String CREATE = "CREATE"; //$NON-NLS-1$
+ public static final String CROSS = "CROSS"; //$NON-NLS-1$
+ public static final String CURRENT_DATE = "CURRENT_DATE"; //$NON-NLS-1$
+ public static final String CURRENT_TIME = "CURRENT_TIME"; //$NON-NLS-1$
+ public static final String CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP"; //$NON-NLS-1$
+ public static final String CURRENT_USER = "CURRENT_USER"; //$NON-NLS-1$
+ public static final String CURSOR = "CURSOR"; //$NON-NLS-1$
+ public static final String DATE = "DATE"; //$NON-NLS-1$
+ public static final String DAY = "DAY"; //$NON-NLS-1$
+ public static final String DEALLOCATE = "DEALLOCATE"; //$NON-NLS-1$
+ public static final String DEBUG = "DEBUG"; //$NON-NLS-1$
+ public static final String DECIMAL = "DECIMAL"; //$NON-NLS-1$
+ public static final String DECLARE = "DECLARE"; //$NON-NLS-1$
+ public static final String DEFAULT = "DEFAULT"; //$NON-NLS-1$
+ public static final String DELETE = "DELETE"; //$NON-NLS-1$
+ public static final String DESC = "DESC"; //$NON-NLS-1$
+ public static final String DESCRIBE = "DESCRIBE"; //$NON-NLS-1$
+ public static final String DETERMINISTIC = "DETERMINISTIC"; //$NON-NLS-1$
+ public static final String DISCONNECT = "DISCONNECT"; //$NON-NLS-1$
+ public static final String DISTINCT = "DISTINCT"; //$NON-NLS-1$
+ public static final String DOUBLE = "DOUBLE"; //$NON-NLS-1$
+ public static final String DROP = "DROP"; //$NON-NLS-1$
+ public static final String EACH = "EACH"; //$NON-NLS-1$
+ public static final String ELSE = "ELSE"; //$NON-NLS-1$
+ public static final String END = "END"; //$NON-NLS-1$
+ public static final String ERROR = "ERROR"; //$NON-NLS-1$
+ public static final String ESCAPE = "ESCAPE"; //$NON-NLS-1$
+ public static final String EXCEPT = "EXCEPT"; //$NON-NLS-1$
+ public static final String EXEC = "EXEC"; //$NON-NLS-1$
+ public static final String EXECUTE = "EXECUTE"; //$NON-NLS-1$
+ public static final String EXISTS = "EXISTS"; //$NON-NLS-1$
+ public static final String EXTERNAL = "EXTERNAL"; //$NON-NLS-1$
+ public static final String FALSE = "FALSE"; //$NON-NLS-1$
+ public static final String FETCH = "FETCH"; //$NON-NLS-1$
+ public static final String FILTER = "FILTER"; //$NON-NLS-1$
+ public static final String FLOAT = "FLOAT"; //$NON-NLS-1$
+ public static final String FN = "FN"; //$NON-NLS-1$
+ public static final String FOR = "FOR"; //$NON-NLS-1$
+ public static final String FOREIGN = "FOREIGN"; //$NON-NLS-1$
+ public static final String FROM = "FROM"; //$NON-NLS-1$
+ public static final String FULL = "FULL"; //$NON-NLS-1$
+ public static final String FUNCTION = "FUNCTION"; //$NON-NLS-1$
+ public static final String GET = "GET"; //$NON-NLS-1$
+ public static final String GLOBAL = "GLOBAL"; //$NON-NLS-1$
+ public static final String GRANT = "GRANT"; //$NON-NLS-1$
+ public static final String GROUP = "GROUP"; //$NON-NLS-1$
+ public static final String GROUPING = "GROUPING"; //$NON-NLS-1$
+ public static final String HAS = "HAS"; //$NON-NLS-1$
+ public static final String HAVING = "HAVING"; //$NON-NLS-1$
+ public static final String HOLD = "HOLD"; //$NON-NLS-1$
+ public static final String HOUR = "HOUR"; //$NON-NLS-1$
+ public static final String IDENTITY = "IDENTITY"; //$NON-NLS-1$
+ public static final String INDICATOR = "INDICATOR"; //$NON-NLS-1$
+ public static final String IF = "IF"; //$NON-NLS-1$
+ public static final String IMMEDIATE = "IMMEDIATE"; //$NON-NLS-1$
+ public static final String IN = "IN"; //$NON-NLS-1$
+ public static final String INOUT = "INOUT"; //$NON-NLS-1$
+ public static final String INNER = "INNER"; //$NON-NLS-1$
+ public static final String INPUT = "INPUT"; //$NON-NLS-1$
+ public static final String INSENSITIVE = "INSENSITIVE"; //$NON-NLS-1$
+ public static final String INSERT = "INSERT"; //$NON-NLS-1$
+ public static final String INTEGER = "INTEGER"; //$NON-NLS-1$
+ public static final String INTERSECT = "INTERSECT"; //$NON-NLS-1$
+ public static final String INTERVAL = "INTERVAL"; //$NON-NLS-1$
+ public static final String INTO = "INTO"; //$NON-NLS-1$
+ public static final String IS = "IS"; //$NON-NLS-1$
+ public static final String ISOLATION = "ISOLATION"; //$NON-NLS-1$
+ public static final String JOIN = "JOIN"; //$NON-NLS-1$
+ public static final String LANGUAGE = "LANGUAGE"; //$NON-NLS-1$
+ public static final String LARGE = "LARGE"; //$NON-NLS-1$
+ public static final String LEADING = "LEADING"; //$NON-NLS-1$
+ public static final String LEFT = "LEFT"; //$NON-NLS-1$
+ public static final String LIKE = "LIKE"; //$NON-NLS-1$
+ public static final String LIMIT = "LIMIT"; //$NON-NLS-1$
+ public static final String LOCAL = "LOCAL"; //$NON-NLS-1$
+ public static final String LONG = "LONG"; //$NON-NLS-1$
+ public static final String LOOP = "LOOP"; //$NON-NLS-1$
+ public static final String MAKEDEP = "MAKEDEP"; //$NON-NLS-1$
+ public static final String MAKENOTDEP = "MAKENOTDEP"; //$NON-NLS-1$
+ public static final String MATCH = "MATCH"; //$NON-NLS-1$
+ public static final String MAX = "MAX"; //$NON-NLS-1$
+ public static final String MIN = "MIN"; //$NON-NLS-1$
+ public static final String MERGE = "MERGE"; //$NON-NLS-1$
+ public static final String METHOD = "METHOD"; //$NON-NLS-1$
+ public static final String MINUTE = "MINUTE"; //$NON-NLS-1$
+ public static final String MODIFIES = "MODIFIES"; //$NON-NLS-1$
+ public static final String MODULE = "MODULE"; //$NON-NLS-1$
+ public static final String MONTH = "MONTH"; //$NON-NLS-1$
+ public static final String NATURAL = "NATURAL"; //$NON-NLS-1$
+ public static final String NEW = "NEW"; //$NON-NLS-1$
+ public static final String NO = "NO"; //$NON-NLS-1$
+ public static final String NOCACHE = "NOCACHE"; //$NON-NLS-1$
+ public static final String NONE = "NONE"; //$NON-NLS-1$
+ public static final String NOT = "NOT"; //$NON-NLS-1$
+ public static final String NULL = "NULL"; //$NON-NLS-1$
+ public static final String OBJECT = "OBJECT"; //$NON-NLS-1$
+ public static final String OF = "OF"; //$NON-NLS-1$
+ public static final String OJ = "OJ"; //$NON-NLS-1$
+ public static final String OLD = "OLD"; //$NON-NLS-1$
+ public static final String ON = "ON"; //$NON-NLS-1$
+ public static final String ONLY = "ONLY"; //$NON-NLS-1$
+ public static final String OPEN = "OPEN"; //$NON-NLS-1$
+ public static final String OR = "OR"; //$NON-NLS-1$
+ public static final String ORDER = "ORDER"; //$NON-NLS-1$
+ public static final String OUT = "OUT"; //$NON-NLS-1$
+ public static final String OUTER = "OUTER"; //$NON-NLS-1$
+ public static final String OUTPUT = "OUTPUT"; //$NON-NLS-1$
+ public static final String OPTION = "OPTION"; //$NON-NLS-1$
+ public static final String OVER = "OVER"; //$NON-NLS-1$
+ public static final String OVERLAPS = "OVERLAPS"; //$NON-NLS-1$
+ public static final String PARAMETER = "PARAMETER"; //$NON-NLS-1$
+ public static final String PARTITION = "PARTITION"; //$NON-NLS-1$
+ public static final String PRECISION = "PRECISION"; //$NON-NLS-1$
+ public static final String PREPARE = "PREPARE"; //$NON-NLS-1$
+ public static final String PRIMARY = "PRIMARY"; //$NON-NLS-1$
+ public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
+ public static final String PLANONLY = "PLANONLY"; //$NON-NLS-1$
+ public static final String RANGE = "RANGE"; //$NON-NLS-1$
+ public static final String READS = "READS"; //$NON-NLS-1$
+ public static final String REAL = "REAL"; //$NON-NLS-1$
+ public static final String RECURSIVE = "RECURSIVE"; //$NON-NLS-1$
+ public static final String REFERENCES = "REFERENCES"; //$NON-NLS-1$
+ public static final String REFERENCING = "REFERENCING"; //$NON-NLS-1$
+ public static final String RETURN = "RETURN"; //$NON-NLS-1$
+ public static final String RETURNS = "RETURNS"; //$NON-NLS-1$
+ public static final String REVOKE = "REVOKE"; //$NON-NLS-1$
+ public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
+ public static final String ROLLBACK = "ROLLBACK"; //$NON-NLS-1$
+ public static final String ROLLUP = "ROLLUP"; //$NON-NLS-1$
+ public static final String ROW = "ROW"; //$NON-NLS-1$
+ public static final String ROWS = "ROWS"; //$NON-NLS-1$
+ public static final String SAVEPOINT = "ROWS"; //$NON-NLS-1$
+ public static final String SCROLL = "ROWS"; //$NON-NLS-1$
+ public static final String SEARCH = "ROWS"; //$NON-NLS-1$
+ public static final String SECOND = "ROWS"; //$NON-NLS-1$
+ public static final String SELECT = "SELECT"; //$NON-NLS-1$
+ public static final String SENSITIVE = "ROWS"; //$NON-NLS-1$
+ public static final String SESSION_USER = "SESSION_USER"; //$NON-NLS-1$
+ public static final String SET = "SET"; //$NON-NLS-1$
+ public static final String SHORT = "SHORT"; //$NON-NLS-1$
+ public static final String SHOWPLAN = "SHOWPLAN"; //$NON-NLS-1$
+ public static final String SIILAR = "ROWS"; //$NON-NLS-1$
+ public static final String SMALLINT = "ROWS"; //$NON-NLS-1$
+ public static final String SOME = "SOME"; //$NON-NLS-1$
+ public static final String SPECIFIC = "ROWS"; //$NON-NLS-1$
+ public static final String SQL = "ROWS"; //$NON-NLS-1$
+ public static final String SQLEXCEPTION = "SQLEXCEPTION"; //$NON-NLS-1$
+ public static final String SQLSTATE = "SQLSTATE"; //$NON-NLS-1$
+ public static final String SQLWARNING = "SQLWARNING"; //$NON-NLS-1$
+ public static final String SQL_TSI_FRAC_SECOND = "SQL_TSI_FRAC_SECOND"; //$NON-NLS-1$
+ public static final String SQL_TSI_SECOND = "SQL_TSI_SECOND"; //$NON-NLS-1$
+ public static final String SQL_TSI_MINUTE = "SQL_TSI_MINUTE"; //$NON-NLS-1$
+ public static final String SQL_TSI_HOUR = "SQL_TSI_HOUR"; //$NON-NLS-1$
+ public static final String SQL_TSI_DAY = "SQL_TSI_DAY"; //$NON-NLS-1$
+ public static final String SQL_TSI_WEEK = "SQL_TSI_WEEK"; //$NON-NLS-1$
+ public static final String SQL_TSI_MONTH = "SQL_TSI_MONTH"; //$NON-NLS-1$
+ public static final String SQL_TSI_QUARTER = "SQL_TSI_QUARTER"; //$NON-NLS-1$
+ public static final String SQL_TSI_YEAR = "SQL_TSI_YEAR"; //$NON-NLS-1$
+ public static final String START = "START"; //$NON-NLS-1$
+ public static final String STATIC = "STATIC"; //$NON-NLS-1$
+ public static final String STRING = "STRING"; //$NON-NLS-1$
+ public static final String SYSTEM = "SYSTEM"; //$NON-NLS-1$
+ public static final String SYSTEM_USER = "SYSTEM_USER"; //$NON-NLS-1$
+ public static final String SUM = "SUM"; //$NON-NLS-1$
+ public static final String TABLE = "TABLE"; //$NON-NLS-1$
+ public static final String TEMPORARY = "TEMPORARY"; //$NON-NLS-1$
+ public static final String THEN = "THEN"; //$NON-NLS-1$
+ public static final String TIME = "TIME"; //$NON-NLS-1$
+ public static final String TIMESTAMP = "TIMESTAMP"; //$NON-NLS-1$
+ public static final String TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
+ public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
+ public static final String TIMEZONE_HOUR = "TIMEZONE_HOUR"; //$NON-NLS-1$
+ public static final String TIMEZONE_MINUTE = "TIMEZONE_MINUTE"; //$NON-NLS-1$
+ public static final String TO = "TO"; //$NON-NLS-1$
+ public static final String TRAILING = "TRAILING"; //$NON-NLS-1$
+ public static final String TRANSLATE = "TRANSLATE"; //$NON-NLS-1$
+ public static final String TRIGGER = "TRIGGER"; //$NON-NLS-1$
+ public static final String TRUE = "TRUE"; //$NON-NLS-1$
+ public static final String UNION = "UNION"; //$NON-NLS-1$
+ public static final String UNIQUE = "UNIQUE"; //$NON-NLS-1$
+ public static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
+ public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
+ public static final String USER = "USER"; //$NON-NLS-1$
+ public static final String USING = "USING"; //$NON-NLS-1$
+ public static final String VALUE = "VALUE"; //$NON-NLS-1$
+ public static final String VALUES = "VALUES"; //$NON-NLS-1$
+ public static final String VARCHAR = "VARCHAR"; //$NON-NLS-1$
+ public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
+ public static final String WHEN = "WHEN"; //$NON-NLS-1$
+ public static final String WHENEVER = "WHENEVER"; //$NON-NLS-1$
+ public static final String WHERE = "WHERE"; //$NON-NLS-1$
+ public static final String WHILE = "WHILE"; //$NON-NLS-1$
+ public static final String WINDOW = "WINDOW"; //$NON-NLS-1$
+ public static final String WITH = "WITH"; //$NON-NLS-1$
+ public static final String WITHIN = "WITHIN"; //$NON-NLS-1$
+ public static final String WITHOUT = "WITHOUT"; //$NON-NLS-1$
+ public static final String XML = "XML"; //$NON-NLS-1$
+ public static final String YEAR = "YEAR"; //$NON-NLS-1$
+
+ /**
+ * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
+ */
+ private static final Set<String> RESERVED_WORDS = new HashSet<String>();
+
+ // Initialize RESERVED_WORDS set - This is a poor man's enum. To much legacy code expects the constants to be Strings.
+ static {
+ Field[] fields = SQLReservedWords.class.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.getType() == String.class) {
+ try {
+ RESERVED_WORDS.add((String)field.get(null));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+
+ /** Can't construct */
+ private SQLReservedWords() {}
+
+ /**
+ * Check whether a string is a reserved word.
+ * @param str String to check
+ * @return True if reserved word, false if not or null
+ */
+ public static final boolean isReservedWord(String str) {
+ if(str == null) {
+ return false;
+ }
+ return RESERVED_WORDS.contains(str.toUpperCase());
+ }
+}
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -32,14 +32,12 @@
*/
public class SearchedCase extends BaseLanguageObject implements Expression {
- private List<Condition> whenConditions;
- private List<Expression> thenExpressions;
+ private List<SearchedWhenClause> cases;
private Expression elseExpression;
private Class<?> type;
- public SearchedCase(List<Condition> whens, List<Expression> thens, Expression elseExpression, Class<?> type) {
- this.whenConditions = whens;
- this.thenExpressions = thens;
+ public SearchedCase(List<SearchedWhenClause> cases, Expression elseExpression, Class<?> type) {
+ this.cases = cases;
this.elseExpression = elseExpression;
this.type = type;
}
@@ -48,14 +46,10 @@
return elseExpression;
}
- public List<Expression> getThenExpressions() {
- return thenExpressions;
+ public List<SearchedWhenClause> getCases() {
+ return cases;
}
- public List<Condition> getWhenConditions() {
- return whenConditions;
- }
-
public void acceptVisitor(LanguageObjectVisitor visitor) {
visitor.visit(this);
}
Added: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java (rev 0)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -0,0 +1,57 @@
+/*
+ * 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.connector.language;
+
+import org.teiid.connector.visitor.framework.LanguageObjectVisitor;
+
+public class SearchedWhenClause extends BaseLanguageObject {
+
+ private Condition condition;
+ private Expression result;
+
+ public SearchedWhenClause(Condition condition, Expression result) {
+ this.condition = condition;
+ this.result = result;
+ }
+
+ public Condition getCondition() {
+ return condition;
+ }
+
+ public Expression getResult() {
+ return result;
+ }
+
+ public void setCondition(Condition symbol) {
+ this.condition = symbol;
+ }
+
+ public void setResult(Expression value) {
+ this.result = value;
+ }
+
+ public void acceptVisitor(LanguageObjectVisitor visitor) {
+ visitor.visit(this);
+ }
+
+}
Property changes on: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -51,6 +51,7 @@
import org.teiid.connector.language.OrderBy;
import org.teiid.connector.language.ScalarSubquery;
import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.Select;
import org.teiid.connector.language.SetClause;
import org.teiid.connector.language.SetQuery;
@@ -144,4 +145,5 @@
public void visit(Update obj) {}
public void visit(SetQuery obj) {}
public void visit(SetClause obj) {}
+ public void visit(SearchedWhenClause obj) {}
}
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -49,6 +49,7 @@
import org.teiid.connector.language.OrderBy;
import org.teiid.connector.language.ScalarSubquery;
import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.Select;
import org.teiid.connector.language.SetClause;
import org.teiid.connector.language.SetQuery;
@@ -383,6 +384,17 @@
postVisitor.visit(obj);
}
}
+
+ @Override
+ public void visit(SearchedWhenClause obj) {
+ if (preVisitor != null) {
+ preVisitor.visit(obj);
+ }
+ super.visit(obj);
+ if (postVisitor != null) {
+ postVisitor.visit(obj);
+ }
+ }
/**
* This utility method can be used to execute the behaviorVisitor in a pre-order walk
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -44,6 +44,7 @@
import org.teiid.connector.language.QueryExpression;
import org.teiid.connector.language.ScalarSubquery;
import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.Select;
import org.teiid.connector.language.SetClause;
import org.teiid.connector.language.SetQuery;
@@ -173,13 +174,16 @@
}
public void visit(SearchedCase obj) {
- for (int i = 0; i < obj.getWhenConditions().size(); i++) {
- visitNode(obj.getWhenConditions().get(i));
- visitNode(obj.getThenExpressions().get(i));
- }
+ visitNodes(obj.getCases());
visitNode(obj.getElseExpression());
}
+ @Override
+ public void visit(SearchedWhenClause obj) {
+ visitNode(obj.getCondition());
+ visitNode(obj.getResult());
+ }
+
public void visit(DerivedColumn obj) {
visitNode(obj.getExpression());
}
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -60,4 +60,5 @@
public void visit(Update obj);
public void visit(SetQuery obj);
public void visit(SetClause obj);
+ public void visit(SearchedWhenClause obj);
}
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -54,6 +54,7 @@
import org.teiid.connector.language.OrderBy;
import org.teiid.connector.language.ScalarSubquery;
import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.Select;
import org.teiid.connector.language.SetClause;
import org.teiid.connector.language.SetQuery;
@@ -222,6 +223,11 @@
public void visit(SetClause obj) {
checkInstance(obj);
}
+
+ @Override
+ public void visit(SearchedWhenClause obj) {
+ checkInstance(obj);
+ }
/**
* This is a utility method to instantiate and run the visitor in conjunction
Deleted: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -1,191 +0,0 @@
-/*
- * 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.connector.visitor.util;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class SQLReservedWords {
-
- public static final String ANY = "ANY"; //$NON-NLS-1$
- public static final String ALL = "ALL"; //$NON-NLS-1$
- public static final String ALL_COLS = "*"; //$NON-NLS-1$
- public static final String AND = "AND"; //$NON-NLS-1$
- public static final String AS = "AS"; //$NON-NLS-1$
- public static final String ASC = "ASC"; //$NON-NLS-1$
- public static final String AVG = "AVG"; //$NON-NLS-1$
- public static final String BEGIN = "BEGIN"; //$NON-NLS-1$
- public static final String BETWEEN = "BETWEEN"; //$NON-NLS-1$
- public static final String BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
- public static final String BIGINTEGER = "BIGINTEGER"; //$NON-NLS-1$
- public static final String BREAK = "BREAK"; //$NON-NLS-1$
- public static final String BY = "BY"; //$NON-NLS-1$
- public static final String BYTE = "BYTE"; //$NON-NLS-1$
- public static final String CASE = "CASE"; //$NON-NLS-1$
- public static final String CAST = "CAST"; //$NON-NLS-1$
- public static final String CHAR = "CHAR"; //$NON-NLS-1$
- public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
- public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
- public static final String COUNT = "COUNT"; //$NON-NLS-1$
- public static final String CRITERIA = "CRITERIA"; //$NON-NLS-1$
- public static final String CREATE = "CREATE"; //$NON-NLS-1$
- public static final String CROSS = "CROSS"; //$NON-NLS-1$
- public static final String DATE = "DATE"; //$NON-NLS-1$
- public static final String DEBUG = "DEBUG"; //$NON-NLS-1$
- public static final String DECLARE = "DECLARE"; //$NON-NLS-1$
- public static final String DELETE = "DELETE"; //$NON-NLS-1$
- public static final String DESC = "DESC"; //$NON-NLS-1$
- public static final String DISTINCT = "DISTINCT"; //$NON-NLS-1$
- public static final String DOUBLE = "DOUBLE"; //$NON-NLS-1$
- public static final String ELSE = "ELSE"; //$NON-NLS-1$
- public static final String END = "END"; //$NON-NLS-1$
- public static final String ERROR = "ERROR"; //$NON-NLS-1$
- public static final String ESCAPE = "ESCAPE"; //$NON-NLS-1$
- public static final String EXCEPT = "EXCEPT"; //$NON-NLS-1$
- public static final String EXEC = "EXEC"; //$NON-NLS-1$
- public static final String EXECUTE = "EXECUTE"; //$NON-NLS-1$
- public static final String EXISTS = "EXISTS"; //$NON-NLS-1$
- public static final String FALSE = "FALSE"; //$NON-NLS-1$
- public static final String FLOAT = "FLOAT"; //$NON-NLS-1$
- public static final String FOR = "FOR"; //$NON-NLS-1$
- public static final String FROM = "FROM"; //$NON-NLS-1$
- public static final String FULL = "FULL"; //$NON-NLS-1$
- public static final String GROUP = "GROUP"; //$NON-NLS-1$
- public static final String HAS = "HAS"; //$NON-NLS-1$
- public static final String HAVING = "HAVING"; //$NON-NLS-1$
- public static final String IF = "IF"; //$NON-NLS-1$
- public static final String IN = "IN"; //$NON-NLS-1$
- public static final String INNER = "INNER"; //$NON-NLS-1$
- public static final String INSERT = "INSERT"; //$NON-NLS-1$
- public static final String INTEGER = "INTEGER"; //$NON-NLS-1$
- public static final String INTERSECT = "INTERSECT"; //$NON-NLS-1$
- public static final String INTO = "INTO"; //$NON-NLS-1$
- public static final String IS = "IS"; //$NON-NLS-1$
- public static final String JOIN = "JOIN"; //$NON-NLS-1$
- public static final String LEFT = "LEFT"; //$NON-NLS-1$
- public static final String LIKE = "LIKE"; //$NON-NLS-1$
- public static final String LIMIT = "LIMIT"; //$NON-NLS-1$
- public static final String LONG = "LONG"; //$NON-NLS-1$
- public static final String LOOP = "LOOP"; //$NON-NLS-1$
- public static final String MAKEDEP = "MAKEDEP"; //$NON-NLS-1$
- public static final String MIN = "MIN"; //$NON-NLS-1$
- public static final String MAX = "MAX"; //$NON-NLS-1$
- public static final String NOT = "NOT"; //$NON-NLS-1$
- public static final String NULL = "NULL"; //$NON-NLS-1$
- public static final String OBJECT = "OBJECT"; //$NON-NLS-1$
- public static final String ON = "ON"; //$NON-NLS-1$
- public static final String OR = "OR"; //$NON-NLS-1$
- public static final String ORDER = "ORDER"; //$NON-NLS-1$
- public static final String OPTION = "OPTION"; //$NON-NLS-1$
- public static final String OUTER = "OUTER"; //$NON-NLS-1$
- public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
- public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
- public static final String SELECT = "SELECT"; //$NON-NLS-1$
- public static final String SET = "SET"; //$NON-NLS-1$
- public static final String SHORT = "SHORT"; //$NON-NLS-1$
- public static final String SHOWPLAN = "SHOWPLAN"; //$NON-NLS-1$
- public static final String SOME = "SOME"; //$NON-NLS-1$
- public static final String SQL_TSI_FRAC_SECOND = "SQL_TSI_FRAC_SECOND"; //$NON-NLS-1$
- public static final String SQL_TSI_SECOND = "SQL_TSI_SECOND"; //$NON-NLS-1$
- public static final String SQL_TSI_MINUTE = "SQL_TSI_MINUTE"; //$NON-NLS-1$
- public static final String SQL_TSI_HOUR = "SQL_TSI_HOUR"; //$NON-NLS-1$
- public static final String SQL_TSI_DAY = "SQL_TSI_DAY"; //$NON-NLS-1$
- public static final String SQL_TSI_WEEK = "SQL_TSI_WEEK"; //$NON-NLS-1$
- public static final String SQL_TSI_MONTH = "SQL_TSI_MONTH"; //$NON-NLS-1$
- public static final String SQL_TSI_QUARTER = "SQL_TSI_QUARTER"; //$NON-NLS-1$
- public static final String SQL_TSI_YEAR = "SQL_TSI_YEAR"; //$NON-NLS-1$
- public static final String STRING = "STRING"; //$NON-NLS-1$
- public static final String SUM = "SUM"; //$NON-NLS-1$
- public static final String THEN = "THEN"; //$NON-NLS-1$
- public static final String TIME = "TIME"; //$NON-NLS-1$
- public static final String TIMESTAMP = "TIMESTAMP"; //$NON-NLS-1$
- public static final String TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
- public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
- public static final String TRANSLATE = "TRANSLATE"; //$NON-NLS-1$
- public static final String TRUE = "TRUE"; //$NON-NLS-1$
- public static final String UNION = "UNION"; //$NON-NLS-1$
- public static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
- public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
- public static final String USING = "USING"; //$NON-NLS-1$
- public static final String VALUES = "VALUES"; //$NON-NLS-1$
- public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
- public static final String WHEN = "WHEN"; //$NON-NLS-1$
- public static final String WITH = "WITH"; //$NON-NLS-1$
- public static final String WHERE = "WHERE"; //$NON-NLS-1$
- public static final String WHILE = "WHILE"; //$NON-NLS-1$
-
- public static final String SPACE = " "; //$NON-NLS-1$
- public static final String COMMA = ","; //$NON-NLS-1$
- public static final String DOT = "."; //$NON-NLS-1$
- public static final String QUOTE = "'"; //$NON-NLS-1$
-
- public static final String EQ = "="; //$NON-NLS-1$
- public static final String NE = "<>"; //$NON-NLS-1$
- public static final String LT = "<"; //$NON-NLS-1$
- public static final String GT = ">"; //$NON-NLS-1$
- public static final String LE = "<="; //$NON-NLS-1$
- public static final String GE = ">="; //$NON-NLS-1$
-
- public static final String LPAREN = "("; //$NON-NLS-1$
- public static final String RPAREN = ")"; //$NON-NLS-1$
-
- public static final String[] ALL_WORDS = new String[] {ALL, ALL_COLS, AND, ANY, AS, ASC, AVG, BEGIN, BETWEEN, BIGINTEGER,
- BIGDECIMAL, BREAK, BY, BYTE, CASE, CAST, CHAR, CONVERT, CONTINUE, COUNT, CREATE, CRITERIA, CROSS, DATE, DEBUG, DECLARE,
- DELETE, DESC, DISTINCT, DOUBLE, ELSE, END, ERROR, ESCAPE, EXCEPT, EXEC, EXECUTE, EXISTS, FALSE, FLOAT, FOR, FROM, FULL,
- GROUP, HAS, HAVING, IF, IN, INNER, INSERT, INTEGER, INTERSECT, INTO, IS, JOIN, LEFT, LIKE, LONG, LOOP, MAKEDEP, MIN, MAX,
- NOT, NULL, OBJECT, ON, OR, ORDER, OPTION, OUTER, PROCEDURE, RIGHT, SELECT, SET, SHORT, SHOWPLAN, SOME,
- SQL_TSI_FRAC_SECOND, SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH,
- SQL_TSI_QUARTER, SQL_TSI_YEAR, STRING, SUM, THEN, TIME, TIMESTAMP, TIMESTAMPADD, TIMESTAMPDIFF, TRANSLATE, TRUE, UNION,
- UNKNOWN, UPDATE, USING, VALUES, VIRTUAL, WHEN, WITH, WHERE, WHILE,};
-
- /**
- * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
- */
- private static final Set RESERVED_WORDS = new HashSet();
-
- // Initialize RESERVED_WORDS set
- static {
- // Iterate through the reserved words and capitalize all of them
- for (int i = 0; i != SQLReservedWords.ALL_WORDS.length; ++i) {
- String reservedWord = SQLReservedWords.ALL_WORDS[i];
- SQLReservedWords.RESERVED_WORDS.add(reservedWord.toUpperCase());
- }
- }
-
- /** Can't construct */
- private SQLReservedWords() {
- }
-
- /**
- * Check whether a string is a reserved word.
- *
- * @param str String to check
- * @return True if reserved word, false if not or null
- */
- public static final boolean isReservedWord( String str ) {
- if (str == null) {
- return false;
- }
- return RESERVED_WORDS.contains(str.toUpperCase());
- }
-}
Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -55,8 +55,10 @@
import org.teiid.connector.language.Not;
import org.teiid.connector.language.OrderBy;
import org.teiid.connector.language.QueryExpression;
+import org.teiid.connector.language.SQLReservedWords;
import org.teiid.connector.language.ScalarSubquery;
import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.Select;
import org.teiid.connector.language.SetClause;
import org.teiid.connector.language.SetQuery;
@@ -66,6 +68,7 @@
import org.teiid.connector.language.TableReference;
import org.teiid.connector.language.Update;
import org.teiid.connector.language.Argument.Direction;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
import org.teiid.connector.language.SortSpecification.Ordering;
import org.teiid.connector.metadata.runtime.AbstractMetadataRecord;
import org.teiid.connector.visitor.framework.AbstractLanguageVisitor;
@@ -121,8 +124,8 @@
if (items != null && items.size() != 0) {
append(items.get(0));
for (int i = 1; i < items.size(); i++) {
- buffer.append(SQLReservedWords.COMMA)
- .append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.COMMA)
+ .append(Tokens.SPACE);
append(items.get(i));
}
}
@@ -137,8 +140,8 @@
if (items != null && items.length != 0) {
append(items[0]);
for (int i = 1; i < items.length; i++) {
- buffer.append(SQLReservedWords.COMMA)
- .append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.COMMA)
+ .append(Tokens.SPACE);
append(items[i]);
}
}
@@ -159,26 +162,26 @@
public void visit(AggregateFunction obj) {
buffer.append(obj.getName())
- .append(SQLReservedWords.LPAREN);
+ .append(Tokens.LPAREN);
if ( obj.isDistinct()) {
buffer.append(SQLReservedWords.DISTINCT)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
}
if (obj.getExpression() == null) {
- buffer.append(SQLReservedWords.ALL_COLS);
+ buffer.append(Tokens.ALL_COLS);
} else {
append(obj.getExpression());
}
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(Comparison obj) {
append(obj.getLeftExpression());
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
buffer.append(obj.getOperator());
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
append(obj.getRightExpression());
}
@@ -186,9 +189,9 @@
String opString = obj.getOperator().toString();
appendNestedCondition(obj, obj.getLeftCondition());
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(opString)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
appendNestedCondition(obj, obj.getRightCondition());
}
@@ -196,9 +199,9 @@
if (condition instanceof AndOr) {
AndOr nested = (AndOr)condition;
if (nested.getOperator() != parent.getOperator()) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(condition);
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
return;
}
}
@@ -210,15 +213,15 @@
*/
public void visit(Delete obj) {
buffer.append(SQLReservedWords.DELETE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
buffer.append(SQLReservedWords.FROM)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getTable());
if (obj.getWhere() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.WHERE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getWhere());
}
}
@@ -285,7 +288,7 @@
// If not, do normal logic: [group + "."] + element
if(groupName != null) {
elementName.append(groupName);
- elementName.append(SQLReservedWords.DOT);
+ elementName.append(Tokens.DOT);
}
elementName.append(elemShortName);
return elementName.toString();
@@ -309,7 +312,7 @@
*/
public void visit(Call obj) {
buffer.append(SQLReservedWords.EXEC)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
if(obj.getMetadataObject() != null) {
buffer.append(getName(obj.getMetadataObject()));
@@ -317,7 +320,7 @@
buffer.append(obj.getProcedureName());
}
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
final List<Argument> params = obj.getArguments();
if (params != null && params.size() != 0) {
Argument param = null;
@@ -325,14 +328,14 @@
param = params.get(i);
if (param.getDirection() == Direction.IN || param.getDirection() == Direction.INOUT) {
if (i != 0) {
- buffer.append(SQLReservedWords.COMMA)
- .append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.COMMA)
+ .append(Tokens.SPACE);
}
append(param);
}
}
}
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
/*
@@ -340,10 +343,10 @@
*/
public void visit(Exists obj) {
buffer.append(SQLReservedWords.EXISTS)
- .append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.LPAREN);
+ .append(Tokens.SPACE)
+ .append(Tokens.LPAREN);
append(obj.getSubquery());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
protected boolean isInfixFunction(String function) {
@@ -362,56 +365,56 @@
Object typeValue = ((Literal)args.get(1)).getValue();
buffer.append(name);
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(args.get(0));
if(name.equalsIgnoreCase(SQLReservedWords.CONVERT)) {
- buffer.append(SQLReservedWords.COMMA);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.COMMA);
+ buffer.append(Tokens.SPACE);
} else {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
buffer.append(SQLReservedWords.AS);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
}
buffer.append(typeValue);
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
} else if(isInfixFunction(name)) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
if(args != null) {
for(int i=0; i<args.size(); i++) {
append(args.get(i));
if(i < (args.size()-1)) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
buffer.append(name);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
}
}
}
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
} else if(name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPADD) || name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPDIFF)) {
buffer.append(name);
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
if(args != null && args.size() > 0) {
buffer.append(((Literal)args.get(0)).getValue());
for(int i=1; i<args.size(); i++) {
- buffer.append(SQLReservedWords.COMMA);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.COMMA);
+ buffer.append(Tokens.SPACE);
append(args.get(i));
}
}
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
} else {
buffer.append(obj.getName())
- .append(SQLReservedWords.LPAREN);
+ .append(Tokens.LPAREN);
append(obj.getParameters());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
}
@@ -424,10 +427,10 @@
}
if (obj.getCorrelationName() != null) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
if (useAsInGroupAlias()){
buffer.append(SQLReservedWords.AS)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
}
buffer.append(obj.getCorrelationName());
}
@@ -449,9 +452,9 @@
*/
public void visit(GroupBy obj) {
buffer.append(SQLReservedWords.GROUP)
- .append(SQLReservedWords.SPACE)
+ .append(Tokens.SPACE)
.append(SQLReservedWords.BY)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getElements());
}
@@ -461,25 +464,25 @@
public void visit(In obj) {
append(obj.getLeftExpression());
if (obj.isNegated()) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.NOT);
}
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.IN)
- .append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.LPAREN);
+ .append(Tokens.SPACE)
+ .append(Tokens.LPAREN);
append(obj.getRightExpressions());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(DerivedTable obj) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(obj.getQuery());
- buffer.append(SQLReservedWords.RPAREN);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.RPAREN);
+ buffer.append(Tokens.SPACE);
if(useAsInGroupAlias()) {
buffer.append(SQLReservedWords.AS);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
}
buffer.append(obj.getCorrelationName());
}
@@ -488,41 +491,41 @@
* @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(org.teiid.connector.language.Insert)
*/
public void visit(Insert obj) {
- buffer.append(SQLReservedWords.INSERT).append(SQLReservedWords.SPACE);
+ buffer.append(SQLReservedWords.INSERT).append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
- buffer.append(SQLReservedWords.INTO).append(SQLReservedWords.SPACE);
+ buffer.append(SQLReservedWords.INTO).append(Tokens.SPACE);
append(obj.getTable());
- buffer.append(SQLReservedWords.SPACE).append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.SPACE).append(Tokens.LPAREN);
int elementCount = obj.getColumns().size();
for (int i = 0; i < elementCount; i++) {
buffer.append(getElementName(obj.getColumns().get(i), false));
if (i < elementCount - 1) {
- buffer.append(SQLReservedWords.COMMA);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.COMMA);
+ buffer.append(Tokens.SPACE);
}
}
- buffer.append(SQLReservedWords.RPAREN);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.RPAREN);
+ buffer.append(Tokens.SPACE);
append(obj.getValueSource());
}
@Override
public void visit(ExpressionValueSource obj) {
- buffer.append(SQLReservedWords.VALUES).append(SQLReservedWords.SPACE).append(SQLReservedWords.LPAREN);
+ buffer.append(SQLReservedWords.VALUES).append(Tokens.SPACE).append(Tokens.LPAREN);
append(obj.getValues());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(IsNull obj) {
append(obj.getExpression());
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.IS)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
if (obj.isNegated()) {
buffer.append(SQLReservedWords.NOT)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
}
buffer.append(SQLReservedWords.NULL);
}
@@ -530,13 +533,13 @@
public void visit(Join obj) {
TableReference leftItem = obj.getLeftItem();
if(useParensForJoins() && leftItem instanceof Join) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(leftItem);
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
} else {
append(leftItem);
}
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
switch(obj.getJoinType()) {
case CROSS_JOIN:
@@ -544,7 +547,7 @@
break;
case FULL_OUTER_JOIN:
buffer.append(SQLReservedWords.FULL)
- .append(SQLReservedWords.SPACE)
+ .append(Tokens.SPACE)
.append(SQLReservedWords.OUTER);
break;
case INNER_JOIN:
@@ -552,34 +555,34 @@
break;
case LEFT_OUTER_JOIN:
buffer.append(SQLReservedWords.LEFT)
- .append(SQLReservedWords.SPACE)
+ .append(Tokens.SPACE)
.append(SQLReservedWords.OUTER);
break;
case RIGHT_OUTER_JOIN:
buffer.append(SQLReservedWords.RIGHT)
- .append(SQLReservedWords.SPACE)
+ .append(Tokens.SPACE)
.append(SQLReservedWords.OUTER);
break;
default: buffer.append(UNDEFINED);
}
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.JOIN)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
TableReference rightItem = obj.getRightItem();
if(rightItem instanceof Join && (useParensForJoins() || obj.getJoinType() == Join.JoinType.CROSS_JOIN)) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(rightItem);
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
} else {
append(rightItem);
}
final Condition condition = obj.getCondition();
if (condition != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.ON)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(condition);
}
}
@@ -587,31 +590,31 @@
public void visit(Like obj) {
append(obj.getLeftExpression());
if (obj.isNegated()) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.NOT);
}
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.LIKE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getRightExpression());
if (obj.getEscapeCharacter() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.ESCAPE)
- .append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.QUOTE)
+ .append(Tokens.SPACE)
+ .append(Tokens.QUOTE)
.append(obj.getEscapeCharacter().toString())
- .append(SQLReservedWords.QUOTE);
+ .append(Tokens.QUOTE);
}
}
public void visit(Limit obj) {
buffer.append(SQLReservedWords.LIMIT)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
if (obj.getRowOffset() > 0) {
buffer.append(obj.getRowOffset())
- .append(SQLReservedWords.COMMA)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.COMMA)
+ .append(Tokens.SPACE);
}
buffer.append(obj.getRowLimit());
}
@@ -643,33 +646,33 @@
.append(val)
.append("'}"); //$NON-NLS-1$
} else {
- buffer.append(SQLReservedWords.QUOTE)
- .append(escapeString(val, SQLReservedWords.QUOTE))
- .append(SQLReservedWords.QUOTE);
+ buffer.append(Tokens.QUOTE)
+ .append(escapeString(val, Tokens.QUOTE))
+ .append(Tokens.QUOTE);
}
}
}
public void visit(Not obj) {
buffer.append(SQLReservedWords.NOT)
- .append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.LPAREN);
+ .append(Tokens.SPACE)
+ .append(Tokens.LPAREN);
append(obj.getCriteria());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(OrderBy obj) {
buffer.append(SQLReservedWords.ORDER)
- .append(SQLReservedWords.SPACE)
+ .append(Tokens.SPACE)
.append(SQLReservedWords.BY)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getSortSpecifications());
}
public void visit(SortSpecification obj) {
append(obj.getExpression());
if (obj.getOrdering() == Ordering.DESC) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.DESC);
} // Don't print default "ASC"
}
@@ -679,175 +682,177 @@
}
public void visit(Select obj) {
- buffer.append(SQLReservedWords.SELECT).append(SQLReservedWords.SPACE);
+ buffer.append(SQLReservedWords.SELECT).append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
if (obj.isDistinct()) {
- buffer.append(SQLReservedWords.DISTINCT).append(SQLReservedWords.SPACE);
+ buffer.append(SQLReservedWords.DISTINCT).append(Tokens.SPACE);
}
if (useSelectLimit() && obj.getLimit() != null) {
append(obj.getLimit());
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
}
append(obj.getDerivedColumns());
if (obj.getFrom() != null) {
- buffer.append(SQLReservedWords.SPACE).append(SQLReservedWords.FROM).append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE).append(SQLReservedWords.FROM).append(Tokens.SPACE);
append(obj.getFrom());
}
if (obj.getWhere() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.WHERE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getWhere());
}
if (obj.getGroupBy() != null) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
append(obj.getGroupBy());
}
if (obj.getHaving() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.HAVING)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getHaving());
}
if (obj.getOrderBy() != null) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
append(obj.getOrderBy());
}
if (!useSelectLimit() && obj.getLimit() != null) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
append(obj.getLimit());
}
}
public void visit(SearchedCase obj) {
buffer.append(SQLReservedWords.CASE);
- final int whenCount = obj.getWhenConditions().size();
- for (int i = 0; i < whenCount; i++) {
- buffer.append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.WHEN)
- .append(SQLReservedWords.SPACE);
- append(obj.getWhenConditions().get(i));
- buffer.append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.THEN)
- .append(SQLReservedWords.SPACE);
- append(obj.getThenExpressions().get(i));
- }
+ for (SearchedWhenClause swc : obj.getCases()) {
+ append(swc);
+ }
if (obj.getElseExpression() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.ELSE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getElseExpression());
}
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.END);
}
+
+ @Override
+ public void visit(SearchedWhenClause obj) {
+ buffer.append(Tokens.SPACE).append(SQLReservedWords.WHEN)
+ .append(Tokens.SPACE);
+ append(obj.getCondition());
+ buffer.append(Tokens.SPACE).append(SQLReservedWords.THEN)
+ .append(Tokens.SPACE);
+ append(obj.getResult());
+ }
protected String getSourceComment(Command command) {
return ""; //$NON-NLS-1$
}
public void visit(ScalarSubquery obj) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(obj.getSubquery());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(DerivedColumn obj) {
append(obj.getExpression());
if (obj.getAlias() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.AS)
- .append(SQLReservedWords.SPACE)
+ .append(Tokens.SPACE)
.append(obj.getAlias());
}
}
public void visit(SubqueryComparison obj) {
append(obj.getLeftExpression());
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
switch(obj.getOperator()) {
- case EQ: buffer.append(SQLReservedWords.EQ); break;
- case GE: buffer.append(SQLReservedWords.GE); break;
- case GT: buffer.append(SQLReservedWords.GT); break;
- case LE: buffer.append(SQLReservedWords.LE); break;
- case LT: buffer.append(SQLReservedWords.LT); break;
- case NE: buffer.append(SQLReservedWords.NE); break;
+ case EQ: buffer.append(Tokens.EQ); break;
+ case GE: buffer.append(Tokens.GE); break;
+ case GT: buffer.append(Tokens.GT); break;
+ case LE: buffer.append(Tokens.LE); break;
+ case LT: buffer.append(Tokens.LT); break;
+ case NE: buffer.append(Tokens.NE); break;
default: buffer.append(UNDEFINED);
}
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
switch(obj.getQuantifier()) {
case ALL: buffer.append(SQLReservedWords.ALL); break;
case SOME: buffer.append(SQLReservedWords.SOME); break;
default: buffer.append(UNDEFINED);
}
- buffer.append(SQLReservedWords.SPACE);
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.SPACE);
+ buffer.append(Tokens.LPAREN);
append(obj.getSubquery());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(SubqueryIn obj) {
append(obj.getLeftExpression());
if (obj.isNegated()) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.NOT);
}
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.IN)
- .append(SQLReservedWords.SPACE)
- .append(SQLReservedWords.LPAREN);
+ .append(Tokens.SPACE)
+ .append(Tokens.LPAREN);
append(obj.getSubquery());
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
}
public void visit(Update obj) {
buffer.append(SQLReservedWords.UPDATE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
append(obj.getTable());
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.SET)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getChanges());
if (obj.getWhere() != null) {
- buffer.append(SQLReservedWords.SPACE)
+ buffer.append(Tokens.SPACE)
.append(SQLReservedWords.WHERE)
- .append(SQLReservedWords.SPACE);
+ .append(Tokens.SPACE);
append(obj.getWhere());
}
}
public void visit(SetClause clause) {
buffer.append(getElementName(clause.getSymbol(), false));
- buffer.append(SQLReservedWords.SPACE).append(SQLReservedWords.EQ).append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE).append(Tokens.EQ).append(Tokens.SPACE);
append(clause.getValue());
}
public void visit(SetQuery obj) {
appendSetQuery(obj, obj.getLeftQuery(), false);
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
appendSetOperation(obj.getOperation());
if(obj.isAll()) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
buffer.append(SQLReservedWords.ALL);
}
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
appendSetQuery(obj, obj.getRightQuery(), true);
OrderBy orderBy = obj.getOrderBy();
if(orderBy != null) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
append(orderBy);
}
Limit limit = obj.getLimit();
if(limit != null) {
- buffer.append(SQLReservedWords.SPACE);
+ buffer.append(Tokens.SPACE);
append(limit);
}
}
@@ -865,9 +870,9 @@
|| (right && obj instanceof SetQuery
&& ((parent.isAll() && !((SetQuery)obj).isAll())
|| parent.getOperation() != ((SetQuery)obj).getOperation()))) {
- buffer.append(SQLReservedWords.LPAREN);
+ buffer.append(Tokens.LPAREN);
append(obj);
- buffer.append(SQLReservedWords.RPAREN);
+ buffer.append(Tokens.RPAREN);
} else {
if (!parent.isAll() && obj instanceof SetQuery) {
((SetQuery)obj).setAll(false);
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -34,7 +34,7 @@
import org.teiid.connector.language.Function;
import org.teiid.connector.language.LanguageFactory;
import org.teiid.connector.language.Literal;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
public class AddDiffModifier extends FunctionModifier {
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -34,6 +34,7 @@
import org.teiid.connector.language.Function;
import org.teiid.connector.language.LanguageFactory;
import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.AndOr.Operator;
@@ -56,7 +57,6 @@
@Override
public List<?> translate(Function function) {
- List<Condition> when = new ArrayList<Condition>();
Expression a = function.getParameters().get(0);
Expression b = function.getParameters().get(1);
List<Condition> crits = new ArrayList<Condition>();
@@ -81,10 +81,9 @@
crit = crits.get(0);
} else {
crit = langFactory.createAndOr(Operator.OR, crits.get(0), crits.get(1));
- }
- when.add(crit);
- List<Expression> then = Arrays.asList((Expression)nullValue);
- return Arrays.asList(langFactory.createSearchedCaseExpression(when, then, function, TypeFacility.RUNTIME_TYPES.STRING));
+ }
+ List<SearchedWhenClause> cases = Arrays.asList(langFactory.createSearchedWhenCondition(crit, nullValue));
+ return Arrays.asList(langFactory.createSearchedCaseExpression(cases, function, TypeFacility.RUNTIME_TYPES.STRING));
}
private boolean isNotNull(Expression expr) {
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -47,20 +47,20 @@
import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.jdbc.translator.LocateFunctionModifier;
import org.teiid.connector.jdbc.translator.Translator;
+import org.teiid.connector.language.ColumnReference;
import org.teiid.connector.language.Command;
-import org.teiid.connector.language.ColumnReference;
+import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.ExpressionValueSource;
import org.teiid.connector.language.Function;
-import org.teiid.connector.language.NamedTable;
import org.teiid.connector.language.Insert;
-import org.teiid.connector.language.ExpressionValueSource;
import org.teiid.connector.language.Limit;
+import org.teiid.connector.language.NamedTable;
+import org.teiid.connector.language.QueryExpression;
import org.teiid.connector.language.Select;
-import org.teiid.connector.language.QueryExpression;
-import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
import org.teiid.connector.language.SetQuery.Operation;
import org.teiid.connector.metadata.runtime.Column;
import org.teiid.connector.visitor.util.CollectorVisitor;
-import org.teiid.connector.visitor.util.SQLReservedWords;
public class OracleSQLTranslator extends Translator {
@@ -193,7 +193,7 @@
String sequence = name.substring(seqIndex + SEQUENCE.length());
- int delimiterIndex = sequence.indexOf(SQLReservedWords.DOT);
+ int delimiterIndex = sequence.indexOf(Tokens.DOT);
if (delimiterIndex == -1) {
throw new ConnectorException("Invalid name in source sequence format. Expected <element name>" + SEQUENCE + "<sequence name>.<sequence value>, but was " + name); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -329,7 +329,7 @@
if (useIndex >= 0) {
String name = element.substring(0, useIndex);
if (group != null) {
- return group + SQLReservedWords.DOT + name;
+ return group + Tokens.DOT + name;
}
return name;
}
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -49,7 +49,7 @@
import org.teiid.connector.language.LanguageObject;
import org.teiid.connector.language.Limit;
import org.teiid.connector.language.Literal;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -30,7 +30,8 @@
import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.language.Expression;
import org.teiid.connector.language.Function;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
/**
@@ -73,13 +74,13 @@
List<Object> objs = new ArrayList<Object>();
objs.add("EXTRACT("); //$NON-NLS-1$
objs.add(FUNCTION_PART_MAP.get(function.getName().toLowerCase()));
- objs.add(SQLReservedWords.SPACE);
+ objs.add(Tokens.SPACE);
objs.add(SQLReservedWords.FROM);
- objs.add(SQLReservedWords.SPACE);
+ objs.add(Tokens.SPACE);
objs.add(args.get(0));
- objs.add(SQLReservedWords.RPAREN);
+ objs.add(Tokens.RPAREN);
if (function.getName().toLowerCase().equals(SourceSystemFunctions.DAYOFWEEK)) {
- objs.add(0, SQLReservedWords.LPAREN);
+ objs.add(0, Tokens.LPAREN);
objs.add(" + 1)"); //$NON-NLS-1$
}
return objs;
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -165,13 +165,13 @@
literal.setValue(1);
}
} else {
- Comparison[] whenExpr = {langFactory.createCompareCriteria(
+ Comparison whenExpr = langFactory.createCompareCriteria(
Operator.LT,
startIndex,
langFactory.createLiteral(1, Integer.class)
- )};
- Literal[] thenExpr = {langFactory.createLiteral(1, Integer.class)};
- startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(whenExpr), Arrays.asList(thenExpr), startIndex, TypeFacility.RUNTIME_TYPES.INTEGER);
+ );
+ Literal thenExpr = langFactory.createLiteral(1, Integer.class);
+ startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(langFactory.createSearchedWhenCondition(whenExpr, thenExpr)), startIndex, TypeFacility.RUNTIME_TYPES.INTEGER);
}
return startIndex;
}
Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -48,13 +48,14 @@
import org.teiid.connector.language.LanguageObject;
import org.teiid.connector.language.Like;
import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
import org.teiid.connector.language.SearchedCase;
import org.teiid.connector.language.SetClause;
import org.teiid.connector.language.SortSpecification;
import org.teiid.connector.language.Argument.Direction;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
import org.teiid.connector.language.SetQuery.Operation;
import org.teiid.connector.language.SortSpecification.Ordering;
-import org.teiid.connector.visitor.util.SQLReservedWords;
import org.teiid.connector.visitor.util.SQLStringVisitor;
@@ -188,9 +189,9 @@
} else {
// If obj is string, toSting() will not create a new String
// object, it returns it self, so new object creation.
- valuesbuffer.append(SQLReservedWords.QUOTE)
- .append(escapeString(obj.toString(), SQLReservedWords.QUOTE))
- .append(SQLReservedWords.QUOTE);
+ valuesbuffer.append(Tokens.QUOTE)
+ .append(escapeString(obj.toString(), Tokens.QUOTE))
+ .append(Tokens.QUOTE);
}
}
}
Modified: branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,7 +29,7 @@
import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
import org.teiid.connector.language.Function;
import org.teiid.connector.language.Literal;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
import junit.framework.TestCase;
Modified: branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java
===================================================================
--- branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -7,7 +7,7 @@
*/
package com.metamatrix.connector.salesforce;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
public class NameUtil {
Modified: branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-03-02 14:32:21 UTC (rev 1886)
@@ -437,9 +437,12 @@
<para>You can use a number of special variables when defining your update procedure.</para>
<sect3 id="input_variables">
<title>INPUT Variables</title>
- <para>Every attribute in the view whose UPDATE and INSERT transformations you are defining has an equivalent variable named INPUT.<column_name></para>
+ <para>Every attribute in the view whose UPDATE and INSERT transformations you are defining has an equivalent variable named INPUTS.<column_name></para>
<para>When an INSERT or an UPDATE command is executed against the view, these variables are initialized to the values in the INSERT VALUES clause or the UPDATE SET clause respectively.</para>
<para>In an UPDATE procedure, the default value of these variables, if they are not set by the command, is null. In an INSERT procedure, the default value of these variables is the default value of the virtual table attributes, based on their defined types. See <link linkend="changing_variables">CHANGING Variables</link> for distinguishing defaults from passed values.</para>
+ <warning>
+ <para>In prior release of Teiid INPUT was also accepted as the quailifer for an input variable. As of Teidd 7, INPUT is a reserved word, so INPUTS is the preferred qualifier.</para>
+ </warning>
</sect3>
<sect3 id="changing_variables">
<title>CHANGING Variables</title>
@@ -579,7 +582,7 @@
<entry>Translates any user criteria using the default mappings.</entry>
</row>
<row>
- <entry>TRANSLATE CRITERIA WITH (column1 = 'A', column2 = INPUT.column2 + 2)</entry>
+ <entry>TRANSLATE CRITERIA WITH (column1 = 'A', column2 = INPUTS.column2 + 2)</entry>
<entry>Translates any criteria with some additional mappings: column1 is always mapped to 'A' and column2 is mapped to the incoming column2 value + 2.</entry>
</row>
<row>
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,9 +24,11 @@
import java.io.Serializable;
import java.util.*;
+
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.core.util.Assertion;
import com.metamatrix.core.util.HashCodeUtil;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.function.metadata.*;
/**
@@ -169,7 +171,7 @@
str.append(", "); //$NON-NLS-1$
} else {
str.append(" "); //$NON-NLS-1$
- str.append(ReservedWords.AS);
+ str.append(SQLReservedWords.AS);
str.append(" "); //$NON-NLS-1$
}
str.append(inputParamNames.get(1));
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -36,13 +36,14 @@
import java.util.Properties;
import java.util.TimeZone;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.api.exception.query.ExpressionEvaluationException;
import com.metamatrix.api.exception.query.FunctionExecutionException;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.common.util.TimestampWithTimezone;
import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.util.CommandContext;
import com.metamatrix.query.util.ErrorMessageKeys;
@@ -449,7 +450,7 @@
cal.setTime(timestamp);
// case of interval = 1, fractional seconds (nanos), don't go to branches of addField()
- if (intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_FRAC_SECOND)) {
+ if (intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
int countValue = count.intValue();
nanos += countValue;
@@ -487,23 +488,23 @@
private static void addField(String interval, Integer count, Calendar cal) {
int countValue = count.intValue();
- if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_FRAC_SECOND)) {
+ if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
//nano seconds - should never get into this branch
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_SECOND)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_SECOND)) {
cal.add(Calendar.SECOND, countValue);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_MINUTE)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MINUTE)) {
cal.add(Calendar.MINUTE, countValue);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_HOUR)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_HOUR)) {
cal.add(Calendar.HOUR_OF_DAY, countValue);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_DAY)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_DAY)) {
cal.add(Calendar.DAY_OF_YEAR, countValue);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_WEEK)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_WEEK)) {
cal.add(Calendar.WEEK_OF_YEAR, countValue);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_MONTH)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MONTH)) {
cal.add(Calendar.MONTH, countValue);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_QUARTER)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_QUARTER)) {
cal.add(Calendar.MONTH, countValue*3);
- } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_YEAR)) {
+ } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_YEAR)) {
cal.add(Calendar.YEAR, countValue);
}
}
@@ -525,25 +526,25 @@
long tsDiff = ts2 - ts1;
long count = 0;
- if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_FRAC_SECOND)) {
+ if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
count = tsDiff;
} else {
tsDiff = tsDiff / 1000000; //convert to milliseconds
- if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_SECOND)) {
+ if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_SECOND)) {
count = tsDiff / 1000;
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_MINUTE)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MINUTE)) {
count = (tsDiff / 1000) / 60;
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_HOUR)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_HOUR)) {
count = (tsDiff / 1000) / (60*60);
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_DAY)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_DAY)) {
count = (tsDiff / 1000) / (60*60*24);
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_WEEK)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_WEEK)) {
count = (tsDiff / 1000) / (60*60*24*7);
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_MONTH)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MONTH)) {
count = (tsDiff / 1000) / (60*60*24*30);
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_QUARTER)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_QUARTER)) {
count = (tsDiff / 1000) / (60*60*24*91);
- } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_YEAR)) {
+ } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_YEAR)) {
count = (tsDiff / 1000) / (60*60*24*365);
}
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -28,6 +28,7 @@
import java.util.List;
import org.teiid.connector.api.ConnectorCapabilities.SupportedJoinCriteria;
+import org.teiid.connector.language.SQLReservedWords;
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
@@ -38,7 +39,6 @@
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.lang.SetQuery.Operation;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
@@ -145,7 +145,7 @@
// Check particular function
String func = aggregate.getAggregateFunction();
- if(func.equals(ReservedWords.COUNT)) {
+ if(func.equals(SQLReservedWords.COUNT)) {
if(aggregate.getExpression() == null) {
if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_COUNT_STAR)) {
return false;
@@ -155,19 +155,19 @@
return false;
}
}
- } else if(func.equals(ReservedWords.SUM)) {
+ } else if(func.equals(SQLReservedWords.SUM)) {
if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_SUM)) {
return false;
}
- } else if(func.equals(ReservedWords.AVG)) {
+ } else if(func.equals(SQLReservedWords.AVG)) {
if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_AVG)) {
return false;
}
- } else if(func.equals(ReservedWords.MIN)) {
+ } else if(func.equals(SQLReservedWords.MIN)) {
if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_MIN)) {
return false;
}
- } else if(func.equals(ReservedWords.MAX)) {
+ } else if(func.equals(SQLReservedWords.MAX)) {
if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_MAX)) {
return false;
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -35,6 +35,8 @@
import java.util.Map;
import java.util.Set;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.api.exception.query.QueryPlannerException;
@@ -57,7 +59,6 @@
import com.metamatrix.query.resolver.util.ResolverUtil;
import com.metamatrix.query.resolver.util.ResolverVisitor;
import com.metamatrix.query.rewriter.QueryRewriter;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.LanguageObject.Util;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.Criteria;
@@ -350,7 +351,7 @@
if (pushdown) {
projectedViewSymbols.add(agg);
} else {
- if (agg.getAggregateFunction().equals(ReservedWords.COUNT)) {
+ if (agg.getAggregateFunction().equals(SQLReservedWords.COUNT)) {
SearchedCaseExpression count = new SearchedCaseExpression(Arrays.asList(new IsNullCriteria(agg.getExpression())), Arrays.asList(new Constant(Integer.valueOf(0))));
count.setElseExpression(new Constant(Integer.valueOf(1)));
count.setType(DataTypeManager.DefaultDataClasses.INTEGER);
@@ -500,7 +501,7 @@
} else {
// if the source has no rows we need to insert a select node with criteria count(*)>0
PlanNode selectNode = NodeFactory.getNewNode(NodeConstants.Types.SELECT);
- AggregateSymbol count = new AggregateSymbol("stagedAgg", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol count = new AggregateSymbol("stagedAgg", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
aggregates.add(count); //consider the count aggregate for the push down call below
selectNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, new CompareCriteria(count, CompareCriteria.GT,
new Constant(new Integer(0))));
@@ -668,9 +669,9 @@
Expression newExpression = null;
String aggFunction = partitionAgg.getAggregateFunction();
- if (aggFunction.equals(ReservedWords.COUNT)) {
+ if (aggFunction.equals(SQLReservedWords.COUNT)) {
//COUNT(x) -> CONVERT(SUM(COUNT(x)), INTEGER)
- AggregateSymbol newAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, partitionAgg); //$NON-NLS-1$
+ AggregateSymbol newAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, partitionAgg); //$NON-NLS-1$
// Build conversion function to convert SUM (which returns LONG) back to INTEGER
Constant convertTargetType = new Constant(DataTypeManager.getDataTypeName(partitionAgg.getType()),
@@ -680,13 +681,13 @@
newExpression = convertFunc;
nestedAggregates.add(partitionAgg);
- } else if (aggFunction.equals(ReservedWords.AVG)) {
+ } else if (aggFunction.equals(SQLReservedWords.AVG)) {
//AVG(x) -> SUM(SUM(x)) / SUM(COUNT(x))
- AggregateSymbol countAgg = new AggregateSymbol("stagedAgg", ReservedWords.COUNT, false, partitionAgg.getExpression()); //$NON-NLS-1$
- AggregateSymbol sumAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, partitionAgg.getExpression()); //$NON-NLS-1$
+ AggregateSymbol countAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.COUNT, false, partitionAgg.getExpression()); //$NON-NLS-1$
+ AggregateSymbol sumAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, partitionAgg.getExpression()); //$NON-NLS-1$
- AggregateSymbol sumSumAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, sumAgg); //$NON-NLS-1$
- AggregateSymbol sumCountAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, countAgg); //$NON-NLS-1$
+ AggregateSymbol sumSumAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, sumAgg); //$NON-NLS-1$
+ AggregateSymbol sumCountAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, countAgg); //$NON-NLS-1$
Function divideFunc = new Function("/", new Expression[] {sumSumAgg, sumCountAgg}); //$NON-NLS-1$
ResolverVisitor.resolveLanguageObject(divideFunc, metadata);
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -28,6 +28,8 @@
import java.util.List;
import java.util.Set;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.api.exception.query.QueryPlannerException;
@@ -42,7 +44,6 @@
import com.metamatrix.query.optimizer.relational.plantree.NodeEditor;
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
import com.metamatrix.query.resolver.util.ResolverUtil;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.lang.OrderBy;
@@ -276,8 +277,8 @@
static boolean areAggregatesCardinalityDependent(Set<AggregateSymbol> aggs) {
for (AggregateSymbol aggregateSymbol : aggs) {
- if (aggregateSymbol.getAggregateFunction().equalsIgnoreCase(ReservedWords.COUNT) ||
- aggregateSymbol.getAggregateFunction().equalsIgnoreCase(ReservedWords.AVG)) {
+ if (aggregateSymbol.getAggregateFunction().equalsIgnoreCase(SQLReservedWords.COUNT) ||
+ aggregateSymbol.getAggregateFunction().equalsIgnoreCase(SQLReservedWords.AVG)) {
return true;
}
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,10 +24,11 @@
import java.io.StringReader;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.api.exception.MetaMatrixProcessingException;
import com.metamatrix.api.exception.query.QueryParserException;
import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.Option;
@@ -126,7 +127,7 @@
// Check for OPTION
Option option = null;
int closeBracket = sql.lastIndexOf(XML_CLOSE_BRACKET);
- int optionIndex = sql.toUpperCase().lastIndexOf(ReservedWords.OPTION);
+ int optionIndex = sql.toUpperCase().lastIndexOf(SQLReservedWords.OPTION);
if (optionIndex != -1 && optionIndex > closeBracket){
String optionSQL = sql.substring(optionIndex);
option = getOption(optionSQL, parseInfo);
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -27,10 +27,11 @@
import java.util.LinkedList;
import java.util.List;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.core.util.Assertion;
import com.metamatrix.core.util.StringUtil;
import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.FromClause;
import com.metamatrix.query.sql.lang.JoinType;
@@ -201,17 +202,17 @@
return JoinType.JOIN_INNER;
}
String joinType = joinTypeToken.image;
- if(joinType.equalsIgnoreCase(ReservedWords.INNER)) {
+ if(joinType.equalsIgnoreCase(SQLReservedWords.INNER)) {
return JoinType.JOIN_INNER;
- } else if(joinType.equalsIgnoreCase(ReservedWords.CROSS)) {
+ } else if(joinType.equalsIgnoreCase(SQLReservedWords.CROSS)) {
return JoinType.JOIN_CROSS;
- } else if(joinType.equalsIgnoreCase(ReservedWords.LEFT)) {
+ } else if(joinType.equalsIgnoreCase(SQLReservedWords.LEFT)) {
return JoinType.JOIN_LEFT_OUTER;
- } else if(joinType.equalsIgnoreCase(ReservedWords.RIGHT)) {
+ } else if(joinType.equalsIgnoreCase(SQLReservedWords.RIGHT)) {
return JoinType.JOIN_RIGHT_OUTER;
- } else if(joinType.equalsIgnoreCase(ReservedWords.FULL)) {
+ } else if(joinType.equalsIgnoreCase(SQLReservedWords.FULL)) {
return JoinType.JOIN_FULL_OUTER;
- } else if(joinType.equalsIgnoreCase(ReservedWords.UNION)) {
+ } else if(joinType.equalsIgnoreCase(SQLReservedWords.UNION)) {
return JoinType.JOIN_UNION;
} else {
Object[] params = new Object[] { joinType };
@@ -230,23 +231,23 @@
int num = info.anonExprCount++;
return "expr" + (num == 0 ? "" : ""+num); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if(functionType.equals(ReservedWords.COUNT)) {
+ } else if(functionType.equals(SQLReservedWords.COUNT)) {
int num = info.anonCountCount++;
return "count" + (num == 0 ? "" : ""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if(functionType.equals(ReservedWords.SUM)) {
+ } else if(functionType.equals(SQLReservedWords.SUM)) {
int num = info.anonSumCount++;
return "sum" + (num == 0 ? "" : ""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if(functionType.equals(ReservedWords.AVG)) {
+ } else if(functionType.equals(SQLReservedWords.AVG)) {
int num = info.anonAvgCount++;
return "avg" + (num == 0 ? "" : ""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if(functionType.equals(ReservedWords.MIN)) {
+ } else if(functionType.equals(SQLReservedWords.MIN)) {
int num = info.anonMinCount++;
return "min" + (num == 0 ? "" : ""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if(functionType.equals(ReservedWords.MAX)) {
+ } else if(functionType.equals(SQLReservedWords.MAX)) {
int num = info.anonMaxCount++;
return "max" + (num == 0 ? "" : ""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else {
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -30,6 +30,8 @@
import java.util.List;
import java.util.Map;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.MetaMatrixProcessingException;
import com.metamatrix.api.exception.query.QueryProcessingException;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -28,6 +28,8 @@
import java.util.List;
import java.util.Map;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.MetaMatrixProcessingException;
import com.metamatrix.api.exception.query.ExpressionEvaluationException;
@@ -47,7 +49,6 @@
import com.metamatrix.query.function.aggregate.Sum;
import com.metamatrix.query.processor.ProcessorDataManager;
import com.metamatrix.query.processor.relational.SortUtility.Mode;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.OrderBy;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
import com.metamatrix.query.sql.symbol.Expression;
@@ -163,19 +164,19 @@
}
aggProjectionIndexes[i] = index;
String function = aggSymbol.getAggregateFunction();
- if(function.equals(ReservedWords.COUNT)) {
+ if(function.equals(SQLReservedWords.COUNT)) {
functions[i] = new Count();
- } else if(function.equals(ReservedWords.SUM)) {
+ } else if(function.equals(SQLReservedWords.SUM)) {
functions[i] = new Sum();
- } else if(function.equals(ReservedWords.AVG)) {
+ } else if(function.equals(SQLReservedWords.AVG)) {
functions[i] = new Avg();
- } else if(function.equals(ReservedWords.MIN)) {
+ } else if(function.equals(SQLReservedWords.MIN)) {
functions[i] = new Min();
} else {
functions[i] = new Max();
}
- if(aggSymbol.isDistinct() && !function.equals(ReservedWords.MIN) && !function.equals(ReservedWords.MAX)) {
+ if(aggSymbol.isDistinct() && !function.equals(SQLReservedWords.MIN) && !function.equals(SQLReservedWords.MAX)) {
functions[i] = new DuplicateFilter(functions[i], getBufferManager(), getConnectionID());
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -106,7 +106,7 @@
TempMetadataStore childMetadata = new TempMetadataStore();
QueryMetadataInterface resolveMetadata = new TempMetadataAdapter(metadata, childMetadata);
- GroupContext externalGroups = findChildCommandMetadata(procCommand, subCommand, childMetadata, resolveMetadata);
+ GroupContext externalGroups = findChildCommandMetadata(procCommand, childMetadata, resolveMetadata);
QueryResolver.setChildMetadata(subCommand, childMetadata.getData(), externalGroups);
@@ -132,20 +132,27 @@
* Find all metadata defined by this command for it's children. This metadata should be collected
* in the childMetadata object. Typical uses of this are for stored queries that define parameter
* variables valid in subcommands. only used for inserts, updates, and deletes
+ * @param metadata Metadata access
* @param command The command to find metadata on
- * @param metadata Metadata access
* @param childMetadata The store to collect child metadata in
* @throws QueryMetadataException If there is a metadata problem
* @throws QueryResolverException If the query cannot be resolved
* @throws MetaMatrixComponentException If there is an internal error
*/
- public GroupContext findChildCommandMetadata(ProcedureContainer container, Command subCommand, TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata)
+ public GroupContext findChildCommandMetadata(ProcedureContainer container, TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata)
throws QueryMetadataException, QueryResolverException, MetaMatrixComponentException {
// get the group on the delete statement
GroupSymbol group = container.getGroup();
// proceed further if it is a virtual group
- GroupContext externalGroups = new GroupContext();
+ return createChildMetadata(discoveredMetadata, metadata, group);
+ }
+
+ static GroupContext createChildMetadata(
+ TempMetadataStore discoveredMetadata,
+ QueryMetadataInterface metadata, GroupSymbol group)
+ throws QueryMetadataException, MetaMatrixComponentException {
+ GroupContext externalGroups = new GroupContext();
//Look up elements for the virtual group
List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(group, metadata);
@@ -159,6 +166,7 @@
}
addScalarGroup(ProcedureReservedWords.INPUT, discoveredMetadata, externalGroups, inputElments);
+ addScalarGroup(ProcedureReservedWords.INPUTS, discoveredMetadata, externalGroups, inputElments);
// Switch type to be boolean for all CHANGING variables
List<ElementSymbol> changingElements = new ArrayList<ElementSymbol>(elements.size());
@@ -170,10 +178,9 @@
}
addScalarGroup(ProcedureReservedWords.CHANGING, discoveredMetadata, externalGroups, changingElements);
+ return externalGroups;
+ }
- return externalGroups;
- }
-
/**
* @see com.metamatrix.query.resolver.CommandResolver#resolveCommand(com.metamatrix.query.sql.lang.Command, com.metamatrix.query.metadata.TempMetadataAdapter, com.metamatrix.query.analysis.AnalysisRecord, boolean)
*/
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -75,8 +75,7 @@
@Override
public GroupContext findChildCommandMetadata(ProcedureContainer container,
- Command subCommand, TempMetadataStore discoveredMetadata,
- QueryMetadataInterface metadata) throws QueryMetadataException,
+ TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata) throws QueryMetadataException,
QueryResolverException, MetaMatrixComponentException {
//defect 16451: don't expose input and changing variables to delete procedures
return null;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,30 +22,32 @@
package com.metamatrix.query.resolver.command;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.teiid.connector.language.SQLReservedWords;
+
+import com.metamatrix.api.exception.MetaMatrixComponentException;
+import com.metamatrix.api.exception.query.QueryMetadataException;
+import com.metamatrix.api.exception.query.QueryResolverException;
+import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.query.QueryPlugin;
+import com.metamatrix.query.analysis.AnalysisRecord;
+import com.metamatrix.query.metadata.TempMetadataAdapter;
+import com.metamatrix.query.metadata.TempMetadataID;
+import com.metamatrix.query.resolver.CommandResolver;
+import com.metamatrix.query.resolver.util.ResolverUtil;
+import com.metamatrix.query.resolver.util.ResolverVisitor;
+import com.metamatrix.query.sql.ProcedureReservedWords;
+import com.metamatrix.query.sql.lang.Command;
+import com.metamatrix.query.sql.lang.DynamicCommand;
+import com.metamatrix.query.sql.lang.SetClause;
+import com.metamatrix.query.sql.symbol.ElementSymbol;
+import com.metamatrix.query.sql.symbol.GroupSymbol;
+import com.metamatrix.query.sql.symbol.SingleElementSymbol;
-import com.metamatrix.api.exception.MetaMatrixComponentException;
-import com.metamatrix.api.exception.query.QueryMetadataException;
-import com.metamatrix.api.exception.query.QueryResolverException;
-import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.analysis.AnalysisRecord;
-import com.metamatrix.query.metadata.TempMetadataAdapter;
-import com.metamatrix.query.metadata.TempMetadataID;
-import com.metamatrix.query.resolver.CommandResolver;
-import com.metamatrix.query.resolver.util.ResolverUtil;
-import com.metamatrix.query.resolver.util.ResolverVisitor;
-import com.metamatrix.query.sql.ProcedureReservedWords;
-import com.metamatrix.query.sql.lang.Command;
-import com.metamatrix.query.sql.lang.DynamicCommand;
-import com.metamatrix.query.sql.lang.SetClause;
-import com.metamatrix.query.sql.symbol.ElementSymbol;
-import com.metamatrix.query.sql.symbol.GroupSymbol;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
-
public class DynamicCommandResolver implements CommandResolver {
/**
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -209,8 +209,7 @@
@Override
public GroupContext findChildCommandMetadata(ProcedureContainer container,
- Command subCommand, TempMetadataStore discoveredMetadata,
- QueryMetadataInterface metadata) throws QueryMetadataException,
+ TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata) throws QueryMetadataException,
QueryResolverException, MetaMatrixComponentException {
StoredProcedure storedProcedureCommand = (StoredProcedure) container;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -249,9 +249,11 @@
String varName = varSymbol.getShortCanonicalName();
String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + varName;
String inputKey = ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + varName;
-
+ String inputsKey = ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + varName;
result.put(changingKey, new Constant(Boolean.TRUE));
- result.put(inputKey, valIter.next());
+ Object value = valIter.next();
+ result.put(inputKey, value);
+ result.put(inputsKey, value);
}
Collection insertElmnts = ResolverUtil.resolveElementsInGroup(insert.getGroup(), metadata);
@@ -267,9 +269,10 @@
String varName = varSymbol.getShortCanonicalName();
String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + varName;
String inputKey = ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + varName;
-
+ String inputsKey = ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + varName;
result.put(changingKey, new Constant(Boolean.FALSE));
result.put(inputKey, value);
+ result.put(inputsKey, value);
}
return result;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -92,6 +92,7 @@
GroupSymbol groupSymbol = (GroupSymbol) groupIter.next();
String groupName = groupSymbol.getName();
if(!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUT) &&
+ !groupName.equalsIgnoreCase(ProcedureReservedWords.INPUTS) &&
!groupName.equalsIgnoreCase(ProcedureReservedWords.CHANGING) ) {
// set the groupSymbol on the procedure
ResolverUtil.resolveGroup(groupSymbol, metadata);
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -102,10 +102,10 @@
String varName = leftSymbol.getShortCanonicalName();
String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + varName;
String inputKey = ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + varName;
-
+ String inputsKey = ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + varName;
result.put(changingKey, new Constant(Boolean.TRUE));
result.put(inputKey, entry.getValue());
-
+ result.put(inputsKey, entry.getValue());
updateVars.add(leftSymbol);
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -48,6 +48,7 @@
import com.metamatrix.query.metadata.QueryMetadataInterface;
import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.LanguageVisitor;
+import com.metamatrix.query.sql.ProcedureReservedWords;
import com.metamatrix.query.sql.lang.BetweenCriteria;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.GroupContext;
@@ -205,6 +206,13 @@
//copy the match information
ElementSymbol resolvedSymbol = match.element;
+ if (isExternal //convert input to inputs
+ && metadata.isScalarGroup(resolvedSymbol.getGroupSymbol().getMetadataID())
+ && ProcedureReservedWords.INPUT.equals(groupContext)) {
+ resolvedSymbol = new ElementSymbol(ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + elementShortName);
+ resolveElementSymbol(resolvedSymbol);
+ elementSymbol.setOutputName(resolvedSymbol.getOutputName());
+ }
elementSymbol.setIsExternalReference(isExternal);
elementSymbol.setType(resolvedSymbol.getType());
elementSymbol.setMetadataID(resolvedSymbol.getMetadataID());
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -42,6 +42,7 @@
import java.util.StringTokenizer;
import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.SQLReservedWords;
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.MetaMatrixException;
@@ -71,7 +72,6 @@
import com.metamatrix.query.resolver.util.ResolverVisitor;
import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.ProcedureReservedWords;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.LanguageObject.Util;
import com.metamatrix.query.sql.lang.AbstractSetCriteria;
import com.metamatrix.query.sql.lang.BatchedUpdateCommand;
@@ -1892,7 +1892,7 @@
Expression value = (Expression)variables.get(es.getCanonicalName());
if (value == null) {
- if (grpName.equals(ProcedureReservedWords.INPUT)) {
+ if ((grpName.equals(ProcedureReservedWords.INPUT) || grpName.equals(ProcedureReservedWords.INPUTS))) {
return new Constant(null, es.getType());
}
if (grpName.equals(ProcedureReservedWords.CHANGING)) {
@@ -1944,8 +1944,8 @@
}
private Expression rewriteExpression(AggregateSymbol expression) {
- if (!expression.getAggregateFunction().equals(ReservedWords.COUNT)
- && !expression.getAggregateFunction().equals(ReservedWords.SUM)
+ if (!expression.getAggregateFunction().equals(SQLReservedWords.COUNT)
+ && !expression.getAggregateFunction().equals(SQLReservedWords.SUM)
&& EvaluatableVisitor.willBecomeConstant(expression.getExpression())) {
try {
return new ExpressionSymbol(expression.getName(), ResolverUtil
@@ -1998,7 +1998,7 @@
}
case 1: {//from_unixtime(a) => timestampadd(SQL_TSI_SECOND, a, new Timestamp(0))
Function result = new Function(FunctionLibrary.TIMESTAMPADD,
- new Expression[] {new Constant(ReservedWords.SQL_TSI_SECOND), function.getArg(0), new Constant(new Timestamp(0)) });
+ new Expression[] {new Constant(SQLReservedWords.SQL_TSI_SECOND), function.getArg(0), new Constant(new Timestamp(0)) });
//resolve the function
FunctionDescriptor descriptor =
funcLibrary.findFunction(FunctionLibrary.TIMESTAMPADD, new Class[] { DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.INTEGER, DataTypeManager.DefaultDataClasses.TIMESTAMP });
@@ -2464,7 +2464,7 @@
Boolean result = null;
for (ElementSymbol var : ElementCollectorVisitor.getElements(expr, false)) {
String grpName = var.getGroupSymbol().getName();
- if (var.isExternalReference() && grpName.equals(ProcedureReservedWords.INPUT)) {
+ if (var.isExternalReference() && (grpName.equalsIgnoreCase(ProcedureReservedWords.INPUT) || grpName.equalsIgnoreCase(ProcedureReservedWords.INPUTS))) {
String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + var.getShortCanonicalName();
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,15 +22,21 @@
package com.metamatrix.query.sql;
+import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;
+import org.teiid.connector.language.SQLReservedWords;
+
/**
* Special variable names in stored procedure language.
*/
public class ProcedureReservedWords {
- public static final String INPUT = "INPUT"; //$NON-NLS-1$
+ @Deprecated
+ public static final String INPUT = SQLReservedWords.INPUT;
+
+ public static final String INPUTS = "INPUTS"; //$NON-NLS-1$
public static final String ROWS_UPDATED = "ROWS_UPDATED"; //$NON-NLS-1$
@@ -38,29 +44,25 @@
public static final String VARIABLES = "VARIABLES"; //$NON-NLS-1$
- public static final String USING = "USING"; //$NON-NLS-1$
-
- public static final String[] ALL_WORDS = new String[] {
- INPUT,
- ROWS_UPDATED,
- CHANGING,
- VARIABLES,
- USING
- };
-
+ public static final String USING = SQLReservedWords.USING;
+
/**
- * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
- */
- private static final Set PROCEDURE_RESERVED_WORDS = new HashSet();
+ * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
+ */
+ private static final Set<String> RESERVED_WORDS = new HashSet<String>();
- // Initialize PROCEDURE_RESERVED_WORDS set
- static {
- // Iterate through the reserved words and capitalize all of them
- for ( int i=0; i!=ProcedureReservedWords.ALL_WORDS.length; ++i ) {
- String reservedWord = ProcedureReservedWords.ALL_WORDS[i];
- ProcedureReservedWords.PROCEDURE_RESERVED_WORDS.add( reservedWord.toUpperCase() );
- }
- }
+ // Initialize RESERVED_WORDS set - This is a poor man's enum. To much legacy code expects the constants to be Strings.
+ static {
+ Field[] fields = SQLReservedWords.class.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.getType() == String.class) {
+ try {
+ RESERVED_WORDS.add((String)field.get(null));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
/** Can't construct */
private ProcedureReservedWords() {}
@@ -74,6 +76,6 @@
if (str == null) {
return false;
}
- return PROCEDURE_RESERVED_WORDS.contains(str.toUpperCase());
+ return RESERVED_WORDS.contains(str.toUpperCase());
}
}
Deleted: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -1,296 +0,0 @@
-/*
- * 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 com.metamatrix.query.sql;
-
-import java.util.Set;
-import java.util.HashSet;
-
-public class ReservedWords {
-
- public static final String ANY = "ANY"; //$NON-NLS-1$
- public static final String ALL = "ALL"; //$NON-NLS-1$
- public static final String ALL_COLS = "*"; //$NON-NLS-1$
- public static final String AND = "AND"; //$NON-NLS-1$
- public static final String AS = "AS"; //$NON-NLS-1$
- public static final String ASC = "ASC"; //$NON-NLS-1$
- public static final String AVG = "AVG"; //$NON-NLS-1$
- public static final String BEGIN = "BEGIN"; //$NON-NLS-1$
- public static final String BETWEEN = "BETWEEN"; //$NON-NLS-1$
- public static final String BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
- public static final String BIGINTEGER = "BIGINTEGER"; //$NON-NLS-1$
- public static final String BLOB = "BLOB"; //$NON-NLS-1$
- public static final String BREAK = "BREAK"; //$NON-NLS-1$
- public static final String BY = "BY"; //$NON-NLS-1$
- public static final String BYTE = "BYTE"; //$NON-NLS-1$
- public static final String CASE = "CASE"; //$NON-NLS-1$
- public static final String CAST = "CAST"; //$NON-NLS-1$
- public static final String CHAR = "CHAR"; //$NON-NLS-1$
- public static final String CLOB = "CLOB"; //$NON-NLS-1$
- public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
- public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
- public static final String COUNT = "COUNT"; //$NON-NLS-1$
- public static final String CRITERIA = "CRITERIA"; //$NON-NLS-1$
- public static final String CREATE = "CREATE"; //$NON-NLS-1$
- public static final String CROSS = "CROSS"; //$NON-NLS-1$
- public static final String DATE = "DATE"; //$NON-NLS-1$
- public static final String DEBUG = "DEBUG"; //$NON-NLS-1$
- public static final String DECLARE = "DECLARE"; //$NON-NLS-1$
- public static final String DELETE = "DELETE"; //$NON-NLS-1$
- public static final String DESC = "DESC"; //$NON-NLS-1$
- public static final String DISTINCT = "DISTINCT"; //$NON-NLS-1$
- public static final String DOUBLE = "DOUBLE"; //$NON-NLS-1$
- public static final String DROP = "DROP"; //$NON-NLS-1$
- public static final String ELSE = "ELSE"; //$NON-NLS-1$
- public static final String END = "END"; //$NON-NLS-1$
- public static final String ERROR = "ERROR"; //$NON-NLS-1$
- public static final String ESCAPE = "ESCAPE"; //$NON-NLS-1$
- public static final String EXCEPT = "EXCEPT"; //$NON-NLS-1$
- public static final String EXEC = "EXEC"; //$NON-NLS-1$
- public static final String EXECUTE = "EXECUTE"; //$NON-NLS-1$
- public static final String EXISTS = "EXISTS"; //$NON-NLS-1$
- public static final String FALSE = "FALSE"; //$NON-NLS-1$
- public static final String FLOAT = "FLOAT"; //$NON-NLS-1$
- public static final String FOR = "FOR"; //$NON-NLS-1$
- public static final String FROM = "FROM"; //$NON-NLS-1$
- public static final String FULL = "FULL"; //$NON-NLS-1$
- public static final String GROUP = "GROUP"; //$NON-NLS-1$
- public static final String HAS = "HAS"; //$NON-NLS-1$
- public static final String HAVING = "HAVING"; //$NON-NLS-1$
- public static final String IF = "IF"; //$NON-NLS-1$
- public static final String IN = "IN"; //$NON-NLS-1$
- public static final String INNER = "INNER"; //$NON-NLS-1$
- public static final String INSERT = "INSERT"; //$NON-NLS-1$
- public static final String INTEGER = "INTEGER"; //$NON-NLS-1$
- public static final String INTERSECT = "INTERSECT"; //$NON-NLS-1$
- public static final String INTO = "INTO"; //$NON-NLS-1$
- public static final String IS = "IS"; //$NON-NLS-1$
- public static final String JOIN = "JOIN"; //$NON-NLS-1$
- public static final String LEFT = "LEFT"; //$NON-NLS-1$
- public static final String LIKE = "LIKE"; //$NON-NLS-1$
- public static final String LIMIT = "LIMIT"; //$NON-NLS-1$
- public static final String LOCAL = "LOCAL"; //$NON-NLS-1$
- public static final String LONG = "LONG"; //$NON-NLS-1$
- public static final String LOOP = "LOOP"; //$NON-NLS-1$
- public static final String MAKEDEP = "MAKEDEP"; //$NON-NLS-1$
- public static final String MAKENOTDEP = "MAKENOTDEP"; //$NON-NLS-1$
- public static final String MIN = "MIN"; //$NON-NLS-1$
- public static final String MAX = "MAX"; //$NON-NLS-1$
- public static final String NOCACHE = "NOCACHE"; //$NON-NLS-1$
- public static final String NOT = "NOT"; //$NON-NLS-1$
- public static final String NULL = "NULL"; //$NON-NLS-1$
- public static final String OBJECT = "OBJECT"; //$NON-NLS-1$
- public static final String ON = "ON"; //$NON-NLS-1$
- public static final String OR = "OR"; //$NON-NLS-1$
- public static final String ORDER = "ORDER"; //$NON-NLS-1$
- public static final String OPTION = "OPTION"; //$NON-NLS-1$
- public static final String OUTER = "OUTER"; //$NON-NLS-1$
- public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
- public static final String PLANONLY = "PLANONLY"; //$NON-NLS-1$
- public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
- public static final String SELECT = "SELECT"; //$NON-NLS-1$
- public static final String SET = "SET"; //$NON-NLS-1$
- public static final String SHORT = "SHORT"; //$NON-NLS-1$
- public static final String SHOWPLAN = "SHOWPLAN"; //$NON-NLS-1$
- public static final String SOME = "SOME"; //$NON-NLS-1$
- public static final String SQL_TSI_FRAC_SECOND = "SQL_TSI_FRAC_SECOND"; //$NON-NLS-1$
- public static final String SQL_TSI_SECOND = "SQL_TSI_SECOND"; //$NON-NLS-1$
- public static final String SQL_TSI_MINUTE = "SQL_TSI_MINUTE"; //$NON-NLS-1$
- public static final String SQL_TSI_HOUR = "SQL_TSI_HOUR"; //$NON-NLS-1$
- public static final String SQL_TSI_DAY = "SQL_TSI_DAY"; //$NON-NLS-1$
- public static final String SQL_TSI_WEEK = "SQL_TSI_WEEK"; //$NON-NLS-1$
- public static final String SQL_TSI_MONTH = "SQL_TSI_MONTH"; //$NON-NLS-1$
- public static final String SQL_TSI_QUARTER = "SQL_TSI_QUARTER"; //$NON-NLS-1$
- public static final String SQL_TSI_YEAR = "SQL_TSI_YEAR"; //$NON-NLS-1$
- public static final String STRING = "STRING"; //$NON-NLS-1$
- public static final String SUM = "SUM"; //$NON-NLS-1$
- public static final String TABLE = "TABLE"; //$NON-NLS-1$
- public static final String TEMPORARY = "TEMPORARY"; //$NON-NLS-1$
- public static final String THEN = "THEN"; //$NON-NLS-1$
- public static final String TIME = "TIME"; //$NON-NLS-1$
- public static final String TIMESTAMP = "TIMESTAMP"; //$NON-NLS-1$
- public static final String TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
- public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
- public static final String TRANSLATE = "TRANSLATE"; //$NON-NLS-1$
- public static final String TRUE = "TRUE"; //$NON-NLS-1$
- public static final String UNION = "UNION"; //$NON-NLS-1$
- public static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
- public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
- public static final String USING = "USING"; //$NON-NLS-1$
- public static final String VALUES = "VALUES"; //$NON-NLS-1$
- public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
- public static final String VIRTUAL_DEP_JOIN = "VIRTUALDEP"; //$NON-NLS-1$
- public static final String WHEN = "WHEN"; //$NON-NLS-1$
- public static final String WITH = "WITH"; //$NON-NLS-1$
- public static final String WHERE = "WHERE"; //$NON-NLS-1$
- public static final String WHILE = "WHILE"; //$NON-NLS-1$
- public static final String XML = "XML"; //$NON-NLS-1$
-
- public static final String[] ALL_WORDS = new String[] {
- ALL,
- ALL_COLS,
- AND,
- ANY,
- AS,
- ASC,
- AVG,
- BEGIN,
- BETWEEN,
- BIGINTEGER,
- BIGDECIMAL,
- BLOB,
- BREAK,
- BY,
- BYTE,
- CASE,
- CAST,
- CHAR,
- CLOB,
- CONVERT,
- CONTINUE,
- COUNT,
- CREATE,
- CRITERIA,
- CROSS,
- DATE,
- DEBUG,
- DECLARE,
- DELETE,
- DESC,
- DISTINCT,
- DOUBLE,
- DROP,
- ELSE,
- END,
- ERROR,
- ESCAPE,
- EXCEPT,
- EXEC,
- EXECUTE,
- EXISTS,
- FALSE,
- FLOAT,
- FOR,
- FROM,
- FULL,
- GROUP,
- HAS,
- HAVING,
- IF,
- IN,
- INNER,
- INSERT,
- INTEGER,
- INTERSECT,
- INTO,
- IS,
- JOIN,
- LEFT,
- LIKE,
- LIMIT,
- LOCAL,
- LONG,
- LOOP,
- MAKEDEP,
- MAKENOTDEP,
- MIN,
- MAX,
- NOCACHE,
- NOT,
- NULL,
- OBJECT,
- ON,
- OR,
- ORDER,
- OPTION,
- OUTER,
- PLANONLY,
- PROCEDURE,
- RIGHT,
- SELECT,
- SET,
- SHORT,
- SHOWPLAN,
- SOME,
- SQL_TSI_FRAC_SECOND,
- SQL_TSI_SECOND,
- SQL_TSI_MINUTE,
- SQL_TSI_HOUR,
- SQL_TSI_DAY,
- SQL_TSI_WEEK,
- SQL_TSI_MONTH,
- SQL_TSI_QUARTER,
- SQL_TSI_YEAR,
- STRING,
- SUM,
- TABLE,
- TEMPORARY,
- THEN,
- TIME,
- TIMESTAMP,
- TIMESTAMPADD,
- TIMESTAMPDIFF,
- TRANSLATE,
- TRUE,
- UNION,
- UNKNOWN,
- UPDATE,
- USING,
- VALUES,
- VIRTUAL,
- VIRTUAL_DEP_JOIN,
- WHEN,
- WITH,
- WHERE,
- WHILE,
- XML,
- };
-
- /**
- * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
- */
- private static final Set RESERVED_WORDS = new HashSet();
-
- // Initialize RESERVED_WORDS set
- static {
- // Iterate through the reserved words and capitalize all of them
- for ( int i=0; i!=ReservedWords.ALL_WORDS.length; ++i ) {
- String reservedWord = ReservedWords.ALL_WORDS[i];
- ReservedWords.RESERVED_WORDS.add( reservedWord.toUpperCase() );
- }
- }
-
- /** Can't construct */
- private ReservedWords() {}
-
- /**
- * Check whether a string is a reserved word.
- * @param str String to check
- * @return True if reserved word, false if not or null
- */
- public static final boolean isReservedWord(String str) {
- if(str == null) {
- return false;
- }
- return RESERVED_WORDS.contains(str.toUpperCase());
- }
-}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -239,6 +239,9 @@
ElementSymbol symbol = (ElementSymbol)((ElementSymbol)variables.get( j )).clone();
symbol.setName(ProcedureReservedWords.INPUT + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
map.put(symbol, values.get( j ) );
+ symbol = (ElementSymbol)((ElementSymbol)variables.get( j )).clone();
+ symbol.setName(ProcedureReservedWords.INPUTS + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
+ map.put(symbol, values.get( j ) );
} // for
return map;
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,6 +24,8 @@
import java.util.*;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.core.util.HashCodeUtil;
import com.metamatrix.query.sql.*;
import com.metamatrix.core.util.EquivalenceUtil;
@@ -36,8 +38,8 @@
*/
public class Option implements LanguageObject {
- public final static String MAKEDEP = ReservedWords.MAKEDEP;
- public final static String MAKENOTDEP = ReservedWords.MAKENOTDEP;
+ public final static String MAKEDEP = SQLReservedWords.MAKEDEP;
+ public final static String MAKENOTDEP = SQLReservedWords.MAKENOTDEP;
public final static String OPTIONAL = "optional"; //$NON-NLS-1$
private boolean showPlan = false;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -267,7 +267,9 @@
ElementSymbol symbol = (ElementSymbol)(setClause.getSymbol()).clone();
symbol.setName(ProcedureReservedWords.INPUT + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
map.put( symbol, setClause.getValue() );
-
+ symbol = (ElementSymbol)(setClause.getSymbol()).clone();
+ symbol.setName(ProcedureReservedWords.INPUTS + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
+ map.put( symbol, setClause.getValue() );
} // for
return map;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,8 +22,9 @@
package com.metamatrix.query.sql.proc;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -57,10 +58,10 @@
* matter that it has an invalid ID or GroupSymbol. Setting the type to
* String allows for the expression to be converted to String as necessary.
*/
- ElementSymbol result = new ElementSymbol(ReservedWords.ERROR);
- result.setMetadataID(ReservedWords.ERROR);
+ ElementSymbol result = new ElementSymbol(SQLReservedWords.ERROR);
+ result.setMetadataID(SQLReservedWords.ERROR);
result.setType(String.class);
- result.setGroupSymbol(new GroupSymbol(ReservedWords.ERROR));
+ result.setGroupSymbol(new GroupSymbol(SQLReservedWords.ERROR));
return result;
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -27,12 +27,13 @@
import java.util.Map;
import java.util.Set;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.core.util.EquivalenceUtil;
import com.metamatrix.core.util.HashCodeUtil;
import com.metamatrix.query.QueryPlugin;
import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.util.ErrorMessageKeys;
/**
@@ -66,11 +67,11 @@
static {
AGGREGATE_FUNCTIONS = new HashSet();
- AGGREGATE_FUNCTIONS.add(ReservedWords.COUNT);
- AGGREGATE_FUNCTIONS.add(ReservedWords.SUM);
- AGGREGATE_FUNCTIONS.add(ReservedWords.AVG);
- AGGREGATE_FUNCTIONS.add(ReservedWords.MIN);
- AGGREGATE_FUNCTIONS.add(ReservedWords.MAX);
+ AGGREGATE_FUNCTIONS.add(SQLReservedWords.COUNT);
+ AGGREGATE_FUNCTIONS.add(SQLReservedWords.SUM);
+ AGGREGATE_FUNCTIONS.add(SQLReservedWords.AVG);
+ AGGREGATE_FUNCTIONS.add(SQLReservedWords.MIN);
+ AGGREGATE_FUNCTIONS.add(SQLReservedWords.MAX);
SUM_TYPES = new HashMap();
SUM_TYPES.put(DataTypeManager.DefaultDataClasses.BYTE, DataTypeManager.DefaultDataClasses.LONG);
@@ -109,7 +110,7 @@
/**
* Construct an aggregate symbol with all given data.
* @param name Name of the function
- * @param aggregateFunction Aggregate function type ({@link com.metamatrix.query.sql.ReservedWords#COUNT}, etc)
+ * @param aggregateFunction Aggregate function type ({@link org.teiid.connector.language.SQLReservedWords#COUNT}, etc)
* @param isDistinct True if DISTINCT flag is set
* @param expression Contained expression
*/
@@ -119,16 +120,16 @@
setAggregateFunction(aggregateFunction);
this.distinct = isDistinct;
}
-
+
/**
* Set the aggregate function. If the aggregate function is an invalid value, an
* IllegalArgumentException is thrown.
* @param aggregateFunction Aggregate function type
- * @see com.metamatrix.query.sql.ReservedWords#COUNT
- * @see com.metamatrix.query.sql.ReservedWords#SUM
- * @see com.metamatrix.query.sql.ReservedWords#AVG
- * @see com.metamatrix.query.sql.ReservedWords#MIN
- * @see com.metamatrix.query.sql.ReservedWords#MAX
+ * @see org.teiid.connector.language.SQLReservedWords#COUNT
+ * @see org.teiid.connector.language.SQLReservedWords#SUM
+ * @see org.teiid.connector.language.SQLReservedWords#AVG
+ * @see org.teiid.connector.language.SQLReservedWords#MIN
+ * @see org.teiid.connector.language.SQLReservedWords#MAX
*/
private void setAggregateFunction(String aggregateFunction) {
// Validate aggregate
@@ -142,11 +143,11 @@
* Get the aggregate function type - this will map to one of the reserved words
* for the aggregate functions.
* @return Aggregate function type
- * @see com.metamatrix.query.sql.ReservedWords#COUNT
- * @see com.metamatrix.query.sql.ReservedWords#SUM
- * @see com.metamatrix.query.sql.ReservedWords#AVG
- * @see com.metamatrix.query.sql.ReservedWords#MIN
- * @see com.metamatrix.query.sql.ReservedWords#MAX
+ * @see org.teiid.connector.language.SQLReservedWords#COUNT
+ * @see org.teiid.connector.language.SQLReservedWords#SUM
+ * @see org.teiid.connector.language.SQLReservedWords#AVG
+ * @see org.teiid.connector.language.SQLReservedWords#MIN
+ * @see org.teiid.connector.language.SQLReservedWords#MAX
*/
public String getAggregateFunction() {
return this.aggregate;
@@ -167,12 +168,12 @@
* @return Type of the symbol
*/
public Class getType() {
- if(this.aggregate.equals(ReservedWords.COUNT)) {
+ if(this.aggregate.equals(SQLReservedWords.COUNT)) {
return COUNT_TYPE;
- } else if(this.aggregate.equals(ReservedWords.SUM) ) {
+ } else if(this.aggregate.equals(SQLReservedWords.SUM) ) {
Class expressionType = this.getExpression().getType();
return (Class) SUM_TYPES.get(expressionType);
- } else if (this.aggregate.equals(ReservedWords.AVG)) {
+ } else if (this.aggregate.equals(SQLReservedWords.AVG)) {
Class expressionType = this.getExpression().getType();
return (Class) AVG_TYPES.get(expressionType);
} else {
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -186,7 +186,7 @@
// Construct properly named INPUT variable based on short name of virtual element
String virtualElementName = metadata.getFullName(virtualElements.get(i));
String virtualElementShortName = metadata.getShortElementName(virtualElementName);
- ElementSymbol inputElement = new ElementSymbol(ProcedureReservedWords.INPUT + "." + virtualElementShortName); //$NON-NLS-1$
+ ElementSymbol inputElement = new ElementSymbol(ProcedureReservedWords.INPUTS + "." + virtualElementShortName); //$NON-NLS-1$
values.add(inputElement);
}
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,11 +29,13 @@
import java.util.LinkedList;
import java.util.List;
+import org.teiid.connector.language.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
+
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.core.util.StringUtil;
import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.BetweenCriteria;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.CompareCriteria;
@@ -177,43 +179,43 @@
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(SPACE);
}
- parts.add(ReservedWords.BETWEEN);
+ parts.add(SQLReservedWords.BETWEEN);
parts.add(SPACE);
parts.add(registerNode(obj.getLowerExpression()));
parts.add(SPACE);
- parts.add(ReservedWords.AND);
+ parts.add(SQLReservedWords.AND);
parts.add(SPACE);
parts.add(registerNode(obj.getUpperExpression()));
}
public void visit(CaseExpression obj) {
- parts.add(ReservedWords.CASE);
+ parts.add(SQLReservedWords.CASE);
parts.add(SPACE);
parts.add(registerNode(obj.getExpression()) );
parts.add(SPACE);
for (int i = 0; i < obj.getWhenCount(); i++) {
- parts.add(ReservedWords.WHEN);
+ parts.add(SQLReservedWords.WHEN);
parts.add(SPACE);
parts.add(registerNode(obj.getWhenExpression(i)) );
parts.add(SPACE);
- parts.add(ReservedWords.THEN);
+ parts.add(SQLReservedWords.THEN);
parts.add(SPACE);
parts.add(registerNode(obj.getThenExpression(i)));
parts.add(SPACE);
}
if (obj.getElseExpression() != null) {
- parts.add(ReservedWords.ELSE);
+ parts.add(SQLReservedWords.ELSE);
parts.add(SPACE);
parts.add(registerNode(obj.getElseExpression()));
parts.add(SPACE);
}
- parts.add(ReservedWords.END);
+ parts.add(SQLReservedWords.END);
}
public void visit(CompareCriteria obj) {
@@ -233,9 +235,9 @@
int operator = obj.getOperator();
String operatorStr = ""; //$NON-NLS-1$
if(operator == CompoundCriteria.AND) {
- operatorStr = ReservedWords.AND;
+ operatorStr = SQLReservedWords.AND;
} else if(operator == CompoundCriteria.OR) {
- operatorStr = ReservedWords.OR;
+ operatorStr = SQLReservedWords.OR;
}
// Get criteria
@@ -283,17 +285,17 @@
public void visit(Delete obj) {
//add delete clause
- parts.add(ReservedWords.DELETE);
+ parts.add(SQLReservedWords.DELETE);
parts.add(SPACE);
//add from clause
- parts.add(ReservedWords.FROM);
+ parts.add(SQLReservedWords.FROM);
parts.add(SPACE);
parts.add(registerNode(obj.getGroup()));
//add where clause
if(obj.getCriteria() != null) {
parts.add(SPACE);
- parts.add(ReservedWords.WHERE);
+ parts.add(SQLReservedWords.WHERE);
parts.add(SPACE);
parts.add(registerNode(obj.getCriteria()));
}
@@ -311,10 +313,10 @@
// operator and beginning of list
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(SPACE);
}
- parts.add(ReservedWords.IN);
+ parts.add(SQLReservedWords.IN);
parts.add(" (<dependent values>)"); //$NON-NLS-1$
}
@@ -323,13 +325,13 @@
List clauses = obj.getClauses();
if(clauses.size() == 1) {
replaceStringParts(new Object[] {
- ReservedWords.FROM, SPACE,
+ SQLReservedWords.FROM, SPACE,
registerNode( (FromClause) clauses.get(0) ) });
} else if(clauses.size() > 1) {
parts = new Object[2 + clauses.size() + (clauses.size()-1)];
// Add first clause
- parts[0] = ReservedWords.FROM;
+ parts[0] = SQLReservedWords.FROM;
parts[1] = SPACE;
Iterator clauseIter = clauses.iterator();
parts[2] = registerNode((FromClause) clauseIter.next());
@@ -343,7 +345,7 @@
replaceStringParts(parts);
} else {
// Shouldn't happen, but being tolerant
- replaceStringParts(new Object[] { ReservedWords.FROM });
+ replaceStringParts(new Object[] { SQLReservedWords.FROM });
}
}
@@ -352,15 +354,15 @@
List symbols = obj.getSymbols();
if(symbols.size() == 1) {
replaceStringParts(new Object[] {
- ReservedWords.GROUP, SPACE, ReservedWords.BY, SPACE,
+ SQLReservedWords.GROUP, SPACE, SQLReservedWords.BY, SPACE,
registerNode( (Expression) symbols.get(0) ) });
} else if(symbols.size() > 1) {
parts = new Object[4 + symbols.size() + (symbols.size()-1)];
// Add first clause
- parts[0] = ReservedWords.GROUP;
+ parts[0] = SQLReservedWords.GROUP;
parts[1] = SPACE;
- parts[2] = ReservedWords.BY;
+ parts[2] = SQLReservedWords.BY;
parts[3] = SPACE;
Iterator symbolIter = symbols.iterator();
parts[4] = registerNode((Expression) symbolIter.next());
@@ -374,7 +376,7 @@
replaceStringParts(parts);
} else {
// Shouldn't happen, but being tolerant
- replaceStringParts(new Object[] { ReservedWords.GROUP, SPACE, ReservedWords.BY });
+ replaceStringParts(new Object[] { SQLReservedWords.GROUP, SPACE, SQLReservedWords.BY });
}
}
@@ -384,7 +386,7 @@
if ( obj.getQueryExpression() != null ) {
parts.add(registerNode(obj.getQueryExpression()));
} else {
- parts.add(ReservedWords.VALUES);
+ parts.add(SQLReservedWords.VALUES);
parts.add(" ("); //$NON-NLS-1$
Iterator valueIter = obj.getValues().iterator();
while(valueIter.hasNext()) {
@@ -405,13 +407,13 @@
}
public void visit(Create obj) {
- parts.add(ReservedWords.CREATE);
+ parts.add(SQLReservedWords.CREATE);
parts.add(SPACE);
- parts.add(ReservedWords.LOCAL);
+ parts.add(SQLReservedWords.LOCAL);
parts.add(SPACE);
- parts.add(ReservedWords.TEMPORARY);
+ parts.add(SQLReservedWords.TEMPORARY);
parts.add(SPACE);
- parts.add(ReservedWords.TABLE);
+ parts.add(SQLReservedWords.TABLE);
parts.add(SPACE);
parts.add(registerNode(obj.getTable()));
parts.add(SPACE);
@@ -434,17 +436,17 @@
}
public void visit(Drop obj) {
- parts.add(ReservedWords.DROP);
+ parts.add(SQLReservedWords.DROP);
parts.add(SPACE);
- parts.add(ReservedWords.TABLE);
+ parts.add(SQLReservedWords.TABLE);
parts.add(SPACE);
parts.add(registerNode(obj.getTable()));
}
private void formatBasicInsert(Insert obj) {
- parts.add(ReservedWords.INSERT);
+ parts.add(SQLReservedWords.INSERT);
parts.add(SPACE);
- parts.add(ReservedWords.INTO);
+ parts.add(SQLReservedWords.INTO);
parts.add(SPACE);
parts.add(registerNode(obj.getGroup()));
parts.add(SPACE);
@@ -473,13 +475,13 @@
Object exprPart = registerNode(expr);
parts.add(exprPart);
parts.add(SPACE);
- parts.add(ReservedWords.IS);
+ parts.add(SQLReservedWords.IS);
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(SPACE);
}
- parts.add(ReservedWords.NULL);
+ parts.add(SQLReservedWords.NULL);
}
public void visit(JoinPredicate obj) {
@@ -518,7 +520,7 @@
List joinCriteria = obj.getJoinCriteria();
if(joinCriteria != null && joinCriteria.size() > 0) {
parts.add(SPACE);
- parts.add(ReservedWords.ON);
+ parts.add(SQLReservedWords.ON);
parts.add(SPACE);
Iterator critIter = joinCriteria.iterator();
while(critIter.hasNext()) {
@@ -533,7 +535,7 @@
if(critIter.hasNext()) {
parts.add(SPACE);
- parts.add(ReservedWords.AND);
+ parts.add(SQLReservedWords.AND);
parts.add(SPACE);
}
}
@@ -570,21 +572,21 @@
public void visit(JoinType obj) {
Object[] parts = null;
if(obj.equals(JoinType.JOIN_INNER)) {
- parts = new Object[] { ReservedWords.INNER, SPACE, ReservedWords.JOIN };
+ parts = new Object[] { SQLReservedWords.INNER, SPACE, SQLReservedWords.JOIN };
} else if(obj.equals(JoinType.JOIN_CROSS)) {
- parts = new Object[] { ReservedWords.CROSS, SPACE, ReservedWords.JOIN };
+ parts = new Object[] { SQLReservedWords.CROSS, SPACE, SQLReservedWords.JOIN };
} else if(obj.equals(JoinType.JOIN_LEFT_OUTER)) {
- parts = new Object[] { ReservedWords.LEFT, SPACE, ReservedWords.OUTER, SPACE, ReservedWords.JOIN };
+ parts = new Object[] { SQLReservedWords.LEFT, SPACE, SQLReservedWords.OUTER, SPACE, SQLReservedWords.JOIN };
} else if(obj.equals(JoinType.JOIN_RIGHT_OUTER)) {
- parts = new Object[] { ReservedWords.RIGHT, SPACE, ReservedWords.OUTER, SPACE, ReservedWords.JOIN };
+ parts = new Object[] { SQLReservedWords.RIGHT, SPACE, SQLReservedWords.OUTER, SPACE, SQLReservedWords.JOIN };
} else if(obj.equals(JoinType.JOIN_FULL_OUTER)) {
- parts = new Object[] { ReservedWords.FULL, SPACE, ReservedWords.OUTER, SPACE, ReservedWords.JOIN };
+ parts = new Object[] { SQLReservedWords.FULL, SPACE, SQLReservedWords.OUTER, SPACE, SQLReservedWords.JOIN };
} else if(obj.equals(JoinType.JOIN_UNION)) {
- parts = new Object[] { ReservedWords.UNION, SPACE, ReservedWords.JOIN };
+ parts = new Object[] { SQLReservedWords.UNION, SPACE, SQLReservedWords.JOIN };
} else if (obj.equals(JoinType.JOIN_SEMI)) {
- parts = new Object[] { "SEMI", SPACE, ReservedWords.JOIN }; //$NON-NLS-1$
+ parts = new Object[] { "SEMI", SPACE, SQLReservedWords.JOIN }; //$NON-NLS-1$
} else if (obj.equals(JoinType.JOIN_ANTI_SEMI)) {
- parts = new Object[] { "ANTI SEMI", SPACE, ReservedWords.JOIN }; //$NON-NLS-1$
+ parts = new Object[] { "ANTI SEMI", SPACE, SQLReservedWords.JOIN }; //$NON-NLS-1$
}
replaceStringParts(parts);
@@ -595,17 +597,17 @@
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(SPACE);
}
- parts.add(ReservedWords.LIKE);
+ parts.add(SQLReservedWords.LIKE);
parts.add(SPACE);
parts.add(registerNode(obj.getRightExpression()));
if(obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) {
parts.add(SPACE);
- parts.add(ReservedWords.ESCAPE);
+ parts.add(SQLReservedWords.ESCAPE);
parts.add(" '"); //$NON-NLS-1$
parts.add("" + obj.getEscapeChar()); //$NON-NLS-1$
parts.add("'"); //$NON-NLS-1$
@@ -613,34 +615,34 @@
}
public void visit(NotCriteria obj) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCriteria()));
parts.add(")"); //$NON-NLS-1$
}
public void visit(Option obj) {
- parts.add(ReservedWords.OPTION);
+ parts.add(SQLReservedWords.OPTION);
if(obj.getShowPlan()) {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.SHOWPLAN);
+ parts.add(SQLReservedWords.SHOWPLAN);
}
if(obj.getPlanOnly()) {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.PLANONLY);
+ parts.add(SQLReservedWords.PLANONLY);
}
if(obj.getDebug()) {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.DEBUG);
+ parts.add(SQLReservedWords.DEBUG);
}
Collection groups = obj.getDependentGroups();
if(groups != null && groups.size() > 0) {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.MAKEDEP);
+ parts.add(SQLReservedWords.MAKEDEP);
parts.add(" "); //$NON-NLS-1$
Iterator iter = groups.iterator();
@@ -657,7 +659,7 @@
groups = obj.getNotDependentGroups();
if(groups != null && groups.size() > 0) {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.MAKENOTDEP);
+ parts.add(SQLReservedWords.MAKENOTDEP);
parts.add(" "); //$NON-NLS-1$
Iterator iter = groups.iterator();
@@ -674,7 +676,7 @@
groups = obj.getNoCacheGroups();
if(groups != null && groups.size() > 0) {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.NOCACHE);
+ parts.add(SQLReservedWords.NOCACHE);
parts.add(" "); //$NON-NLS-1$
Iterator iter = groups.iterator();
@@ -688,15 +690,15 @@
}
}else if(obj.isNoCache()){
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.NOCACHE);
+ parts.add(SQLReservedWords.NOCACHE);
}
}
public void visit(OrderBy obj) {
- parts.add(ReservedWords.ORDER);
+ parts.add(SQLReservedWords.ORDER);
parts.add(SPACE);
- parts.add(ReservedWords.BY);
+ parts.add(SQLReservedWords.BY);
parts.add(SPACE);
for (Iterator<OrderByItem> iterator = obj.getOrderByItems().iterator(); iterator.hasNext();) {
OrderByItem item = iterator.next();
@@ -718,20 +720,20 @@
}
if(!obj.isAscending()) {
parts.add(SPACE);
- parts.add(ReservedWords.DESC);
+ parts.add(SQLReservedWords.DESC);
} // Don't print default "ASC"
}
public void visit(DynamicCommand obj) {
- parts.add(ReservedWords.EXECUTE);
+ parts.add(SQLReservedWords.EXECUTE);
parts.add(SPACE);
- parts.add(ReservedWords.STRING);
+ parts.add(SQLReservedWords.STRING);
parts.add(SPACE);
parts.add(registerNode(obj.getSql()));
if(obj.isAsClauseSet()){
parts.add(SPACE);
- parts.add(ReservedWords.AS);
+ parts.add(SQLReservedWords.AS);
parts.add(SPACE);
for (int i = 0; i < obj.getAsColumns().size(); i++) {
ElementSymbol symbol = (ElementSymbol)obj.getAsColumns().get(i);
@@ -747,21 +749,21 @@
if(obj.getIntoGroup() != null){
parts.add(SPACE);
- parts.add(ReservedWords.INTO);
+ parts.add(SQLReservedWords.INTO);
parts.add(SPACE);
parts.add(registerNode(obj.getIntoGroup()));
}
if(obj.getUsing() != null && !obj.getUsing().isEmpty()) {
parts.add(SPACE);
- parts.add(ReservedWords.USING);
+ parts.add(SQLReservedWords.USING);
parts.add(SPACE);
parts.add(registerNode(obj.getUsing()));
}
if (obj.getUpdatingModelCount() > 0) {
parts.add(SPACE);
- parts.add(ReservedWords.UPDATE);
+ parts.add(SQLReservedWords.UPDATE);
parts.add(SPACE);
if (obj.getUpdatingModelCount() > 1) {
parts.add("*"); //$NON-NLS-1$
@@ -795,7 +797,7 @@
if(obj.getInto() != null){
parts.add(SPACE);
- parts.add(ReservedWords.INTO);
+ parts.add(SQLReservedWords.INTO);
parts.add(SPACE);
parts.add(registerNode(obj.getInto()));
}
@@ -808,7 +810,7 @@
// Where clause
if(obj.getCriteria() != null) {
parts.add(SPACE);
- parts.add(ReservedWords.WHERE);
+ parts.add(SQLReservedWords.WHERE);
parts.add(SPACE);
parts.add(registerNode(obj.getCriteria()));
}
@@ -822,7 +824,7 @@
// Having clause
if(obj.getHaving() != null) {
parts.add(SPACE);
- parts.add(ReservedWords.HAVING);
+ parts.add(SQLReservedWords.HAVING);
parts.add(SPACE);
parts.add(registerNode(obj.getHaving()));
}
@@ -846,33 +848,33 @@
}
public void visit(SearchedCaseExpression obj) {
- parts.add(ReservedWords.CASE);
+ parts.add(SQLReservedWords.CASE);
for (int i = 0; i < obj.getWhenCount(); i++) {
parts.add(SPACE);
- parts.add(ReservedWords.WHEN);
+ parts.add(SQLReservedWords.WHEN);
parts.add(SPACE);
parts.add(registerNode(obj.getWhenCriteria(i)));
parts.add(SPACE);
- parts.add(ReservedWords.THEN);
+ parts.add(SQLReservedWords.THEN);
parts.add(SPACE);
parts.add(registerNode(obj.getThenExpression(i)));
}
parts.add(SPACE);
if (obj.getElseExpression() != null) {
- parts.add(ReservedWords.ELSE);
+ parts.add(SQLReservedWords.ELSE);
parts.add(SPACE);
parts.add(registerNode(obj.getElseExpression()));
parts.add(SPACE);
}
- parts.add(ReservedWords.END);
+ parts.add(SQLReservedWords.END);
}
public void visit(Select obj) {
- parts.add(ReservedWords.SELECT);
+ parts.add(SQLReservedWords.SELECT);
parts.add(SPACE);
if(obj.isDistinct()) {
- parts.add(ReservedWords.DISTINCT);
+ parts.add(SQLReservedWords.DISTINCT);
parts.add(SPACE);
}
@@ -893,10 +895,10 @@
// operator and beginning of list
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(SPACE);
}
- parts.add(ReservedWords.IN);
+ parts.add(SQLReservedWords.IN);
parts.add(" ("); //$NON-NLS-1$
// value list
@@ -935,7 +937,7 @@
parts.add(SPACE);
if(obj.isAll()) {
- parts.add(ReservedWords.ALL);
+ parts.add(SQLReservedWords.ALL);
parts.add(SPACE);
}
@@ -978,7 +980,7 @@
public void visit(StoredProcedure obj) {
addCacheHint(obj);
//exec clause
- parts.add(ReservedWords.EXEC);
+ parts.add(SQLReservedWords.EXEC);
parts.add(SPACE);
parts.add(obj.getProcedureName());
parts.add("("); //$NON-NLS-1$
@@ -1046,10 +1048,10 @@
// operator and beginning of list
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(ReservedWords.NOT);
+ parts.add(SQLReservedWords.NOT);
parts.add(SPACE);
}
- parts.add(ReservedWords.IN);
+ parts.add(SQLReservedWords.IN);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
parts.add(")"); //$NON-NLS-1$
@@ -1064,13 +1066,13 @@
public void visit(Update obj) {
// Update clause
- parts.add(ReservedWords.UPDATE);
+ parts.add(SQLReservedWords.UPDATE);
parts.add(SPACE);
parts.add(registerNode(obj.getGroup()));
parts.add(SPACE);
// Set clause
- parts.add(ReservedWords.SET);
+ parts.add(SQLReservedWords.SET);
parts.add(SPACE);
parts.add(registerNode(obj.getChangeList()));
@@ -1078,7 +1080,7 @@
// Where clause
if(obj.getCriteria() != null) {
parts.add(SPACE);
- parts.add(ReservedWords.WHERE);
+ parts.add(SQLReservedWords.WHERE);
parts.add(SPACE);
parts.add(registerNode(obj.getCriteria()));
}
@@ -1101,12 +1103,12 @@
parts.add("("); //$NON-NLS-1$
if(obj.isDistinct()) {
- parts.add(ReservedWords.DISTINCT);
+ parts.add(SQLReservedWords.DISTINCT);
parts.add(" "); //$NON-NLS-1$
}
if(obj.getExpression() == null) {
- parts.add(ReservedWords.ALL_COLS);
+ parts.add(Tokens.ALL_COLS);
} else {
parts.add(registerNode(obj.getExpression()));
}
@@ -1116,7 +1118,7 @@
public void visit(AliasSymbol obj) {
parts.add(registerNode(obj.getSymbol()));
parts.add(SPACE);
- parts.add(ReservedWords.AS);
+ parts.add(SQLReservedWords.AS);
parts.add(SPACE);
parts.add(escapeSinglePart(obj.getOutputName()));
}
@@ -1136,7 +1138,7 @@
constantParts = new Object[] {"?"}; //$NON-NLS-1$
} else if(obj.isNull()) {
if(type.equals(DataTypeManager.DefaultDataClasses.BOOLEAN)) {
- constantParts = new Object[] {ReservedWords.UNKNOWN};
+ constantParts = new Object[] {SQLReservedWords.UNKNOWN};
} else {
constantParts = new Object[] {"null"}; //$NON-NLS-1$
}
@@ -1144,7 +1146,7 @@
if(Number.class.isAssignableFrom(type)) {
constantParts = new Object[] { obj.getValue().toString() };
} else if(type.equals(DataTypeManager.DefaultDataClasses.BOOLEAN)) {
- constantParts = new Object[] { obj.getValue().equals(Boolean.TRUE) ? ReservedWords.TRUE : ReservedWords.FALSE};
+ constantParts = new Object[] { obj.getValue().equals(Boolean.TRUE) ? SQLReservedWords.TRUE : SQLReservedWords.FALSE};
} else if(type.equals(DataTypeManager.DefaultDataClasses.TIMESTAMP)) {
constantParts = new Object[] { "{ts'", obj.getValue().toString(), "'}" }; //$NON-NLS-1$ //$NON-NLS-2$
} else if(type.equals(DataTypeManager.DefaultDataClasses.TIME)) {
@@ -1206,18 +1208,18 @@
// Hide this function, which is implicit
parts.add(registerNode(args[0]));
- } else if(name.equalsIgnoreCase(ReservedWords.CONVERT) || name.equalsIgnoreCase(ReservedWords.CAST)) {
+ } else if(name.equalsIgnoreCase(SQLReservedWords.CONVERT) || name.equalsIgnoreCase(SQLReservedWords.CAST)) {
parts.add(name);
parts.add("("); //$NON-NLS-1$
if(args != null && args.length > 0) {
parts.add(registerNode(args[0]));
- if(name.equalsIgnoreCase(ReservedWords.CONVERT)) {
+ if(name.equalsIgnoreCase(SQLReservedWords.CONVERT)) {
parts.add(", "); //$NON-NLS-1$
} else {
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.AS);
+ parts.add(SQLReservedWords.AS);
parts.add(" "); //$NON-NLS-1$
}
@@ -1244,7 +1246,7 @@
}
parts.add(")"); //$NON-NLS-1$
- } else if(name.equalsIgnoreCase(ReservedWords.TIMESTAMPADD) || name.equalsIgnoreCase(ReservedWords.TIMESTAMPDIFF)) {
+ } else if(name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPADD) || name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPDIFF)) {
parts.add(name);
parts.add("("); //$NON-NLS-1$
@@ -1287,7 +1289,7 @@
if(alias != null) {
parts.add(SPACE);
- parts.add(ReservedWords.AS);
+ parts.add(SQLReservedWords.AS);
parts.add(SPACE);
parts.add(escapeSinglePart(alias));
}
@@ -1306,12 +1308,12 @@
public void visit(Block obj) {
List statements = obj.getStatements();
if(statements.size() == 1) {
- replaceStringParts(new Object[] { ReservedWords.BEGIN, "\n", //$NON-NLS-1$
- registerNode((Statement)obj.getStatements().get(0)), "\n", ReservedWords.END}); //$NON-NLS-1$
+ replaceStringParts(new Object[] { SQLReservedWords.BEGIN, "\n", //$NON-NLS-1$
+ registerNode((Statement)obj.getStatements().get(0)), "\n", SQLReservedWords.END}); //$NON-NLS-1$
} else if(statements.size() > 1) {
List parts = new ArrayList();
// Add first clause
- parts.add(ReservedWords.BEGIN);
+ parts.add(SQLReservedWords.BEGIN);
parts.add("\n"); //$NON-NLS-1$
Iterator stmtIter = statements.iterator();
while(stmtIter.hasNext()) {
@@ -1319,12 +1321,12 @@
parts.add(registerNode((Statement) stmtIter.next()));
parts.add("\n"); //$NON-NLS-1$
}
- parts.add(ReservedWords.END);
+ parts.add(SQLReservedWords.END);
replaceStringParts(parts.toArray());
} else {
// Shouldn't happen, but being tolerant
- replaceStringParts(new Object[] { ReservedWords.BEGIN, "\n", //$NON-NLS-1$
- ReservedWords.END });
+ replaceStringParts(new Object[] { SQLReservedWords.BEGIN, "\n", //$NON-NLS-1$
+ SQLReservedWords.END });
}
}
@@ -1334,19 +1336,19 @@
}
public void visit(CreateUpdateProcedureCommand obj) {
- parts.add(ReservedWords.CREATE);
+ parts.add(SQLReservedWords.CREATE);
parts.add(SPACE);
if(!obj.isUpdateProcedure()){
- parts.add(ReservedWords.VIRTUAL);
+ parts.add(SQLReservedWords.VIRTUAL);
parts.add(SPACE);
}
- parts.add(ReservedWords.PROCEDURE);
+ parts.add(SQLReservedWords.PROCEDURE);
parts.add("\n"); //$NON-NLS-1$
parts.add(registerNode(obj.getBlock()));
}
public void visit(DeclareStatement obj) {
- parts.add(ReservedWords.DECLARE);
+ parts.add(SQLReservedWords.DECLARE);
parts.add(SPACE);
parts.add(obj.getVariableType());
parts.add(SPACE);
@@ -1367,14 +1369,14 @@
}
public void visit(IfStatement obj) {
- parts.add(ReservedWords.IF);
+ parts.add(SQLReservedWords.IF);
parts.add("("); //$NON-NLS-1$
parts.add(registerNode(obj.getCondition()));
parts.add(")\n"); //$NON-NLS-1$
parts.add(registerNode(obj.getIfBlock()));
if(obj.hasElseBlock()) {
parts.add("\n"); //$NON-NLS-1$
- parts.add(ReservedWords.ELSE);
+ parts.add(SQLReservedWords.ELSE);
parts.add("\n"); //$NON-NLS-1$
parts.add(registerNode(obj.getElseBlock()));
}
@@ -1385,19 +1387,19 @@
}
public void visit(HasCriteria obj) {
- parts.add( ReservedWords.HAS);
+ parts.add( SQLReservedWords.HAS);
parts.add(SPACE);
parts.add(registerNode(obj.getSelector()));
}
public void visit(TranslateCriteria obj) {
- parts.add(ReservedWords.TRANSLATE);
+ parts.add(SQLReservedWords.TRANSLATE);
parts.add(SPACE);
parts.add(registerNode(obj.getSelector()));
if(obj.hasTranslations()) {
parts.add(SPACE);
- parts.add(ReservedWords.WITH);
+ parts.add(SQLReservedWords.WITH);
parts.add(SPACE);
parts.add("("); //$NON-NLS-1$
Iterator critIter = obj.getTranslations().iterator();
@@ -1437,29 +1439,29 @@
parts.add("<> "); //$NON-NLS-1$
break;
case CriteriaSelector.IN:
- parts.add(ReservedWords.IN);
+ parts.add(SQLReservedWords.IN);
parts.add(SPACE);
break;
case CriteriaSelector.IS_NULL:
- parts.add(ReservedWords.IS);
+ parts.add(SQLReservedWords.IS);
parts.add(SPACE);
- parts.add(ReservedWords.NULL);
+ parts.add(SQLReservedWords.NULL);
parts.add(SPACE);
break;
case CriteriaSelector.LIKE:
- parts.add(ReservedWords.LIKE);
+ parts.add(SQLReservedWords.LIKE);
parts.add(SPACE);
break;
case CriteriaSelector.BETWEEN:
- parts.add(ReservedWords.BETWEEN);
+ parts.add(SQLReservedWords.BETWEEN);
parts.add(SPACE);
break;
}
- parts.add(ReservedWords.CRITERIA);
+ parts.add(SQLReservedWords.CRITERIA);
if(obj.hasElements()) {
parts.add(SPACE);
- parts.add(ReservedWords.ON);
+ parts.add(SQLReservedWords.ON);
parts.add(SPACE);
parts.add("("); //$NON-NLS-1$
@@ -1477,7 +1479,7 @@
public void visit(RaiseErrorStatement obj) {
Object parts[] = new Object[4];
- parts[0] = ReservedWords.ERROR;
+ parts[0] = SQLReservedWords.ERROR;
parts[1] = SPACE;
parts[2] = registerNode(obj.getExpression());
parts[3] = ";"; //$NON-NLS-1$
@@ -1485,23 +1487,23 @@
}
public void visit(BreakStatement obj) {
- parts.add(ReservedWords.BREAK);
+ parts.add(SQLReservedWords.BREAK);
parts.add(";"); //$NON-NLS-1$
}
public void visit(ContinueStatement obj) {
- parts.add(ReservedWords.CONTINUE);
+ parts.add(SQLReservedWords.CONTINUE);
parts.add(";"); //$NON-NLS-1$
}
public void visit(LoopStatement obj) {
- parts.add(ReservedWords.LOOP);
+ parts.add(SQLReservedWords.LOOP);
parts.add(" "); //$NON-NLS-1$
- parts.add(ReservedWords.ON);
+ parts.add(SQLReservedWords.ON);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
parts.add(") "); //$NON-NLS-1$
- parts.add(ReservedWords.AS);
+ parts.add(SQLReservedWords.AS);
parts.add(" "); //$NON-NLS-1$
parts.add(obj.getCursorName());
parts.add("\n"); //$NON-NLS-1$
@@ -1509,7 +1511,7 @@
}
public void visit(WhileStatement obj) {
- parts.add(ReservedWords.WHILE);
+ parts.add(SQLReservedWords.WHILE);
parts.add("("); //$NON-NLS-1$
parts.add(registerNode(obj.getCondition()));
parts.add(")\n"); //$NON-NLS-1$
@@ -1518,7 +1520,7 @@
public void visit(ExistsCriteria obj) {
// operator and beginning of list
- parts.add(ReservedWords.EXISTS);
+ parts.add(SQLReservedWords.EXISTS);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
parts.add(")"); //$NON-NLS-1$
@@ -1550,7 +1552,7 @@
public void visit(Limit obj) {
- parts.add(ReservedWords.LIMIT);
+ parts.add(SQLReservedWords.LIMIT);
if (obj.getOffset() != null) {
parts.add(SPACE);
parts.add(registerNode(obj.getOffset()));
@@ -1589,7 +1591,7 @@
if(string == null) {
return false;
}
- return ReservedWords.isReservedWord(string);
+ return SQLReservedWords.isReservedWord(string);
}
}
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,10 +25,11 @@
import java.util.Collection;
import java.util.Set;
+import org.teiid.connector.language.SQLReservedWords;
+
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.query.QueryPlugin;
import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.navigator.PreOrderNavigator;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
import com.metamatrix.query.sql.symbol.CaseExpression;
@@ -71,10 +72,10 @@
// Verify data type of aggregate expression
String aggregateFunction = obj.getAggregateFunction();
- if((aggregateFunction.equals(ReservedWords.SUM) || aggregateFunction.equals(ReservedWords.AVG)) && obj.getType() == null) {
+ if((aggregateFunction.equals(SQLReservedWords.SUM) || aggregateFunction.equals(SQLReservedWords.AVG)) && obj.getType() == null) {
handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0041, new Object[] {aggregateFunction, obj}), obj);
}
- if((aggregateFunction.equals(ReservedWords.MIN) || aggregateFunction.equals(ReservedWords.MAX)) && DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(aggExp.getType()))) {
+ if((aggregateFunction.equals(SQLReservedWords.MIN) || aggregateFunction.equals(SQLReservedWords.MAX)) && DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(aggExp.getType()))) {
handleValidationError(QueryPlugin.Util.getString("AggregateValidationVisitor.non_comparable", new Object[] {aggregateFunction, obj}), obj); //$NON-NLS-1$
}
validateBelow = false;
Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -330,8 +330,8 @@
String groupName = variable.getGroupSymbol().getCanonicalName();
if(groupName.equals(ProcedureReservedWords.INPUT) ||
- groupName.equals(ProcedureReservedWords.CHANGING)) {
- handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0012, new Object[] {ProcedureReservedWords.INPUT, ProcedureReservedWords.CHANGING}), obj);
+ groupName.equals(ProcedureReservedWords.CHANGING) || groupName.equals(ProcedureReservedWords.INPUTS)) {
+ handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0012, new Object[] {ProcedureReservedWords.INPUT, ProcedureReservedWords.INPUTS, ProcedureReservedWords.CHANGING}), obj);
}
if(obj.hasCommand()) {
@@ -376,10 +376,9 @@
ElementSymbol variable = obj.getVariable();
String elementname = variable.getShortName().toUpperCase();
- // varaible cnnot be one of the special variables
- if(elementname.equals(ProcedureReservedWords.INPUT) || elementname.equals(ProcedureReservedWords.CHANGING)
- || elementname.equals(ProcedureReservedWords.ROWS_UPDATED)) {
- handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0017, new Object[] {ProcedureReservedWords.INPUT, ProcedureReservedWords.CHANGING, ProcedureReservedWords.ROWS_UPDATED}), obj);
+ // varible cannot be one of the special variables
+ if(elementname.equals(ProcedureReservedWords.ROWS_UPDATED)) {
+ handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0017, new Object[] {ProcedureReservedWords.ROWS_UPDATED}), obj);
}
visit((AssignmentStatement)obj);
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -47,6 +47,7 @@
import org.teiid.connector.language.NamedTable;
import org.teiid.connector.language.Not;
import org.teiid.connector.language.QueryExpression;
+import org.teiid.connector.language.SearchedWhenClause;
import org.teiid.connector.language.Select;
import org.teiid.connector.language.SearchedCase;
import org.teiid.connector.language.SortSpecification;
@@ -471,14 +472,11 @@
}
SearchedCase translate(SearchedCaseExpression expr) throws MetaMatrixComponentException {
- ArrayList<Condition> whens = new ArrayList<Condition>();
- ArrayList<org.teiid.connector.language.Expression> thens = new ArrayList<org.teiid.connector.language.Expression>();
+ ArrayList<SearchedWhenClause> whens = new ArrayList<SearchedWhenClause>();
for (int i = 0; i < expr.getWhenCount(); i++) {
- whens.add(translate(expr.getWhenCriteria(i)));
- thens.add(translate(expr.getThenExpression(i)));
+ whens.add(new SearchedWhenClause(translate(expr.getWhenCriteria(i)), translate(expr.getThenExpression(i))));
}
return new SearchedCase(whens,
- thens,
translate(expr.getElseExpression()),
expr.getType());
}
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -44,7 +44,7 @@
private static BasicSourceCapabilities SYSTEM_CAPS = new BasicSourceCapabilities();
private ConnectorManagerRepository connectorRepo;
- private DQPWorkContext workContext;
+ private VDBMetaData vdb;
private Map<String, SourceCapabilities> userCache = new HashMap<String, SourceCapabilities>();
@@ -52,9 +52,9 @@
* Construct a CacheFinder that wraps another finder
* @param internalFinder Finder to wrap
*/
- public CachedFinder(ConnectorManagerRepository repo, DQPWorkContext workContext) {
+ public CachedFinder(ConnectorManagerRepository repo, VDBMetaData vdb) {
this.connectorRepo = repo;
- this.workContext = workContext;
+ this.vdb = vdb;
userCache.put(CoreConstants.SYSTEM_MODEL, SYSTEM_CAPS);
}
@@ -67,7 +67,6 @@
return caps;
}
ConnectorException exception = null;
- VDBMetaData vdb = workContext.getVDB();
ModelMetaData model = vdb.getModel(modelName);
for (String binding:vdb.getConnectorBindingNames(model.getConnectorReference())) {
try {
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -40,6 +40,7 @@
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.language.SQLReservedWords;
import org.teiid.connector.metadata.runtime.AbstractMetadataRecord;
import org.teiid.connector.metadata.runtime.Column;
import org.teiid.connector.metadata.runtime.Datatype;
@@ -74,7 +75,6 @@
import com.metamatrix.query.processor.CollectionTupleSource;
import com.metamatrix.query.processor.ProcessorDataManager;
import com.metamatrix.query.processor.QueryProcessor;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.Query;
import com.metamatrix.query.sql.lang.StoredProcedure;
@@ -423,7 +423,7 @@
String keyElementName)
throws MetaMatrixComponentException, MetaMatrixProcessingException {
- String query = ReservedWords.SELECT + ' ' + keyElementName + " ," + returnElementName + ' ' + ReservedWords.FROM + ' ' + codeTableName; //$NON-NLS-1$
+ String query = SQLReservedWords.SELECT + ' ' + keyElementName + " ," + returnElementName + ' ' + SQLReservedWords.FROM + ' ' + codeTableName; //$NON-NLS-1$
final CacheKey codeRequestId = this.codeTableCache.createCacheRequest(codeTableName, returnElementName, keyElementName, context);
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,6 +29,7 @@
import java.util.Map;
import java.util.Set;
+import org.teiid.connector.language.SQLReservedWords;
import org.teiid.dqp.internal.process.DQPCore.ClientState;
import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
import org.teiid.dqp.internal.process.multisource.MultiSourceMetadataWrapper;
@@ -52,7 +53,6 @@
import com.metamatrix.query.parser.ParseInfo;
import com.metamatrix.query.parser.QueryParser;
import com.metamatrix.query.resolver.QueryResolver;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.Query;
import com.metamatrix.query.sql.lang.XQuery;
@@ -315,7 +315,7 @@
Expression expression = symbol.getExpression();
String function = symbol.getAggregateFunction();
- if(function.equals(ReservedWords.MIN) || function.equals(ReservedWords.MAX)){
+ if(function.equals(SQLReservedWords.MIN) || function.equals(SQLReservedWords.MAX)){
if(expression instanceof ElementSymbol) {
return createColumnMetadata(shortColumnName, (ElementSymbol)expression);
}
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -178,7 +178,7 @@
return;
}
// Prepare dependencies for running the optimizer
- this.capabilitiesFinder = new CachedFinder(this.connectorManagerRepo, workContext);
+ this.capabilitiesFinder = new CachedFinder(this.connectorManagerRepo, workContext.getVDB());
metadata = workContext.getVDB().getAttachment(QueryMetadataInterface.class);
Modified: branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj
===================================================================
--- branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj 2010-03-02 14:32:21 UTC (rev 1886)
@@ -60,16 +60,22 @@
TOKEN: /* Data types */
{
<STRING: "string">
+| <VARCHAR: "varchar">
| <BOOLEAN: "boolean">
| <BYTE: "byte">
+| <TINYINT: "tinyint">
| <SHORT: "short">
+| <SMALLINT: "smallint">
| <CHAR: "char">
| <INTEGER: "integer">
| <LONG: "long">
+| <BIGINT: "bigint">
| <BIGINTEGER: "biginteger">
-| <FLOAT: "float">
+| <FLOAT: "float">
+| <REAL: "real">
| <DOUBLE: "double">
| <BIGDECIMAL: "bigdecimal">
+| <DECIMAL: "decimal">
| <DATE: "date">
| <TIME: "time">
| <TIMESTAMP: "timestamp">
@@ -97,24 +103,54 @@
TOKEN : /* Reserved words */
{
- <ALL: "all">
+ <ADD: "add">
+| <ALL: "all">
+| <ALTER: "alter">
| <AND: "and">
| <ANY: "any">
+| <ARRAY: "array">
| <AS: "as">
| <ASC: "asc">
+| <ATOMIC: "atomic">
+| <AUTORIZATION: "authorization">
| <BEGIN: "begin">
| <BETWEEN: "between">
+| <BINARY: "binary">
+| <BOTH: "both">
| <BREAK: "break">
| <BY: "by">
+| <CALL: "call">
+| <CALLED: "called">
+| <CASCADED: "cascaded">
| <CASE: "case">
+| <CHARACTER: "character">
+| <CHECK: "check">
+| <CLOSE: "close">
+| <COLLATE: "collate">
+| <COLUMN: "column">
+| <COMMIT: "commit">
+| <CONNECT: "connect">
+| <CONSTRAINT: "constraint">
| <CONTINUE: "continue">
+| <CORRESPONDING: "corresponding">
+| <CURRENT_DATE: "current_date">
+| <CURRENT_TIME: "current_time">
+| <CURRENT_TIMESTAMP: "current_timestamp">
+| <CURRENT_USER: "current_user">
| <CREATE: "create">
| <CRITERIA: "criteria">
| <CROSS: "cross">
+| <CURSOR: "cursor">
+| <DAY: "day">
+| <DEALLOCATE: "deallocate">
+| <DEFAULT_KEYWORD: "default">
| <DEBUG: "debug">
| <DECLARE: "declare">
| <DELETE: "delete">
| <DESC: "desc">
+| <DESCRIBE: "describe">
+| <DETERMINISTIC: "deterministic">
+| <DISCONNECT: "disconnect">
| <DISTINCT: "distinct">
| <DROP: "drop">
| <ELSE: "else">
@@ -124,61 +160,146 @@
| <EXCEPT: "except">
| <EXEC: "exec">
| <EXECUTE: "execute">
+| <EXTERNAL: "external">
| <EXISTS: "exists">
| <FALSE: "false">
+| <FETCH: "fetch">
+| <FILTER: "filter">
| <FN: "fn">
| <FOR: "for">
+| <FORIEGN: "foriegn">
| <FROM: "from">
| <FULL: "full">
+| <FUNCTION: "function">
+| <GET: "get">
+| <GLOBAL: "global">
+| <GRANT: "grant">
| <GROUP: "group">
| <HAS: "has">
| <HAVING: "having">
+| <HOLD: "hold">
+| <HOUR: "hour">
| <IF: "if">
+| <IDENTITY: "identity">
+| <IMMEDIATE: "immediate">
| <IN: "in">
+| <INDICATOR: "indicator">
| <INNER: "inner">
+| <INPUT: "input">
+| <INOUT: "inout">
+| <INSENSITIVE: "insensitive">
| <INSERT: "insert">
| <INTERSECT: "intersect">
+| <INTERVAL: "interval">
| <INTO: "into">
| <IS: "is">
+| <ISOLATION: "isolation">
| <JOIN: "join">
| <LEFT: "left">
+| <LANGUAGE: "language">
+| <LARGE: "large">
+| <LEADING: "leading">
| <LIKE: "like">
| <LIMIT: "limit">
| <LOCAL: "local">
| <LOOP: "loop">
| <MAKEDEP: "makedep">
| <MAKENOTDEP: "makenotdep">
+| <MATCH: "match">
+| <MERGE: "merge">
+| <METHOD: "method">
+| <MINUTE: "minute">
+| <MODIFIES: "modifies">
+| <MODULE: "module">
+| <MONTH: "month">
+| <NATURAL: "natural">
+| <NEW: "new">
| <NOCACHE: "nocache">
+| <NO: "no">
+| <NONE: "none">
| <NOT: "not">
| <NULL: "null">
+| <OF: "of">
+| <OLD: "old">
| <ON: "on">
+| <ONLY: "only">
| <OJ: "oj">
+| <OPEN: "open">
| <OPTION: "option">
| <OR: "or">
| <ORDER: "order">
| <OUTER: "outer">
+| <OUTPUT: "output">
+| <OVER: "over">
+| <OVERLAPS: "OVERLAPS">
+| <PARAMETER: "parameter">
+| <PARTITION: "partition">
| <PLANONLY: "planonly">
+| <PRECISION: "precision">
+| <PREPARE: "prepare">
+| <PRIMARY: "primary">
| <PROCEDURE: "procedure">
+| <RANGE: "range">
+| <READS: "reads">
+| <RECURSIVE: "recursive">
+| <REFERENCES: "REFERENCES">
+| <REFERENCING: "REFERENCING">
+| <RETURN: "return">
+| <RETURNS: "returns">
+| <REVOKE: "REVOKE">
| <RIGHT: "right">
+| <ROLLBACK: "ROLLBACK">
+| <ROLLUP: "ROLLUP">
+| <ROW: "row">
+| <ROWS: "rows">
+| <SAVEPOINT: "savepoint">
+| <SCROLL: "scroll">
+| <SEARCH: "search">
+| <SECOND: "second">
| <SELECT: "select">
+| <SENSITIVE: "sensitive">
+| <SESSION_USER: "session_user">
| <SET: "set">
| <SHOWPLAN: "showplan">
+| <SIMILAR: "similar">
+| <SPECIFIC: "specific">
| <SOME: "some">
+| <SQL: "sql">
+| <SQLEXCEPTION: "sqlexception">
+| <SQLSTATE: "sqlstate">
+| <SQLWARNING: "sqlwarning">
+| <START: "start">
+| <STATIC: "static">
+| <SYSTEM: "system">
+| <SYSTEM_USER: "system_user">
| <TABLE: "table">
| <TEMPORARY: "temporary">
| <THEN: "then">
+| <TIMEZONE_HOUR: "timezone_hour">
+| <TIMEZONE_MINUTE: "timezone_minute">
+| <TO: "to">
+| <TRAILING: "trailing">
| <TRANSLATE: "translate">
+| <TRIGGER: "trigger">
| <TRUE: "true">
| <UNION: "union">
+| <UNIQUE: "unique">
| <UNKNOWN: "unknown">
+| <USER: "user">
| <UPDATE: "update">
| <USING: "using">
+| <VALUE: "value">
| <VALUES: "values">
| <VIRTUAL: "virtual">
| <WHEN: "when">
+| <WHENEVER: "whenever">
| <WHERE: "where">
| <WITH: "with">
| <WHILE: "while">
+| <WINDOW: "window">
+| <WITHIN: "within">
+| <WITHOUT: "without">
+| <YEAR: "year">
}
TOKEN : /* Special function words */
@@ -957,14 +1078,8 @@
storedProcedure.setParameter(parameter);
}
]
- call = <ID>
+ <CALL> procName = id()
{
- if (!"call".equalsIgnoreCase(call.image)) { //$NON-NLS-1$
- throw new ParseException(QueryPlugin.Util.getString("SQLParser.call_expected")); //$NON-NLS-1$
- }
- }
- procName = id()
- {
storedProcedure.setProcedureName(procName);
}
@@ -1007,6 +1122,8 @@
(execToken = <EXEC> { setQueryCacheOption(execToken, info); })
|
(execToken = <EXECUTE> { setQueryCacheOption(execToken, info); })
+ |
+ (execToken = <CALL> { setQueryCacheOption(execToken, info); })
)
procName = id()
{
@@ -2765,7 +2882,9 @@
)
|
(
- (funcToken = <LEFT> | funcToken = <RIGHT> | funcToken = <CHAR>)
+ (funcToken = <LEFT> | funcToken = <RIGHT> | funcToken = <CHAR> | funcToken = <USER>
+ | funcToken = <YEAR> | funcToken = <MONTH> | funcToken = <HOUR>
+ | funcToken = <MINUTE> | funcToken = <SECOND>)
<LPAREN>
[
expression = expression(info)
@@ -2869,17 +2988,23 @@
}
{
(
- typeToken = <STRING> |
+ typeToken = <STRING> |
+ typeToken = <VARCHAR> |
typeToken = <BOOLEAN> |
typeToken = <BYTE> |
+ typeToken = <TINYINT> |
typeToken = <SHORT> |
+ typeToken = <SMALLINT> |
typeToken = <CHAR> |
typeToken = <INTEGER> |
typeToken = <LONG> |
+ typeToken = <BIGINT> |
typeToken = <BIGINTEGER> |
- typeToken = <FLOAT> |
+ typeToken = <FLOAT> |
+ typeToken = <REAL> |
typeToken = <DOUBLE> |
- typeToken = <BIGDECIMAL> |
+ typeToken = <BIGDECIMAL> |
+ typeToken = <DECIMAL> |
typeToken = <DATE> |
typeToken = <TIME> |
typeToken = <TIMESTAMP> |
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -33,9 +33,9 @@
import java.util.Properties;
import org.junit.Test;
+import org.teiid.connector.language.SQLReservedWords;
import com.metamatrix.api.exception.query.FunctionExecutionException;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.symbol.Constant;
import com.metamatrix.query.unittest.TimestampUtil;
import com.metamatrix.query.util.CommandContext;
@@ -845,18 +845,18 @@
}
@Test public void testTimestampAdd2() throws Exception {
- assertEquals(TimestampUtil.createTimestamp(103, 11, 1, 18, 20, 30, 0), FunctionMethods.timestampAdd(ReservedWords.SQL_TSI_HOUR, 3, TimestampUtil.createTimestamp(103, 11, 1, 15, 20, 30, 0)));
+ assertEquals(TimestampUtil.createTimestamp(103, 11, 1, 18, 20, 30, 0), FunctionMethods.timestampAdd(SQLReservedWords.SQL_TSI_HOUR, 3, TimestampUtil.createTimestamp(103, 11, 1, 15, 20, 30, 0)));
}
@Test public void testTimestampDiffTimeStamp_FracSec_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 1),
TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 100000000),
new Long(99999999));
}
@Test public void testTimestampDiffTimeStamp_FracSec_2() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
// 1 day (8.64 x 10^10 nanos) and 1 nano
TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 2),
TimestampUtil.createTimestamp((2001-1900), 5, 22, 3, 9, 35, 3),
@@ -864,7 +864,7 @@
}
@Test public void testTimestampDiffTimeStamp_FracSec_3() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
// 1 day (8.64 x 10^10 nanos) less 1 nano
TimestampUtil.createTimestamp((2001-1900), 5, 22, 3, 9, 35, 2),
TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 3),
@@ -872,28 +872,28 @@
}
@Test public void testTimestampDiffTimeStamp_FracSec_4() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
TimestampUtil.createTimestamp((2001-1900), 5, 21, 0, 0, 0, 1),
TimestampUtil.createTimestamp((2001-1900), 5, 21, 0, 0, 0, 3),
new Long(00000002));
}
@Test public void testTimestampDiffTimeStamp_FracSec_5() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
TimestampUtil.createTimestamp((2004-1900), 5, 22, 0, 0, 0, 1),
TimestampUtil.createTimestamp((2004-1900), 5, 22, 0, 0, 0, 10),
new Long(9));
}
@Test public void testTimestampDiffTimeStamp_FracSec_6() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
TimestampUtil.createTimestamp((2001-1900), 5, 22, 0, 0, 0, 2),
TimestampUtil.createTimestamp((2001-1900), 5, 22, 0, 0, 0, 3),
new Long(1));
}
@Test public void testTimestampDiffTimeStamp_FracSec_7() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
// 1 nano diff
TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 2),
TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 3),
@@ -901,7 +901,7 @@
}
@Test public void testTimestampDiffTimeStamp_FracSec_8() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
// 1 nano diff
TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 3),
TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 2),
@@ -909,98 +909,98 @@
}
@Test public void testTimestampDiffTimeStamp_Min_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
TimestampUtil.createTimestamp(0, 0, 0, 2, 34, 12, 0),
TimestampUtil.createTimestamp(0, 0, 0, 12, 0, 0, 0),
new Long(565));
}
@Test public void testTimestampDiffTimeStamp_Min_2() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
TimestampUtil.createTimestamp((2001-1900), 0, 0, 2, 0, 0, 0),
TimestampUtil.createTimestamp((2001-1900), 0, 0, 0, 33, 12, 0),
new Long(-86));
}
@Test public void testTimestampDiffTimeStamp_Min_3() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 07, 58, 65497),
TimestampUtil.createTimestamp((2001-1900), 8, 29, 11, 25, 42, 483219),
new Long(4277));
}
@Test public void testTimestampDiffTimeStamp_Min_4() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 07, 58, 0),
TimestampUtil.createTimestamp((2001-1900), 8, 29, 11, 25, 42, 0),
new Long(4277));
}
@Test public void testTimestampDiffTimeStamp_Min_5() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 0, 0, 1),
TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 0, 0, 0),
new Long(0));
}
@Test public void testTimestampDiffTimeStamp_Hour_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_HOUR,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_HOUR,
TimestampUtil.createTimestamp((2004-1900), 8, 26, 12, 0, 0, 0),
TimestampUtil.createTimestamp((2004-1900), 8, 26, 12, 59, 59, 999999999),
new Long(0));
}
@Test public void testTimestampDiffTimeStamp_Week_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_WEEK,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_WEEK,
TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 100),
TimestampUtil.createTimestamp((2001-1900), 4, 2, 5, 19, 35, 500),
new Long(-7));
}
@Test public void testTimestampDiffTimeStamp_Month_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
TimestampUtil.createTimestamp((2004-1900), 4, 19, 0, 0, 0, 0),
TimestampUtil.createTimestamp((2004-1900), 11, 20, 12, 0, 0, 0),
new Long(7));
}
@Test public void testTimestampDiffTimeStamp_Month_2() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
TimestampUtil.createTimestamp((2004-1900), 5, 1, 0, 0, 0, 1000000),
TimestampUtil.createTimestamp((2004-1900), 11, 1, 12, 0, 0, 1),
new Long(6));
}
@Test public void testTimestampDiffTimeStamp_Month_3() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
TimestampUtil.createTimestamp((2004-1900), 4, 19, 0, 0, 0, 1),
TimestampUtil.createTimestamp((2004-1900), 11, 18, 12, 0, 0, 1000000),
new Long(7));
}
@Test public void testTimestampDiffTimeStamp_Month_4() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
TimestampUtil.createTimestamp((2004-1900), 4, 1, 0, 0, 0, 1000000),
TimestampUtil.createTimestamp((2004-1900), 11, 1, 0, 0, 0, 0),
new Long(7));
}
@Test public void testTimestampDiffTimeStamp_Month_5() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
TimestampUtil.createTimestamp((2004-1900), 4, 1, 0, 0, 1, 0),
TimestampUtil.createTimestamp((2004-1900), 11, 1, 0, 0, 0, 0),
new Long(7));
}
@Test public void testTimestampDiffTimeStamp_Month_6() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
TimestampUtil.createTimestamp((2004-1900), 4, 1, 0, 0, 1, 0),
TimestampUtil.createTimestamp((2004-1900), 11, 1, 0, 0, 2, 0),
new Long(7));
}
@Test public void testTimestampDiffTimeStamp_Day_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_DAY,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_DAY,
TimestampUtil.createTimestamp((2004-1900), 2, 1, 0, 0, 0, 0),
TimestampUtil.createTimestamp((2004-1900), 3, 1, 0, 0, 0, 0),
new Long(31));
@@ -1008,20 +1008,20 @@
@Test public void testTimestampDiffTimeStamp_Day_2() throws Exception {
// Leap year
- helpTestTimestampDiff(ReservedWords.SQL_TSI_DAY,
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_DAY,
TimestampUtil.createTimestamp((2004-1900), 1, 1, 0, 0, 0, 0),
TimestampUtil.createTimestamp((2004-1900), 2, 1, 0, 0, 0, 0),
new Long(29));
}
@Test public void testTimestampDiffTime_Hour_1() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_HOUR, new Timestamp(
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_HOUR, new Timestamp(
TimestampUtil.createTime(3, 4, 45).getTime()), new Timestamp(
TimestampUtil.createTime(5, 5, 36).getTime()), new Long(2));
}
@Test public void testTimestampDiffTime_Hour_2() throws Exception {
- helpTestTimestampDiff(ReservedWords.SQL_TSI_HOUR, new Timestamp(
+ helpTestTimestampDiff(SQLReservedWords.SQL_TSI_HOUR, new Timestamp(
TimestampUtil.createTime(5, 0, 30).getTime()), new Timestamp(
TimestampUtil.createTime(3, 0, 31).getTime()), new Long(-1));
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -44,12 +44,12 @@
import org.junit.Before;
import org.junit.Test;
import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.SQLReservedWords;
import com.metamatrix.api.exception.query.FunctionExecutionException;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.util.TimestampWithTimezone;
import com.metamatrix.query.function.metadata.FunctionMethod;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.unittest.TimestampUtil;
import com.metamatrix.query.util.CommandContext;
@@ -1018,68 +1018,68 @@
/** date + month --> count=18, inteval=month, result should be 2004-11-15 */
@Test public void testInvokeTimestampAddDate2() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_MONTH, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_MONTH, //$NON-NLS-1$
new Integer(18), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(104, 10, 15).getTime()));
}
/** date + month --> count=-18, inteval=month, result should be 2001-11-15 */
@Test public void testInvokeTimestampAddDate2a() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_MONTH, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_MONTH, //$NON-NLS-1$
new Integer(-18), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(101, 10, 15).getTime()));
}
/** date + week --> count=6, inteval=week, result should be 2003-04-03 */
@Test public void testInvokeTimestampAddDate3() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_WEEK, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_WEEK, //$NON-NLS-1$
new Integer(-6), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(103, 3, 3).getTime()));
}
/** date + quarter --> count=3, inteval=quarter, result should be 2004-2-15 */
@Test public void testInvokeTimestampAddDate4() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_QUARTER, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_QUARTER, //$NON-NLS-1$
new Integer(3), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(104, 1, 15).getTime()));
}
/** date + year --> count=-1, inteval=year, result should be 2002-5-15 */
@Test public void testInvokeTimestampAddDate5() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_YEAR, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_YEAR, //$NON-NLS-1$
new Integer(-1), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(102, 4, 15).getTime()));
}
/** time + minute --> count=23, inteval=3, result should be 03:32:12 */
@Test public void testInvokeTimestampAddTime1() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_MINUTE, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_MINUTE, //$NON-NLS-1$
new Integer(23), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, new Timestamp(TimestampUtil.createTime(3, 32, 12).getTime()));
}
/** time + hour --> count=21, inteval=4, result should be 00:09:12 and overflow */
@Test public void testInvokeTimestampAddTime2() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_HOUR, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_HOUR, //$NON-NLS-1$
new Integer(21), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, TimestampUtil.createTimestamp(70, 0, 2, 0, 9, 12, 0));
}
/** time + hour --> count=2, inteval=4, result should be 01:12:12*/
@Test public void testInvokeTimestampAddTime3() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_HOUR, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_HOUR, //$NON-NLS-1$
new Integer(2), new Timestamp(TimestampUtil.createTime(23, 12, 12).getTime())}, TimestampUtil.createTimestamp(70, 0, 2, 1, 12, 12, 0));
}
/** time + second --> count=23, inteval=2, result should be 03:10:01 */
@Test public void testInvokeTimestampAddTime4() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_SECOND, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_SECOND, //$NON-NLS-1$
new Integer(49), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, new Timestamp(TimestampUtil.createTime(3, 10, 1).getTime()));
}
/** timestamp + second --> count=23, inteval=2, result should be 2003-05-15 03:09:35.100 */
@Test public void testInvokeTimestampAddTimestamp1() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_SECOND, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_SECOND, //$NON-NLS-1$
new Integer(23), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 100)},
TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 35, 100));
}
/** timestamp + nanos --> count=1, inteval=1, result should be 2003-05-15 03:09:12.000000101 */
@Test public void testInvokeTimestampAddTimestamp2() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
new Integer(1), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 100)},
TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 101));
}
@@ -1088,14 +1088,14 @@
* with increase in second and minutes, because second already at 59 sec originally
*/
@Test public void testInvokeTimestampAddTimestamp3() {
- helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
+ helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
new Integer(2100000000), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 59, 1)},
TimestampUtil.createTimestamp(103, 4, 15, 3, 10, 1, 100000003));
}
/** time --> interval=hour, time1 = 03:04:45, time2= 05:05:36 return = 2 */
@Test public void testInvokeTimestampDiffTime1() {
- helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_HOUR, //$NON-NLS-1$
+ helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_HOUR, //$NON-NLS-1$
new Timestamp(TimestampUtil.createTime(3, 4, 45).getTime()), new Timestamp(TimestampUtil.createTime(5, 5, 36).getTime()) },
new Long(2));
}
@@ -1111,7 +1111,7 @@
* time2= 2003-05-02 05:19:35.500 return = 45
*/
@Test public void testInvokeTimestampDiffTimestamp1() {
- helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_WEEK, //$NON-NLS-1$
+ helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_WEEK, //$NON-NLS-1$
TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 100), TimestampUtil.createTimestamp(103, 4, 2, 5, 19, 35, 500) },
new Long(45));
}
@@ -1121,7 +1121,7 @@
* time2= 2002-06-21 03:09:35.100000000 return = 999999999
*/
@Test public void testInvokeTimestampDiffTimestamp2() {
- helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
+ helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 1), TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 100000000) },
new Long(99999999));
}
@@ -1131,7 +1131,7 @@
* time2= 2002-06-22 03:09:35.000000001 return =
*/
@Test public void testInvokeTimestampDiffTimestamp3() {
- helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
+ helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 2), TimestampUtil.createTimestamp(102, 5, 22, 3, 9, 35, 1) },
new Long(86399999999999L));
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -515,14 +515,14 @@
String sql = "SELECT Q1.S, Q2.C, Q1.PRODUCT, Q1.REGION AS Q1R, Q2.REGION AS Q2R FROM " + //$NON-NLS-1$
"(SELECT SUM(SALES) AS S, REGION, PRODUCT FROM DB2_TABLE WHERE PRODUCT IN ('GUNS', 'TOYS', 'VIDEOTAPES') GROUP BY REGION, PRODUCT) Q1 " + //$NON-NLS-1$
"FULL OUTER JOIN " + //$NON-NLS-1$
- "(SELECT SUM(COSTS) AS C, REGION FROM ORACLE_TABLE WHERE YEAR = '1999' GROUP BY REGION) Q2 " + //$NON-NLS-1$
+ "(SELECT SUM(COSTS) AS C, REGION FROM ORACLE_TABLE WHERE \"YEAR\" = '1999' GROUP BY REGION) Q2 " + //$NON-NLS-1$
"ON Q1.REGION = Q2.REGION"; //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
new String[] {"SELECT REGION, SUM(SALES), PRODUCT FROM db2model.DB2_TABLE WHERE PRODUCT IN ('GUNS', 'TOYS', 'VIDEOTAPES') GROUP BY REGION, PRODUCT", //$NON-NLS-1$
- "SELECT REGION, SUM(COSTS) FROM oraclemodel.Oracle_table WHERE YEAR = '1999' GROUP BY REGION"}, //$NON-NLS-1$
+ "SELECT REGION, SUM(COSTS) FROM oraclemodel.Oracle_table WHERE \"YEAR\" = '1999' GROUP BY REGION"}, //$NON-NLS-1$
SHOULD_SUCCEED );
checkNodeTypes(plan, new int[] {
@@ -568,8 +568,8 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.MONTH, g_0.YEAR FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999'", //$NON-NLS-1$
- "SELECT DISTINCT g_0.MONTH AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.MONTH IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.MONTH, g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$
+ new String[] {"SELECT g_0.\"MONTH\", g_0.\"YEAR\" FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999'", //$NON-NLS-1$
+ "SELECT DISTINCT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$
"SELECT g_0.CITY, g_0.REGION FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA')"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
@@ -616,8 +616,8 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.MONTH, g_0.YEAR FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999'", //$NON-NLS-1$
- "SELECT DISTINCT g_0.MONTH AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.MONTH IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.MONTH, g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$
+ new String[] {"SELECT g_0.\"MONTH\", g_0.\"YEAR\" FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999'", //$NON-NLS-1$
+ "SELECT DISTINCT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$
"SELECT g_0.CITY, g_0.REGION FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA')"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
@@ -664,8 +664,8 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT DISTINCT g_0.MONTH AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.MONTH IN (<dependent values>)) GROUP BY g_0.MONTH, g_1.REGION ORDER BY c_0", //$NON-NLS-1$
- "SELECT g_0.MONTH AS c_0, g_0.YEAR AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999' ORDER BY c_0"}, //$NON-NLS-1$
+ new String[] {"SELECT DISTINCT g_0.\"MONTH\" AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.\"MONTH\" IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_1.REGION ORDER BY c_0", //$NON-NLS-1$
+ "SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, new int[] {
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,6 +25,8 @@
import java.util.ArrayList;
import java.util.List;
+import org.teiid.connector.language.SQLReservedWords;
+
import junit.framework.TestCase;
import com.metamatrix.api.exception.MetaMatrixComponentException;
@@ -34,7 +36,6 @@
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.lang.SetQuery.Operation;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
@@ -190,7 +191,7 @@
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -202,7 +203,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -214,7 +215,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
@@ -226,7 +227,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -238,7 +239,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -250,7 +251,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
@@ -261,7 +262,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -272,7 +273,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
@@ -283,7 +284,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -294,7 +295,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
@@ -305,7 +306,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MIN, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -316,7 +317,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MIN, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
@@ -327,7 +328,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -338,7 +339,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
@@ -350,7 +351,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_DISTINCT, false);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, false);
}
@@ -362,7 +363,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_DISTINCT, true);
- AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
helpTestSupportsAggregateFunction(caps, aggregate, true);
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,10 +22,14 @@
package com.metamatrix.query.parser;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
import com.metamatrix.api.exception.query.QueryParserException;
import com.metamatrix.query.sql.lang.StoredProcedure;
-public class TestCallableStatementParsing extends junit.framework.TestCase {
+public class TestCallableStatementParsing {
private void helpTestIllegalCall(String call) {
try {
@@ -44,14 +48,14 @@
assertEquals("EXEC procedure_name(?, ?, ?)", sp.toString()); //$NON-NLS-1$
}
- public void testCallNoParams() throws QueryParserException {
+ @Test public void testCallNoParams() throws QueryParserException {
StoredProcedure sp = (StoredProcedure)QueryParser.getQueryParser().parseCommand("{call procedure_name}"); //$NON-NLS-1$
assertFalse(sp.returnsScalarValue());
assertEquals("procedure_name", sp.getProcedureName()); //$NON-NLS-1$
assertEquals(0, sp.getParameters().size());
}
- public void testCallWithReturnParam() throws QueryParserException {
+ @Test public void testCallWithReturnParam() throws QueryParserException {
helpTestGetExec("{?=call procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
helpTestGetExec(" {?=call procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
helpTestGetExec("{ ?=call procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
@@ -60,7 +64,7 @@
helpTestGetExec("{?=\ncall procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
}
- public void testIllegalCalls() {
+ @Test public void testIllegalCalls() {
helpTestIllegalCall("{call procedure_name"); //$NON-NLS-1$
helpTestIllegalCall("call procedure_name}"); //$NON-NLS-1$
helpTestIllegalCall("{call procedure_name(}"); //$NON-NLS-1$
@@ -73,7 +77,7 @@
helpTestIllegalCall("{?=cal procedure_name}"); //$NON-NLS-1$
}
- public void testGetExec() throws QueryParserException {
+ @Test public void testGetExec() throws QueryParserException {
helpTestGetExec("{call procedure_name(?, ?, ?)}", false); //$NON-NLS-1$
helpTestGetExec(" {call procedure_name(?, ?, ?)}", false); //$NON-NLS-1$
helpTestGetExec("{ call procedure_name(?, ?, ?)}", false); //$NON-NLS-1$
@@ -83,13 +87,8 @@
helpTestGetExec("{CALL procedure_name(?, ?, ?)} ", false); //$NON-NLS-1$
}
- public void testBadCallKeyword() {
- try {
- QueryParser.getQueryParser().parseCommand("{calli procedure_name}"); //$NON-NLS-1$
- fail("expected exception"); //$NON-NLS-1$
- } catch (QueryParserException qpe) {
- assertEquals("Parsing error: Call keyword expected in callable statement", qpe.getMessage()); //$NON-NLS-1$
- }
+ @Test(expected=QueryParserException.class) public void testBadCallKeyword() throws Exception {
+ QueryParser.getQueryParser().parseCommand("{calli procedure_name}"); //$NON-NLS-1$
}
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -300,7 +300,7 @@
ElementSymbol x = new ElementSymbol("a.x", true); //$NON-NLS-1$
ElementSymbol y = new ElementSymbol("b.y", true); //$NON-NLS-1$
- Criteria criteria = new CompareCriteria(x, CompareCriteria.EQ, new Function("function", new Expression[] {y})); //$NON-NLS-1$
+ Criteria criteria = new CompareCriteria(x, CompareCriteria.EQ, new Function("func", new Expression[] {y})); //$NON-NLS-1$
JoinPredicate predicate = new JoinPredicate(new UnaryFromClause(a), new UnaryFromClause(b), JoinType.JOIN_INNER, Arrays.asList(new Object[] {criteria}));
From from = new From(Arrays.asList(new Object[] {predicate}));
predicate.getLeftClause().setMakeNotDep(true);
@@ -308,8 +308,8 @@
Select select = new Select(Arrays.asList(new Object[] {x, y}));
Query query = new Query(select, from, null, null, null, null, null);
- TestParser.helpTest("Select a.x, b.y From a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = function(b.y)", //$NON-NLS-1$
- "SELECT a.x, b.y FROM a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = function(b.y)", //$NON-NLS-1$
+ TestParser.helpTest("Select a.x, b.y From a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = func(b.y)", //$NON-NLS-1$
+ "SELECT a.x, b.y FROM a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = func(b.y)", //$NON-NLS-1$
query);
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -681,9 +681,9 @@
query);
}
- /** SELECT left(fullname, 3) as x FROM system.groups */
+ /** SELECT left(fullname, 3) as x FROM sys.groups */
@Test public void testLeftFunction() {
- GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+ GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -696,14 +696,14 @@
Query query = new Query();
query.setSelect(select);
query.setFrom(from);
- helpTest("SELECT left(fullname, 3) as x FROM system.groups", //$NON-NLS-1$
- "SELECT left(fullname, 3) AS x FROM system.groups", //$NON-NLS-1$
+ helpTest("SELECT left(fullname, 3) as x FROM sys.groups", //$NON-NLS-1$
+ "SELECT left(fullname, 3) AS x FROM sys.groups", //$NON-NLS-1$
query);
}
- /** SELECT right(fullname, 3) as x FROM system.groups */
+ /** SELECT right(fullname, 3) as x FROM sys.groups */
@Test public void testRightFunction() {
- GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+ GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -716,14 +716,14 @@
Query query = new Query();
query.setSelect(select);
query.setFrom(from);
- helpTest("SELECT right(fullname, 3) as x FROM system.groups", //$NON-NLS-1$
- "SELECT right(fullname, 3) AS x FROM system.groups", //$NON-NLS-1$
+ helpTest("SELECT right(fullname, 3) as x FROM sys.groups", //$NON-NLS-1$
+ "SELECT right(fullname, 3) AS x FROM sys.groups", //$NON-NLS-1$
query);
}
- /** SELECT char('x') AS x FROM system.groups */
+ /** SELECT char('x') AS x FROM sys.groups */
@Test public void testCharFunction() {
- GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+ GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -736,14 +736,14 @@
Query query = new Query();
query.setSelect(select);
query.setFrom(from);
- helpTest("SELECT char('x') AS x FROM system.groups", //$NON-NLS-1$
- "SELECT char('x') AS x FROM system.groups", //$NON-NLS-1$
+ helpTest("SELECT char('x') AS x FROM sys.groups", //$NON-NLS-1$
+ "SELECT char('x') AS x FROM sys.groups", //$NON-NLS-1$
query);
}
- /** SELECT insert('x', 1, 'a') as x FROM system.groups */
+ /** SELECT insert('x', 1, 'a') as x FROM sys.groups */
@Test public void testInsertFunction() {
- GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+ GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -756,15 +756,15 @@
Query query = new Query();
query.setSelect(select);
query.setFrom(from);
- helpTest("SELECT insert('x', 1, 'a') AS x FROM system.groups", //$NON-NLS-1$
- "SELECT insert('x', 1, 'a') AS x FROM system.groups", //$NON-NLS-1$
+ helpTest("SELECT insert('x', 1, 'a') AS x FROM sys.groups", //$NON-NLS-1$
+ "SELECT insert('x', 1, 'a') AS x FROM sys.groups", //$NON-NLS-1$
query);
}
@Test public void testInsertIntoSelect() {
- GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+ GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -786,9 +786,9 @@
insert);
}
- /** SELECT translate('x', 'x', 'y') FROM system.groups */
+ /** SELECT translate('x', 'x', 'y') FROM sys.groups */
@Test public void testTranslateFunction() {
- GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+ GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -800,8 +800,8 @@
Query query = new Query();
query.setSelect(select);
query.setFrom(from);
- helpTest("SELECT translate('x', 'x', 'y') FROM system.groups", //$NON-NLS-1$
- "SELECT translate('x', 'x', 'y') FROM system.groups", //$NON-NLS-1$
+ helpTest("SELECT translate('x', 'x', 'y') FROM sys.groups", //$NON-NLS-1$
+ "SELECT translate('x', 'x', 'y') FROM sys.groups", //$NON-NLS-1$
query);
}
@@ -2030,7 +2030,7 @@
query.setFrom(from);
query.setCriteria(crit);
helpTest("SELECT a from db.g where a <> \"value\"", //$NON-NLS-1$
- "SELECT a FROM db.g WHERE a <> value", //$NON-NLS-1$
+ "SELECT a FROM db.g WHERE a <> \"value\"", //$NON-NLS-1$
query);
}
@@ -2225,8 +2225,8 @@
query.setSelect(select);
query.setFrom(from);
- helpTest("SELECT g.x AS year FROM g", //$NON-NLS-1$
- "SELECT g.x AS year FROM g", //$NON-NLS-1$
+ helpTest("SELECT g.x AS \"year\" FROM g", //$NON-NLS-1$
+ "SELECT g.x AS \"year\" FROM g", //$NON-NLS-1$
query);
}
@@ -6167,7 +6167,7 @@
}
@Test public void testNationCharString2() throws Exception {
- Query query = (Query) QueryParser.getQueryParser().parseCommand("SELECT DISTINCT TABLE_QUALIFIER, NULL AS TABLE_OWNER, NULL AS TABLE_NAME, NULL AS TABLE_TYPE, NULL AS REMARKS FROM ATIODBCSystem.OA_TABLES WHERE TABLE_QUALIFIER LIKE N'%' ESCAPE '\\' ORDER BY TABLE_QUALIFIER "); //$NON-NLS-1$
+ Query query = (Query) QueryParser.getQueryParser().parseCommand("SELECT DISTINCT TABLE_QUALIFIER, NULL AS TABLE_OWNER, NULL AS TABLE_NAME, NULL AS TABLE_TYPE, NULL AS REMARKS FROM ATIODBCSYSTEM.OA_TABLES WHERE TABLE_QUALIFIER LIKE N'%' ESCAPE '\\' ORDER BY TABLE_QUALIFIER "); //$NON-NLS-1$
MatchCriteria matchCrit = (MatchCriteria) query.getCriteria();
Constant c = (Constant) matchCrit.getRightExpression();
assertEquals(c, new Constant("%")); //$NON-NLS-1$
@@ -6568,11 +6568,7 @@
@Test public void testCreateTempTable5() {
helpException("Create local TEMPORARY table tempTable (c1 boolean primary, c2 byte)"); //$NON-NLS-1$
}
-
- @Test public void testCreateTempTable6() {
- helpException("Create local TEMPORARY table tempTable (c1 varchar, c2 byte)"); //$NON-NLS-1$
- }
-
+
@Test public void testCreateTempTable7() {
helpException("Create local TEMPORARY table tempTable (c1.x boolean, c2 byte)" ,"Parsing error: Invalid simple identifier format: [c1.x]"); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -6687,5 +6683,28 @@
"INSERT INTO m.g VALUES ('a', 'b')", //$NON-NLS-1$
insert);
}
-
+
+ @Test public void testTypeAliases() {
+ Create create = new Create();
+ create.setTable(new GroupSymbol("tempTable")); //$NON-NLS-1$
+ List columns = new ArrayList();
+ ElementSymbol column = new ElementSymbol("c1");//$NON-NLS-1$
+ column.setType(DataTypeManager.DefaultDataClasses.STRING);
+ columns.add(column);
+ column = new ElementSymbol("c2");//$NON-NLS-1$
+ column.setType(DataTypeManager.DefaultDataClasses.BYTE);
+ columns.add(column);
+ column = new ElementSymbol("c3");//$NON-NLS-1$
+ column.setType(DataTypeManager.DefaultDataClasses.SHORT);
+ columns.add(column);
+ column = new ElementSymbol("c4");//$NON-NLS-1$
+ column.setType(DataTypeManager.DefaultDataClasses.FLOAT);
+ columns.add(column);
+ column = new ElementSymbol("c5");//$NON-NLS-1$
+ column.setType(DataTypeManager.DefaultDataClasses.BIG_DECIMAL);
+ columns.add(column);
+ create.setColumns(columns);
+ helpTest("Create local TEMPORARY table tempTable (c1 varchar, c2 tinyint, c3 smallint, c4 real, c5 decimal)", "CREATE LOCAL TEMPORARY TABLE tempTable (c1 string, c2 byte, c3 short, c4 float, c5 bigdecimal)", create); //$NON-NLS-1$
+ }
+
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -179,7 +179,7 @@
//reset and clone after 1st run
if (i==1) {
procPlan.reset();
- procPlan = (ProcessorPlan)procPlan.clone();
+ procPlan = procPlan.clone();
}
}
}
@@ -2333,7 +2333,7 @@
FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret", 1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2); //$NON-NLS-1$
FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("input", 2, ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER, null); //$NON-NLS-1$
QueryNode sq2n1 = new QueryNode("xqttest.proc", "CREATE VIRTUAL PROCEDURE BEGIN\n" //$NON-NLS-1$ //$NON-NLS-2$
- + "declare integer VARIABLES.x = input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; END"); //$NON-NLS-1$
+ + "declare integer VARIABLES.x = xqttest.proc.input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; END"); //$NON-NLS-1$
FakeMetadataObject sq2 = FakeMetadataFactory.createVirtualProcedure("xqttest.proc", pm1, Arrays.asList(new FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1); //$NON-NLS-1$
metadata.getStore().addObject(rs2);
@@ -2362,7 +2362,7 @@
FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret", 1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2); //$NON-NLS-1$
FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("input", 2, ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER, null); //$NON-NLS-1$
QueryNode sq2n1 = new QueryNode("xqttest.proc", "CREATE VIRTUAL PROCEDURE BEGIN\n" //$NON-NLS-1$ //$NON-NLS-2$
- + "declare integer VARIABLES.x = input; declare xml y = SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; select convert(y, string); END"); //$NON-NLS-1$
+ + "declare integer VARIABLES.x = xqttest.proc.input; declare xml y = SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; select convert(y, string); END"); //$NON-NLS-1$
FakeMetadataObject sq2 = FakeMetadataFactory.createVirtualProcedure("xqttest.proc", pm1, Arrays.asList(new FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1); //$NON-NLS-1$
metadata.getStore().addObject(rs2);
@@ -2429,7 +2429,7 @@
FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret", 1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2); //$NON-NLS-1$
FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("input", 2, ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER, null); //$NON-NLS-1$
QueryNode sq2n1 = new QueryNode("xmltest.proc", "CREATE VIRTUAL PROCEDURE BEGIN\n" //$NON-NLS-1$ //$NON-NLS-2$
- + "declare integer VARIABLES.x = input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, SupplierID)=x; END"); //$NON-NLS-1$
+ + "declare integer VARIABLES.x = xmltest.proc.input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, SupplierID)=x; END"); //$NON-NLS-1$
FakeMetadataObject sq2 = FakeMetadataFactory.createVirtualProcedure("xmltest.proc", pm1, Arrays.asList(new FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1); //$NON-NLS-1$
metadata.getStore().addObject(rs2);
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,7 +24,6 @@
import static org.junit.Assert.*;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -42,12 +41,12 @@
import com.metamatrix.query.mapping.relational.QueryNode;
import com.metamatrix.query.metadata.QueryMetadataInterface;
import com.metamatrix.query.metadata.TempMetadataAdapter;
-import com.metamatrix.query.metadata.TempMetadataID;
import com.metamatrix.query.metadata.TempMetadataStore;
import com.metamatrix.query.parser.QueryParser;
import com.metamatrix.query.resolver.util.ResolverUtil;
import com.metamatrix.query.sql.ProcedureReservedWords;
import com.metamatrix.query.sql.lang.Command;
+import com.metamatrix.query.sql.lang.GroupContext;
import com.metamatrix.query.sql.lang.Insert;
import com.metamatrix.query.sql.lang.ProcedureContainer;
import com.metamatrix.query.sql.proc.AssignmentStatement;
@@ -104,39 +103,21 @@
public static Map getProcedureExternalMetadata(GroupSymbol virtualGroup, QueryMetadataInterface metadata)
throws QueryMetadataException, MetaMatrixComponentException {
Map externalMetadata = new HashMap();
-
- // Look up elements for the virtual group
- List elements = ResolverUtil.resolveElementsInGroup(virtualGroup, metadata);
- // virtual group metadata info
+
+ //TODO: it doesn't seem like these should be in the
+ List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(virtualGroup, metadata);
externalMetadata.put(virtualGroup, elements);
+
+ TempMetadataStore tms = new TempMetadataStore();
- // INPUT group metadata info
- GroupSymbol inputGroup = new GroupSymbol(ProcedureReservedWords.INPUT);
- List inputElments = new ArrayList(elements.size());
- List elementIds = new ArrayList();
- for(int i=0; i<elements.size(); i++) {
- ElementSymbol virtualElmnt = (ElementSymbol)elements.get(i);
- ElementSymbol inputElement = (ElementSymbol)virtualElmnt.clone();
- inputElments.add(inputElement);
- elementIds.add(new TempMetadataID(ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + virtualElmnt.getShortName(), virtualElmnt.getType()));
+ TempMetadataAdapter tma = new TempMetadataAdapter(metadata, tms);
+
+ GroupContext gc = ProcedureContainerResolver.createChildMetadata(tms, metadata, virtualGroup);
+
+ for (GroupSymbol symbol : gc.getAllGroups()) {
+ externalMetadata.put(symbol, ResolverUtil.resolveElementsInGroup(symbol, tma));
}
- inputGroup.setMetadataID(new TempMetadataID(ProcedureReservedWords.INPUT, elementIds));
- externalMetadata.put(inputGroup, inputElments);
-
- // CHANGING group metadata info
- // Switch type to be boolean for all CHANGING variables
- GroupSymbol changeGroup = new GroupSymbol(ProcedureReservedWords.CHANGING);
- List changingElments = new ArrayList(elements.size());
- elementIds = new ArrayList();
- for(int i=0; i<elements.size(); i++) {
- ElementSymbol changeElement = (ElementSymbol)((ElementSymbol)elements.get(i)).clone();
- changeElement.setType(DataTypeManager.DefaultDataClasses.BOOLEAN);
- changingElments.add(changeElement);
- elementIds.add(new TempMetadataID(ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + changeElement.getShortName(), changeElement.getType()));
- }
- changeGroup.setMetadataID(new TempMetadataID(ProcedureReservedWords.CHANGING, elementIds));
- externalMetadata.put(changeGroup, changingElments);
-
+
return externalMetadata;
}
@@ -218,7 +199,7 @@
@Test public void testProcedureScoping() throws Exception {
StringBuffer proc = new StringBuffer("CREATE PROCEDURE") //$NON-NLS-1$
.append("\nBEGIN") //$NON-NLS-1$
- //note that this declare takes presedense over the proc INPUT.e1 and CHANGING.e1 variables
+ //note that this declare takes presedense over the proc INPUTS.e1 and CHANGING.e1 variables
.append("\n declare integer e1 = 1;") //$NON-NLS-1$
.append("\n e1 = e1;") //$NON-NLS-1$
.append("\n LOOP ON (SELECT pm1.g1.e1 FROM pm1.g1) AS loopCursor") //$NON-NLS-1$
@@ -363,7 +344,7 @@
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED = Select pm1.g1.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED = ROWS_UPDATED + var1;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -379,7 +360,7 @@
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED = Select pm1.g1.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -393,8 +374,8 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -410,8 +391,8 @@
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
procedure = procedure + "if(CHANGING.e1 = 'true')\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -426,10 +407,10 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "if(CHANGING.e1='false' and INPUT.e1=1)\n"; //$NON-NLS-1$
+ procedure = procedure + "if(CHANGING.e1='false' and INPUTS.e1=1)\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -444,10 +425,10 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "if(CHANGING.e4 ='true' and INPUT.e2=1 or var1 < 30)\n"; //$NON-NLS-1$
+ procedure = procedure + "if(CHANGING.e4 ='true' and INPUTS.e2=1 or var1 < 30)\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -463,7 +444,7 @@
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "if(CHANGING.e4 = {d'2000-01-01'})\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -527,7 +508,7 @@
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED = Select pm1.g1.e2 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, vm1.g1.e1 = 2);\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -543,7 +524,7 @@
// procedure = procedure + "DECLARE integer var1;\n";
procedure = procedure + "var3 = var2+var1;\n"; //$NON-NLS-1$
procedure = procedure + "var2 = Select pm1.g1.e2 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, vm1.g1.e1 = 2);\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -558,7 +539,7 @@
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE struct var1;\n"; //$NON-NLS-1$
procedure = procedure + "var1 = Select pm1.g1.e2 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, vm1.g1.e1 = 2);\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -852,8 +833,8 @@
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
procedure = procedure + "Select pm1.g1.e2 from pm1.g1 where TRANSLATE CRITERIA ON (e1) WITH (g1.e1 = 1);\n"; //$NON-NLS-1$
-// procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n";
-// procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n";
+// procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n";
+// procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n";
procedure = procedure + "END\n"; //$NON-NLS-1$
QueryMetadataInterface metadata = FakeMetadataFactory.exampleUpdateProc(FakeMetadataObject.Props.UPDATE_PROCEDURE, procedure);
@@ -869,9 +850,9 @@
@Test public void testCreateUpdateProcedure44() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "if(INPUT.e1 = 10)\n"; //$NON-NLS-1$
+ procedure = procedure + "if(INPUTS.e1 = 10)\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -885,9 +866,9 @@
@Test public void testCreateUpdateProcedure45() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "if(INPUT.e1 = 10)\n"; //$NON-NLS-1$
+ procedure = procedure + "if(INPUTS.e1 = 10)\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -906,7 +887,7 @@
@Test public void testCreateUpdateProcedure46() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1;\n"; //$NON-NLS-1$
+ procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
Command procCommand = QueryParser.getQueryParser().parseCommand(procedure);
@@ -942,7 +923,7 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e1 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, INPUT.e2 = 2);\n"; //$NON-NLS-1$
+ procedure = procedure + "Select pm1.g1.e1 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, INPUTS.e2 = 2);\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -969,7 +950,7 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "if(HAS CRITERIA ON (vm1.g1.E1, vm1.g1.e1, INPUT.e1))\n"; //$NON-NLS-1$
+ procedure = procedure + "if(HAS CRITERIA ON (vm1.g1.E1, vm1.g1.e1, INPUTS.e1))\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED =0;\n"; //$NON-NLS-1$
@@ -1019,7 +1000,7 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "var1 = INPUT.e4;"; //$NON-NLS-1$
+ procedure = procedure + "var1 = INPUTS.e4;"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED =0;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -1281,8 +1262,8 @@
/*@Test public void testCommandUpdating3() throws Exception{
StringBuffer procedure = new StringBuffer("CREATE PROCEDURE ") //$NON-NLS-1$
.append("BEGIN\n") //$NON-NLS-1$
- .append("INSERT INTO pm1.g1 (e1) VALUES (input.e1);\n") //$NON-NLS-1$
- .append("ROWS_UPDATED = INSERT INTO pm1.g2 (e1) VALUES (input.e1);\n") //$NON-NLS-1$
+ .append("INSERT INTO pm1.g1 (e1) VALUES (INPUTS.e1);\n") //$NON-NLS-1$
+ .append("ROWS_UPDATED = INSERT INTO pm1.g2 (e1) VALUES (INPUTS.e1);\n") //$NON-NLS-1$
.append("END\n"); //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -1295,9 +1276,9 @@
/*@Test public void testCommandUpdatingCount6() throws Exception{
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "if(INPUT.e1 = 10)\n"; //$NON-NLS-1$
+ procedure = procedure + "if(INPUTS.e1 = 10)\n"; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "INSERT INTO pm1.g1 (e2) VALUES (Input.e2);\n"; //$NON-NLS-1$
+ procedure = procedure + "INSERT INTO pm1.g1 (e2) VALUES (INPUTS.e2);\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
@@ -1327,14 +1308,14 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "INPUT.e1 = Select pm1.g1.e1 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure = procedure + "INPUTS.e1 = Select pm1.g1.e1 from pm1.g1;\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED =0;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
helpFailUpdateProcedure(procedure, userUpdateStr,
- FakeMetadataObject.Props.UPDATE_PROCEDURE, "Element symbol \"INPUT.e1\" cannot be assigned a value. Only declared VARIABLES can be assigned values."); //$NON-NLS-1$
+ FakeMetadataObject.Props.UPDATE_PROCEDURE, "Element symbol \"INPUTS.e1\" cannot be assigned a value. Only declared VARIABLES can be assigned values."); //$NON-NLS-1$
}
// validating CHANGING element assigned
@@ -1372,14 +1353,14 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "Insert into pm1.g1 (pm1.g1.e2, INPUT.x) values (1, 2);\n"; //$NON-NLS-1$
+ procedure = procedure + "Insert into pm1.g1 (pm1.g1.e2, INPUTS.x) values (1, 2);\n"; //$NON-NLS-1$
procedure = procedure + "ROWS_UPDATED =0;\n"; //$NON-NLS-1$
procedure = procedure + "END\n"; //$NON-NLS-1$
String userQuery = "UPDATE vm1.g3 SET x='x' where e3= 1"; //$NON-NLS-1$
helpFailUpdateProcedure(procedure, userQuery,
- FakeMetadataObject.Props.UPDATE_PROCEDURE, "Column variables do not reference columns on group \"pm1.g1\": [Unable to resolve 'INPUT.x': Symbol INPUT.x is specified with an unknown group context]"); //$NON-NLS-1$
+ FakeMetadataObject.Props.UPDATE_PROCEDURE, "Column variables do not reference columns on group \"pm1.g1\": [Unable to resolve 'INPUTS.x': Symbol INPUTS.x is specified with an unknown group context]"); //$NON-NLS-1$
}
//should resolve first to the table's column
@@ -1539,14 +1520,14 @@
@Test public void testDefect16451() {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure += "BEGIN\n"; //$NON-NLS-1$
- procedure += "Select pm1.g1.e2 from pm1.g1 where e1 = input.e1;\n"; //$NON-NLS-1$
+ procedure += "Select pm1.g1.e2 from pm1.g1 where e1 = INPUTS.e1;\n"; //$NON-NLS-1$
procedure += "ROWS_UPDATED = 0;"; //$NON-NLS-1$
procedure += "END\n"; //$NON-NLS-1$
String userUpdateStr = "delete from vm1.g1 where e1='x'"; //$NON-NLS-1$
helpFailUpdateProcedure(procedure, userUpdateStr,
- FakeMetadataObject.Props.DELETE_PROCEDURE, "Symbol input.e1 is specified with an unknown group context"); //$NON-NLS-1$
+ FakeMetadataObject.Props.DELETE_PROCEDURE, "Symbol INPUTS.e1 is specified with an unknown group context"); //$NON-NLS-1$
}
@Test public void testInvalidVirtualProcedure3() throws Exception {
@@ -1573,14 +1554,14 @@
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure += "BEGIN\n"; //$NON-NLS-1$
procedure += "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure += "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
- procedure += "ROWS_UPDATED = UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e1;\n"; //$NON-NLS-1$
+ procedure += "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+ procedure += "ROWS_UPDATED = UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e1;\n"; //$NON-NLS-1$
procedure += "END\n"; //$NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
helpFailUpdateProcedure(procedure, userUpdateStr,
- FakeMetadataObject.Props.UPDATE_PROCEDURE, "Error Code:ERR.015.008.0041 Message:Cannot set symbol 'pm1.g1.e2' with expected type integer to expression 'INPUT.e1'"); //$NON-NLS-1$
+ FakeMetadataObject.Props.UPDATE_PROCEDURE, "Error Code:ERR.015.008.0041 Message:Cannot set symbol 'pm1.g1.e2' with expected type integer to expression 'INPUTS.e1'"); //$NON-NLS-1$
}
@Test public void testVirtualProcedure() throws Exception {
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,10 +22,11 @@
package com.metamatrix.query.sql.symbol;
+import org.teiid.connector.language.SQLReservedWords;
+
import junit.framework.TestCase;
import com.metamatrix.core.util.UnitTestUtil;
-import com.metamatrix.query.sql.ReservedWords;
public class TestAggregateSymbol extends TestCase {
@@ -70,105 +71,105 @@
// ################################## ACTUAL TESTS ################################
public void testParser1() {
- AggregateSymbol as = new AggregateSymbol("count", ReservedWords.COUNT, false, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol as = new AggregateSymbol("count", SQLReservedWords.COUNT, false, sampleElement()); //$NON-NLS-1$
helpParser(as, "COUNT(m.g.c)"); //$NON-NLS-1$
}
public void testParser2() {
- AggregateSymbol as = new AggregateSymbol("count", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol as = new AggregateSymbol("count", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
helpParser(as, "COUNT(DISTINCT m.g.c)"); //$NON-NLS-1$
}
public void testParser3() {
- AggregateSymbol as = new AggregateSymbol("x", ReservedWords.MIN, false, sampleConstant()); //$NON-NLS-1$
+ AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.MIN, false, sampleConstant()); //$NON-NLS-1$
helpParser(as, "MIN(5)"); //$NON-NLS-1$
}
public void testParser4() {
- AggregateSymbol as = new AggregateSymbol("x", ReservedWords.MAX, false, sampleFunction()); //$NON-NLS-1$
+ AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.MAX, false, sampleFunction()); //$NON-NLS-1$
helpParser(as, "MAX((m.g.c + 5))"); //$NON-NLS-1$
}
public void testParser5() {
- AggregateSymbol as = new AggregateSymbol("x", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
helpParser(as, "COUNT(*)"); //$NON-NLS-1$
}
public void testEquals1() {
- AggregateSymbol as = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
helpEquals(as, as, true);
}
public void testEquals2() {
- AggregateSymbol as1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol as1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
AggregateSymbol as2 = (AggregateSymbol) as1.clone();
helpEquals(as1, as2, true);
}
//just changing the name of an aggregatesymbol doesn't matter
public void testEquals3() {
- AggregateSymbol as1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol as2 = new AggregateSymbol("y", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol as1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol as2 = new AggregateSymbol("y", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
helpEquals(as1, as2, true);
}
public void testEquals4() {
- AggregateSymbol as1 = new AggregateSymbol("count", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol as1 = new AggregateSymbol("count", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
AggregateSymbol as2 = (AggregateSymbol) as1.clone();
helpEquals(as1, as2, true);
}
public void testSelfEquivalence(){
- AggregateSymbol test = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
int equals = 0;
UnitTestUtil.helpTestEquivalence(equals, test, test);
}
public void testEquivalence(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
int equals = 0;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
public void testEquivalenceCountStar(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, false, null); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
int equals = 0;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
public void testEquivalenceCaseInsens(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("X", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("X", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
int equals = 0;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
public void testNonEquivalenceUsingDiffElements(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("X", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("X", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
int equals = -1;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
public void testNonEquivalence(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("y", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("y", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
int equals = -1;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
public void testNonEquivalence1(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
int equals = -1;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
public void testNonEquivalence2(){
- AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.MAX, true, sampleElement()); //$NON-NLS-1$
- AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+ AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.MAX, true, sampleElement()); //$NON-NLS-1$
+ AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
int equals = -1;
UnitTestUtil.helpTestEquivalence(equals, test1, test2);
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -178,7 +178,7 @@
"vm1.g1", //$NON-NLS-1$
"select e1 as a, e2 from pm1.g1 where e4 > 5", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUT.a, INPUT.e2);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUTS.a, INPUTS.e2);\nEND"); //$NON-NLS-1$
}
public void testCreateInsertCommand2(){ //put a constant in select statement
@@ -186,7 +186,7 @@
"vm1.g1", //$NON-NLS-1$
"select e1 as a, 5 from pm1.g1 where e4 > 5", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1) VALUES (INPUT.a);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1) VALUES (INPUTS.a);\nEND"); //$NON-NLS-1$
}
public void testCreateInsertCommand3(){
@@ -194,7 +194,7 @@
"vm1.g2", //$NON-NLS-1$
"select * from pm1.g2 where e4 > 5", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUT.e1, INPUT.e2, INPUT.e3, INPUT.e4);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUTS.e1, INPUTS.e2, INPUTS.e3, INPUTS.e4);\nEND"); //$NON-NLS-1$
}
public void testCreateInsertCommand4(){ //test group alias
@@ -202,7 +202,7 @@
"vm1.g2", //$NON-NLS-1$
"select * from pm1.g2 as g_alias", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUT.e1, INPUT.e2, INPUT.e3, INPUT.e4);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUTS.e1, INPUTS.e2, INPUTS.e3, INPUTS.e4);\nEND"); //$NON-NLS-1$
}
public void testCreateInsertCommand5(){
@@ -210,7 +210,7 @@
"vm1.g1", //$NON-NLS-1$
"select e1 as a, e2 from pm1.g1 as g_alias where e4 > 5", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUT.a, INPUT.e2);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUTS.a, INPUTS.e2);\nEND"); //$NON-NLS-1$
}
public void testCreateUpdateCommand(){
@@ -218,7 +218,7 @@
"vm1.g1", //$NON-NLS-1$
"select e1 as a, e2 from pm1.g1 where e4 > 5", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e1 = INPUT.a, e2 = INPUT.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e1 = INPUTS.a, e2 = INPUTS.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
}
public void testCreateDeleteCommand(){
@@ -339,7 +339,7 @@
"vm1.g3", //$NON-NLS-1$
"SELECT e1, e2 FROM pm1.g3", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e2) VALUES (INPUT.e1, INPUT.e2);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e2) VALUES (INPUTS.e1, INPUTS.e2);\nEND"); //$NON-NLS-1$
}
// Check that e2 is not required (it is auto-incremented)
@@ -348,7 +348,7 @@
"vm1.g4", //$NON-NLS-1$
"SELECT e1, e3 FROM pm1.g3", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e3) VALUES (INPUT.e1, INPUT.e3);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e3) VALUES (INPUTS.e1, INPUTS.e3);\nEND"); //$NON-NLS-1$
}
// Check that e1 is required (it is not-nullable, not auto-incrementable, and has no default value)
@@ -366,7 +366,7 @@
"vm1.g1", //$NON-NLS-1$
"select e1 as a, e2 from pm1.g1 where e4 > 5", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(false),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e2 = INPUT.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e2 = INPUTS.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
}
// Verify that elements that are not updateable are exlcluded from update and delete procedures
@@ -375,7 +375,7 @@
"vm1.g1", //$NON-NLS-1$
"SELECT e1, e2 FROM pm1.g1", //$NON-NLS-1$
TestUpdateProcedureGenerator.example1(false),
- "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e2) VALUES (INPUT.e2);\nEND"); //$NON-NLS-1$
+ "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e2) VALUES (INPUTS.e2);\nEND"); //$NON-NLS-1$
}
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -32,9 +32,9 @@
import org.junit.Test;
import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.SQLReservedWords;
import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.Select;
import com.metamatrix.query.sql.lang.SetCriteria;
@@ -196,10 +196,10 @@
*/
@Test public void testRecursionDetection() {
ElementSymbol e1 = new ElementSymbol("e1"); //$NON-NLS-1$
- AggregateSymbol a1 = new AggregateSymbol("x", ReservedWords.SUM, false, e1); //$NON-NLS-1$
+ AggregateSymbol a1 = new AggregateSymbol("x", SQLReservedWords.SUM, false, e1); //$NON-NLS-1$
Function f = new Function(SourceSystemFunctions.ADD_OP, new Expression[] {a1, a1});
HashMap<AggregateSymbol, AggregateSymbol> map = new HashMap<AggregateSymbol, AggregateSymbol>();
- map.put(a1, new AggregateSymbol("x", ReservedWords.SUM, false, a1)); //$NON-NLS-1$
+ map.put(a1, new AggregateSymbol("x", SQLReservedWords.SUM, false, a1)); //$NON-NLS-1$
ExpressionMappingVisitor.mapExpressions(f, map);
assertEquals("(SUM(SUM(e1)) + SUM(SUM(e1)))", f.toString()); //$NON-NLS-1$
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -27,6 +27,8 @@
import java.util.Arrays;
import java.util.List;
+import org.teiid.connector.language.SQLReservedWords;
+
import junit.framework.TestCase;
import com.metamatrix.common.types.DataTypeManager;
@@ -34,7 +36,6 @@
import com.metamatrix.query.parser.QueryParser;
import com.metamatrix.query.resolver.QueryResolver;
import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.BetweenCriteria;
import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.CompareCriteria;
@@ -1051,37 +1052,37 @@
}
public void testAggregateSymbol1() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.COUNT, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.COUNT, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
helpTest(agg, "COUNT('abc')"); //$NON-NLS-1$
}
public void testAggregateSymbol2() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.COUNT, true, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.COUNT, true, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
helpTest(agg, "COUNT(DISTINCT 'abc')"); //$NON-NLS-1$
}
public void testAggregateSymbol3() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
helpTest(agg, "COUNT(*)"); //$NON-NLS-1$
}
public void testAggregateSymbol4() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.AVG, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.AVG, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
helpTest(agg, "AVG('abc')"); //$NON-NLS-1$
}
public void testAggregateSymbol5() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.SUM, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.SUM, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
helpTest(agg, "SUM('abc')"); //$NON-NLS-1$
}
public void testAggregateSymbol6() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.MIN, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.MIN, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
helpTest(agg, "MIN('abc')"); //$NON-NLS-1$
}
public void testAggregateSymbol7() {
- AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.MAX, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+ AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.MAX, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
helpTest(agg, "MAX('abc')"); //$NON-NLS-1$
}
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -1060,34 +1060,6 @@
helpValidate("EXEC pm1.sq1()", new String[] {}, FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
}
- // variable declared is of special type INPUT
- @Test public void testCreateUpdateProcedure1() {
- String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
- procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "DECLARE integer INPUT;\n"; //$NON-NLS-1$
- procedure = procedure + "ROWS_UPDATED =0;\n"; //$NON-NLS-1$
- procedure = procedure + "END\n"; //$NON-NLS-1$
-
- String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
-
- helpFailProcedure(procedure, userUpdateStr,
- FakeMetadataObject.Props.UPDATE_PROCEDURE);
- }
-
- // variable declared is of special type CHANGING
- @Test public void testCreateUpdateProcedure3() {
- String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
- procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "DECLARE integer CHANGING;\n"; //$NON-NLS-1$
- procedure = procedure + "ROWS_UPDATED =0;\n"; //$NON-NLS-1$
- procedure = procedure + "END\n"; //$NON-NLS-1$
-
- String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
-
- helpFailProcedure(procedure, userUpdateStr,
- FakeMetadataObject.Props.UPDATE_PROCEDURE);
- }
-
// valid variable declared
@Test public void testCreateUpdateProcedure4() {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,9 +25,9 @@
import org.teiid.connector.language.AggregateFunction;
import org.teiid.connector.language.AggregateFunction;
import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
import com.metamatrix.query.sql.symbol.Constant;
@@ -53,23 +53,23 @@
}
public void testGetName() throws Exception {
- assertEquals(AggregateFunction.COUNT, example("testName", ReservedWords.COUNT, true, 42).getName()); //$NON-NLS-1$
+ assertEquals(AggregateFunction.COUNT, example("testName", SQLReservedWords.COUNT, true, 42).getName()); //$NON-NLS-1$
}
public void testIsDistinct() throws Exception {
- assertTrue(example("testName", ReservedWords.COUNT, true, 42).isDistinct()); //$NON-NLS-1$
- assertFalse(example("testName", ReservedWords.COUNT, false, 42).isDistinct()); //$NON-NLS-1$
+ assertTrue(example("testName", SQLReservedWords.COUNT, true, 42).isDistinct()); //$NON-NLS-1$
+ assertFalse(example("testName", SQLReservedWords.COUNT, false, 42).isDistinct()); //$NON-NLS-1$
}
public void testGetExpression() throws Exception {
- AggregateFunction agg = example("testName", ReservedWords.COUNT, true, 42); //$NON-NLS-1$
+ AggregateFunction agg = example("testName", SQLReservedWords.COUNT, true, 42); //$NON-NLS-1$
assertNotNull(agg.getExpression());
assertTrue(agg.getExpression() instanceof Literal);
assertEquals(new Integer(42), ((Literal)agg.getExpression()).getValue());
}
public void testGetType() throws Exception {
- assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, example("x", ReservedWords.COUNT, true, 42).getType()); //$NON-NLS-1$
+ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, example("x", SQLReservedWords.COUNT, true, 42).getType()); //$NON-NLS-1$
}
}
Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -73,19 +73,19 @@
}
public void testGetThenExpression() throws Exception {
- assertNotNull(example().getThenExpressions().get(0));
- assertNotNull(example().getThenExpressions().get(1));
- assertNotNull(example().getThenExpressions().get(2));
+ assertNotNull(example().getCases().get(0));
+ assertNotNull(example().getCases().get(1));
+ assertNotNull(example().getCases().get(2));
}
public void testGetWhenCount() throws Exception {
- assertEquals(3, example().getWhenConditions().size());
+ assertEquals(3, example().getCases().size());
}
public void testGetWhenCriteria() throws Exception {
- assertNotNull(example().getWhenConditions().get(0));
- assertNotNull(example().getWhenConditions().get(1));
- assertNotNull(example().getWhenConditions().get(2));
+ assertNotNull(example().getCases().get(0));
+ assertNotNull(example().getCases().get(1));
+ assertNotNull(example().getCases().get(2));
}
}
Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -48,16 +48,11 @@
}
public void testFind() throws Exception {
- String vdbName = "myvdb"; //$NON-NLS-1$
- int vdbVersion = 1; //$NON-NLS-1$
String modelName = "model"; //$NON-NLS-1$
String functionName = "fakeFunction"; //$NON-NLS-1$
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setFunctionSupport("fakeFunction", true); //$NON-NLS-1$
- DQPWorkContext workContext = new DQPWorkContext();
- workContext.setVdbName(vdbName);
- workContext.setVdbVersion(vdbVersion);
ArrayList<String> bindings = new ArrayList<String>();
bindings.add(modelName);
@@ -67,7 +62,6 @@
Mockito.stub(vdb.getModel(modelName)).toReturn(model);
Mockito.stub(model.getConnectorReference()).toReturn("ref-name");
Mockito.stub(vdb.getConnectorBindingNames("ref-name")).toReturn(bindings);
- workContext.setVdb(vdb);
BasicSourceCapabilities basicSourceCapabilities = new BasicSourceCapabilities();
basicSourceCapabilities.setFunctionSupport(functionName, true);
@@ -77,7 +71,7 @@
Mockito.stub(cm.getCapabilities()).toReturn(basicSourceCapabilities);
Mockito.stub(repo.getConnectorManager(modelName)).toReturn(cm);
- CachedFinder finder = new CachedFinder(repo, workContext);
+ CachedFinder finder = new CachedFinder(repo, vdb);
// Test
SourceCapabilities actual = finder.findCapabilities(modelName);
Modified: branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
===================================================================
--- branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java 2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java 2010-03-02 14:32:21 UTC (rev 1886)
@@ -40,6 +40,7 @@
import org.teiid.connector.language.LanguageObject;
import org.teiid.connector.language.Literal;
import org.teiid.connector.language.NamedTable;
+import org.teiid.connector.language.SQLReservedWords;
import org.teiid.connector.language.Select;
import org.teiid.connector.metadata.runtime.RuntimeMetadata;
import org.teiid.dqp.internal.datamgr.language.TestAggregateImpl;
@@ -73,7 +74,6 @@
import com.metamatrix.cdk.unittest.FakeTranslationFactory;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.query.metadata.QueryMetadataInterface;
-import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.unittest.FakeMetadataFacade;
@@ -119,7 +119,7 @@
*/
@Test public void testVisitIAggregate() throws Exception {
String expected = "COUNT(42)"; //$NON-NLS-1$
- assertEquals(expected, getString(TestAggregateImpl.example("COUNT", ReservedWords.COUNT, false, 42))); //$NON-NLS-1$
+ assertEquals(expected, getString(TestAggregateImpl.example("COUNT", SQLReservedWords.COUNT, false, 42))); //$NON-NLS-1$
}
@Test public void testVisitIAggregateDistinct() throws Exception {
15 years
teiid SVN: r1885 - trunk/engine/src/test/java/com/metamatrix/query/processor.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-03-02 00:20:24 -0500 (Tue, 02 Mar 2010)
New Revision: 1885
Modified:
trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java
Log:
TEIID-1004 adding a check to filter nan/infinite values
Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java 2010-03-01 21:33:09 UTC (rev 1884)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java 2010-03-02 05:20:24 UTC (rev 1885)
@@ -3557,7 +3557,7 @@
/** Test selecting a virtual element (e5) which is defined by a scalar subquery in the virtual transformation */
@Test public void testCorrelatedSubqueryInTransformation15d() {
- String sql = "Select e1, e2, e3, e4 from pm1.g1 where exists (select e1, e2, e3, e4, ((e4 + e5)/e4) as e from vm1.g26 where pm1.g1.e3 = e3)"; //$NON-NLS-1$
+ String sql = "Select e1, e2, e3, e4 from pm1.g1 where exists (select e1, e2, e3, e4, ((e4 + e5)/(e4 + 1)) as e from vm1.g26 where pm1.g1.e3 = e3)"; //$NON-NLS-1$
// Create expected results
List[] expected = new List[]{
15 years
teiid SVN: r1884 - in trunk: engine/src/main/java/com/metamatrix/query/function and 1 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-03-01 16:33:09 -0500 (Mon, 01 Mar 2010)
New Revision: 1884
Modified:
trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
trunk/engine/src/main/java/com/metamatrix/query/function/FunctionLibrary.java
trunk/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java
Log:
TEIID-1004 adding a check to filter nan/infinite values
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2010-03-01 21:26:34 UTC (rev 1883)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2010-03-01 21:33:09 UTC (rev 1884)
@@ -97,7 +97,6 @@
private static class HashedValueCache<T> implements ValueCache<T> {
final Object[] cache;
- final boolean weak = false;
HashedValueCache(int size) {
cache = new Object[1 << size];
@@ -842,10 +841,9 @@
}
//TODO: this initial lookup is inefficient, since there are likely collisions
ValueCache valueCache = valueMaps.get(value.getClass());
- if (valueCache == null) {
- return value;
+ if (valueCache != null) {
+ value = (T)valueCache.getValue(value);
}
- return (T)valueCache.getValue(value);
}
return value;
}
Modified: trunk/engine/src/main/java/com/metamatrix/query/function/FunctionLibrary.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/function/FunctionLibrary.java 2010-03-01 21:26:34 UTC (rev 1883)
+++ trunk/engine/src/main/java/com/metamatrix/query/function/FunctionLibrary.java 2010-03-01 21:33:09 UTC (rev 1884)
@@ -31,6 +31,7 @@
import com.metamatrix.api.exception.query.QueryResolverException;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
+import com.metamatrix.common.util.PropertiesUtils;
import com.metamatrix.query.QueryPlugin;
import com.metamatrix.query.function.metadata.FunctionMethod;
import com.metamatrix.query.function.metadata.FunctionParameter;
@@ -45,8 +46,10 @@
* functions are available, resolve function signatures, and invoke system
* and user-defined functions.
*/
-public class FunctionLibrary {
-
+public class FunctionLibrary {
+
+ private static final boolean ALLOW_NAN_INFINITY = PropertiesUtils.getBooleanProperty(System.getProperties(), "org.teiid.allowNanInfinity", false); //$NON-NLS-1$
+
// Special type conversion functions
public static final String CONVERT = "convert"; //$NON-NLS-1$
public static final String CAST = "cast"; //$NON-NLS-1$
@@ -393,6 +396,19 @@
values = newValues;
}
Object result = method.invoke(null, values);
+ if (!ALLOW_NAN_INFINITY) {
+ if (result instanceof Double) {
+ Double floatVal = (Double)result;
+ if (Double.isInfinite(floatVal) || Double.isNaN(floatVal)) {
+ throw new FunctionExecutionException(new ArithmeticException("Infinite or invalid result"), ErrorMessageKeys.FUNCTION_0003, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0003, fd.getName())); //$NON-NLS-1$
+ }
+ } else if (result instanceof Float) {
+ Float floatVal = (Float)result;
+ if (Float.isInfinite(floatVal) || Float.isNaN(floatVal)) {
+ throw new FunctionExecutionException(new ArithmeticException("Infinite or invalid result"), ErrorMessageKeys.FUNCTION_0003, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0003, fd.getName())); //$NON-NLS-1$
+ }
+ }
+ }
result = DataTypeManager.convertToRuntimeType(result);
result = DataTypeManager.transformValue(result, fd.getReturnType());
return result;
Modified: trunk/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java 2010-03-01 21:26:34 UTC (rev 1883)
+++ trunk/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java 2010-03-01 21:33:09 UTC (rev 1884)
@@ -168,19 +168,31 @@
}
private void helpInvokeMethod(String fname, Object[] inputs, Object expectedOutput) {
- // Build type signature
- Class[] types = new Class[inputs.length];
- for(int i=0; i<inputs.length; i++) {
- types[i] = DataTypeManager.determineDataTypeClass(inputs[i]);
- }
try {
- helpInvokeMethod(fname, types, inputs, new CommandContext(), expectedOutput);
+ helpInvokeMethod(fname, null, inputs, null, expectedOutput);
} catch (Exception err) {
throw new RuntimeException(err);
}
}
- private void helpInvokeMethod(String fname, Class[] types, Object[] inputs, CommandContext context , Object expectedOutput) throws InvalidFunctionException, FunctionExecutionException {
+ private void helpInvokeMethod(String fname, Class[] types, Object[] inputs, CommandContext context, Object expectedOutput) throws InvalidFunctionException, FunctionExecutionException {
+ Object actualOutput = helpInvokeMethod(fname, types, inputs, context);
+ assertEquals("Actual function output not equal to expected: ", expectedOutput, actualOutput); //$NON-NLS-1$
+ }
+
+ private Object helpInvokeMethod(String fname, Class[] types,
+ Object[] inputs, CommandContext context)
+ throws InvalidFunctionException, FunctionExecutionException {
+ if (types == null) {
+ // Build type signature
+ types = new Class[inputs.length];
+ for(int i=0; i<inputs.length; i++) {
+ types[i] = DataTypeManager.determineDataTypeClass(inputs[i]);
+ }
+ }
+ if (context == null) {
+ context = new CommandContext();
+ }
Object actualOutput = null;
// Find function descriptor
FunctionDescriptor descriptor = library.findFunction(fname, types);
@@ -197,64 +209,18 @@
// Invoke function with inputs
actualOutput = library.invokeFunction(descriptor, inputs);
}
- assertEquals("Actual function output not equal to expected: ", expectedOutput, actualOutput); //$NON-NLS-1$
- }
+ return actualOutput;
+ }
- private void helpInvokeMethodFail(String fname, Object[] inputs, Object expectedException) {
- Object actualOutput = null;
- try {
- // Build type signature
- Class[] types = new Class[inputs.length];
- for(int i=0; i<inputs.length; i++) {
- types[i] = DataTypeManager.determineDataTypeClass(inputs[i]);
- }
-
- // Find function descriptor
- FunctionDescriptor descriptor = library.findFunction(fname, types);
- if (descriptor != null && descriptor.requiresContext()) {
- // Invoke function with inputs
- Object[] in = new Object[inputs.length+1];
- in[0] = new CommandContext();
- for (int i = 0; i < inputs.length; i++) {
- in[i+1] = inputs[i];
- }
- actualOutput = library.invokeFunction(descriptor, in);
- }
- else {
- // Invoke function with inputs
- actualOutput = library.invokeFunction(descriptor, inputs);
- }
-
- } catch(Throwable e) {
- //e.printStackTrace();
- assertNull(actualOutput);
- assertEquals("Unexpected exception.", e.getClass().getName(), ((FunctionExecutionException)expectedException).getClass().getName()); //$NON-NLS-1$
- }
+ private void helpInvokeMethodFail(String fname, Object[] inputs) throws InvalidFunctionException {
+ helpInvokeMethodFail(fname, null, inputs);
}
- private void helpInvokeMethodFail(String fname, Class types[], Object[] inputs, Object expectedException) {
- Object actualOutput = null;
- try {
- // Find function descriptor
- FunctionDescriptor descriptor = library.findFunction(fname, types);
- if (descriptor != null && descriptor.requiresContext()) {
- // Invoke function with inputs
- Object[] in = new Object[inputs.length+1];
- in[0] = new CommandContext();
- for (int i = 0; i < inputs.length; i++) {
- in[i+1] = inputs[i];
- }
- actualOutput = library.invokeFunction(descriptor, in);
- }
- else {
- // Invoke function with inputs
- actualOutput = library.invokeFunction(descriptor, inputs);
- }
-
- } catch(Throwable e) {
- //e.printStackTrace();
- assertNull(actualOutput);
- assertEquals("Unexpected exception.", e.getClass().getName(), ((FunctionExecutionException)expectedException).getClass().getName()); //$NON-NLS-1$
+ private void helpInvokeMethodFail(String fname, Class<?> types[], Object[] inputs) throws InvalidFunctionException {
+ try {
+ helpInvokeMethod(fname, types, inputs, null);
+ fail("expected exception"); //$NON-NLS-1$
+ } catch (FunctionExecutionException err) {
}
}
// ################################## ACTUAL TESTS ################################
@@ -635,6 +601,10 @@
helpInvokeMethod("/", new Object[] { new BigDecimal("3"), new BigDecimal("2") }, new BigDecimal("2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
+ @Test public void testInvokeDivide7() throws Exception {
+ helpInvokeMethodFail("/", new Object[] { new Float("3"), new Float("0") }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+
@Test public void testInvokeDivideMod() {
helpInvokeMethod("mod", new Object[] { new BigDecimal("3.1"), new BigDecimal("2") }, new BigDecimal("1.1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@@ -802,9 +772,8 @@
helpInvokeMethod("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("yyyy-mm-dd hh:mm:ss.SSSS") }, "2003-04-05 03:04:12.0000"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- @Test public void testInvokeFormatTimestampFail() {
- helpInvokeMethodFail("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("mm/dd/nn h:mm a") }, //$NON-NLS-1$ //$NON-NLS-2$
- new FunctionExecutionException("")); //$NON-NLS-1$
+ @Test public void testInvokeFormatTimestampFail() throws Exception {
+ helpInvokeMethodFail("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("mm/dd/nn h:mm a") }); //$NON-NLS-1$
}
@Test public void testInvokeParseTimestamp1() {
@@ -991,15 +960,15 @@
}
/** should fail, with start > string1.length() */
- @Test public void testInvokeInsert4() {
+ @Test public void testInvokeInsert4() throws Exception {
helpInvokeMethodFail("insert", new Object[] {new String(""), new Integer(2), //$NON-NLS-1$ //$NON-NLS-2$
- new Integer(0), new String("cat")}, new FunctionExecutionException("")); //$NON-NLS-1$ //$NON-NLS-2$
+ new Integer(0), new String("cat")}); //$NON-NLS-1$ //$NON-NLS-2$
}
/** should fail, with length > 0 and input string1.length() = 0 */
- @Test public void testInvokeInsert5() {
+ @Test public void testInvokeInsert5() throws Exception {
helpInvokeMethodFail("insert", new Object[] {new String(""), new Integer(1), //$NON-NLS-1$ //$NON-NLS-2$
- new Integer(1), new String("cat")}, new FunctionExecutionException("")); //$NON-NLS-1$ //$NON-NLS-2$
+ new Integer(1), new String("cat")}); //$NON-NLS-1$ //$NON-NLS-2$
}
/** (length + start) > string1.length(), then just append str2 starting at start position */
@@ -1210,11 +1179,10 @@
helpInvokeMethod("modifyTimeZone", new Object[] {ts, "America/New_York" }, out); //$NON-NLS-1$ //$NON-NLS-2$
}
- @Test public void testInvokeRand() {
+ @Test public void testInvokeRand() throws Exception {
helpInvokeMethod("rand", new Object[] {new Integer(100)}, new Double(0.7220096548596434)); //$NON-NLS-1$
- helpInvokeMethodFail("rand", new Class[] {Integer.class}, new Object[] {new Double(100)}, new FunctionExecutionException("")); //$NON-NLS-1$ //$NON-NLS-2$
// this does not actually fail but returns a result
- helpInvokeMethodFail("rand", new Class[] {Integer.class}, new Object[] {null}, new FunctionExecutionException("")); //$NON-NLS-1$ //$NON-NLS-2$
+ assertNotNull(helpInvokeMethod("rand", new Class[] {Integer.class}, new Object[] {null}, null)); //$NON-NLS-1$
}
@Test public void testInvokeUser() throws Exception {
@@ -1271,6 +1239,10 @@
helpInvokeMethod("log10", new Object[] { new Double("10") }, new Double("1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
+ @Test public void testInvokeLog10Error() throws Exception {
+ helpInvokeMethodFail("log10", new Object[] { new Double("0") }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+
@Test public void testInvokePower() {
helpInvokeMethod("power", new Object[] { new Double("10"), new Double("2") }, new Double("100")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
15 years
teiid SVN: r1883 - branches/JCA/test-integration.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-03-01 16:26:34 -0500 (Mon, 01 Mar 2010)
New Revision: 1883
Modified:
branches/JCA/test-integration/pom.xml
Log:
adding client
Modified: branches/JCA/test-integration/pom.xml
===================================================================
--- branches/JCA/test-integration/pom.xml 2010-03-01 20:45:58 UTC (rev 1882)
+++ branches/JCA/test-integration/pom.xml 2010-03-01 21:26:34 UTC (rev 1883)
@@ -62,6 +62,10 @@
<dependency>
<groupId>org.jboss.teiid</groupId>
<artifactId>teiid-client-jdbc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.teiid</groupId>
+ <artifactId>teiid-client-jdbc</artifactId>
<type>test-jar</type>
</dependency>
<dependency>
15 years
teiid SVN: r1882 - in branches/JCA: build/kit-jboss-container/deployers/teiid.deployer and 13 other directories.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-03-01 15:45:58 -0500 (Mon, 01 Mar 2010)
New Revision: 1882
Added:
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java
branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java
Removed:
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java
Modified:
branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh
branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java
branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java
branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java
branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
branches/JCA/client/src/main/resources/vdb-deployer.xsd
branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java
branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java
branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java
branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java
branches/JCA/jboss-integration/src/test/resources/TransactionsRevisited.vdb
branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
Log:
TEIID-998: Removed data roles from schema; renamed few properties in the schema; made models and properties access to be hash based;started adding in code for update of the deployment file.
Modified: branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh
===================================================================
--- branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh 2010-03-01 20:45:58 UTC (rev 1882)
@@ -100,24 +100,30 @@
/**
* Assign a {@link ConnectorBinding} to a {@link VDB}'s Model
*
- * @param connectorBindingName
- * Name of the ConnectorBinding
* @param vdbName
* Name of the VDB
* @param vdbVersion
* Version of the VDB
* @param modelName
* Name of the Model to map Connector Binding
+ * @param connectorBindingName
+ * Name of the ConnectorBinding
* @throws AdminException
* if there's a system error or if there's a user input error.
* @since 4.3
*/
-void assignBindingToModel(String connectorBindingName, String vdbName, String vdbVersion, String modelName) {
+void assignBindingToModel(String vdbName, int vdbVersion, String modelName, String connectorBindingName) {
debug("Assigning Connector Binding " + connectorBindingName + " to Model " + modelName + " in VDB " + vdbName + " version " + vdbVersion);
checkAdmin();
- internalAdmin.assignBindingToModel(connectorBindingName, vdbName, vdbVersion, modelName);
+ internalAdmin.assignBindingToModel(vdbName, vdbVersion, modelName, connectorBindingName);
}
+void assignBindingToModel(String vdbName, int vdbVersion, String modelName, String[] connectorBindingNames) {
+ debug("Assigning Connector Bindings " + connectorBindingNames + " to Model " + modelName + " in VDB " + vdbName + " version " + vdbVersion);
+ checkAdmin();
+ internalAdmin.assignBindingToModel(vdbName, vdbVersion, modelName, connectorBindingNames);
+}
+
/**
* Adds JDBC XA Data Source in the container.
* @param dsName - name of the source
@@ -298,6 +304,20 @@
}
/**
+ * Get the VDB
+ * @param vdbName
+ * @param vbdVersion
+ * @throws AdminException if there's a system error.
+ * @return
+ */
+VDB getVDB(String vdbName, int version) {
+ checkAdmin();
+ result = internalAdmin.getVDB(vdbName, version);
+ debug(result);
+ return result;
+}
+
+/**
* Get all the Connector Bindings for the given VDB identifier pattern
* @param vdbName - Name of the VDB
* @param vdbVersion - version of the VDB
Modified: branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
===================================================================
--- branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2010-03-01 20:45:58 UTC (rev 1882)
@@ -56,6 +56,10 @@
<property name="managedObjectFactory"><inject bean="ManagedObjectFactory"/></property>
</bean>
+ <!-- Persistence class for the VDB deployment file -->
+ <bean name="VDBMetadataComponentMapper" class="org.teiid.jboss.deployers.VDBMetadataComponentMapper">
+ <constructor><parameter><inject bean="PersistenceFactory" /></parameter></constructor>
+ </bean>
<!-- JBOSS Cache -->
<!-- Uncomment for JBoss Cache -->
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -46,15 +46,15 @@
* @throws AdminException
* if there's a system error or if there's a user input error.
*/
- void assignBindingToModel(String connectorBindingName,
- String vdbName,
- String vdbVersion,
- String modelName) throws AdminException;
+ void assignBindingToModel(String vdbName,
+ int vdbVersion,
+ String modelName,
+ String connectorBindingName) throws AdminException;
- void assignBindingsToModel(String[] connectorBindingName,
- String vdbName,
- String vdbVersion,
- String modelName) throws AdminException;
+ void assignBindingsToModel(String vdbName,
+ int vdbVersion,
+ String modelName,
+ String[] connectorBindingName) throws AdminException;
/**
* Set/update the property for the Connector Binding identified by the given deployed name.
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -22,7 +22,6 @@
package org.teiid.adminapi;
-import java.util.List;
/**
* Represents a metadata model in the Teiid system.
@@ -32,12 +31,6 @@
public interface Model extends AdminObject {
/**
- * Return the connector binding names for this Virtual Database.
- * @return connector bindings bound to this model.
- */
- List<String> getConnectorBindingNames();
-
- /**
* Determine if this model is a Source model.
*
* @return <code>true</code> if it contains physical group(s).
@@ -54,13 +47,12 @@
/**
* Retrieve the model type.
- * TODO: one of ...
* @return model type
*/
String getModelType();
/**
- * Retrive the model URI.
+ * Retrieve the model URI.
*
* @return model URI
*/
@@ -73,8 +65,21 @@
*/
boolean isSupportsMultiSourceBindings();
+ /**
+ * Path of the model inside the VDB (optional)
+ * @return String
+ */
String getPath();
+ /**
+ * UUID of the Model (optional)
+ * @return String
+ */
String getUuid();
+ /**
+ * Associated connector binding's reference name
+ * @return String
+ */
+ String getConnectorReference();
}
\ No newline at end of file
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -29,22 +29,13 @@
public abstract class TeiidAdmin implements Admin, Serializable {
@Override
- public void assignBindingToModel(String connectorBindingName,
- String vdbName, String vdbVersion, String modelName)
+ public void assignBindingToModel(String vdbName, int vdbVersion, String modelName, String connectorBindingName)
throws AdminException {
// rameshTODO Auto-generated method stub
}
- @Override
- public void assignBindingsToModel(String[] connectorBindingName,
- String vdbName, String vdbVersion, String modelName)
- throws AdminException {
- // rameshTODO Auto-generated method stub
-
- }
-
@Override
public Collection<ProcessObject> getProcesses(String processIdentifier) throws AdminException {
ArrayList<ProcessObject> list = new ArrayList<ProcessObject>();
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -41,7 +42,7 @@
private String name;
- private List<PropertyMetadata> properties;
+ private LinkedHashMap<String, PropertyMetadata> properties = new LinkedHashMap<String, PropertyMetadata>();
private transient Map<String, Object> attachments = Collections.synchronizedMap(new HashMap<String, Object>());
@@ -56,50 +57,36 @@
@Override
public Properties getProperties() {
- if (this.properties == null) {
- return null;
- }
-
Properties props = new Properties();
- for (PropertyMetadata p:this.properties) {
+ for (PropertyMetadata p:this.properties.values()) {
props.setProperty(p.getName(), p.getValue());
}
return props;
}
+ public void setProperties(Properties props) {
+ this.properties.clear();
+ for (String key:props.stringPropertyNames()) {
+ addProperty(key, props.getProperty(key));
+ }
+ }
+
protected List<PropertyMetadata> getPropertiesDirect(){
- return this.properties;
+ return new ListOverMap<PropertyMetadata>(this.properties, new KeyBuilder<PropertyMetadata>() {
+ @Override
+ public String getKey(PropertyMetadata entry) {
+ return entry.getName();
+ }
+ });
}
- protected void setPropertiesDirect(List<PropertyMetadata> props){
- this.properties = props;
- }
-
@Override
public String getPropertyValue(String name) {
- if (this.properties == null) {
- return null;
- }
-
- for (PropertyMetadata p:this.properties) {
- if (p.getName().equals(name)) {
- return p.getValue();
- }
- }
- return null;
+ return this.properties.get(name).getValue();
}
- public void setProperties(Properties props) {
- for (String key:props.stringPropertyNames()) {
- addProperty(key, props.getProperty(key));
- }
- }
-
public void addProperty(String key, String value) {
- if (this.properties == null) {
- this.properties = new ArrayList<PropertyMetadata>();
- }
- this.properties.add(new PropertyMetadata(key, value));
+ this.properties.put(key, new PropertyMetadata(key, value));
}
/**
Deleted: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -1,164 +0,0 @@
-/*
- * 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.adminapi.impl;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-
-import org.jboss.managed.api.annotation.ManagementObject;
-
-
-/**
- * <pre>
- * <complexType>
- * <complexContent>
- * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- * <sequence>
- * <element name="description" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- * <element name="resource-name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- * <element name="allow-create" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- * <element name="allow-read" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- * <element name="allow-update" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- * <element name="allow-delete" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- * <choice minOccurs="0">
- * <element name="security-role-name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- * <element name="security-role-ref" type="{http://www.w3.org/2001/XMLSchema}string"/>
- * </choice>
- * </sequence>
- * <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- * </restriction>
- * </complexContent>
- * </complexType>
- * </pre>
- *
- */
-(a)XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
- "description",
- "resourceName",
- "allowCreate",
- "allowRead",
- "allowUpdate",
- "allowDelete",
- "securityRoleNames",
- "securityRoleRef"
-})
-@ManagementObject
-public class DataRoleMetadata implements Serializable {
-
- @XmlAttribute(name = "name", required = true)
- protected String name;
- @XmlElement(name = "description")
- protected String description;
- @XmlElement(name = "resource-name", required = true)
- protected String resourceName;
- @XmlElement(name = "allow-create")
- protected Boolean allowCreate;
- @XmlElement(name = "allow-read")
- protected Boolean allowRead;
- @XmlElement(name = "allow-update")
- protected Boolean allowUpdate;
- @XmlElement(name = "allow-delete")
- protected Boolean allowDelete;
- @XmlElement(name = "security-role-name")
- protected List<String> securityRoleNames;
- @XmlElement(name = "security-role-ref")
- protected String securityRoleRef;
-
- public String getName() {
- return name;
- }
-
- public void setName(String value) {
- this.name = value;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String value) {
- this.description = value;
- }
-
- public String getResourceName() {
- return resourceName;
- }
-
- public void setResourceName(String value) {
- this.resourceName = value;
- }
-
- public Boolean isAllowCreate() {
- return allowCreate;
- }
-
- public void setAllowCreate(Boolean value) {
- this.allowCreate = value;
- }
-
- public Boolean isAllowRead() {
- return allowRead;
- }
-
- public void setAllowRead(Boolean value) {
- this.allowRead = value;
- }
-
- public Boolean isAllowUpdate() {
- return allowUpdate;
- }
-
- public void setAllowUpdate(Boolean value) {
- this.allowUpdate = value;
- }
-
- public Boolean isAllowDelete() {
- return allowDelete;
- }
-
- public void setAllowDelete(Boolean value) {
- this.allowDelete = value;
- }
-
- public List<String> getSecurityRoleNames() {
- if (this.securityRoleNames == null) {
- this.securityRoleNames = new ArrayList<String>();
- }
- return this.securityRoleNames;
- }
-
- public String getSecurityRoleRef() {
- return securityRoleRef;
- }
-
- public void setSecurityRoleRef(String value) {
- this.securityRoleRef = value;
- }
-}
Added: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java (rev 0)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -0,0 +1,84 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2000-2007 MetaMatrix, Inc.
+ * Licensed to Red Hat, Inc. under one or more contributor
+ * license agreements. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.adminapi.impl;
+
+import java.util.AbstractList;
+import java.util.LinkedHashMap;
+import java.util.Set;
+
+final class ListOverMap<E> extends AbstractList<E> {
+
+ private LinkedHashMap<String, E> parent;
+ private KeyBuilder builder;
+
+ public ListOverMap(LinkedHashMap<String, E> parent, KeyBuilder builder) {
+ this.parent = parent;
+ this.builder = builder;
+ }
+
+ @Override
+ public void add(int index, E element) {
+ this.parent.put(builder.getKey(element), element);
+ }
+
+ @Override
+ public E remove(int index) {
+ String key = getKey(index);
+ if (key == null) {
+ throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());
+ }
+ return this.parent.remove(key);
+ }
+
+ @Override
+ public E get(int index) {
+ String key = getKey(index);
+ if (key == null) {
+ throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());
+ }
+ return this.parent.get(key);
+ }
+
+ private String getKey(int index) {
+ Set<String> keys = this.parent.keySet();
+ int i = 0;
+ for (String key:keys) {
+ if (i == index) {
+ return key;
+ }
+ i++;
+ }
+ return null;
+ }
+
+ @Override
+ public int size() {
+ return this.parent.size();
+ }
+}
+
+interface KeyBuilder<E> {
+ String getKey(E entry);
+}
+
Property changes on: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -22,7 +22,6 @@
package org.teiid.adminapi.impl;
-import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -41,52 +40,37 @@
import com.metamatrix.core.vdb.ModelType;
-/**
- * <pre>
- * <complexType>
- * <complexContent>
- * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- * <sequence>
- * <element name="property" type="{}property" maxOccurs="unbounded" minOccurs="0"/>
- * <choice minOccurs="0">
- * <element name="connector-name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- * <element name="connector-ref" type="{http://www.w3.org/2001/XMLSchema}string"/>
- * </choice>
- * </sequence>
- * <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- * </restriction>
- * </complexContent>
- * </complexType>
- * </pre>
- *
- */
+
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "", propOrder = {
"propertiesDirect",
- "connectorBindings",
"connectorReference"
})
@ManagementObject(componentType=@ManagementComponent(type="teiid",subtype="model"))
public class ModelMetaData extends AdminObjectImpl implements Model {
private static final String SUPPORTS_MULTI_SOURCE_BINDINGS_KEY = "supports-multi-source-bindings"; //$NON-NLS-1$
- private static final String VISIBILITY_KEY = "visibility"; //$NON-NLS-1$
private static final long serialVersionUID = 3714234763056162230L;
- @XmlElement(name = "connector-name")
- private List<String> connectorBindings = new ArrayList<String>();
+ @XmlElement(name = "connector-ref")
+ private String connectorReference;
- @XmlElement(name = "connector-ref")
- protected String connectorReference;
-
- @XmlAttribute(name = "type", required = true)
+ @XmlAttribute(name = "type", required = true)
private String modelType; //$NON-NLS-1$
- private String modelURI = ""; //$NON-NLS-1$
+ @XmlAttribute(name = "uri")
+ private String modelURI; //$NON-NLS-1$
+
+ @XmlAttribute(name = "path")
private String path;
+
+ @XmlAttribute(name = "uuid")
private String uuid;
+ @XmlAttribute(name = "visible")
+ private Boolean visible = true;
+
@ManagementProperty(description="Model Name", readOnly=true)
@ManagementObjectID(type="model")
@XmlAttribute(name = "name", required = true)
@@ -99,21 +83,6 @@
super.setName(name);
}
- @ManagementProperty(description="Connector Bindings for model")
- public List<String> getConnectorBindingNames(){
- return this.connectorBindings;
- }
-
- @ManagementProperty(description="Connector Binding Reference")
- public String getConnectorReference() {
- return connectorReference;
- }
-
-
- public void setConnectorReference(String connectorReference) {
- this.connectorReference = connectorReference;
- }
-
@Override
@ManagementProperty(description = "Is Model Source model", readOnly=true)
public boolean isSource() {
@@ -126,7 +95,7 @@
@Override
@ManagementProperty(description = "Is Model Visible", readOnly=true)
public boolean isVisible() {
- return getVisibility() == Visibility.PUBLIC;
+ return this.visible;
}
@Override
@@ -172,21 +141,6 @@
return super.getPropertiesDirect();
}
- // This is needed by the JAXB
- protected void setPropertiesDirect(List<PropertyMetadata> props){
- super.setPropertiesDirect(props);
- }
-
- public void addConnectorBinding(String binding) {
- this.connectorBindings.add(binding);
- }
-
- public void setConnectorBinding(List<String> bindings) {
- this.connectorBindings.clear();
- this.connectorBindings.addAll(bindings);
- }
-
-
public void setSupportsMultiSourceBindings(boolean supports) {
addProperty(SUPPORTS_MULTI_SOURCE_BINDINGS_KEY, Boolean.toString(supports));
}
@@ -208,19 +162,31 @@
}
public String toString() {
- return getName() + connectorBindings;
+ if (this.connectorReference != null)
+ return getName() + "["+this.connectorReference+"]";
+
+ return getName();
}
public Visibility getVisibility(){
- String visibility = getPropertyValue(VISIBILITY_KEY);
- if (visibility != null) {
- Visibility v = Visibility.valueOf(visibility);
- return v;
- }
- return Visibility.PUBLIC;
+ return this.visible?Visibility.PUBLIC:Visibility.PRIVATE;
}
- public void setVisibility(Visibility visibility) {
- addProperty(VISIBILITY_KEY, visibility.name());
+ public void setVisibility(Visibility visibility){
+ this.visible = (visibility == Visibility.PUBLIC);
+ }
+
+ public void setVisible(Boolean value) {
+ this.visible = value;
}
+
+ @Override
+ @ManagementProperty(description = "Connector Binding Reference Name", readOnly=true)
+ public String getConnectorReference() {
+ return connectorReference;
+ }
+
+ public void setConnectorReference(String refName) {
+ this.connectorReference = refName;
+ }
}
Added: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java (rev 0)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -0,0 +1,111 @@
+/*
+ * 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.adminapi.impl;
+
+import java.lang.reflect.Type;
+import java.util.Properties;
+
+import org.jboss.metatype.api.types.CompositeMetaType;
+import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.types.PropertiesMetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
+import org.jboss.metatype.api.values.CompositeValue;
+import org.jboss.metatype.api.values.CompositeValueSupport;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.MetaValueFactory;
+import org.jboss.metatype.api.values.PropertiesMetaValue;
+import org.jboss.metatype.api.values.SimpleValueSupport;
+import org.jboss.metatype.plugins.types.MutableCompositeMetaType;
+import org.jboss.metatype.spi.values.MetaMapper;
+
+public class ModelMetadataMapper extends MetaMapper<ModelMetaData> {
+ private static final MutableCompositeMetaType metaType;
+ private static final MetaValueFactory metaValueFactory = MetaValueFactory.getInstance();
+
+ static {
+ metaType = new MutableCompositeMetaType(ModelMetaData.class.getName(), "The Model meta data");
+ metaType.addItem("connectorReference", "connectorReference", SimpleMetaType.STRING);
+ metaType.addItem("modelType", "modelType", SimpleMetaType.STRING);
+ metaType.addItem("modelURI", "modelURI", SimpleMetaType.STRING);
+ metaType.addItem("path", "path", SimpleMetaType.STRING);
+ metaType.addItem("uuid", "uuid", SimpleMetaType.STRING);
+ metaType.addItem("visible", "visible", SimpleMetaType.BOOLEAN_PRIMITIVE);
+ metaType.addItem("name", "name", SimpleMetaType.STRING);
+ metaType.addItem("properties", "properties", PropertiesMetaType.INSTANCE);
+ metaType.freeze();
+ }
+
+ @Override
+ public Type mapToType() {
+ return ModelMetaData.class;
+ }
+
+ @Override
+ public MetaType getMetaType() {
+ return metaType;
+ }
+
+ @Override
+ public MetaValue createMetaValue(MetaType metaType, ModelMetaData object) {
+ if (object == null)
+ return null;
+ if (metaType instanceof CompositeMetaType) {
+ CompositeMetaType composite = (CompositeMetaType) metaType;
+ CompositeValueSupport request = new CompositeValueSupport(composite);
+
+ request.set("connectorReference", SimpleValueSupport.wrap(object.getConnectorReference()));
+ request.set("modelType", SimpleValueSupport.wrap(object.getModelType()));
+ request.set("modelURI", SimpleValueSupport.wrap(object.getModelURI()));
+ request.set("path", SimpleValueSupport.wrap(object.getPath()));
+ request.set("uuid", SimpleValueSupport.wrap(object.getUuid()));
+ request.set("visible", SimpleValueSupport.wrap(object.isVisible()));
+ request.set("name",SimpleValueSupport.wrap(object.getName()));
+ request.set("properties", new PropertiesMetaValue(object.getProperties()));
+
+ return request;
+ }
+ throw new IllegalArgumentException("Cannot convert request " + object);
+ }
+
+ @Override
+ public ModelMetaData unwrapMetaValue(MetaValue metaValue) {
+ if (metaValue == null)
+ return null;
+
+ if (metaValue instanceof CompositeValue) {
+ CompositeValue compositeValue = (CompositeValue) metaValue;
+
+ ModelMetaData model = new ModelMetaData();
+ model.setConnectorReference((String) metaValueFactory.unwrap(compositeValue.get("connectorReference")));
+ model.setModelType((String) metaValueFactory.unwrap(compositeValue.get("modelType")));
+ model.setModelURI((String) metaValueFactory.unwrap(compositeValue.get("modelURI")));
+ model.setPath((String) metaValueFactory.unwrap(compositeValue.get("path")));
+ model.setUuid((String) metaValueFactory.unwrap(compositeValue.get("sourceRequest")));
+ model.setVisible((Boolean) metaValueFactory.unwrap(compositeValue.get("visible")));
+ model.setName((String) metaValueFactory.unwrap(compositeValue.get("name")));
+ model.setProperties((Properties) metaValueFactory.unwrap(compositeValue.get("properties")));
+ return model;
+ }
+ throw new IllegalStateException("Unable to unwrap request " + metaValue);
+ }
+
+}
Property changes on: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -30,6 +30,7 @@
import javax.xml.bind.annotation.XmlType;
import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementProperty;
/**
@@ -39,7 +40,7 @@
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="ref-name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- * <element name="name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+ * <element name="resource-name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
* </sequence>
* </restriction>
* </complexContent>
@@ -51,7 +52,7 @@
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "reference-mapping", propOrder = {
"refName",
- "names"
+ "resourceNames"
})
@ManagementObject
public class ReferenceMappingMetadata implements Serializable {
@@ -59,9 +60,23 @@
@XmlElement(name = "ref-name", required = true)
protected String refName;
- @XmlElement(name = "name", required = true)
- protected List<String> names;
+ @XmlElement(name = "resource-name", required = true)
+ protected List<String> resourceNames;
+ public ReferenceMappingMetadata() {
+ }
+
+ public ReferenceMappingMetadata(String refName, String resourceName) {
+ setRefName(refName);
+ addResourceName(resourceName);
+ }
+
+ public ReferenceMappingMetadata(String refName, List<String> resourceNames) {
+ setRefName(refName);
+ this.resourceNames = new ArrayList<String>(resourceNames);
+ }
+
+ @ManagementProperty(description="Reference Name", readOnly=true)
public String getRefName() {
return refName;
}
@@ -70,14 +85,46 @@
this.refName = value;
}
- public List<String> getNames() {
- if (this.names == null) {
- this.names = new ArrayList<String>();
+ public List<String> getResourceNames() {
+ if (this.resourceNames == null) {
+ this.resourceNames = new ArrayList<String>();
}
- return this.names;
+ return this.resourceNames;
}
- public void addName(String name) {
- getNames().add(name);
+ @ManagementProperty(description="Resource Names")
+ public void setResourceNames(List<String> names) {
+ this.resourceNames = new ArrayList<String>(names);
}
+
+ public void addResourceName(String name) {
+ getResourceNames().add(name);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((refName == null) ? 0 : refName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ReferenceMappingMetadata other = (ReferenceMappingMetadata) obj;
+ if (refName == null) {
+ if (other.refName != null)
+ return false;
+ } else if (!refName.equals(other.refName))
+ return false;
+ return true;
+ }
+
+
}
Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -21,9 +21,11 @@
*/
package org.teiid.adminapi.impl;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Properties;
import java.util.Set;
@@ -34,6 +36,7 @@
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
import org.jboss.managed.api.annotation.ManagementComponent;
import org.jboss.managed.api.annotation.ManagementObject;
@@ -41,7 +44,6 @@
import org.jboss.managed.api.annotation.ManagementOperation;
import org.jboss.managed.api.annotation.ManagementProperty;
import org.teiid.adminapi.VDB;
-import org.teiid.adminapi.Visibility;
import com.metamatrix.core.CoreConstants;
import com.metamatrix.core.vdb.ModelType;
@@ -51,10 +53,10 @@
@XmlType(name = "", propOrder = {
"description",
"propertiesDirect",
- "models",
+ "modelsDirect",
"connectorMappings",
- "dataRoles",
- "securityRoleMappings"
+ "securityRoleMappings",
+ "problemMarkers"
})
@XmlRootElement(name = "vdb")
public class VDBMetaData extends AdminObjectImpl implements VDB {
@@ -62,8 +64,7 @@
private static final long serialVersionUID = -4723595252013356436L;
- @XmlElement(name = "model", required = true, type = ModelMetaData.class)
- private HashSet<ModelMetaData> models = new HashSet<ModelMetaData>();
+ private LinkedHashMap<String, ModelMetaData> models = new LinkedHashMap<String, ModelMetaData>();
@XmlAttribute(name = "version", required = true)
private int version = 1;
@@ -74,25 +75,26 @@
@XmlElement(name = "connector-mapping")
protected List<ReferenceMappingMetadata> connectorMappings;
- @XmlElement(name = "data-role")
- protected List<DataRoleMetadata> dataRoles;
-
@XmlElement(name = "security-role-mapping")
protected List<ReferenceMappingMetadata> securityRoleMappings;
+
+ @XmlElement(name = "problem-marker")
+ protected List<ProblemMarker> problemMarkers;
- private List<String> errors;
private String fileUrl = null;
public VDBMetaData() {
// auto add sytem model.
ModelMetaData system = new ModelMetaData();
system.setName(CoreConstants.SYSTEM_MODEL);
- system.setVisibility(Visibility.PUBLIC);
+ system.setVisible(true);
system.setModelType(ModelType.getString(ModelType.PHYSICAL));
- system.addConnectorBinding("system");
+ system.setConnectorReference("system");
system.setSupportsMultiSourceBindings(false);
system.setPath("builtin");
+ addConnectorMapping(new ReferenceMappingMetadata("system", "system"));
+
addModel(system);
}
@@ -109,7 +111,7 @@
}
@Override
- @ManagementProperty(description="VDB Status", readOnly=true)
+ @ManagementProperty(description="VDB Status")
public Status getStatus() {
String status = getPropertyValue(STATUS_KEY);
if (status != null) {
@@ -141,14 +143,29 @@
public void setUrl(String url) {
this.fileUrl = url;
}
+
+ @ManagementProperty(description="Model list in a VDB", managed=true)
+ public List<ModelMetaData> getModels(){
+ return new ArrayList<ModelMetaData>(this.models.values());
+ }
- @ManagementProperty(description="Model list in a VDB", managed=true)
- public Set<ModelMetaData> getModels(){
- return models;
+ /**
+ * This simulating a list over a map. JAXB requires a list and performance recommends
+ * map and we would like to keep one variable to represent both.
+ * @return
+ */
+ @XmlElement(name = "model", required = true, type = ModelMetaData.class)
+ protected List<ModelMetaData> getModelsDirect(){
+ return new ListOverMap(this.models, new KeyBuilder<ModelMetaData>() {
+ @Override
+ public String getKey(ModelMetaData entry) {
+ return entry.getName();
+ }
+ });
}
public void addModel(ModelMetaData m) {
- this.models.add(m);
+ this.models.put(m.getName(), m);
}
@Override
@@ -164,23 +181,18 @@
@Override
@ManagementProperty(description = "VDB validity errors", readOnly=true)
public List<String> getValidityErrors(){
- if (this.errors != null) {
- return this.errors;
+ if (this.problemMarkers != null && !this.problemMarkers.isEmpty()) {
+ List<String> errors = new ArrayList<String>();
+ for (ProblemMarker m:this.problemMarkers) {
+ if (m.getSeverity().equalsIgnoreCase("ERROR")) {
+ errors.add(m.getValue());
+ }
+ }
+ return errors;
}
return Collections.EMPTY_LIST;
}
- public void addValidityError(String error) {
- if (this.errors == null) {
- errors = new ArrayList<String>();
- }
- this.errors.add(error);
- }
-
- public void setValidityErrors(ArrayList<String> errors) {
- this.errors = errors;
- }
-
@Override
@ManagementProperty(description = "Is VDB Valid", readOnly=true)
public boolean isValid() {
@@ -191,33 +203,34 @@
if (getModels().isEmpty()) {
return false;
}
- for(ModelMetaData m:getModels()) {
- if (m.isSource()) {
- if (m.getConnectorBindingNames().isEmpty()) {
- return false;
- }
- }
- }
+ for(ModelMetaData m: this.models.values()) {
+ if (m.isSource()) {
+ String connectorReference = m.getConnectorReference();
+ if (connectorReference == null) {
+ return false;
+ }
+
+ List<String> resourceNames = getConnectorBindingNames(connectorReference);
+ if (resourceNames.isEmpty()) {
+ return false;
+ }
+ }
+ }
return true;
}
public String toString() {
- return getName() + models;
+ return getName()+"."+getVersion()+ models;
}
@ManagementOperation(description = "Get the model with given name")
public ModelMetaData getModel(String modelName) {
- for(ModelMetaData m: models) {
- if (m.getName().equalsIgnoreCase(modelName)) {
- return m;
- }
- }
- return null;
+ return this.models.get(modelName);
}
public Set<String> getMultiSourceModelNames(){
Set<String> list = new HashSet<String>();
- for(ModelMetaData m: models) {
+ for(ModelMetaData m: models.values()) {
if (m.isSupportsMultiSourceBindings()) {
list.add(m.getName());
}
@@ -225,10 +238,22 @@
return list;
}
- @ManagementProperty(description="Connector reference mappings", managed=true)
+ @ManagementProperty(description="Connector reference mappings")
public List<ReferenceMappingMetadata> getConnectorMappings() {
return this.connectorMappings;
}
+
+ public List<String> getConnectorBindingNames(String referenceName) {
+ if (this.connectorMappings == null) {
+ return Collections.EMPTY_LIST;
+ }
+ for (ReferenceMappingMetadata data:this.connectorMappings) {
+ if (data.getRefName().equals(referenceName)) {
+ return data.getResourceNames();
+ }
+ }
+ return Collections.EMPTY_LIST;
+ }
public void addConnectorMapping(ReferenceMappingMetadata data) {
if (this.connectorMappings == null) {
@@ -237,7 +262,7 @@
this.connectorMappings.add(data);
}
- @ManagementProperty(description="Security refrence mappings", managed=true)
+ @ManagementProperty(description="Security refrence mappings")
public List<ReferenceMappingMetadata> getSecurityRoleMappings() {
return securityRoleMappings;
}
@@ -249,21 +274,58 @@
this.securityRoleMappings.add(data);
}
+ // this one manages the Management API
@Override
@ManagementProperty(description = "Properties", readOnly=true)
public Properties getProperties() {
- return new Properties(super.getProperties());
+ return super.getProperties();
}
+ // This one manages the JAXB binding
@Override
@XmlElement(name = "property", type = PropertyMetadata.class)
protected List<PropertyMetadata> getPropertiesDirect(){
return super.getPropertiesDirect();
}
- // This is needed by the JAXB
- protected void setPropertiesDirect(List<PropertyMetadata> props){
- super.setPropertiesDirect(props);
- }
-
+ public void addProblemMarker(String severity, String message) {
+ if (this.problemMarkers == null) {
+ this.problemMarkers = new ArrayList<ProblemMarker>();
+ }
+ this.problemMarkers.add(new ProblemMarker(severity, message));
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = {
+ "value"
+ })
+ public static class ProblemMarker implements Serializable{
+ @XmlValue
+ protected String value;
+ @XmlAttribute(name = "severity")
+ protected String severity;
+
+ public ProblemMarker() {};
+
+ public ProblemMarker(String severity, String msg) {
+ this.severity = severity;
+ this.value = msg;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getSeverity() {
+ return severity;
+ }
+
+ public void setSeverity(String value) {
+ this.severity = value;
+ }
+ }
}
Modified: branches/JCA/client/src/main/resources/vdb-deployer.xsd
===================================================================
--- branches/JCA/client/src/main/resources/vdb-deployer.xsd 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/resources/vdb-deployer.xsd 2010-03-01 20:45:58 UTC (rev 1882)
@@ -12,34 +12,27 @@
<xs:complexType>
<xs:sequence>
<xs:element name="property" type="property" minOccurs="0" maxOccurs="unbounded"/>
- <xs:choice minOccurs="0">
- <xs:element name="connector-name" type="xs:string" maxOccurs="unbounded"/>
- <xs:element name="connector-ref" type="xs:string"/>
- </xs:choice>
+ <xs:element name="connector-ref" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="uri" type="xs:string"/>
+ <xs:attribute name="path" type="xs:string"/>
+ <xs:attribute name="visibility" type="xs:string"/>
+ <xs:attribute name="uuid" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="connector-mapping" type="reference-mapping" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="data-role" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="description" type="xs:string" minOccurs="0"/>
- <xs:element name="resource-name" type="xs:string"/>
- <xs:element name="allow-create" type="xs:boolean" minOccurs="0"/>
- <xs:element name="allow-read" type="xs:boolean" minOccurs="0"/>
- <xs:element name="allow-update" type="xs:boolean" minOccurs="0"/>
- <xs:element name="allow-delete" type="xs:boolean" minOccurs="0"/>
- <xs:choice minOccurs="0">
- <xs:element name="security-role-name" type="xs:string" maxOccurs="unbounded"/>
- <xs:element name="security-role-ref" type="xs:string"/>
- </xs:choice>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- </xs:complexType>
- </xs:element>
<xs:element name="security-role-mapping" type="reference-mapping" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="problem-marker" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="severity" type="xs:string"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:int" use="required"/>
@@ -55,7 +48,7 @@
<xs:complexType name="reference-mapping">
<xs:sequence>
<xs:element name="ref-name" type="xs:string"/>
- <xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
+ <xs:element name="resource-name" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Modified: branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java
===================================================================
--- branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -25,6 +25,7 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
import java.io.StringReader;
import java.io.StringWriter;
@@ -49,9 +50,11 @@
ModelMetaData modelOne = new ModelMetaData();
modelOne.setName("model-one");
- modelOne.addConnectorBinding("java:mybinding");
+ modelOne.setConnectorReference("java:mybinding");
modelOne.setModelType("physical");
modelOne.addProperty("model-prop", "model-value");
+ modelOne.addProperty("model-prop", "model-value-override");
+ modelOne.setVisible(false);
vdb.addModel(modelOne);
@@ -65,10 +68,12 @@
ReferenceMappingMetadata ref = new ReferenceMappingMetadata();
ref.setRefName("binding-two-ref");
- ref.addName("java:binding-one");
- ref.addName("java:binding-two");
+ ref.addResourceName("java:binding-one");
+ ref.addResourceName("java:binding-two");
vdb.addConnectorMapping(ref);
+ vdb.addProblemMarker("ERROR", "There is an error in VDB");
+
JAXBContext jc = JAXBContext.newInstance(new Class<?>[] {VDBMetaData.class});
Marshaller marshell = jc.createMarshaller();
marshell.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,new Boolean(true));
@@ -92,24 +97,28 @@
modelOne = vdb.getModel("model-one");
assertEquals("model-one", modelOne.getName());
- assertTrue(modelOne.getConnectorBindingNames().contains("java:mybinding"));
+ assertEquals("java:mybinding", modelOne.getConnectorReference());
assertEquals("physical", modelOne.getModelType());
- assertEquals("model-value", modelOne.getPropertyValue("model-prop"));
+ assertEquals("model-value-override", modelOne.getPropertyValue("model-prop"));
+ assertFalse(modelOne.isVisible());
modelTwo = vdb.getModel("model-two");
assertEquals("model-two", modelTwo.getName());
- assertTrue(modelTwo.getConnectorBindingNames().isEmpty());
assertEquals("binding-two-ref", modelTwo.getConnectorReference());
assertEquals("virtual", modelTwo.getModelType()); // this is not persisted in the XML
assertEquals("model-value", modelTwo.getPropertyValue("model-prop"));
- assertTrue(vdb.getConnectorMappings().size()==1);
- ref = vdb.getConnectorMappings().get(0);
+ assertTrue(vdb.getConnectorMappings().size()==2);
+ ref = vdb.getConnectorMappings().get(1);
assertEquals("binding-two-ref", ref.getRefName());
- assertTrue(ref.getNames().contains("java:binding-one"));
- assertTrue(ref.getNames().contains("java:binding-two"));
+ assertTrue(ref.getResourceNames().contains("java:binding-one"));
+ assertTrue(ref.getResourceNames().contains("java:binding-two"));
+ assertEquals(2, vdb.getConnectorBindingNames("binding-two-ref").size());
+ assertTrue(vdb.getConnectorBindingNames("binding-two-ref").contains("java:binding-one"));
+
+ assertTrue(vdb.getValidityErrors().contains("There is an error in VDB"));
}
}
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -69,7 +69,7 @@
ConnectorException exception = null;
VDBMetaData vdb = workContext.getVDB();
ModelMetaData model = vdb.getModel(modelName);
- for (String binding:model.getConnectorBindingNames()) {
+ for (String binding:vdb.getConnectorBindingNames(model.getConnectorReference())) {
try {
ConnectorManager mgr = this.connectorRepo.getConnectorManager(binding);
caps = mgr.getCapabilities();
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -344,7 +344,7 @@
if (connectorBindingId == null) {
VDBMetaData vdb = workItem.getDqpWorkContext().getVDB();
ModelMetaData model = vdb.getModel(modelName);
- List<String> bindings = model.getConnectorBindingNames();
+ List<String> bindings = vdb.getConnectorBindingNames(model.getConnectorReference());
if (bindings == null || bindings.size() != 1) {
// this should not happen, but it did occur when setting up the SystemAdmin models
throw new MetaMatrixComponentException(DQPPlugin.Util.getString("DataTierManager.could_not_obtain_connector_binding", new Object[]{modelName, workItem.getDqpWorkContext().getVdbName(), workItem.getDqpWorkContext().getVdbVersion() })); //$NON-NLS-1$
Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -27,6 +27,7 @@
import java.util.Set;
import org.teiid.adminapi.impl.ModelMetaData;
+import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.dqp.internal.process.DQPWorkContext;
import com.metamatrix.api.exception.MetaMatrixComponentException;
@@ -84,10 +85,11 @@
return accessNode;
}
- ModelMetaData model = workContext.getVDB().getModel(modelName);
+ VDBMetaData vdb = workContext.getVDB();
+ ModelMetaData model = vdb.getModel(modelName);
List<AccessNode> accessNodes = new ArrayList<AccessNode>();
- for(String bindingName:model.getConnectorBindingNames()) {
+ for(String bindingName:vdb.getConnectorBindingNames(model.getConnectorReference())) {
// Create a new cloned version of the access node and set it's model name to be the bindingUUID
AccessNode instanceNode = (AccessNode) accessNode.clone();
Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -160,7 +160,7 @@
}
model.setVisibility(Visibility.PUBLIC);
model.setSupportsMultiSourceBindings(false);
- model.addConnectorBinding(name);
+ model.setConnectorReference(name);
return model;
}
@@ -2539,6 +2539,7 @@
model.setVisibility(Visibility.PUBLIC);
model.setSupportsMultiSourceBindings(true);
+ model.setConnectorReference("refname");
vdb.addModel(model);
vdb.addModel(createModel("Virt", false));
Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -65,7 +65,8 @@
VDBMetaData vdb = Mockito.mock(VDBMetaData.class);
ModelMetaData model = Mockito.mock(ModelMetaData.class);
Mockito.stub(vdb.getModel(modelName)).toReturn(model);
- Mockito.stub(model.getConnectorBindingNames()).toReturn(bindings);
+ Mockito.stub(model.getConnectorReference()).toReturn("ref-name");
+ Mockito.stub(vdb.getConnectorBindingNames("ref-name")).toReturn(bindings);
workContext.setVdb(vdb);
BasicSourceCapabilities basicSourceCapabilities = new BasicSourceCapabilities();
Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -25,6 +25,7 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
@@ -33,6 +34,8 @@
import java.util.Set;
import org.junit.Test;
+import org.teiid.adminapi.impl.ModelMetaData;
+import org.teiid.adminapi.impl.ReferenceMappingMetadata;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.dqp.internal.process.DQPWorkContext;
@@ -98,11 +101,13 @@
for (String model:multiSourceModels) {
char sourceID = 'a';
// by default every model has one binding associated, but for multi-source there were none assigned.
- int x = vdb.getModel(model).getConnectorBindingNames().size();
+ ModelMetaData m = vdb.getModel(model);
+ int x = vdb.getConnectorBindingNames(m.getConnectorReference()).size();
+ ArrayList<String> names = new ArrayList<String>();
for(int i=x; i<sourceCount; i++, sourceID++) {
- vdb.getModel(model).addConnectorBinding("" + sourceID);
+ names.add("" + sourceID);
}
-
+ vdb.addConnectorMapping(new ReferenceMappingMetadata(m.getConnectorReference(), names));
}
MultiSourceMetadataWrapper wrapper = new MultiSourceMetadataWrapper(metadata, multiSourceModels);
Modified: branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java
===================================================================
--- branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -47,8 +47,11 @@
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedDeployment;
import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metatype.api.types.CollectionMetaType;
import org.jboss.metatype.api.types.MapCompositeMetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
import org.jboss.metatype.api.values.CollectionValueSupport;
+import org.jboss.metatype.api.values.CompositeValueSupport;
import org.jboss.metatype.api.values.MapCompositeValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.MetaValueFactory;
@@ -69,7 +72,6 @@
import org.teiid.adminapi.TeiidAdmin;
import org.teiid.adminapi.Transaction;
import org.teiid.adminapi.VDB;
-import org.teiid.adminapi.Visibility;
import org.teiid.adminapi.WorkerPoolStatistics;
import org.teiid.adminapi.impl.ConnectionPoolStatisticsMetadata;
import org.teiid.adminapi.impl.ConnectorBindingMetaData;
@@ -339,11 +341,11 @@
@Override
public Collection<ConnectorBinding> getConnectorBindingsInVDB(String vdbName, int vdbVersion) throws AdminException {
HashMap<String, ConnectorBinding> bindingMap = new HashMap<String, ConnectorBinding>();
- VDB vdb = getVDB(vdbName, vdbVersion);
+ VDBMetaData vdb = (VDBMetaData) getVDB(vdbName, vdbVersion);
if (vdb != null) {
for (Model model:vdb.getModels()) {
if (model.isSource()) {
- for (String bindingName : model.getConnectorBindingNames()) {
+ for (String bindingName : vdb.getConnectorBindingNames(model.getConnectorReference())) {
ConnectorBinding binding = getConnectorBinding(bindingName);
if (binding != null) {
bindingMap.put(bindingName, binding);
@@ -439,7 +441,7 @@
}
}
- private VDB buildVDB(ManagedComponent mc) {
+ private VDBMetaData buildVDB(ManagedComponent mc) {
VDBMetaData vdb = new VDBMetaData();
vdb.setName(ManagedUtil.getSimpleValue(mc, "name", String.class));
vdb.setDescription(ManagedUtil.getSimpleValue(mc, "description", String.class));
@@ -449,7 +451,9 @@
ArrayList<String> errors = new ArrayList<String>();
ManagedUtil.getCollectionValue(mc, "validityErrors", errors, String.class);
- vdb.setValidityErrors(errors);
+ for (String error:errors) {
+ vdb.addProblemMarker("ERROR", error);
+ }
ManagedDeployment deployment = mc.getDeployment();
Collection<ManagedComponent> models = deployment.getComponents().values();
@@ -461,6 +465,11 @@
}
}
}
+
+ // TODO: add the following
+ // ConnectorMappings
+ // SecurityRoleMappings
+
return vdb;
}
@@ -471,13 +480,10 @@
model.setModelType(ManagedUtil.getSimpleValue(mc, "modelType", String.class));
model.setPath(ManagedUtil.getSimpleValue(mc, "path", String.class));
model.setUuid(ManagedUtil.getSimpleValue(mc, "uuid", String.class));
- model.setSupportsMultiSourceBindings(ManagedUtil.getSimpleValue(mc, "supportsMultiSourceBindings", Boolean.class));
- model.setVisibility(Visibility.valueOf(ManagedUtil.getSimpleValue(mc, "visibility", String.class)));
+ model.setVisible(ManagedUtil.getSimpleValue(mc, "visible", Boolean.class));
+ model.setConnectorReference(ManagedUtil.getSimpleValue(mc, "connectorReference", String.class));
+ model.setProperties(ManagedUtil.getPropertiesValue(mc, "properties"));
- ArrayList<String> bindings = new ArrayList<String>();
- ManagedUtil.getCollectionValue(mc, "connectorBindingNames", bindings, String.class);
- model.setConnectorBinding(bindings);
-
return model;
}
@@ -860,5 +866,50 @@
return jarFile;
}
+
+ @Override
+ public void assignBindingsToModel(String vdbName, int vdbVersion, String modelName, String[] connectorBindingNames) throws AdminException {
+ ManagedComponent mc = getVDBManagedComponent(vdbName, vdbVersion);
+ if (mc != null) {
+ VDBMetaData vdb = buildVDB(mc);
+ if (vdb == null) {
+
+ }
+
+ ModelMetaData model = vdb.getModel(modelName);
+ if (model == null) {
+ throw new AdminProcessingException("Model name = "+modelName+" not found in the VDB with name = "+vdbName + " version = "+ vdbVersion);
+ }
+
+ String referenceName = model.getConnectorReference();
+ ArrayList<MetaValue> newBindings = new ArrayList<MetaValue>();
+ for (String name:connectorBindingNames) {
+ newBindings.add(new SimpleValueSupport(SimpleMetaType.STRING, name));
+ }
+
+ ManagedProperty mappings = mc.getProperty("connectorMappings");
+ MetaValue[] elements = ((CollectionValueSupport)mappings.getValue()).getElements();
+ ArrayList<MetaValue> modifiedElements = new ArrayList<MetaValue>();
+ for (MetaValue mv:elements) {
+ MetaValue value = ((CompositeValueSupport)mv).get("refName");
+ if (value != null && ManagedUtil.stringValue(value).equals(referenceName)) {
+ CollectionValueSupport bindings = (CollectionValueSupport)((CompositeValueSupport)mv).get("resourceNames");
+ bindings.setElements(newBindings.toArray(new MetaValue[newBindings.size()]));
+ }
+ else {
+ modifiedElements.add(mv);
+ }
+ }
+
+ try {
+ getView().updateComponent(mc);
+ } catch (Exception e) {
+ throw new AdminComponentException(e.getMessage(), e);
+ }
+ }
+
+ throw new AdminProcessingException("VDB with name = "+vdbName + " version = "+ vdbVersion + " not found in configuration");
+ }
+
}
Modified: branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java
===================================================================
--- branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -30,6 +30,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import org.jboss.deployers.spi.management.deploy.DeploymentManager;
import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
@@ -37,12 +38,14 @@
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metatype.api.types.MapCompositeMetaType;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.types.SimpleMetaType;
import org.jboss.metatype.api.values.CollectionValue;
import org.jboss.metatype.api.values.EnumValue;
import org.jboss.metatype.api.values.MapCompositeValueSupport;
import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.PropertiesMetaValue;
import org.jboss.metatype.api.values.SimpleValue;
import org.jboss.metatype.api.values.SimpleValueSupport;
import org.jboss.profileservice.spi.DeploymentOption;
@@ -115,6 +118,28 @@
return null;
}
+ public static Properties getPropertiesValue(ManagedComponent mc, String prop) {
+ ManagedProperty mp = mc.getProperty(prop);
+ if (mp != null) {
+ MetaType metaType = mp.getMetaType();
+ if (metaType.isProperties()) {
+ return (PropertiesMetaValue)mp.getValue();
+ }
+ else if (metaType.isComposite()) {
+ Properties props = new Properties();
+ MapCompositeValueSupport map = (MapCompositeValueSupport) mp.getValue();
+ MapCompositeMetaType type = map.getMetaType();
+ for (String key : type.keySet()) {
+ MetaValue value = map.get(key);
+ props.setProperty(key, stringValue(value));
+ }
+ return props;
+ }
+ throw new IllegalStateException(prop+ " is not a properties type");
+ }
+ return null;
+ }
+
public static <T> void getCollectionValue(ManagedComponent mc, String prop, Collection<T> list, Class<T> expectedType) {
ManagedProperty mp = mc.getProperty(prop);
if (mp != null) {
Added: branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java
===================================================================
--- branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java (rev 0)
+++ branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -0,0 +1,62 @@
+/*
+ * 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.jboss.deployers;
+
+import org.jboss.managed.api.ManagedObject;
+import org.jboss.system.server.profileservice.persistence.PersistenceFactory;
+import org.jboss.system.server.profileservice.persistence.component.AbstractComponentMapper;
+import org.jboss.system.server.profileservice.persistence.xml.PersistedComponent;
+import org.teiid.adminapi.impl.VDBMetaData;
+
+public class VDBMetadataComponentMapper extends AbstractComponentMapper {
+
+ public VDBMetadataComponentMapper(PersistenceFactory persistenceFactory) {
+ super(persistenceFactory);
+ }
+
+ @Override
+ protected ManagedObject getComponent(Object attachment, PersistedComponent component, boolean create) {
+ VDBMetaData metadata = (VDBMetaData)attachment;
+ String vdbName = metadata.getName()+"_"+metadata.getVersion();
+ if (vdbName.equals(component.getOriginalName())) {
+ return getMOF().initManagedObject(metadata, VDBMetaData.class, vdbName, vdbName);
+ }
+ throw new IllegalStateException("could not find deployment " + component.getOriginalName());
+ }
+
+ @Override
+ protected void removeComponent(Object attachment,PersistedComponent component) {
+ //TODO: What needs to be done here?
+ }
+
+ @Override
+ protected void setComponentName(PersistedComponent component, ManagedObject mo) {
+ VDBMetaData metadata = (VDBMetaData)mo.getAttachment();
+ component.setName(metadata.getName()+"_"+metadata.getVersion());
+ }
+
+ @Override
+ public String getType() {
+ return VDBMetaData.class.getName();
+ }
+
+}
Property changes on: branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/JCA/jboss-integration/src/test/resources/TransactionsRevisited.vdb
===================================================================
(Binary files differ)
Modified: branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
===================================================================
--- branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -77,7 +77,7 @@
}
private MetadataStore buildDynamicMetadataStore(VFSDeploymentUnit unit, VDBMetaData vdb, ModelMetaData model) throws DeploymentException{
- if (model.getConnectorBindingNames().isEmpty()) {
+ if (vdb.getConnectorBindingNames(model.getConnectorReference()).isEmpty()) {
throw new DeploymentException(vdb.getName()+"-"+vdb.getVersion()+" Can not be deployed because model {"+model.getName()+"} is not fully configured.");
}
@@ -98,7 +98,7 @@
Exception exception = null;
- for (String connectorName: model.getConnectorBindingNames()) {
+ for (String connectorName: vdb.getConnectorBindingNames(model.getConnectorReference())) {
ConnectorManager cm = this.connectorManagerRepository.getConnectorManager(connectorName);
if (cm == null) {
continue;
Modified: branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
===================================================================
--- branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-03-01 20:45:58 UTC (rev 1882)
@@ -22,6 +22,7 @@
package org.teiid.deployers;
import java.util.Collection;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -111,9 +112,16 @@
public boolean isFullyConfiguredVDB(VDBMetaData vdb) {
for(ModelMetaData m: vdb.getModels()) {
if (m.isSource()) {
- if (m.getConnectorBindingNames().isEmpty()) {
+ String connectorReference = m.getConnectorReference();
+ if (connectorReference == null) {
+ log.warn("VDB = "+vdb.getName() +" Model = "+m.getName()+"; No Connector Reference defined");
+ }
+
+ List<String> resourceNames = vdb.getConnectorBindingNames(connectorReference);
+ if (resourceNames.isEmpty()) {
return false;
}
+ log.warn("VDB = "+vdb.getName() +" Model = "+m.getName()+"; No Connector Bindings are mapped for Connector Reference = "+connectorReference);
}
}
return true;
15 years