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); }
public override void SetUp() { base.SetUp(); _unresolvedLambda = ExpressionHelper.CreateLambdaExpression <int, bool> (i => i > 5); _currentNode = new TestMethodCallExpressionNode(CreateParseInfo(), null); _expressionResolver = new ExpressionResolver(_currentNode); }
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); } }
/// <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(); }
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; }
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); }
public QueryBuilder(QueryBody queryBody, ISqlAdapter sqlAdapter, IDbContext dbContext) { _queryBody = queryBody; _sqlAdapter = sqlAdapter; _dbContext = dbContext; _resolver = new ExpressionResolver(sqlAdapter, queryBody); }
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); }
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); }
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); }
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); }
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; }
internal void ResolveQuery(Expression <Func <TEntity, bool> > expression) { expression.ThrowIfNull(nameof(expression)); var expressionTree = ExpressionResolver.Resolve((dynamic)expression.Body); And(); Build(expressionTree); }
/// <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); } } }
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; }