private IConvertible DoStatus(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index, int args_count) { if (args_count != 1) { throw new Exception("Функция СтатусЗначенияНедостоверные должна иметь один входящий аргумент"); } var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>(); if (firstOrDefault == null) { throw new Exception("Должен быть передан хотя бы один аргумент"); } if (firstOrDefault != null && firstOrDefault.Flag == null) { throw new Exception("Нет статуса у значения"); } if ((firstOrDefault.Flag.Value & VALUES_FLAG_DB.AllAlarmStatuses) != 0) { return(1); } return(0); }
private IConvertible DoStatus(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index, int args_count) { if (args_count != 2) { throw new Exception("Функция СтатусЗначенияСодержитКод должна иметь два входящих аргумента"); } var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>(); if (firstOrDefault == null) { throw new Exception("Должен быть передан хотя бы один аргумент"); } if (firstOrDefault != null && firstOrDefault.Flag == null) { throw new Exception("Нет статуса у значения"); } var last = args.OfType <IFunctionArgumnet>().LastOrDefault <IFunctionArgumnet>(); if (last != null) { var code = (ulong)last.ArgumentValue; if ((firstOrDefault.Flag.Value & (VALUES_FLAG_DB)code) != 0) { return(1); } return(0); } throw new Exception("Неверный код статуса для проверки в значении"); // return firstOrDefault.Flag.Value; }
private IConvertible DoCSharp(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index, int args_count) { var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>(); if (firstOrDefault == null) { throw new Exception("Должен быть передан хотя бы один аргумент"); } if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String) { throw new Exception("Первым аргументом должен быть С# код"); } throw new NotImplementedException("Работа с C# выражениями на текущий момент отключена"); //var res = Proryv.Servers.Calculation.Parser.ProryvParsersFactory.ParseTextToString( // "{" + firstOrDefault.ArgumentValue.ToString() + "}", null); //return res; }
private IConvertible DoIf(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index, int args_count) { // 0 аргумент - первое число для сравнения // 1 аргумент - второе число для сравнения // 2 аргумент - точность сравнения (число знаков после запятой, если -1, то как есть, без округления) // 3 аргумент - оператор сравнения (1 это >, 2 это <, 3 это >=, 4 это <=, 5 это ==, 6 это !=) // 4 аргумент - результат, если условие выполнено // 5 аргумент - результат, если условие ложно var points = (int)args[arg_index + 2].ArgumentValue; if (points >= 0) { return(CompareWithRound(args.OfType <IFunctionArgumnet <double> >().Select(i => i.Value).ToArray(), arg_index, args_count, points)); } return(CompareExact(args[arg_index].ArgumentValue, args[arg_index + 1].ArgumentValue, (EOperatorType)args[arg_index + 3].ArgumentValue, args[arg_index + 4].ArgumentValue, args[arg_index + 5].ArgumentValue)); }
private IConvertible DoUDF(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index, int args_count) { var currdate = args.StartDateTime.AddMinutes(30 * args.HalfHourIndex); var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>(); if (firstOrDefault == null) { throw new Exception("Должен быть передан хотя бы один аргумент"); } if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String) { throw new Exception("Первым аргументом должен быть формат выводимого значения"); } //Вернуть время в формате Unix if (firstOrDefault.ArgumentValue == "u") { return((Int32)(currdate.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds); } var res = currdate.ToString(firstOrDefault.ArgumentValue); return(res); }
private IConvertible DoSql(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index, int args_count) { Debug.WriteLine(args.StartDateTime); Debug.WriteLine(args.EndDateTime); Debug.WriteLine(args.HalfHourIndex); var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>(); if (firstOrDefault == null) { throw new Exception("Должен быть передан хотя бы один аргумент"); } if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String) { throw new Exception("Первым аргументом должен быть SQL скрипт"); } using (var dbCon = _dbInterfaceAdapter.GetSqlConnection()) { var t = args.OfType <IFunctionArgumnet>().Skip(1).Select(h => h.ArgumentValue); var SQL = string.Format(firstOrDefault.ArgumentValue.ToString(), t.ToArray()); DbCommand cmd1 = new SqlCommand(); dbCon.Open(); cmd1.Connection = dbCon; cmd1.CommandText = SQL; var result = cmd1.ExecuteScalar(); return(result as IConvertible); } // Execution_Id++; // var firstOrDefault = args.OfType<IFunctionArgumnet>().FirstOrDefault<IFunctionArgumnet>(); // if (firstOrDefault == null) // { // throw new Exception("Должен быть передан хотя бы один аргумент"); // } // if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String) // { // throw new Exception("Первым аргументом должен быть SQL скрипт"); // } // var t = args.OfType<IFunctionArgumnet>().Skip(1).Select(h => h.ArgumentValue); // var SQLText = string.Format(firstOrDefault.ArgumentValue.ToString(), t.ToArray()); // var SQLcommand = string.Format(@"declare @out table //( //out float //) //insert into @out //exec(@sql) //INSERT INTO {0} VALUES(@execution_id,@sql,(select * from @out))", _tempTablePrefix); // using (var cmd = new SqlCommand(SQLcommand)) // { // Debug.WriteLine("Execute "); // cmd.Connection = _connection; // cmd.Parameters.Add("@execution_id", Execution_Id); // cmd.Parameters.Add("@sql", SQLText); // cmd.ExecuteNonQuery(); // Debug.WriteLine("Execute formula SQL"); // return new SqlTemporatyTableResult(_tempTablePrefix, _connection, Execution_Id, ref temporaryResulTable); // } //using (DbCommand cmd1 = new SqlCommand(_connection)) //{ // cmd1.Connection.Open(); // var result = cmd1.ExecuteScalar(); // return result as IConvertible; //} }