Beispiel #1
0
        private void CalcButtonClick(object sender, EventArgs e)
        {
            if (!CheckFormula())
            {
                resultLabel.Text = "Ошибка в формуле";
                return;
            }
            var resolver = new ExpressionResolver(Formula.ToLower());
            var values   = new Dictionary <string, double>();

            foreach (var row in argumentsFastGrid.rows)
            {
                var arg = (FormulaArgument)row.ValueObject;
                values.Add(arg.Name.ToLower(), (double)arg.Value);
            }
            double result;
            var    resultFlag = resolver.Calculate(values, out result);

            if (!resultFlag)
            {
                resultLabel.Text = "Ошибка в расчете по формуле";
                return;
            }
            resultLabel.Text = result == 0 ? "Нет входа в рынок" : "Вход в рынок";
        }
        private void createLiveDataCacheAndDependencies()
        {
            // The idea is that:
            // 1. Already cached MR that became closed remotely will not be removed from the cache
            // 2. Open MR that are missing in the cache, will be added to the cache
            // 3. Open MR that exist in the cache, will be updated
            // 4. Non-cached MR that are closed remotely, will not be added to the cache even if directly requested by IId
            bool updateOnlyOpened = true;

            DataCacheContext dataCacheContext = new DataCacheContext(this, _mergeRequestFilter, _keywords,
                                                                     Program.Settings.UpdateManagerExtendedLogging, "Live",
                                                                     new DataCacheCallbacks(onForbiddenProject, onNotFoundProject),
                                                                     new DataCacheUpdateRules(Program.Settings.AutoUpdatePeriodMs, Program.Settings.AutoUpdatePeriodMs,
                                                                                              updateOnlyOpened), true, true);

            _liveDataCache = new DataCache(dataCacheContext);
            getListView(EDataCacheType.Live).SetDataCache(_liveDataCache);
            getListView(EDataCacheType.Live).SetFilter(_mergeRequestFilter);

            DataCache dataCache = getDataCache(EDataCacheType.Live);

            _expressionResolver = new ExpressionResolver(dataCache);
            selectColorScheme(); // requires ExpressionResolver

            _eventFilter  = new EventFilter(Program.Settings, dataCache, _mergeRequestFilter);
            _userNotifier = new UserNotifier(dataCache, _eventFilter, _trayIcon);
        }
Beispiel #3
0
 public override void SetUp()
 {
     base.SetUp();
     _unresolvedLambda   = ExpressionHelper.CreateLambdaExpression <int, bool> (i => i > 5);
     _currentNode        = new TestMethodCallExpressionNode(CreateParseInfo(), null);
     _expressionResolver = new ExpressionResolver(_currentNode);
 }
Beispiel #4
0
        protected override object GetValue(LogPacket p)
        {
            DataNode node = p.Frame.Root.SelectSingleNode(SelectionPath);

            if (node == null)
            {
                node = new StringDataValue("", "");
            }

            if (FormatExpression.IsValid)
            {
                ExpressionResolver          _resolver = new ExpressionResolver(typeof(LogPacket));
                Dictionary <string, object> extras    = new Dictionary <string, object>();
                extras["value"] = node;

                try
                {
                    return(_resolver.Resolve(p, _formatExpression, extras) ?? String.Empty);
                }
                catch (Exception)
                {
                    return(String.Empty);
                }
            }
            else
            {
                return(RawValue ? node.Value : node);
            }
        }
