public GlobalTableStoreImpl(BufferManager bufferManager, VDBMetaData vdbMetaData, QueryMetadataInterface metadata) { this.bufferManager = bufferManager; this.vdbMetaData = vdbMetaData; this.metadata = new TempMetadataAdapter(metadata, new TempMetadataStore()); }
private TempMetadataStore resolveEmbeddedCommand(TempMetadataAdapter metadata, GroupContext groupContext, Command cmd) throws TeiidComponentException, QueryResolverException { QueryResolver.setChildMetadata(cmd, metadata.getMetadataStore(), groupContext); return QueryResolver.resolveCommand(cmd, metadata.getMetadata()); }
private List<ElementSymbol> resolveSelectableElements(GroupSymbol group) throws QueryMetadataException, TeiidComponentException { List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(group, metadata); List<ElementSymbol> result = new ArrayList<ElementSymbol>(elements.size()); // Look for elements that are not selectable and remove them for (ElementSymbol element : elements) { if(metadata.elementSupports(element.getMetadataID(), SupportConstants.Element.SELECT) && !metadata.isPseudo(element.getMetadataID())) { element = element.clone(); element.setGroupSymbol(group); result.add(element); } } return result; }
@Override protected QueryMetadataInterface createDesignTimeMetadata() { if (isSession()) { return new TempMetadataAdapter(this.actualMetadata.getDesignTimeMetadata(), new TempMetadataStore()); } return new TempMetadataAdapter(this.actualMetadata.getDesignTimeMetadata(), tempStore, materializationTables, queryNodes); }
Collection exitsingGroups = metadata.getMetadata().getGroupsForPartialName(group.getName()); if(!exitsingGroups.isEmpty()) { throw new QueryResolverException(QueryPlugin.Event.TEIID30118, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30118, group.getName())); if (metadata.getMetadata().hasProcedure(group.getName())) { throw new QueryResolverException(QueryPlugin.Event.TEIID30118, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30118, group.getName())); TempMetadataID id = metadata.getMetadataStore().getTempGroupID(group.getName()); if (id != null && !metadata.isTemporaryTable(id)) { throw new QueryResolverException(QueryPlugin.Event.TEIID30118, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30118, group.getName())); Object mid = null; try { mid = metadata.getModelID(create.getOn()); } catch (QueryMetadataException e) { throw new QueryResolverException(QueryPlugin.Event.TEIID31134, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31134, create.getOn())); if (mid != null && (metadata.isVirtualModel(mid) || !(mid instanceof Schema))) { throw new QueryResolverException(QueryPlugin.Event.TEIID31135, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31135, create.getOn()));
metadata.getMetadataStore().getData().putAll(discoveredMetadata.getData()); AssignmentStatement assStmt = (AssignmentStatement)statement; ResolverVisitor.resolveLanguageObject(assStmt.getVariable(), null, externalGroups, metadata); if (!metadata.elementSupports(assStmt.getVariable().getMetadataID(), SupportConstants.Element.UPDATE)) { throw new QueryResolverException(QueryPlugin.Event.TEIID30121, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30121, assStmt.getVariable())); TempMetadataStore store = metadata.getMetadataStore().clone(); metadata = new TempMetadataAdapter(metadata.getMetadata(), store); externalGroups = new GroupContext(externalGroups, null);
public void setNewVDBState(DQPWorkContext newWorkContext) { this.vdbState = new VDBState(); VDBMetaData vdb = newWorkContext.getVDB(); GlobalTableStore actualGlobalStore = vdb.getAttachment(GlobalTableStore.class); this.vdbState.globalTables = actualGlobalStore; this.vdbState.session = newWorkContext.getSession(); this.vdbState.classLoader = vdb.getAttachment(ClassLoader.class); this.vdbState.vdbName = vdb.getName(); this.vdbState.vdbVersion = vdb.getVersion(); this.vdbState.dqpWorkContext = newWorkContext; TempMetadataAdapter metadata = new TempMetadataAdapter(vdb.getAttachment(QueryMetadataInterface.class), globalState.sessionTempTableStore.getMetadataStore()); metadata.setSession(true); this.vdbState.metadata = metadata; }
resolverMetadata = new TempMetadataAdapter(metadata, discoveredMetadata); metadataID = resolverMetadata.getGroupID(extGroup.getName()); if (missing) { extGroup.setMetadataID(metadataID); return resolverMetadata.getMetadataStore();
assertEquals(fullName, wrapper.getFullName(groupID) + Symbol.SEPARATOR + MultiSourceElement.DEFAULT_MULTI_SOURCE_ELEMENT_NAME); TempMetadataAdapter tma = new TempMetadataAdapter(wrapper, new TempMetadataStore()); ElementSymbol elementSymbol = new ElementSymbol("y"); elementSymbol.setType(DataTypeManager.DefaultDataClasses.STRING); TempMetadataID id = tma.getMetadataStore().addTempGroup("x", Arrays.asList(elementSymbol)); assertFalse(tma.isMultiSourceElement(id.getElements().get(0))); assertTrue(tma.isMultiSourceElement(instanceElementID)); assertTrue(tma.isPseudo(instanceElementID)); assertEquals(17, tma.getElementIDsInGroupID(tma.getGroupID("VQT.Smalla")).size());
public static TempMetadataID addTempGroup(TempMetadataAdapter metadata, GroupSymbol symbol, List<? extends Expression> symbols, boolean tempTable) throws QueryResolverException { Set<String> names = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); for (Expression ses : symbols) { if (!names.add(Symbol.getShortName(ses))) { throw new QueryResolverException(QueryPlugin.Event.TEIID30091, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30091, symbol, Symbol.getShortName(ses))); } } if (tempTable) { resolveNullLiterals(symbols); } TempMetadataStore store = metadata.getMetadataStore(); return store.addTempGroup(symbol.getName(), symbols, !tempTable, tempTable); }
/** * Returns if this is a pushed Common Table * Set after resolving and initial common table planning * @return */ public boolean isPushedCommonTable() { return isTempTable && TempMetadataAdapter.getActualMetadataId(metadataID) == metadataID; }
assertNotNull(this.metadata.getPrimaryKey(id)); assertEquals(1000, this.metadata.getCardinality(id), 0); assertEquals("pm1", this.metadata.getName(this.metadata.getModelID(id))); assertEquals("prop", this.metadata.getExtensionProperty(id, "other", false));
@Test public void testPrimaryKeyMetadata() throws Exception { execute("create local temporary table x (e1 string, e2 integer, primary key (e2))", new List[] {Arrays.asList(0)}); //$NON-NLS-1$ Collection<?> c = metadata.getUniqueKeysInGroup(metadata.getGroupID("x")); assertEquals(1, c.size()); assertEquals(1, (metadata.getElementIDsInKey(c.iterator().next()).size())); }
elements.add(singleElementSymbol); TempMetadataStore store = planEnv.getGlobalMetadata().getMetadataStore(); Object metadataID = planEnv.getGlobalMetadata().getGroupID(sourceNode.getResultName()); if (RelationalPlanner.isNoCacheGroup(planEnv.getGlobalMetadata(), metadataID, option)) { return false; metadataID = planEnv.getGlobalMetadata().getGroupID(sourceNode.getActualResultSetName()); if (RelationalPlanner.isNoCacheGroup(planEnv.getGlobalMetadata(), metadataID, option)) { return false;
/** Parse a query from a query node and return a Command object. * @param groupName * * @param queryNode The query node which contains a query * @param planEnv The planner environment * @return New Command object * @throws QueryPlannerException If an error occurred * @since 4.3 */ static Command getQuery(String groupName, QueryNode queryNode, XMLPlannerEnvironment env) throws QueryPlannerException { Command query = queryNode.getCommand(); if (query == null) { try { query = QueryParser.getQueryParser().parseCommand(queryNode.getQuery()); QueryResolver.resolveWithBindingMetadata(query, env.getGlobalMetadata().getDesignTimeMetadata(), queryNode, true); } catch (TeiidException e) { throw new QueryPlannerException(QueryPlugin.Event.TEIID30281, e, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30281, new Object[]{groupName, queryNode.getQuery()})); } } return query; }
private boolean isAssignable(TempMetadataAdapter metadata, SPParameter param) throws TeiidComponentException, QueryMetadataException { if (!(param.getExpression() instanceof ElementSymbol)) { return false; } ElementSymbol symbol = (ElementSymbol)param.getExpression(); return metadata.elementSupports(symbol.getMetadataID(), SupportConstants.Element.UPDATE); }
public int getElementLength(Object elementID) throws TeiidComponentException, QueryMetadataException { if (elementID instanceof TempMetadataID) { TempMetadataID id = (TempMetadataID)elementID; Object origElementID = id.getOriginalMetadataID(); if (origElementID == null) { String type = getElementRuntimeTypeName(elementID); if(type.equals(DataTypeManager.DefaultDataTypes.STRING)) { return 255; } return 10; } elementID = origElementID; } return actualMetadata.getElementLength(elementID); }
@Test public void testFunctionBasedIndexQuery() throws Exception { TempMetadataID id = this.globalStore.getGlobalTempTableMetadataId(metadata.getGroupID("MatView.vgroup2a")); assertEquals("SELECT MatView.VGroup2a.*, ucase(x) FROM MatView.VGroup2a option nocache MatView.VGroup2a", id.getQueryNode().getQuery()); }
Collection exitsingGroups = metadata.getMetadata().getGroupsForPartialName(group.getName()); if(!exitsingGroups.isEmpty()) { throw new QueryResolverException(QueryPlugin.Event.TEIID30118, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30118, group.getName())); if (metadata.getMetadata().hasProcedure(group.getName())) { throw new QueryResolverException(QueryPlugin.Event.TEIID30118, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30118, group.getName())); TempMetadataID id = metadata.getMetadataStore().getTempGroupID(group.getName()); if (id != null && !metadata.isTemporaryTable(id)) { throw new QueryResolverException(QueryPlugin.Event.TEIID30118, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30118, group.getName())); Object mid = null; try { mid = metadata.getModelID(create.getOn()); } catch (QueryMetadataException e) { throw new QueryResolverException(QueryPlugin.Event.TEIID31134, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31134, create.getOn())); if (mid != null && (metadata.isVirtualModel(mid) || !(mid instanceof Schema))) { throw new QueryResolverException(QueryPlugin.Event.TEIID31135, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31135, create.getOn()));
metadata.getMetadataStore().getData().putAll(discoveredMetadata.getData()); AssignmentStatement assStmt = (AssignmentStatement)statement; ResolverVisitor.resolveLanguageObject(assStmt.getVariable(), null, externalGroups, metadata); if (!metadata.elementSupports(assStmt.getVariable().getMetadataID(), SupportConstants.Element.UPDATE)) { throw new QueryResolverException(QueryPlugin.Event.TEIID30121, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30121, assStmt.getVariable())); TempMetadataStore store = metadata.getMetadataStore().clone(); metadata = new TempMetadataAdapter(metadata.getMetadata(), store); externalGroups = new GroupContext(externalGroups, null);