public static boolean hasOutputParams(Command command) { boolean hasOutParams = false; if (command instanceof StoredProcedure) { StoredProcedure sp = (StoredProcedure)command; hasOutParams = sp.returnParameters() && sp.getProjectedSymbols().size() > sp.getResultSetColumns().size(); } return hasOutParams; }
public static boolean hasOutputParams(Command command) { boolean hasOutParams = false; if (command instanceof StoredProcedure) { StoredProcedure sp = (StoredProcedure)command; hasOutParams = sp.returnParameters() && sp.getProjectedSymbols().size() > sp.getResultSetColumns().size(); } return hasOutParams; }
public static boolean hasOutputParams(Command command) { boolean hasOutParams = false; if (command instanceof StoredProcedure) { StoredProcedure sp = (StoredProcedure)command; hasOutParams = sp.returnParameters() && sp.getProjectedSymbols().size() > sp.getResultSetColumns().size(); } return hasOutParams; }
/** * @see org.teiid.query.sql.lang.Command#areResultsCachable() */ public boolean areResultsCachable() { if (getUpdateCount() > 0) { return false; } return Query.areColumnsCachable(getProjectedSymbols()); }
/** * @see org.teiid.query.sql.lang.Command#areResultsCachable() */ public boolean areResultsCachable() { if (getUpdateCount() > 0) { return false; } return Query.areColumnsCachable(getProjectedSymbols()); }
/** * @see org.teiid.query.sql.lang.Command#areResultsCachable() */ public boolean areResultsCachable() { if (getUpdateCount() > 0) { return false; } return Query.areColumnsCachable(getProjectedSymbols()); }
@Override public void visit(StoredProcedure obj) { if (!obj.isPushedInQuery()) { return; } List<ElementSymbol> selectSymbols = obj.getProjectedSymbols(); LinkedHashMap<Expression, String> symbols = new LinkedHashMap<Expression, String>(selectSymbols.size()); for (int i = 0; i < selectSymbols.size(); i++) { ElementSymbol symbol = selectSymbols.get(i); symbols.put(symbol, symbol.getShortName()); } for (SPParameter param : obj.getParameters()) { visitNode(param.getExpression()); } visitor.namingContext.currentSymbols = symbols; }
@Override public void visit(StoredProcedure obj) { if (!obj.isPushedInQuery()) { return; } List<ElementSymbol> selectSymbols = obj.getProjectedSymbols(); LinkedHashMap<Expression, String> symbols = new LinkedHashMap<Expression, String>(selectSymbols.size()); for (int i = 0; i < selectSymbols.size(); i++) { ElementSymbol symbol = selectSymbols.get(i); symbols.put(symbol, symbol.getShortName()); } for (SPParameter param : obj.getParameters()) { visitNode(param.getExpression()); } visitor.namingContext.currentSymbols = symbols; }
@Override public void visit(StoredProcedure obj) { if (!obj.isPushedInQuery()) { return; } List<ElementSymbol> selectSymbols = obj.getProjectedSymbols(); LinkedHashMap<Expression, String> symbols = new LinkedHashMap<Expression, String>(selectSymbols.size()); for (int i = 0; i < selectSymbols.size(); i++) { ElementSymbol symbol = selectSymbols.get(i); symbols.put(symbol, symbol.getShortName()); } for (SPParameter param : obj.getParameters()) { visitNode(param.getExpression()); } visitor.namingContext.currentSymbols = symbols; }
@Test public void testDotInName() throws Exception { String ddl = "CREATE FOREIGN PROCEDURE \"my.proc\" (param STRING) RETURNS TABLE (a INTEGER, b STRING);"; //$NON-NLS-1$ TransformationMetadata tm = RealMetadataFactory.fromDDL(ddl, "x", "y"); StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve("exec \"my.proc\"()", tm); assertEquals(2, sp.getProjectedSymbols().size()); assertEquals("y.my.proc.b", sp.getProjectedSymbols().get(1).toString()); TestValidator.helpValidate("begin exec proc(); end", new String[] {}, tm); }
@Test public void testExecProjectedSymbols() { String query = "exec pm1.sq1()"; //$NON-NLS-1$ StoredProcedure proc = (StoredProcedure)helpResolve(query); List<Expression> projected = proc.getProjectedSymbols(); assertEquals(2, projected.size()); for (Iterator<Expression> i = projected.iterator(); i.hasNext();) { ElementSymbol symbol = (ElementSymbol)i.next(); assertNotNull(symbol.getGroupSymbol()); } }
@Test public void testSPOutParamWithExec() { StoredProcedure proc = (StoredProcedure)helpResolve("exec pm2.spTest8(1)", RealMetadataFactory.exampleBQTCached()); assertEquals(2, proc.getProjectedSymbols().size()); }
/** * Note that the call syntax is not quite correct, the output parameter is not in the arg list. * That hack is handled by the PreparedStatementRequest */ @Test public void testSPOutParamWithCallableStatement() { StoredProcedure proc = (StoredProcedure)helpResolve("{call pm2.spTest8(1)}", RealMetadataFactory.exampleBQTCached()); assertEquals(3, proc.getProjectedSymbols().size()); }
@Test public void testSPReturnParamWithNoResultSet() { StoredProcedure proc = (StoredProcedure)helpResolve("exec pm4.spTest9(1)", RealMetadataFactory.exampleBQTCached()); assertEquals(1, proc.getProjectedSymbols().size()); }
@Test public void testReturnAndResultSet() throws Exception { String ddl = "CREATE FOREIGN PROCEDURE proc (OUT param STRING RESULT) RETURNS TABLE (a INTEGER, b STRING);"; //$NON-NLS-1$ TransformationMetadata tm = RealMetadataFactory.fromDDL(ddl, "x", "y"); StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve("exec proc()", tm); assertEquals(2, sp.getProjectedSymbols().size()); assertEquals("y.proc.b", sp.getProjectedSymbols().get(1).toString()); assertTrue(sp.returnsResultSet()); sp.setCallableStatement(true); assertEquals(3, sp.getProjectedSymbols().size()); assertEquals("y.proc.param", sp.getProjectedSymbols().get(2).toString()); CreateProcedureCommand cpc = (CreateProcedureCommand) TestResolver.helpResolve("begin exec proc(); end", tm); assertEquals(2, cpc.getProjectedSymbols().size()); assertEquals(2, ((CommandStatement)cpc.getBlock().getStatements().get(0)).getCommand().getProjectedSymbols().size()); assertTrue(cpc.returnsResultSet()); TestValidator.helpValidate("begin declare string var; var = exec proc(); select var; end", new String[] {"SELECT var;"}, tm); }
PlanNode createStoredProcedurePlan(StoredProcedure storedProc) throws QueryMetadataException, TeiidComponentException, TeiidProcessingException { // Create top project node - define output columns for stored query / procedure PlanNode projectNode = attachProject(null, storedProc.getProjectedSymbols()); // Define source of data for stored query / procedure PlanNode sourceNode = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); sourceNode.setProperty(NodeConstants.Info.VIRTUAL_COMMAND, storedProc); addNestedProcedure(sourceNode, storedProc, storedProc.getProcedureID()); hints.hasRelationalProc |= storedProc.isProcedureRelational(); if (!hints.hasRowBasedSecurity && RowBasedSecurityHelper.applyRowSecurity(metadata, storedProc.getGroup(), context)) { hints.hasRowBasedSecurity = true; } // Set group on source node sourceNode.addGroup(storedProc.getGroup()); attachLast(projectNode, sourceNode); return projectNode; }
PlanNode createStoredProcedurePlan(StoredProcedure storedProc) throws QueryMetadataException, TeiidComponentException, TeiidProcessingException { // Create top project node - define output columns for stored query / procedure PlanNode projectNode = attachProject(null, storedProc.getProjectedSymbols()); // Define source of data for stored query / procedure PlanNode sourceNode = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); sourceNode.setProperty(NodeConstants.Info.VIRTUAL_COMMAND, storedProc); addNestedProcedure(sourceNode, storedProc, storedProc.getProcedureID()); hints.hasRelationalProc |= storedProc.isProcedureRelational(); if (!hints.hasRowBasedSecurity && RowBasedSecurityHelper.applyRowSecurity(metadata, storedProc.getGroup(), context)) { hints.hasRowBasedSecurity = true; } // Set group on source node sourceNode.addGroup(storedProc.getGroup()); attachLast(projectNode, sourceNode); return projectNode; }
PlanNode createStoredProcedurePlan(StoredProcedure storedProc) throws QueryMetadataException, TeiidComponentException, TeiidProcessingException { // Create top project node - define output columns for stored query / procedure PlanNode projectNode = attachProject(null, storedProc.getProjectedSymbols()); // Define source of data for stored query / procedure PlanNode sourceNode = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); sourceNode.setProperty(NodeConstants.Info.VIRTUAL_COMMAND, storedProc); addNestedProcedure(sourceNode, storedProc, storedProc.getProcedureID()); hints.hasRelationalProc |= storedProc.isProcedureRelational(); if (!hints.hasRowBasedSecurity && RowBasedSecurityHelper.applyRowSecurity(metadata, storedProc.getGroup(), context)) { hints.hasRowBasedSecurity = true; } // Set group on source node sourceNode.addGroup(storedProc.getGroup()); attachLast(projectNode, sourceNode); return projectNode; }
if (command instanceof StoredProcedure) { StoredProcedure sp = (StoredProcedure)command; if (sp.returnParameters() && sp.getProjectedSymbols().size() > sp.getResultSetColumns().size()) { throw new TeiidProcessingException(QueryPlugin.Event.TEIID30561, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30561, command));
if (command instanceof StoredProcedure) { StoredProcedure sp = (StoredProcedure)command; if (sp.returnParameters() && sp.getProjectedSymbols().size() > sp.getResultSetColumns().size()) { throw new TeiidProcessingException(QueryPlugin.Event.TEIID30561, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30561, command));