Author: shawkins
Date: 2010-11-04 12:42:13 -0400 (Thu, 04 Nov 2010)
New Revision: 2704
Modified:
branches/7.1.x/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
branches/7.1.x/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java
branches/7.1.x/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
Log:
TEIID-1348 fix for pk on a column other than the first
Modified:
branches/7.1.x/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
===================================================================
---
branches/7.1.x/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2010-11-03
21:35:27 UTC (rev 2703)
+++
branches/7.1.x/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2010-11-04
16:42:13 UTC (rev 2704)
@@ -489,7 +489,10 @@
}
}
+ List<ElementSymbol> variables = table.getColumns();
+
if (ts == null) {
+ variables = allColumns;
//TODO: coordinate a distributed load
//TODO: order by primary key nulls first - then have an insert ordered optimization
String transformation = metadata.getVirtualPlan(group.getMetadataID()).getQuery();
@@ -510,7 +513,7 @@
}
//TODO: if this insert fails, it's unnecessary to do the undo processing
- table.insert(ts, table.getColumns());
+ table.insert(ts, variables);
rowCount = table.getRowCount();
//TODO: could pre-process indexes to remove overlap
for (Object index : metadata.getIndexesInGroup(group.getMetadataID())) {
Modified:
branches/7.1.x/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java
===================================================================
---
branches/7.1.x/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java 2010-11-03
21:35:27 UTC (rev 2703)
+++
branches/7.1.x/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java 2010-11-04
16:42:13 UTC (rev 2704)
@@ -145,5 +145,9 @@
execute("SELECT * from vgroup6 where y in ('zne', 'zwo') order by
y desc", Arrays.asList("two", "zwo"),
Arrays.asList("one", "zne"));
execute("SELECT * from vgroup6 where y is null", Arrays.asList((String)null,
(String)null));
}
+
+ @Test public void testPrimaryKeyOnOtherColumn() throws Exception {
+ execute("SELECT * from vgroup7 where y is null", Arrays.asList("1",
null, 1));
+ }
}
Modified:
branches/7.1.x/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
===================================================================
---
branches/7.1.x/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java 2010-11-03
21:35:27 UTC (rev 2703)
+++
branches/7.1.x/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java 2010-11-04
16:42:13 UTC (rev 2704)
@@ -385,6 +385,16 @@
createKey(KeyRecord.Type.Index, "idx", vGroup6, vElements6.subList(1,
2));
+ //non-covering index
+ QueryNode vTrans7 = new QueryNode("VGroup7", "SELECT '1',
'z' || substring(x, 2) as y, 1 as z FROM matsrc"); //$NON-NLS-1$
//$NON-NLS-2$
+ Table vGroup7 = createVirtualGroup("VGroup7", virtModel, vTrans7);
//$NON-NLS-1$
+ vGroup7.setMaterialized(true);
+ List<Column> vElements7 = createElements(vGroup7,
+ new String[] { "x", "y",
"z" }, //$NON-NLS-1$
+ new String[] {
DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING,
DataTypeManager.DefaultDataTypes.INTEGER});
+
+ createKey(KeyRecord.Type.Primary, "pk", vGroup7, vElements7.subList(1,
2));
+
Schema sp = createVirtualModel("sp", metadataStore); //$NON-NLS-1$
ColumnSet<Procedure> rs = createResultSet("sp1.vsprs1", new
String[] { "StringKey" }, new String[] { DataTypeManager.DefaultDataTypes.STRING
}); //$NON-NLS-1$ //$NON-NLS-2$
ProcedureParameter param = createParameter("param1", ParameterInfo.IN,
DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$