Beispiel #5
0
        /// <summary>
        /// Initializes resolvers.
        /// </summary>
        static ModelResolvers()
        {
            Mock <ExpressionResolver> exprResolverMock = new Mock <ExpressionResolver>();

            exprResolverMock.Setup(o => o(null)).Returns(() => { return(new Expression()); });
            exprResolverMock.Setup(o => o(It.IsNotNull <IExpression>())).Returns((IExpression parentExpr) => { return(new Expression(parentExpr)); });

            Mock <RuleExpressionResolver> ruleExprResolverMock = new Mock <RuleExpressionResolver>();

            ruleExprResolverMock.Setup(o => o(It.IsNotNull <IExpression>(), It.IsAny <IRuleset>(), It.IsAny <string>(), It.IsAny <int?>()))
            .Returns((IExpression expression, IRuleset containingRuleset, string errorCode, int?errorLevel) => { return(new RuleExpression(expression, containingRuleset, errorCode, errorLevel)); });

            Mock <JoinExpressionResolver> joinExprResolverMock = new Mock <JoinExpressionResolver>();

            joinExprResolverMock.Setup(o => o(It.IsNotNull <IExpression>())).Returns((IExpression expression) => { return(new JoinExpression(expression)); });

            Mock <DataStructureResolver> dsResolverMock = new Mock <DataStructureResolver>();

            dsResolverMock.Setup(o => o(null, null, null)).Returns(() => { return(new DataStructure()); });
            dsResolverMock.Setup(o => o(It.IsNotNull <string>(), It.IsNotNull <ComponentType?>(), It.IsNotNull <BasicDataType?>()))
            .Returns((string compName, ComponentType? compType, BasicDataType? dataType) => { return(new DataStructure(compName, (ComponentType)compType, (BasicDataType)dataType)); });

            Mock <TransformationSchemaResolver> schemaResolverMock = new Mock <TransformationSchemaResolver>();

            schemaResolverMock.Setup(o => o()).Returns(() => { return(new TransformationSchema()); });

            ModelResolvers.ExprResolver     = exprResolverMock.Object;
            ModelResolvers.RuleExprResolver = ruleExprResolverMock.Object;
            ModelResolvers.JoinExprResolver = joinExprResolverMock.Object;
            ModelResolvers.DsResolver       = dsResolverMock.Object;
            ModelResolvers.SchemaResolver   = schemaResolverMock.Object;
            ModelResolvers.OperatorResolver = ModelResolvers.InitOperatorResolver();
        }
