public static void initLanguageBridgeFactory(LanguageBridgeFactory factory, CommandContext context, SourceCapabilities capabilities) { factory.setCommandContext(context); factory.setSupportsConcat2(capabilities.supportsFunction(SourceSystemFunctions.CONCAT2)); factory.setSupportsCountBig(capabilities.supportsCapability(Capability.QUERY_AGGREGATES_COUNT_BIG)); factory.setMaxInPredicateSize((Integer) capabilities.getSourceProperty(Capability.MAX_IN_CRITERIA_SIZE)); factory.setExcludeWithName((String) capabilities.getSourceProperty(Capability.EXCLUDE_COMMON_TABLE_EXPRESSION_NAME)); factory.setSourceNullOrder((NullOrder) capabilities.getSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER)); factory.setSupportsNullOrdering(capabilities.supportsCapability(Capability.QUERY_ORDERBY_NULL_ORDERING)); }
public static boolean supportsSetOp(Object modelID, Operation setOp, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return false; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); switch (setOp) { case EXCEPT: return caps.supportsCapability(Capability.QUERY_EXCEPT); case INTERSECT: return caps.supportsCapability(Capability.QUERY_INTERSECT); case UNION: return caps.supportsCapability(Capability.QUERY_UNION); } return false; }
if (caps.supportsCapability(Capability.ONLY_FORMAT_LITERALS) && parseFormat.contains(name)) { return; if (!caps.supportsFormatLiteral((String)c.getValue(), StringUtil.endsWithIgnoreCase(name, DataTypeManager.DefaultDataTypes.TIMESTAMP)?Format.DATE:Format.NUMBER)) { markInvalid(obj, obj.getName() + " literal parse " + c + " not supported by source"); //$NON-NLS-1$ //$NON-NLS-2$ return; if (caps.supportsCapability(Capability.ONLY_TIMESTAMPADD_LITERAL)) { && !(caps.supportsFunction(SourceSystemFunctions.CONVERT) && caps.supportsConvert(DataTypeManager.DefaultTypeCodes.LONG, DataTypeManager.DefaultTypeCodes.INTEGER))) { markInvalid(obj, obj.getName() + " cannot narrow long argument timestampadd argument to int"); //$NON-NLS-1$ return;
if (!caps.supportsFunction(fullName)) { if(SourceSystemFunctions.CONCAT2.equalsIgnoreCase(fullName)) { && caps.supportsFunction(SourceSystemFunctions.CONCAT) && caps.supportsFunction(SourceSystemFunctions.IFNULL) && caps.supportsCapability(Capability.QUERY_SEARCHED_CASE)); } else if(SourceSystemFunctions.FROM_UNIXTIME.equalsIgnoreCase(fullName)) { return (schema == null && caps.supportsFunction(SourceSystemFunctions.TIMESTAMPADD)); } else { return false ; return true; //this should be removed in rewrite return caps.supportsConvert(DataTypeManager.getTypeCode(fromType), DataTypeManager.getTypeCode(targetType)); return caps.supportsFunction(fullName);
if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) { markInvalid(obj, "Like is not supported by source"); //$NON-NLS-1$ return; if(! this.caps.supportsCapability(Capability.CRITERIA_SIMILAR)) { markInvalid(obj, "Similar to is not supported by source"); //$NON-NLS-1$ return; if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE_REGEX)) { markInvalid(obj, "Like_regex is not supported by source"); //$NON-NLS-1$ return; && ! this.caps.supportsCapability(Capability.CRITERIA_LIKE_ESCAPE)) { markInvalid(obj, "Like escape is not supported by source"); //$NON-NLS-1$ return; Character required = (Character) caps.getSourceProperty(Capability.REQUIRED_LIKE_ESCAPE); if (required != null && obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR if(obj.isNegated() && ! this.caps.supportsCapability(Capability.CRITERIA_NOT)) { markInvalid(obj, "Negation is not supported by source"); //$NON-NLS-1$ return;
SourceCapabilities capabilities = manager.getCapabilities(); factory.setSupportsConcat2(capabilities.supportsFunction(SourceSystemFunctions.CONCAT2)); factory.setSupportFromUnixtime(capabilities.supportsFunction(SourceSystemFunctions.FROM_UNIXTIME)); factory.setMaxInPredicateSize((Integer) capabilities.getSourceProperty(Capability.MAX_IN_CRITERIA_SIZE)); factory.setCommandContext(requestMsg.getCommandContext()); factory.setExcludeWithName((String) capabilities.getSourceProperty(Capability.EXCLUDE_COMMON_TABLE_EXPRESSION_NAME)); } catch (TranslatorException e) { throw new TeiidComponentException(e);
public static Object getProperty(Capability cap, Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return null; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); return caps.getSourceProperty(cap); }
if (caps.supportsCapability(Capability.SELECT_WITHOUT_FROM) && caps.supportsFunction(fd.getMethod().getFullName())) { schema = mmd.getName(); break;
@Test public void testFind() throws Exception { String modelName = "model"; //$NON-NLS-1$ String functionName = "fakeFunction"; //$NON-NLS-1$ BasicSourceCapabilities caps = new BasicSourceCapabilities(); caps.setFunctionSupport("fakeFunction", true); //$NON-NLS-1$ ArrayList<String> bindings = new ArrayList<String>(); bindings.add(modelName); VDBMetaData vdb = Mockito.mock(VDBMetaData.class); ModelMetaData model = Mockito.mock(ModelMetaData.class); Mockito.stub(vdb.getModel(modelName)).toReturn(model); Mockito.stub(model.getSourceNames()).toReturn(bindings); BasicSourceCapabilities basicSourceCapabilities = new BasicSourceCapabilities(); basicSourceCapabilities.setFunctionSupport(functionName, true); ConnectorManagerRepository repo = Mockito.mock(ConnectorManagerRepository.class); ConnectorManager cm = Mockito.mock(ConnectorManager.class); Mockito.stub(cm.getCapabilities()).toReturn(basicSourceCapabilities); Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(cm); CachedFinder finder = new CachedFinder(repo, vdb); // Test SourceCapabilities actual = finder.findCapabilities(modelName); assertEquals("Did not get expected capabilities", true, actual.supportsFunction(functionName)); //$NON-NLS-1$ assertTrue(finder.isValid(modelName)); }
return; if (!CapabilitiesUtil.getCapabilities(modelID, metadata, capFinder).supportsFormatLiteral((String)c.getValue(), StringUtil.endsWithIgnoreCase(name, DataTypeManager.DefaultDataTypes.TIMESTAMP)?Format.DATE:Format.NUMBER)) { markInvalid(obj, obj.getName() + " literal parse " + c + " not supported by source"); //$NON-NLS-1$ //$NON-NLS-2$ return;
public static boolean supportsSetOp(Object modelID, Operation setOp, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return false; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); switch (setOp) { case EXCEPT: return caps.supportsCapability(Capability.QUERY_EXCEPT); case INTERSECT: return caps.supportsCapability(Capability.QUERY_INTERSECT); case UNION: return caps.supportsCapability(Capability.QUERY_UNION); } return false; }
if (caps.supportsCapability(Capability.ONLY_FORMAT_LITERALS) && parseFormat.contains(name)) { return; if (!caps.supportsFormatLiteral((String)c.getValue(), StringUtil.endsWithIgnoreCase(name, DataTypeManager.DefaultDataTypes.TIMESTAMP)?Format.DATE:Format.NUMBER)) { markInvalid(obj, obj.getName() + " literal parse " + c + " not supported by source"); //$NON-NLS-1$ //$NON-NLS-2$ return; if (caps.supportsCapability(Capability.ONLY_TIMESTAMPADD_LITERAL)) { && !(caps.supportsFunction(SourceSystemFunctions.CONVERT) && caps.supportsConvert(DataTypeManager.DefaultTypeCodes.LONG, DataTypeManager.DefaultTypeCodes.INTEGER))) { markInvalid(obj, obj.getName() + " cannot narrow long argument timestampadd argument to int"); //$NON-NLS-1$ return;
if (!caps.supportsFunction(fullName)) { if(SourceSystemFunctions.CONCAT2.equalsIgnoreCase(fullName)) { && caps.supportsFunction(SourceSystemFunctions.CONCAT) && caps.supportsFunction(SourceSystemFunctions.IFNULL) && caps.supportsCapability(Capability.QUERY_SEARCHED_CASE)); } else if(SourceSystemFunctions.FROM_UNIXTIME.equalsIgnoreCase(fullName)) { return (schema == null && caps.supportsFunction(SourceSystemFunctions.TIMESTAMPADD)); } else if(SourceSystemFunctions.FROM_UNIXTIME.equalsIgnoreCase(fullName)) { return (schema == null && caps.supportsFunction(SourceSystemFunctions.TIMESTAMPDIFF)); } else { return false ; return true; //this should be removed in rewrite return caps.supportsConvert(DataTypeManager.getTypeCode(fromType), DataTypeManager.getTypeCode(targetType)); if (!caps.supportsCapability(Capability.GEOGRAPHY_TYPE) && method.getCategory() != null && method.getCategory().equals(FunctionCategoryConstants.GEOGRAPHY)) { return caps.supportsFunction(fullName);
public void visit(MatchCriteria obj) { switch (obj.getMode()) { case LIKE: if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) { if (willBecomeConstant(obj)) { return; if(! this.caps.supportsCapability(Capability.CRITERIA_SIMILAR)) { if (willBecomeConstant(obj)) { return; if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE_REGEX)) { if (willBecomeConstant(obj)) { return; && ! this.caps.supportsCapability(Capability.CRITERIA_LIKE_ESCAPE)) { if (willBecomeConstant(obj)) { return; Character required = (Character) caps.getSourceProperty(Capability.REQUIRED_LIKE_ESCAPE); if (required != null && obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR if(obj.isNegated() && ! this.caps.supportsCapability(Capability.CRITERIA_NOT)) { if (willBecomeConstant(obj)) { return;
public static Object getProperty(Capability cap, Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return null; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); return caps.getSourceProperty(cap); }
public static boolean supportsSelfJoins(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return false; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); return caps.supportsCapability(Capability.QUERY_FROM_JOIN_SELFJOIN) && caps.supportsCapability(Capability.QUERY_FROM_GROUP_ALIAS); }
if (!caps.supportsFunction(fullName)) { if(SourceSystemFunctions.CONCAT2.equalsIgnoreCase(fullName)) { && caps.supportsFunction(SourceSystemFunctions.CONCAT) && caps.supportsFunction(SourceSystemFunctions.IFNULL) && caps.supportsCapability(Capability.QUERY_SEARCHED_CASE)); } else if(SourceSystemFunctions.FROM_UNIXTIME.equalsIgnoreCase(fullName)) { return (schema == null && caps.supportsFunction(SourceSystemFunctions.TIMESTAMPADD)); } else if(SourceSystemFunctions.FROM_UNIXTIME.equalsIgnoreCase(fullName)) { return (schema == null && caps.supportsFunction(SourceSystemFunctions.TIMESTAMPDIFF)); } else { return false ; return true; //this should be removed in rewrite return caps.supportsConvert(DataTypeManager.getTypeCode(fromType), DataTypeManager.getTypeCode(targetType)); if (!caps.supportsCapability(Capability.GEOGRAPHY_TYPE) && method.getCategory() != null && method.getCategory().equals(FunctionCategoryConstants.GEOGRAPHY)) { return caps.supportsFunction(fullName);
public static void initLanguageBridgeFactory(LanguageBridgeFactory factory, CommandContext context, SourceCapabilities capabilities) { factory.setCommandContext(context); factory.setSupportsConcat2(capabilities.supportsFunction(SourceSystemFunctions.CONCAT2)); factory.setSupportsCountBig(capabilities.supportsCapability(Capability.QUERY_AGGREGATES_COUNT_BIG)); factory.setMaxInPredicateSize((Integer) capabilities.getSourceProperty(Capability.MAX_IN_CRITERIA_SIZE)); factory.setExcludeWithName((String) capabilities.getSourceProperty(Capability.EXCLUDE_COMMON_TABLE_EXPRESSION_NAME)); factory.setSourceNullOrder((NullOrder) capabilities.getSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER)); factory.setSupportsNullOrdering(capabilities.supportsCapability(Capability.QUERY_ORDERBY_NULL_ORDERING)); }
public void visit(MatchCriteria obj) { switch (obj.getMode()) { case LIKE: if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) { if (willBecomeConstant(obj)) { return; if(! this.caps.supportsCapability(Capability.CRITERIA_SIMILAR)) { if (willBecomeConstant(obj)) { return; if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE_REGEX)) { if (willBecomeConstant(obj)) { return; && ! this.caps.supportsCapability(Capability.CRITERIA_LIKE_ESCAPE)) { if (willBecomeConstant(obj)) { return; Character required = (Character) caps.getSourceProperty(Capability.REQUIRED_LIKE_ESCAPE); if (required != null && obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR if(obj.isNegated() && ! this.caps.supportsCapability(Capability.CRITERIA_NOT)) { if (willBecomeConstant(obj)) { return;
public static SupportedJoinCriteria getSupportedJoinCriteria(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return SupportedJoinCriteria.ANY; } SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); SupportedJoinCriteria crits = (SupportedJoinCriteria)caps.getSourceProperty(Capability.JOIN_CRITERIA_ALLOWED); if (crits == null) { return SupportedJoinCriteria.ANY; } return crits; }