Example #1
0
        public NativeResult Execute(string statement, NativeParam[] paramsValue, NativeExecutionOptions options)
        {
            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 = NativeMarshal.NativeParamsToDataParams((Server.ServerProcess)_process, paramsValue);
                NativeResult result     = new NativeResult();
                result.Params = paramsValue;

                if (batch.IsExpression())
                {
                    IServerExpressionPlan expressionPlan = batch.PrepareExpression(dataParams);
                    try
                    {
                        if (expressionPlan.DataType is Schema.TableType)
                        {
                            if (options != NativeExecutionOptions.SchemaOnly)
                            {
                                IServerCursor cursor = expressionPlan.Open(dataParams);
                                try
                                {
                                    result.Value = NativeMarshal.ServerCursorToNativeValue(_process, cursor);
                                }
                                finally
                                {
                                    expressionPlan.Close(cursor);
                                }
                            }
                            else
                            {
                                result.Value = NativeMarshal.TableVarToNativeTableValue(_process, expressionPlan.TableVar);
                            }
                        }
                        else
                        {
                            if (options != NativeExecutionOptions.SchemaOnly)
                            {
                                using (IDataValue tempValue = expressionPlan.Evaluate(dataParams))
                                {
                                    result.Value = NativeMarshal.DataValueToNativeValue(_process, tempValue);
                                }
                            }
                            else
                            {
                                result.Value = NativeMarshal.DataTypeToNativeValue(_process, expressionPlan.DataType);
                            }
                        }
                    }
                    finally
                    {
                        batch.UnprepareExpression(expressionPlan);
                    }
                }
                else
                {
                    IServerStatementPlan statementPlan = batch.PrepareStatement(dataParams);
                    try
                    {
                        if (options != NativeExecutionOptions.SchemaOnly)
                        {
                            statementPlan.Execute(dataParams);
                        }
                    }
                    finally
                    {
                        batch.UnprepareStatement(statementPlan);
                    }
                }

                if (options != NativeExecutionOptions.SchemaOnly)
                {
                    NativeMarshal.SetNativeOutputParams(_process, result.Params, dataParams);
                }
                return(result);
            }
            finally
            {
                _process.UnprepareScript(script);
            }
        }
Example #2
0
        private DataFhirServerResult 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 = DataFhirMarshal.ParamsArrayToDataParams(process, paramsValue);
                DataFhirServerResult result     = new DataFhirServerResult();
                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 = DataFhirMarshal.ServerCursorToValue(process, cursor);
                            }
                            finally
                            {
                                expressionPlan.Close(cursor);
                            }
                        }
                        else
                        {
                            using (IDataValue tempValue = expressionPlan.Evaluate(dataParams))
                            {
                                result.Value = DataFhirMarshal.DataValueToValue(process, tempValue);
                            }
                        }
                    }
                    finally
                    {
                        batch.UnprepareExpression(expressionPlan);
                    }
                }
                else
                {
                    IServerStatementPlan statementPlan = batch.PrepareStatement(dataParams);
                    try
                    {
                        statementPlan.Execute(dataParams);
                    }
                    finally
                    {
                        batch.UnprepareStatement(statementPlan);
                    }
                }

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