Exemplo n.º 1
0
        public object Evaluate(string statement, IEnumerable <KeyValuePair <string, object> > args)
        {
            CheckActive();
            var session = _server.Connect(new SessionInfo());
            var process = session.StartProcess(new ProcessInfo());

            DataParam[] paramsValue = RESTMarshal.ArgsToDataParams(process, args);
            var         result      = Execute(process, statement, paramsValue);

            return(result);
        }
Exemplo n.º 2
0
        private RESTResult Execute(IServerProcess process, string statement, DataParam[] paramsValue)
        {
            IServerScript script = process.PrepareScript(statement);

            try
            {
                if (script.Batches.Count != 1)
                {
                    throw new ArgumentException("Execution statement must contain one, and only one, batch.");
                }

                IServerBatch batch      = script.Batches[0];
                DataParams   dataParams = RESTMarshal.ParamsArrayToDataParams(process, paramsValue);
                RESTResult   result     = new RESTResult();
                result.Params = paramsValue;

                if (batch.IsExpression())
                {
                    IServerExpressionPlan expressionPlan = batch.PrepareExpression(dataParams);
                    try
                    {
                        if (expressionPlan.DataType is TableType)
                        {
                            IServerCursor cursor = expressionPlan.Open(dataParams);
                            try
                            {
                                result.Value = RESTMarshal.ServerCursorToValue(process, cursor);
                            }
                            finally
                            {
                                expressionPlan.Close(cursor);
                            }
                        }
                        else
                        {
                            using (IDataValue tempValue = expressionPlan.Evaluate(dataParams))
                            {
                                result.Value = RESTMarshal.DataValueToValue(process, tempValue);
                            }
                        }
                    }
                    finally
                    {
                        batch.UnprepareExpression(expressionPlan);
                    }
                }
                else
                {
                    IServerStatementPlan statementPlan = batch.PrepareStatement(dataParams);
                    try
                    {
                        statementPlan.Execute(dataParams);
                    }
                    finally
                    {
                        batch.UnprepareStatement(statementPlan);
                    }
                }

                //NativeMarshal.SetNativeOutputParams(process, result.Params, dataParams);
                return(result);
            }
            finally
            {
                process.UnprepareScript(script);
            }
        }