Beispiel #6
0
        public static ExpressionResolver CheckFunction(string formula, out string error)
        {
            error = string.Empty;

            ExpressionResolver resolver;

            try
            {
                resolver = new ExpressionResolver(formula);
            }
            catch (Exception ex)
            {
                error = Resource.ErrorMessageInFunction + " '" + formula + "': " + ex.Message;
                return(null);
            }

            var resolverVars = resolver.GetVariableNames();

            if (resolverVars.Any(v => !formulaProperties.ContainsKey(v)))
            {
                error = Resource.ErrorMessageUnknownVariables + ": " +
                        string.Join(", ", resolverVars.Where(v => !formulaProperties.ContainsKey(v)));
                return(null);
            }

            return(resolver);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionFactory"/> class.
 /// </summary>
 /// <param name="exprResolver">The expression resolver.</param>
 /// <param name="ruleExprResolver">The rule expression resolver.</param>
 /// <param name="joinExprResolver">The join expression resolver.</param>
 /// <param name="opResolver">The operator resolver.</param>
 public ExpressionFactory(ExpressionResolver exprResolver, RuleExpressionResolver ruleExprResolver, JoinExpressionResolver joinExprResolver, OperatorResolver opResolver)
 {
     this.ExprResolver     = exprResolver;
     this.RuleExprResolver = ruleExprResolver;
     this.OperatorResolver = opResolver;
     this.JoinExprResolver = joinExprResolver;
 }
        private void CheckFormulaParams()
        {
            formulaParams = resolver.GetVariableNames();
            var errorPtrs = new List <string>();
            var tickers   = DalSpot.Instance.GetTickerNames();

            foreach (var ptr in formulaParams)
            {
                if (ExpressionResolverLiveParams.CheckParamName(ptr))
                {
                    continue;
                }
                if (tickers.Any(t => t.Equals(ptr, StringComparison.OrdinalIgnoreCase)))
                {
                    continue;
                }
                errorPtrs.Add(ptr);
            }

            if (errorPtrs.Count == 0)
            {
                return;
            }
            FormulaError  = "Некорректные параметры: " + string.Join(", ", errorPtrs);
            formulaParams = null;
            resolver      = null;
        }
Beispiel #9
0
        public override void Initialize(RobotContext context, CurrentProtectedContext protectedContext)
        {
            var    cfgFileName = Assembly.GetAssembly(GetType()).Location + ".xml";
            string error;

            newsSettings = NewsSettings.LoadNewsSettings(cfgFileName, out error);
            if (error != null)
            {
                pendingLogMessages.Add(error);
            }
            currencySettings = CurrencySettings.LoadCurrencySettings(cfgFileName, out error);
            if (error != null)
            {
                pendingLogMessages.Add(error);
            }
            if (string.IsNullOrEmpty(Formula))
            {
                pendingLogMessages.Add("формула не задана");
            }
            try
            {
                expressionResolver = new ExpressionResolver(Formula.ToLower());
            }
            catch (Exception)
            {
                pendingLogMessages.Add("ошибка в формуле");
            }
            base.Initialize(context, protectedContext);
        }
Beispiel #10
0
 public QueryBuilder(QueryBody queryBody, ISqlAdapter sqlAdapter, IDbContext dbContext)
 {
     _queryBody  = queryBody;
     _sqlAdapter = sqlAdapter;
     _dbContext  = dbContext;
     _resolver   = new ExpressionResolver(sqlAdapter, queryBody);
 }
Beispiel #11
0
        public static double Calculate(ExpressionResolver resolver, PerformerStat stat)
        {
            var ptrVal = new Dictionary <string, double>();

            try
            {
                foreach (var varName in resolver.GetVariableNames())
                {
                    var    val  = PerformerCriteriaFunctionCollection.Instance.propertyByVariable[varName].GetValue(stat, null);
                    double dVal = val is float
                                  ?(float)val
                                  : val is double
                                  ?(double)val
                                  : val is int?(int)val : val is decimal ? (float)(decimal)val : 0;
                    ptrVal.Add(varName, dVal);
                }
                double rst;
                resolver.Calculate(ptrVal, out rst);
                return(rst);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка в Calculate(" + stat.Account + ")", ex);
                return(0);
            }
        }
        public void SelectExpressionReturnsItems()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var select = new WhereExpression(
                new CompareToken("ReferenceCode", CompareEnum.Like, first.ReferenceCode),
                new CompareToken("Location.X", CompareEnum.Equals, first.Location.X),
                new CompareToken("Name", CompareEnum.Like, first.Name.Substring(1, first.Name.Length - 2)));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();

                    var results = eval.ExecuteSelect(select);

                    Assert.AreEqual(1, results.Count);

                    MockClassC.Validate(results[0].ToObject<MockClassC>(), objs.FirstOrDefault() as MockClassC);
                }
            }
        }
        public void SelectExpressionReturnsFirstItems()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var max = objs.Cast<MockClassC>().Max(o => o.Location.X);
            var min = objs.Cast<MockClassC>().Min(o => o.Location.X);

            var first = objs.FirstOrDefault() as MockClassC;

            var select = new WhereExpression(10, true, new CompareToken("Location.X", CompareEnum.Greater, max - min));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();

                    var results = eval.ExecuteSelect(select);

                    Assert.LessOrEqual(results.Count, 10);

                    foreach (var result in results)
                        MockClassC.Validate(result.ToObject<MockClassC>(), objs.FirstOrDefault(o => o.Id == result.Value<int>("Id")) as MockClassC);
                }
            }
        }
        public void SetExpression(string expression)
        {
            expressionLabel.Text = expression;
            RebindData();
            SelectedFunction.Function = expression;
            if (!SelectedFunction.IsExpressionParsed)
            {
                return;
            }
            var errors = "";

            foreach (var filter in SelectedFunction.Filters)
            {
                var filterObject = filterObjects.FirstOrDefault(o => o.Name == filter.a.ExpressionParamName);
                if (filterObject == null)
                {
                    errors += filter.a.ExpressionParamName + ExpressionResolver.GetOperatorString(filter.b) +
                              filter.c + "\n";
                    continue;
                }
                filterObject.Selected = true;
                filterObject.Operator = filter.b;
                filterObject.Value    = filter.c;
            }
            if (!string.IsNullOrEmpty(errors))
            {
                MessageBox.Show(this, "Невозможно отобразить следующие критерии:\n" + errors, "Предупреждение",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            fastGrid.DataBind(filterObjects);
        }
Beispiel #15
0
        private void BtnCheckExistingClick(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbTickerFormula.Text)) return;
            // проверить наличие нужных тикеров в файловой БД
            // разобрать формулу
            ExpressionResolver resv;
            try
            {
                resv = new ExpressionResolver(tbTickerFormula.Text);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка разбора выражения", ex);
                MessageBox.Show(string.Format("Ошибка разбора выражения ({0})", ex.Message));
                return;
            }

            var names = resv.GetVariableNames();
            // проверить доступность - каждое имя должно быть тикером
            var allNames = DalSpot.Instance.GetCurrencyNames();
            var errorsStr = new StringBuilder();
            foreach (var name in names)
            {
                var tickerName = name;
                if (!allNames.Any(n => n.Equals(tickerName, StringComparison.OrdinalIgnoreCase)))
                    errorsStr.AppendLine(string.Format("Тикер \"{0}\" не найден", name));
            }
            if (errorsStr.Length > 0)
            {
                MessageBox.Show(errorsStr.ToString());
                return;
            }

            // наличие истории по тикерам
            tbExistingTickers.Text = string.Empty;
            var sbExist = new StringBuilder();
            foreach (var name in names)
            {
                var tickerName = name;
                var fileInfo = quoteFiles.FirstOrDefault(f => f.TickerName.Equals(tickerName,
                    StringComparison.OrdinalIgnoreCase));
                DateTime? start = null, end = null;
                if (fileInfo != null)
                {
                    start = fileInfo.StartDate;
                    end = fileInfo.EndDate;
                }
                var isInsufficient = !start.HasValue
                                         ? true
                                         : start.Value > dpStart.Value;
                if (!isInsufficient)
                    isInsufficient = (dpEnd.Value - end.Value).TotalMinutes > 30;
                sbExist.AppendLine(string.Format("{0}{1} - {2} - {3}",
                                                 isInsufficient ? "[!]" : "", name,
                                                 start.HasValue ? start.Value.ToString("dd.MM.yyyy") : "...",
                                                 end.HasValue ? end.Value.ToString("dd.MM.yyyy HH:mm") : "..."));
            }
            tbExistingTickers.Text = sbExist.ToString();
        }
        public void C14ConstantIdentifierWithNameOfExpression()
        {
            var testNode = GetNodeFromSource(24);
            var result   = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
        public void C18LiteralStringFormatWithTwoIdentifiers()
        {
            var testNode = GetNodeFromSource(28);
            var result   = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
        public void C08InterpolationWithLeftIdentifierAndRightLiteral()
        {
            var testNode = GetNodeFromSource(18);
            var result   = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
Beispiel #19
0
 public void TestObjectArrayToConstNullCompare()
 {
     MEFUtilities.Compose(new TypeHandlerCache());
     Expression <Func <SourceType2, bool> > lambaExpr = (s) => s.jets[0] == null;
     GeneratedCode gc     = new GeneratedCode();
     CodeContext   cc     = new CodeContext();
     var           result = ExpressionResolver.Resolve(lambaExpr.Body, gc, cc, MEFUtilities.MEFContainer);
 }
 public StringFormatResolver(InvocationExpressionSyntax expressionSyntax, ExpressionResolver expressionResolverInstance, Document document, IEnumerable <SyntaxNode> nodes, SemanticModel semanticModel)
 {
     _expressionSyntax           = expressionSyntax;
     _expressionResolverInstance = expressionResolverInstance;
     _document      = document;
     _nodes         = nodes;
     _semanticModel = semanticModel;
 }
        public void C06AddExpressionThatContainsStringIdentifiers()
        {
            var testNode = GetNodeFromSource(16);
            var result   = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
        public void C04AddExpressionWithMultipleAddExpressionsNested()
        {
            var testNode = GetNodeFromSource(14);
            var result   = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
Beispiel #23
0
        internal void QueryByPrimaryKey(Expression <Func <TEntity, bool> > expression)
        {
            expression.ThrowIfNull(nameof(expression));

            var expressionTree = ExpressionResolver.Resolve((dynamic)expression.Body, EntityIdName);

            Build(expressionTree);
        }
        public void C10InterpolationWithOnlyLiterals()
        {
            var testNode = GetNodeFromSource(20);
            var result   = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
Beispiel #25
0
        private void createLiveDataCacheAndDependencies()
        {
            DataCacheContext dataCacheContext = new DataCacheContext(this, _mergeRequestFilter, _keywords);

            _liveDataCache      = new DataCache(dataCacheContext, _modificationNotifier);
            _expressionResolver = new ExpressionResolver(_liveDataCache);
            _eventFilter        = new EventFilter(Program.Settings, _liveDataCache, _mergeRequestFilter);
            _userNotifier       = new UserNotifier(_liveDataCache, _eventFilter, _trayIcon);
        }
 public KnownMethodResolverFactory(InvocationExpressionSyntax analyzedInvocationExpression, ExpressionSyntax nextInvocationExpression, ExpressionResolver expressionResolverInstance, Document document, IEnumerable <SyntaxNode> nodes, SemanticModel semanticModel)
 {
     _nextInvocationExpression   = nextInvocationExpression;
     _analyzedInvocation         = analyzedInvocationExpression;
     _expressionResolverInstance = expressionResolverInstance;
     _document      = document;
     _nodes         = nodes;
     _semanticModel = semanticModel;
 }
 public StringReplaceResolver(InvocationExpressionSyntax analyzedInvocation, MemberAccessExpressionSyntax nextExpressionSyntax, ExpressionResolver expressionResolverInstance, Document document, IEnumerable <SyntaxNode> nodes, SemanticModel semanticModel)
 {
     _analyzedInvocation         = analyzedInvocation;
     _nextExpressionSyntax       = nextExpressionSyntax;
     _expressionResolverInstance = expressionResolverInstance;
     _document      = document;
     _nodes         = nodes;
     _semanticModel = semanticModel;
 }
Beispiel #28
0
        internal void ResolveQuery(Expression <Func <TEntity, bool> > expression)
        {
            expression.ThrowIfNull(nameof(expression));

            var expressionTree = ExpressionResolver.Resolve((dynamic)expression.Body);

            And();
            Build(expressionTree);
        }
Beispiel #29
0
 /// <summary>
 /// 初始化实体文本框
 /// </summary>
 /// <param name="expression">属性表达式</param>
 /// <param name="helper">HtmlHelper</param>
 public EntityTextBox(Expression <Func <TEntity, TProperty> > expression, HtmlHelper <TEntity> helper)
 {
     if (helper != null)
     {
         _value = helper.Value(expression);
     }
     _expression = expression;
     Init();
     ExpressionResolver <ITextBox, TEntity, TProperty> .Resolve(this, expression);
 }
        public void C31StringReplaceWithTwoVariables()
        {
            var testNode = GetNodeFromSource(41);

            Trace.WriteLine(testNode.GetText());
            var result = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
        /// <summary>
        /// 解析属性表达式
        /// </summary>
        private void ResolveExpression()
        {
            if (_config.Contains(UiConst.For) == false)
            {
                return;
            }
            var expression = _config.GetValue <ModelExpression>(UiConst.For);

            ExpressionResolver.Init(expression, _config);
        }
        public void C28PrivateIndentifierWithGetterOutsideMethodNonDirectReturn()
        {
            var testNode = GetNodeFromSource(38);

            Trace.WriteLine(testNode.GetText());
            var result = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
        public void C23PublicIndentifierWithLambdaOutsideMethod()
        {
            var testNode = GetNodeFromSource(33);

            Trace.WriteLine(testNode.GetText());
            var result = new ExpressionResolver().GetStringValueOfExpression(_document, testNode.Expression, _documentNodes, _semanticModel);

            Assert.NotEqual("", result.TextResult);
            Assert.Equal("unittest", result.TextResult);
        }
        public void UpdateFromQuery()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            objs.OfType<MockClassC>().ToList().ForEach(o => o.ReferenceCode = null);

            var first = objs.FirstOrDefault() as MockClassC;
            var refCode =  "R " + new Random().Next();

            var select = new ScalarSelectExpression(
                new string[] { "Location.Y" },
                new CompareToken("Id", CompareEnum.Equals, 1),
                new CompareToken("Location.X", CompareEnum.Equals, first.Location.X),
                new CompareToken("Name", CompareEnum.Like, first.Name.Substring(1, first.Name.Length - 2)));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();
                }

                using (var t = db.BeginTransaction())
                {
                    var count = eval.ExecuteUpdate(
                        new UpdateExpression(
                            typeof(MockClassC).AssemblyQualifiedName,
                            select,
                            new UpdateToken("Location.Y", 133.33, ValueEnum.Float),
                            new UpdateToken("Location.Z", 222.11, ValueEnum.Float),
                            new UpdateToken("ReferenceCode", refCode)));

                    Assert.AreEqual(1, count);

                    t.Commit();

                    var results = eval.ExecuteScaler(select);

                    Assert.AreEqual(1, results.Count);

                    Assert.AreEqual(133.33f, ((MockClassC)db.Fetch(1)).Location.Y);
                    Assert.AreEqual(222.11f, ((MockClassC)db.Fetch(1)).Location.Z);
                    Assert.AreEqual(refCode, ((MockClassC)db.Fetch(1)).ReferenceCode);
                }
            }
        }
        public void DeletesFromQuery()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var delete = new DeleteExpression(
                new CompareToken("ReferenceCode", CompareEnum.Like, first.ReferenceCode.Substring(1, first.ReferenceCode.Length - 2)),
                new CompareToken("ReferenceCode", CompareEnum.Equals, first.ReferenceCode),
                new CompareToken("ReferenceCode", CompareEnum.NotEquals, first.Name),
                new CompareToken("ReferenceCode", CompareEnum.NotEquals, null),
                new CompareToken("Name", CompareEnum.Greater, "Z" + first.Name),
                new CompareToken("Name", CompareEnum.GreaterOrEqual, first.Name),
                new CompareToken("Name", CompareEnum.Lesser, "A" + first.Name.Substring(1, first.Name.Length - 1)),
                new CompareToken("Name", CompareEnum.LesserOrEqual, "A" + first.Name));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();
                }

                using (var t = db.BeginTransaction())
                {
                    var results = eval.ExecuteDelete(delete);

                    Assert.AreEqual(1, results);

                    t.Commit();

                    Assert.IsNull(db.Fetch(first.Id));
                }

                Assert.IsNull(db.Fetch(first.Id));
            }
        }
        public void ScalerFirstFromQuery()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var select = new ScalarSelectExpression(10, true,
                new string[] { "Location.Y" },
                new CompareToken("Name", CompareEnum.Greater, "Z" + first.Name));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();

                    var results = eval.ExecuteScaler(select);

                    Assert.LessOrEqual(10, results.Count);
                }
            }

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                var results2 = eval.ExecuteScaler(select);

                Assert.LessOrEqual(10, results2.Count);
            }
        }
        public void SelectExpressionEvaluatesBytes()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var select = new WhereExpression(
                1,
                true,
                new CompareToken("Id", CompareEnum.Equals, (byte)1),
                new CompareToken("Id", CompareEnum.NotEquals, (byte)(1 + 3)),
                new CompareToken("Id", CompareEnum.NotEquals, null),
                new CompareToken("Id", CompareEnum.Greater, (byte)(1 + 3)),
                new CompareToken("Id", CompareEnum.GreaterOrEqual, (byte)1),
                new CompareToken("Id", CompareEnum.Lesser, (byte)0),
                new CompareToken("Id", CompareEnum.LesserOrEqual, (byte)1));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();

                    var results = eval.ExecuteSelect(select);

                    Assert.AreEqual(1, results.Count);

                    MockClassC.Validate(results[0].ToObject<MockClassC>(), objs.FirstOrDefault() as MockClassC);
                }
            }
        }
        private int EvaluateExpression(string source, LabelStore labelStore)
        {
            var resolver = new ExpressionResolver(labelStore);
            var parser = new Parser(resolver);

            bool success = parser.ParseExpression(source);
            if (!success)
            {
                Assert.Inconclusive("Cannot parse expression " + source);
            }

            return resolver.Evaluate();
        }
        public void SimpleScalerFromQuery()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var select = new ScalarSelectExpression(
               new string[] { "Location.Y" },
                new CompareToken("Id", CompareEnum.Equals, 1),
                new CompareToken("ReferenceCode", CompareEnum.Like, first.ReferenceCode),
                new CompareToken("Location.X", CompareEnum.Equals, first.Location.X),
                new CompareToken("Name", CompareEnum.Like, first.Name.Substring(1, first.Name.Length - 2)));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();

                    var results = eval.ExecuteScaler(select);

                    Assert.AreEqual(1, results.Count);

                    Assert.AreEqual(first.Location.Y, Convert.ToSingle(results[0].Value<float>("Location.Y")));
                }

            }

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                var results2 = eval.ExecuteScaler(select);

                Assert.AreEqual(1, results2.Count);

                Assert.AreEqual(first.Location.Y, Convert.ToSingle(results2[0].Value<float>("Location.Y")));
            }
        }
        public void DeletesLast10FromQuery()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var delete = new DeleteExpression(10, false,
                new CompareToken("Name", CompareEnum.Greater, "Z" + first.Name));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();
                }

                using (var t = db.BeginTransaction())
                {
                    var results = eval.ExecuteDelete(delete);

                    Assert.GreaterOrEqual(10, results);

                    t.Commit();

                    if (results < 10)
                        Assert.IsNull(db.Fetch(first.Id));
                }
            }
        }
        public void SelectExpressionEvaluatesUNInts()
        {
            _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString();
            Cleanup();

            var objs = TestResourceFactory.GetMockClassAObjects(100).ToList();
            var first = objs.FirstOrDefault() as MockClassC;

            var select = new WhereExpression(
                new CompareToken("Unsigned32", CompareEnum.Equals, new uint?(first.Unsigned32)),
                new CompareToken("Unsigned32", CompareEnum.NotEquals, new uint?(first.Unsigned32 + 3)),
                new CompareToken("Unsigned32", CompareEnum.Equals, new uint?()),
                new CompareToken("Unsigned32", CompareEnum.Greater, new uint?(first.Unsigned32 + 3)),
                new CompareToken("Unsigned32", CompareEnum.GreaterOrEqual, new uint?(first.Unsigned32)),
                new CompareToken("Unsigned32", CompareEnum.Lesser, new uint?(first.Unsigned32 - 1)),
                new CompareToken("Unsigned32", CompareEnum.LesserOrEqual, new uint?(first.Unsigned32)));

            using (var db = new Database<int, MockClassA>(_testName + ".database", "Id"))
            {
                var eval = new ExpressionResolver<int, MockClassA>(db);

                db.Load();

                using (var t = db.BeginTransaction())
                {
                    objs.ToList().ForEach(o => o.Id = db.Add(o));

                    t.Commit();

                    var results = eval.ExecuteSelect(select);

                    Assert.AreEqual(0, results.Count);
                }
            }
        }
