Пример #1
0
            /// <summary>
            ///     Invokes the specified environment information.
            /// </summary>
            public string Invoke(EnvironmentInfo environmentInfo, InvocationInfo invocationInfo, IReadOnlyList <InvocationMethodParameterInfo> parameters)
            {
                PluginLoader.AttachPlugins();

                InvokeOutput output = null;

                var trace = Fun((string message) => { AppDomain.CurrentDomain.SetData("trace", message); });

                using (var boaContext = new BOAContext(environmentInfo, trace))
                {
                    output = Invoker.Invoke(boaContext, trace, invocationInfo, parameters);
                }

                return(SerializeToJson(output));
            }
        internal static object CalculateFrom(ValueAccessInfo valueAccessInfo, MethodDefinition methodDefinition, InvokeOutput invocationOutput, EnvironmentInfo environmentInfo, Dictionary <string, string> variablesMap)
        {
            var input = new CompileSQLOperationInput
            {
                MethodDefinition        = methodDefinition,
                MethodParametersInJson  = invocationOutput.InvocationParameters,
                MethodReturnValueInJson = invocationOutput.ExecutionResponseAsJson,
                SQL          = valueAccessInfo.Text.Trim(),
                VariablesMap = variablesMap
            };
            var sqlOperationOutput = CompileSQLOperation(input);

            if (valueAccessInfo.FetchFromDatabase == false)
            {
                if (sqlOperationOutput.SqlParameters.Count == 1)
                {
                    if (input.SQL != sqlOperationOutput.SQL)
                    {
                        return(sqlOperationOutput.SqlParameters[0].Value);
                    }

                    var isNamedParameter = input.SQL == "@output" ||
                                           methodDefinition.Parameters.Any(p => _.IntellisensePrefix + p.Name == input.SQL) ||
                                           variablesMap.ContainsKey(input.SQL);
                    if (isNamedParameter)
                    {
                        return(sqlOperationOutput.SqlParameters[0].Value);
                    }
                }

                return(valueAccessInfo.Text);
            }

            if (string.IsNullOrWhiteSpace(valueAccessInfo.DatabaseName))
            {
                return("Hata: DatabaseName is empty");
            }

            var database = Databases.Boa;

            if (!Enum.TryParse(valueAccessInfo.DatabaseName, true, out database))
            {
                return("Hata: DatabaseName is not recognized." + valueAccessInfo.DatabaseName);
            }

            DataTable sqlToDataTable()
            {
                var boaContext = new BOAContext(environmentInfo, Console.Write);

                var command = boaContext.Context.DBLayer.GetDBCommand(database, sqlOperationOutput.SQL, new SqlParameter[0], CommandType.Text);

                foreach (var item in sqlOperationOutput.SqlParameters)
                {
                    boaContext.Context.DBLayer.AddInParameter(command, item.Name, item.SqlDbType, item.Value);
                }

                var reader = command.ExecuteReader();
                var dt     = new DataTable();

                dt.Load(reader);
                reader.Close();

                boaContext.Dispose();

                return(dt);
            }

            var dataTable = sqlToDataTable();

            if (dataTable.Columns.Count == 1)
            {
                var list = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(dataTable.Columns[0].DataType));

                foreach (DataRow row in dataTable.Rows)
                {
                    list.Add(row[0]);
                }

                if (list.Count == 1)
                {
                    return(list[0]);
                }

                return(list);
            }

            return(dataTable);
        }
Пример #3
0
 public static bool IsSuccess(InvokeOutput invokeOutput)
 {
     return(invokeOutput.Error == null);
 }