@Override protected QueryMetadataInterface createDesignTimeMetadata() { return new MultiSourceMetadataWrapper(actualMetadata.getDesignTimeMetadata(), multiSourceModels); }
@Override public boolean isMultiSourceElement(Object elementId) throws QueryMetadataException, TeiidComponentException { if (elementId instanceof MultiSourceElement) { return true; } Object gid = getGroupIDForElementID(elementId); if (isVirtualGroup(gid)) { return false; } Object modelID = this.getModelID(gid); String modelName = this.getFullName(modelID); String multiSourceColumnName = multiSourceModels.get(modelName); if(multiSourceColumnName == null) { return false; } return multiSourceColumnName.equalsIgnoreCase(getName(elementId)); }
@Override public Object getElementID(String elementName) throws TeiidComponentException, QueryMetadataException { try { return super.getElementID(elementName); } catch (QueryMetadataException e) { //could be pseudo-column int index = elementName.lastIndexOf('.'); if(index <= 0 || elementName.length() <= index) { throw e; } String group = elementName.substring(0, index); elementName = elementName.substring(index + 1, elementName.length()); MultiSourceGroup msg = getMultiSourceGroup(getGroupID(group)); if (msg != null && elementName.equalsIgnoreCase(getName(msg.multiSourceElement))) { return msg.multiSourceElement; } throw e; } }
@Test public void testMultiSourcePseudoElement() throws Exception { HashSet<String> multiSourceModels = new HashSet<String>(); multiSourceModels.add("BQT1"); MultiSourceMetadataWrapper wrapper = new MultiSourceMetadataWrapper(RealMetadataFactory.exampleBQTCached(), multiSourceModels); Object groupID = wrapper.getGroupID("BQT1.SmallA"); //$NON-NLS-1$ List<?> elements = wrapper.getElementIDsInGroupID(groupID); assertEquals(18, elements.size()); String fullName = wrapper.getFullName(instanceElementID); assertEquals("BQT1.SmallA." + MultiSourceElement.DEFAULT_MULTI_SOURCE_ELEMENT_NAME, fullName); //$NON-NLS-1$ assertEquals(instanceElementID, wrapper.getElementID(fullName)); assertEquals(groupID, wrapper.getGroupIDForElementID(instanceElementID)); assertEquals(null, wrapper.getMaximumValue(instanceElementID)); assertEquals(null, wrapper.getMinimumValue(instanceElementID)); assertEquals(wrapper.getModelID(groupID), wrapper.getModelID(instanceElementID)); assertEquals(null, wrapper.getDefaultValue(instanceElementID)); assertEquals(255, wrapper.getElementLength(instanceElementID)); assertEquals(DataTypeManager.DefaultDataTypes.STRING, wrapper.getElementRuntimeTypeName(instanceElementID)); assertEquals(new Properties(), wrapper.getExtensionProperties(instanceElementID)); assertEquals(null, wrapper.getNameInSource(instanceElementID)); assertEquals(null, wrapper.getNativeType(instanceElementID)); assertEquals(18, wrapper.getPosition(instanceElementID)); assertEquals(0, wrapper.getPrecision(instanceElementID)); assertEquals(0, wrapper.getScale(instanceElementID)); assertEquals(0, wrapper.getRadix(instanceElementID)); assertEquals(MultiSourceElement.DEFAULT_MULTI_SOURCE_ELEMENT_NAME, Symbol.getShortName(fullName)); assertEquals(fullName, wrapper.getFullName(groupID) + Symbol.SEPARATOR + MultiSourceElement.DEFAULT_MULTI_SOURCE_ELEMENT_NAME);
return msg; if (isVirtualGroup(groupID)) { return null; Object modelId = getModelID(groupID); String multiSourceElementName = this.multiSourceModels.get(getFullName(modelId)); if (multiSourceElementName == null) { return null; e.setPosition(elements.size()+1); e.setRuntimeType(DataTypeManager.DefaultDataTypes.STRING); setMultiSourceElementMetadata(e); result.add(e); mse = e;
Map<String, String> multiSourceModels = MultiSourceMetadataWrapper.getMultiSourceModels(mergedVDB); if(multiSourceModels != null && !multiSourceModels.isEmpty()) { qmi = new MultiSourceMetadataWrapper(metadata, multiSourceModels);
@Override public boolean isMultiSource(Object modelId) throws QueryMetadataException, TeiidComponentException { return multiSourceModels.containsKey(getFullName(modelId)); }
@Override public void loadMetadata(MetadataFactory factory, ExecutionFactory<Object, Object> executionFactory, Object connectionFactory) throws TranslatorException { Schema s = factory.getSchema(); for (Table t : s.getTables().values()) { if (!t.isPhysical()) { continue; } Column c = t.getColumnByName(multiSourceColumnName); if (c == null) { c = factory.addColumn(multiSourceColumnName, DataTypeManager.DefaultDataTypes.STRING, t); MultiSourceMetadataWrapper.setMultiSourceElementMetadata(c); } } outer: for (Procedure p : s.getProcedures().values()) { if (p.isVirtual()) { continue; } for (ProcedureParameter pp : p.getParameters()) { if (multiSourceColumnName.equalsIgnoreCase(pp.getName())) { continue outer; } } ProcedureParameter pp = factory.addProcedureParameter(multiSourceColumnName, DataTypeManager.DefaultDataTypes.STRING, Type.In, p); pp.setNullType(NullType.Nullable); } }
@Override public List<?> getElementIDsInGroupID(Object groupID) throws TeiidComponentException, QueryMetadataException { MultiSourceGroup msg = getMultiSourceGroup(groupID); if (msg != null) { return msg.columns; } return actualMetadata.getElementIDsInGroupID(groupID); }
return msg; if (isVirtualGroup(groupID)) { return null; Object modelId = getModelID(groupID); String multiSourceElementName = this.multiSourceModels.get(getFullName(modelId)); if (multiSourceElementName == null) { return null; e.setPosition(elements.size()+1); e.setRuntimeType(DataTypeManager.DefaultDataTypes.STRING); setMultiSourceElementMetadata(e); result.add(e); mse = e;
public ProcessorPlan helpTestMultiSourcePlan(QueryMetadataInterface metadata, String userSql, String multiModel, int sourceCount, ProcessorDataManager dataMgr, List<?>[] expectedResults, VDBMetaData vdb, List<?> params, Options options, SourceCapabilities bsc) throws Exception { Map<String, String> multiSourceModels = MultiSourceMetadataWrapper.getMultiSourceModels(vdb); for (String model:multiSourceModels.keySet()) { char sourceID = 'a'; QueryMetadataInterface wrapper = new MultiSourceMetadataWrapper(metadata, multiSourceModels); wrapper = new TempMetadataAdapter(wrapper, new TempMetadataStore()); DQPWorkContext workContext = RealMetadataFactory.buildWorkContext(wrapper, vdb);
@Override public boolean isMultiSource(Object modelId) throws QueryMetadataException, TeiidComponentException { return multiSourceModels.containsKey(getFullName(modelId)); }
@Override public List<?> getElementIDsInGroupID(Object groupID) throws TeiidComponentException, QueryMetadataException { MultiSourceGroup msg = getMultiSourceGroup(groupID); if (msg != null) { return msg.columns; } return actualMetadata.getElementIDsInGroupID(groupID); }
@Override public boolean isMultiSourceElement(Object elementId) throws QueryMetadataException, TeiidComponentException { if (elementId instanceof MultiSourceElement) { return true; } Object gid = getGroupIDForElementID(elementId); if (isVirtualGroup(gid)) { return false; } Object modelID = this.getModelID(gid); String modelName = this.getFullName(modelID); String multiSourceColumnName = multiSourceModels.get(modelName); if(multiSourceColumnName == null) { return false; } return multiSourceColumnName.equalsIgnoreCase(getName(elementId)); }
return msg; if (isVirtualGroup(groupID)) { return null; Object modelId = getModelID(groupID); String multiSourceElementName = this.multiSourceModels.get(getFullName(modelId)); if (multiSourceElementName == null) { return null; e.setPosition(elements.size()+1); e.setRuntimeType(DataTypeManager.DefaultDataTypes.STRING); setMultiSourceElementMetadata(e); result.add(e); mse = e;
@Override public Object getElementID(String elementName) throws TeiidComponentException, QueryMetadataException { try { return super.getElementID(elementName); } catch (QueryMetadataException e) { //could be pseudo-column int index = elementName.lastIndexOf('.'); if(index <= 0 || elementName.length() <= index) { throw e; } String group = elementName.substring(0, index); elementName = elementName.substring(index + 1, elementName.length()); MultiSourceGroup msg = getMultiSourceGroup(getGroupID(group)); if (msg != null && elementName.equalsIgnoreCase(getName(msg.multiSourceElement))) { return msg.multiSourceElement; } throw e; } }
@Override protected QueryMetadataInterface createDesignTimeMetadata() { return new MultiSourceMetadataWrapper(actualMetadata.getDesignTimeMetadata(), multiSourceModels); }
@Override public boolean isMultiSource(Object modelId) throws QueryMetadataException, TeiidComponentException { return multiSourceModels.containsKey(getFullName(modelId)); }
@Override public List<?> getElementIDsInGroupID(Object groupID) throws TeiidComponentException, QueryMetadataException { MultiSourceGroup msg = getMultiSourceGroup(groupID); if (msg != null) { return msg.columns; } return actualMetadata.getElementIDsInGroupID(groupID); }
@Override public boolean isMultiSourceElement(Object elementId) throws QueryMetadataException, TeiidComponentException { if (elementId instanceof MultiSourceElement) { return true; } Object gid = getGroupIDForElementID(elementId); if (isVirtualGroup(gid)) { return false; } Object modelID = this.getModelID(gid); String modelName = this.getFullName(modelID); String multiSourceColumnName = multiSourceModels.get(modelName); if(multiSourceColumnName == null) { return false; } return multiSourceColumnName.equalsIgnoreCase(getName(elementId)); }