Examples of StoredProcedure


Examples of org.teiid.query.sql.lang.StoredProcedure

           
        }
    }
   
    private void helpTestGetExec(String call, boolean returnValue) throws QueryParserException {
        StoredProcedure sp = (StoredProcedure)QueryParser.getQueryParser().parseCommand(call);
        assertTrue(sp.isCallableStatement());
        assertEquals(returnValue, sp.returnsScalarValue());
        assertEquals("procedure_name", sp.getProcedureName()); //$NON-NLS-1$
        assertEquals((returnValue ? "? = ":"") +"EXEC procedure_name(?, ?, ?)", sp.toString()); //$NON-NLS-1$
    }
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

            new String[] { "pm1.g1.e1" } ); //$NON-NLS-1$
       
    }
   
    @Test public void testStoredQuery1() {               
        StoredProcedure proc = (StoredProcedure) helpResolve("EXEC pm1.sq2('abc')"); //$NON-NLS-1$
       
        // Check number of resolved parameters
        List params = proc.getParameters();
        assertEquals("Did not get expected parameter count", 2, params.size()); //$NON-NLS-1$
       
        // Check resolved parameters
        SPParameter param1 = (SPParameter) params.get(0);
        helpCheckParameter(param1, ParameterInfo.RESULT_SET, 1, "pm1.sq2.ret", java.sql.ResultSet.class, null); //$NON-NLS-1$
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

  @Test public void testProcedureBatching() throws Exception {
    ProcedureExecution exec = new FakeProcedureExecution(2, 1);

    // this has two result set columns and 1 out parameter
    int total_columns = 3;
    StoredProcedure command = (StoredProcedure)helpGetCommand("{call pm2.spTest8(?)}", EXAMPLE_BQT); //$NON-NLS-1$     
    command.getInputParameters().get(0).setExpression(new Constant(1));
    Call proc = (Call)new LanguageBridgeFactory(EXAMPLE_BQT).translate(command);

    ProcedureBatchHandler pbh = new ProcedureBatchHandler(proc, exec);

    assertEquals(total_columns, pbh.padRow(Arrays.asList(null, null)).size());
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

        for (PlanNode node : NodeEditor.findAllNodes(plan, NodeConstants.Types.SOURCE, NodeConstants.Types.ACCESS)) {
            if (!FrameUtil.isProcedure(node.getFirstChild())) {
                continue;
            }
           
            StoredProcedure proc = (StoredProcedure)node.getProperty(NodeConstants.Info.NESTED_COMMAND);
           
            if (!proc.isProcedureRelational()) {
                continue;
            }

            HashSet inputSymbols = new HashSet();
            List inputReferences = new LinkedList();
           
            PlanNode critNode = node.getParent();
           
            List conjuncts = new LinkedList();
            HashSet coveredParams = new HashSet();
            //List preExecNodes = new LinkedList();
                       
            for (Iterator params = proc.getInputParameters().iterator(); params.hasNext();) {
                SPParameter param = (SPParameter)params.next();
                ElementSymbol symbol = param.getParameterSymbol();
                Expression input = param.getExpression();
                inputReferences.add(input);
                inputSymbols.add(symbol);
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

        ModelMetaData model = vdb.getModel(modelName);
        List<AccessNode> accessNodes = new ArrayList<AccessNode>();
       
        boolean hasOutParams = false;
        if (accessNode.getCommand() instanceof StoredProcedure) {
          StoredProcedure sp = (StoredProcedure)accessNode.getCommand();
          hasOutParams = sp.returnParameters() && sp.getProjectedSymbols().size() > sp.getResultSetColumns().size();
        }
       
        for(String sourceName:model.getSourceNames()) {
           
            // Create a new cloned version of the access node and set it's model name to be the bindingUUID
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

        }
    }

  private Command rewriteCommand(String sourceName, Command command) throws ExpressionEvaluationException, TeiidComponentException {
    if (command instanceof StoredProcedure) {
      StoredProcedure obj = (StoredProcedure)command;
      for (Iterator<SPParameter> params = obj.getMapOfParameters().values().iterator(); params.hasNext();) {
        SPParameter param = params.next();
        if (param.getParameterType() != SPParameter.IN) {
          continue;
        }
        String shortName = SingleElementSymbol.getShortName(param.getName());       
          if(shortName.equalsIgnoreCase(MultiSourceElement.MULTI_SOURCE_ELEMENT_NAME)) {
              Constant source = (Constant)param.getExpression();
            params.remove();
            if (param.isUsingDefault() && source.isNull()) {
              continue;
            }
              if (!source.getValue().equals(sourceName)) {
                return null;
              }
            }
      }
    } if (command instanceof Insert) {
      Insert obj = (Insert)command;
      for (int i = 0; i < obj.getVariables().size(); i++) {
        ElementSymbol elem = obj.getVariables().get(i);
            Object metadataID = elem.getMetadataID();           
            if(metadataID instanceof MultiSourceElement) {
              Constant source = (Constant)obj.getValues().get(i);
            obj.getVariables().remove(i);
            obj.getValues().remove(i);
              if (!source.getValue().equals(sourceName)) {
                return null;
              }
            }
      }
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

            Query query = (Query)command;
            return registerQuery(context, contextStore, query);
        }
        if (command instanceof ProcedureContainer) {
          if (command instanceof StoredProcedure) {
            StoredProcedure proc = (StoredProcedure)command;
            if (CoreConstants.SYSTEM_ADMIN_MODEL.equals(modelName)) {
              TupleSource result = handleSystemProcedures(context, proc);
              if (result != null) {
                return result;
              }
            } else if (proc.getGroup().isGlobalTable()) {
              return handleCachedProcedure(context, proc);
            }
            return null; //it's not a stored procedure we want to handle
          }
         
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

     * org.teiid.query.metadata.QueryMetadataInterface)
     */
    private void findCommandMetadata(Command command, TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata)
    throws QueryMetadataException, QueryResolverException, TeiidComponentException {

        StoredProcedure storedProcedureCommand = (StoredProcedure) command;
       
        StoredProcedureInfo storedProcedureInfo = null;
        try {
          storedProcedureInfo = metadata.getStoredProcedureInfoForProcedure(storedProcedureCommand.getProcedureName());
        } catch (QueryMetadataException e) {
          String[] parts = storedProcedureCommand.getProcedureName().split("\\.", 2); //$NON-NLS-1$
        if (parts.length > 1 && parts[0].equalsIgnoreCase(metadata.getVirtualDatabaseName())) {
              try {
                storedProcedureInfo = metadata.getStoredProcedureInfoForProcedure(parts[1]);
                storedProcedureCommand.setProcedureName(parts[1]);
              } catch(QueryMetadataException e1) {
              }
          }
        if (storedProcedureInfo == null) {
          throw e;
        }
        }

        storedProcedureCommand.setUpdateCount(storedProcedureInfo.getUpdateCount());
        storedProcedureCommand.setModelID(storedProcedureInfo.getModelID());
        storedProcedureCommand.setProcedureID(storedProcedureInfo.getProcedureID());
        storedProcedureCommand.setProcedureCallableName(storedProcedureInfo.getProcedureCallableName());

        // Get old parameters as they may have expressions set on them - collect
        // those expressions to copy later into the resolved parameters
        List<SPParameter> oldParams = storedProcedureCommand.getParameters();

        boolean namedParameters = storedProcedureCommand.displayNamedParameters();
       
        // If parameter count is zero, then for the purposes of this method treat that
        // as if named parameters were used.  Even though the StoredProcedure was not
        // parsed that way, the user may have entered no parameters with the intention
        // of relying on all default values of all optional parameters.
        if (oldParams.size() == 0 || (oldParams.size() == 1 && storedProcedureCommand.isCalledWithReturn())) {
          storedProcedureCommand.setDisplayNamedParameters(true);
            namedParameters = true;
        }
       
        // Cache original input parameter expressions.  Depending on whether
        // the procedure was parsed with named or unnamed parameters, the keys
        // for this map will either be the String names of the parameters or
        // the Integer indices, as entered in the user query
        Map<Object, Expression> inputExpressions = new HashMap<Object, Expression>();
        int adjustIndex = 0;
        for (SPParameter param : oldParams) {
            if(param.getExpression() == null) {
              if (param.getParameterType() == SPParameter.RESULT_SET) {
                adjustIndex--;  //If this was already resolved, just pretend the result set param doesn't exist
            }
              continue;
            }
            if (namedParameters && param.getParameterType() != SPParameter.RETURN_VALUE) {
                if (inputExpressions.put(param.getName().toUpperCase(), param.getExpression()) != null) {
                  throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.duplicate_named_params", param.getName().toUpperCase())); //$NON-NLS-1$
                }
            } else {
                inputExpressions.put(param.getIndex() + adjustIndex, param.getExpression());
            }
        }

        storedProcedureCommand.clearParameters();
        int origInputs = inputExpressions.size();
        /*
         * Take the values set from the stored procedure implementation, and match up with the
         * types of parameter it is from the metadata and then reset the newly joined parameters
         * into the stored procedure command.  If it is a result set get those columns and place
         * them into the stored procedure command as well.
         */
        List<SPParameter> metadataParams = storedProcedureInfo.getParameters();
        List<SPParameter> clonedMetadataParams = new ArrayList<SPParameter>(metadataParams.size());
        int inputParams = 0;
        int outParams = 0;
        boolean hasReturnValue = false;
        for (SPParameter metadataParameter : metadataParams) {
            if( (metadataParameter.getParameterType()==ParameterInfo.IN) ||
                (metadataParameter.getParameterType()==ParameterInfo.INOUT)){

                inputParams++;
            } else if (metadataParameter.getParameterType() == ParameterInfo.OUT) {
              outParams++;
            } else if (metadataParameter.getParameterType() == ParameterInfo.RETURN_VALUE) {
              hasReturnValue = true;
            }
            SPParameter clonedParam = (SPParameter)metadataParameter.clone();
            clonedMetadataParams.add(clonedParam);
            storedProcedureCommand.setParameter(clonedParam);
        }
       
        if (storedProcedureCommand.isCalledWithReturn() && !hasReturnValue) {
          throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.return_expected", storedProcedureCommand.getGroup()))//$NON-NLS-1$
        }

        if(!namedParameters && (inputParams > inputExpressions.size())) {
            throw new QueryResolverException("ERR.015.008.0007", QueryPlugin.Util.getString("ERR.015.008.0007", inputParams, origInputs, storedProcedureCommand.getGroup())); //$NON-NLS-1$ //$NON-NLS-2$
        }
       
        // Walk through the resolved parameters and set the expressions from the
        // input parameters
        int exprIndex = 1;
        HashSet<String> expected = new HashSet<String>();
        if (storedProcedureCommand.isCalledWithReturn() && hasReturnValue) {
          for (SPParameter param : clonedMetadataParams) {
            if (param.getParameterType() == SPParameter.RETURN_VALUE) {
              Expression expr = inputExpressions.remove(exprIndex++);
                  param.setExpression(expr);
            }
          }
        }
        for (SPParameter param : clonedMetadataParams) {
            if(param.getParameterType() == SPParameter.RESULT_SET || param.getParameterType() == SPParameter.RETURN_VALUE) {
              continue;
            }
            if (namedParameters) {
                String nameKey = param.getParameterSymbol().getShortCanonicalName();
                Expression expr = inputExpressions.remove(nameKey);
                // With named parameters, have to check on optional params and default values
                if (expr == null && param.getParameterType() != ParameterInfo.OUT) {
                  expr = ResolverUtil.getDefault(param.getParameterSymbol(), metadata);
                  param.setUsingDefault(true);
                  expected.add(nameKey);
                }
                param.setExpression(expr);                   
            } else {
              if(param.getParameterType() == SPParameter.OUT) {
                continue;
              }
                Expression expr = inputExpressions.remove(exprIndex++);
                param.setExpression(expr);
            }
        }
       
        // Check for leftovers, i.e. params entered by user w/ wrong/unknown names
        if (!inputExpressions.isEmpty()) {
          if (namedParameters) {
            throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.invalid_named_params", inputExpressions.keySet(), expected)); //$NON-NLS-1$
          }
          throw new QueryResolverException("ERR.015.008.0007", QueryPlugin.Util.getString("ERR.015.008.0007", inputParams, origInputs, storedProcedureCommand.getGroup().toString())); //$NON-NLS-1$ //$NON-NLS-2$
        }
       
        // Create temporary metadata that defines a group based on either the stored proc
        // name or the stored query name - this will be used later during planning
        String procName = storedProcedureCommand.getProcedureName();
        List tempElements = storedProcedureCommand.getProjectedSymbols();
        boolean isVirtual = storedProcedureInfo.getQueryPlan() != null;
        discoveredMetadata.addTempGroup(procName, tempElements, isVirtual);

        // Resolve tempElements against new metadata
        GroupSymbol procGroup = new GroupSymbol(storedProcedureInfo.getProcedureCallableName());
        procGroup.setProcedure(true);
        TempMetadataID tid = discoveredMetadata.getTempGroupID(procName);
        tid.setOriginalMetadataID(storedProcedureCommand.getProcedureID());
        procGroup.setMetadataID(tid);
        storedProcedureCommand.setGroup(procGroup);
    }
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

              command.getType() == Command.TYPE_INSERT
              || command.getType() == Command.TYPE_UPDATE
              || command.getType() == Command.TYPE_DELETE);
          //handle stored procedure calls
          if (command.getType() == Command.TYPE_STORED_PROCEDURE) {
            StoredProcedure sp = (StoredProcedure)command;
            if (sp.isCallableStatement()) {
              Map<ElementSymbol, ElementSymbol> assignments = new LinkedHashMap<ElementSymbol, ElementSymbol>();
              for (SPParameter param : sp.getParameters()) {
                if (param.getParameterType() == SPParameter.RESULT_SET
                    || param.getParameterType() == SPParameter.IN) {
                  continue;
                }
                Expression expr = param.getExpression();
View Full Code Here

Examples of org.teiid.query.sql.lang.StoredProcedure

  private boolean addNestedProcedure(PlanNode sourceNode,
      ProcedureContainer container, Object metadataId) throws TeiidComponentException,
      QueryMetadataException, TeiidProcessingException {
    if (container instanceof StoredProcedure) {
      StoredProcedure sp = (StoredProcedure)container;
      if (sp.getProcedureID() instanceof Procedure) {
        context.accessedPlanningObject(sp.getProcedureID());
      }
    }
    String cacheString = "transformation/" + container.getClass().getSimpleName().toUpperCase(); //$NON-NLS-1$
    Command c = (Command)metadata.getFromMetadataCache(metadataId, cacheString);
    if (c == null) {
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.