Beispiel #42
0
        private void BtnMakeIndexClick(object sender, EventArgs e)
        {
            ExpressionResolver resv;
            try
            {
                resv = new ExpressionResolver(tbTickerFormula.Text);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка разбора выражения", ex);
                MessageBox.Show(string.Format("Ошибка разбора выражения ({0})", ex.Message));
                return;
            }

            if (saveFileDialog.ShowDialog() != DialogResult.OK) return;
            var fileName = saveFileDialog.FileName;

            var names = resv.GetVariableNames();
            var curs = new BacktestTickerCursor();
            try
            {
                curs.SetupCursor(quoteFolder, names, dpStart.Value);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка установки курсора", ex);
                return;
            }

            StreamWriter sw;
            try
            {
                sw = new StreamWriter(fileName);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка открытия файла на запись", ex);
                curs.Close();
                MessageBox.Show("Ошибка открытия файла на запись");
                return;
            }
            var saver = new QuoteSaver(tbTicker.Text);

            try
            {
                while (true)
                {
                    // посчитать индекс
                    var quotes = curs.GetCurrentQuotes();
                    if (quotes.Count == 0) continue;
                    var date = quotes.Max(q => q.b.time);

                    var quoteDic = quotes.ToDictionary(q => q.a, q => (double)q.b.bid);
                    double result;
                    resv.Calculate(quoteDic, out result);

                    // занести индекс в файл
                    saver.SaveQuote(sw, (float)result, (float)result, date);

                    if (!curs.MoveNext()) break;
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка формирования индекса", ex);
            }
            finally
            {
                curs.Close();
                sw.Close();
            }

            MessageBox.Show("Формирование индекса завершено");
            openFileDialog.FileName = saveFileDialog.FileName;
        }