@Test public void testUnionQueryClone() throws Exception{ SetQuery command = (SetQuery)helpResolve("SELECT e2, e3 FROM pm1.g1 UNION SELECT e3, e2 from pm1.g1"); //$NON-NLS-1$ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((Expression)command.getProjectedSymbols().get(1)).getType()); command = (SetQuery)command.clone(); assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((Expression)command.getProjectedSymbols().get(1)).getType()); }
@Test public void testNestedUnionQueryWithNull() throws Exception{ SetQuery command = (SetQuery)helpResolve("SELECT e2, e3 FROM pm1.g1 UNION (SELECT null, e3 FROM pm1.g2 UNION SELECT null, e3 from pm1.g1)"); //$NON-NLS-1$ assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, ((Expression)command.getProjectedSymbols().get(0)).getType()); }
private void setProjectedTypes(SetQuery setQuery, List<Class<?>> firstProjectTypes, QueryMetadataInterface metadata) throws QueryResolverException { for (QueryCommand subCommand : setQuery.getQueryCommands()) { if (!(subCommand instanceof SetQuery)) { continue; } SetQuery child = (SetQuery)subCommand; List projectedSymbols = child.getProjectedSymbols(); if (child.getOrderBy() != null) { for (int j = 0; j < projectedSymbols.size(); j++) { Expression ses = (Expression)projectedSymbols.get(j); Class<?> targetType = firstProjectTypes.get(j); if (ses.getType() != targetType && orderByContainsVariable(child.getOrderBy(), ses, j)) { String sourceTypeName = DataTypeManager.getDataTypeName(ses.getType()); String targetTypeName = DataTypeManager.getDataTypeName(targetType); throw new QueryResolverException(QueryPlugin.Util.getString("UnionQueryResolver.type_conversion", //$NON-NLS-1$ new Object[] {ses, sourceTypeName, targetTypeName})); } } } child.setProjectedTypes(firstProjectTypes, metadata); setProjectedTypes(child, firstProjectTypes, metadata); } }
private void setProjectedTypes(SetQuery setQuery, List<Class<?>> firstProjectTypes, QueryMetadataInterface metadata) throws QueryResolverException { for (QueryCommand subCommand : setQuery.getQueryCommands()) { if (!(subCommand instanceof SetQuery)) { continue; } SetQuery child = (SetQuery)subCommand; List projectedSymbols = child.getProjectedSymbols(); if (child.getOrderBy() != null) { for (int j = 0; j < projectedSymbols.size(); j++) { Expression ses = (Expression)projectedSymbols.get(j); Class<?> targetType = firstProjectTypes.get(j); if (ses.getType() != targetType && orderByContainsVariable(child.getOrderBy(), ses, j)) { String sourceTypeName = DataTypeManager.getDataTypeName(ses.getType()); String targetTypeName = DataTypeManager.getDataTypeName(targetType); throw new QueryResolverException(QueryPlugin.Util.getString("UnionQueryResolver.type_conversion", //$NON-NLS-1$ new Object[] {ses, sourceTypeName, targetTypeName})); } } } child.setProjectedTypes(firstProjectTypes, metadata); setProjectedTypes(child, firstProjectTypes, metadata); } }
private void setProjectedTypes(SetQuery setQuery, List<Class<?>> firstProjectTypes, QueryMetadataInterface metadata) throws QueryResolverException { for (QueryCommand subCommand : setQuery.getQueryCommands()) { if (!(subCommand instanceof SetQuery)) { continue; } SetQuery child = (SetQuery)subCommand; List projectedSymbols = child.getProjectedSymbols(); if (child.getOrderBy() != null) { for (int j = 0; j < projectedSymbols.size(); j++) { Expression ses = (Expression)projectedSymbols.get(j); Class<?> targetType = firstProjectTypes.get(j); if (ses.getType() != targetType && orderByContainsVariable(child.getOrderBy(), ses, j)) { String sourceTypeName = DataTypeManager.getDataTypeName(ses.getType()); String targetTypeName = DataTypeManager.getDataTypeName(targetType); throw new QueryResolverException(QueryPlugin.Util.getString("UnionQueryResolver.type_conversion", //$NON-NLS-1$ new Object[] {ses, sourceTypeName, targetTypeName})); } } } child.setProjectedTypes(firstProjectTypes, metadata); setProjectedTypes(child, firstProjectTypes, metadata); } }
@Test public void testUnionWithObjectTypeConversion() { String sql = "select convert(null, xml) from pm1.g1 union all select 1"; //$NON-NLS-1$ SetQuery query = (SetQuery)helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals(DataTypeManager.DefaultDataClasses.OBJECT, ((Expression)query.getProjectedSymbols().get(0)).getType()); }
protected void validateSetQuery(SetQuery query) { // Walk through sub queries - validate each one separately and // also check the columns of each for comparability for (QueryCommand subQuery : query.getQueryCommands()) { if (subQuery instanceof Query && ((Query)subQuery).getInto() != null) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.union_insert"), query); //$NON-NLS-1$ } } if (!query.isAll() || query.getOperation() == Operation.EXCEPT || query.getOperation() == Operation.INTERSECT) { validateSortable(query.getProjectedSymbols()); } if (query.isAll() && (query.getOperation() == Operation.EXCEPT || query.getOperation() == Operation.INTERSECT)) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.excpet_intersect_all"), query); //$NON-NLS-1$ } }
protected void validateSetQuery(SetQuery query) { // Walk through sub queries - validate each one separately and // also check the columns of each for comparability for (QueryCommand subQuery : query.getQueryCommands()) { if (subQuery instanceof Query && ((Query)subQuery).getInto() != null) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.union_insert"), query); //$NON-NLS-1$ } } if (!query.isAll() || query.getOperation() == Operation.EXCEPT || query.getOperation() == Operation.INTERSECT) { validateSortable(query.getProjectedSymbols()); } if (query.isAll() && (query.getOperation() == Operation.EXCEPT || query.getOperation() == Operation.INTERSECT)) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.excpet_intersect_all"), query); //$NON-NLS-1$ } }
protected void validateSetQuery(SetQuery query) { // Walk through sub queries - validate each one separately and // also check the columns of each for comparability for (QueryCommand subQuery : query.getQueryCommands()) { if(isXMLCommand(subQuery)) { handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0034"), query); //$NON-NLS-1$ } if (subQuery instanceof Query && ((Query)subQuery).getInto() != null) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.union_insert"), query); //$NON-NLS-1$ } } if (!query.isAll() || query.getOperation() == Operation.EXCEPT || query.getOperation() == Operation.INTERSECT) { validateSortable(query.getProjectedSymbols()); } if (query.isAll() && (query.getOperation() == Operation.EXCEPT || query.getOperation() == Operation.INTERSECT)) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.excpet_intersect_all"), query); //$NON-NLS-1$ } }