public void TestSqlInjectionProtection() { string suspectQuery = "RNAME = '{0}'"; var tests = new[] { new { sql = "a'; DROP TABLE Parcels; SELECT * FROM Parcels WHERE '1' = '1", testTokens = new string[] { "DROP", ";" } }, new { sql = "b'; DELETE FROM Parcels; SELECT * FROM Parcels WHERE '1' = '1", testTokens = new string[] { "DELETE", ";" } }, new { sql = "c'; UPDATE Parcels SET RNAME = ''; SELECT * FROM Parcels WHERE '1' = '1", testTokens = new string[] { "UPDATE", "SET", ";" } } }; int testNo = 1; foreach (var t in tests) { try { string origFilter = string.Format(suspectQuery, t.sql); FdoFilter filter = FdoFilter.Parse(origFilter); string filterStr = filter.ToString(); Console.WriteLine("Test {0}: Drop table attempt\n Original: {1}\n Parsed: {2}", testNo, origFilter, filterStr); Assert.False(t.testTokens.Any(tok => filterStr.ToUpper().Contains(tok.ToUpper()))); } catch (ManagedFdoException ex) { Console.WriteLine("Test {0}: Drop table attempt - {1}", testNo, ex.Message); } testNo++; } }
private void btnValidate_Click(object sender, EventArgs e) { try { if (_mode == ExpressionEditorMode.Filter) { FdoFilter filter = FdoFilter.Parse(ExpressionText.Text); _validator.ValidateFilter(filter, _cls, _caps); MessageBox.Show(Strings.FilterIsValid); } else //Expression { FdoExpression expr = FdoExpression.Parse(ExpressionText.Text); _validator.ValidateExpression(expr, _cls, _caps); MessageBox.Show(Strings.ExprIsValid); } } catch (FdoExpressionValidationException ex) { new ExpressionParseErrorDialog(ex, this).ShowDialog(); } catch (FdoMalformedExpressionException ex) { new MalformedExpressionDialog(ex, this).ShowDialog(); } }
private void viewParsedExpressionFilterToolStripMenuItem_Click(object sender, EventArgs e) { try { if (_mode == ExpressionEditorMode.Filter) { FdoFilter filter = FdoFilter.Parse(ExpressionText.Text); new ExpressionDisplayDialog(filter).ShowDialog(); } else //Expression { FdoExpression expr = FdoExpression.Parse(ExpressionText.Text); new ExpressionDisplayDialog(expr).ShowDialog(); } } catch (FdoParseException ex) { MessageBox.Show(ex.Message); } }
// parse an FDO Filter that we except to return NULL because of error void ParseFilterToNull(string pwzFilter) { /* * Assert.Throws<ManagedFdoException>(() => * { * FdoFilter filter = FdoFilter.Parse(pwzFilter); * }); */ // get root node of expression parse tree FdoFilter pFilter = null; try { pFilter = FdoFilter.Parse(pwzFilter); } catch (ManagedFdoException) { return; } Assert.Null(pFilter); //, "FdoFilter::Parse() should have returned NULL!"); }
// parse an FDO Filter void ParseFilter <T>(string pwzFilter, string pwzResult = null, Type expectedType = null) where T : FdoFilter { // get root node of expression parse tree FdoFilter pFilter = FdoFilter.Parse(pwzFilter); Assert.NotNull(pFilter); // output back to string if successful string pwzOut = pFilter.ToString(); Assert.NotNull(pwzOut); if (pwzResult == null) { Assert.Equal(pwzOut, pwzFilter); //, "Parse/ToString do not match!\n\t<{0}> should be <{1}>\n", pwzOut, pwzFilter); } else { Assert.Equal(pwzOut, pwzResult); //, "Parse/ToString do not match!\n\t<{0}> should be <{1}>\n", pwzOut, pwzResult); } Assert.IsAssignableFrom <T>(pFilter); }
public async Task WritePointStyleFunctionAsync(StreamWriter sw, IVectorLayerDefinition vl, IPointVectorStyle pointStyle) { await sw.WriteLineAsync(INDENT + "var fillColor;"); await sw.WriteLineAsync(INDENT + "var edgeColor;"); await sw.WriteLineAsync(INDENT + "var edgeThickness;"); await sw.WriteLineAsync(INDENT + "var pointRadius = 10;"); var sb = new StringBuilder(512); var defaultRuleBlock = ""; var themes = new List <(string conditon, string filter, string block)>(); await sw.WriteLineAsync(INDENT + "var pointStyle = OLPointCircle;"); foreach (var rule in pointStyle.Rules) { if (rule.PointSymbolization2D != null) { if (string.IsNullOrEmpty(rule.Filter)) //No filter = default rule effectively { if (string.IsNullOrEmpty(defaultRuleBlock)) { BuildPointRuleAssignment(sb, rule.PointSymbolization2D.Symbol as IMarkSymbol); defaultRuleBlock = sb.ToString(); } } else { //Parse this filter and see if it's translateable var filter = FdoFilter.Parse(rule.Filter); var check = TryTranslateFdoFilter(filter, _featureVarName); BuildPointRuleAssignment(sb, rule.PointSymbolization2D.Symbol as IMarkSymbol); themes.Add((check, rule.Filter, sb.ToString())); } } } //Now write out the theme if (themes.Count > 0) { bool bFirst = true; foreach (var th in themes) { if (bFirst) { await sw.WriteLineAsync(INDENT + $"if ({th.conditon}) {{ // Translated from rule filter: {th.filter}"); await sw.WriteLineAsync(th.block); await sw.WriteLineAsync(INDENT + "}"); } else { await sw.WriteLineAsync(INDENT + $"else if ({th.conditon}) {{ // Translated from rule filter: {th.filter}"); await sw.WriteLineAsync(th.block); await sw.WriteLineAsync(INDENT + "}"); } bFirst = false; } if (!string.IsNullOrEmpty(defaultRuleBlock)) { await sw.WriteLineAsync(INDENT + $"else {{ // Default rule"); await sw.WriteLineAsync(defaultRuleBlock); await sw.WriteLineAsync(INDENT + "}"); } } else { await sw.WriteLineAsync("//Default rule"); await sw.WriteLineAsync(defaultRuleBlock); } await sw.WriteLineAsync(INDENT + "var style = {"); await sw.WriteLineAsync(INDENT + INDENT + "radius: pointRadius,"); await sw.WriteLineAsync(INDENT + INDENT + $"fill: new ol.style.Fill({{ color: fillColor }}),"); await sw.WriteLineAsync(INDENT + INDENT + $"stroke: new ol.style.Stroke({{ color: edgeColor, width: edgeThickness }})"); await sw.WriteLineAsync(INDENT + "}"); await sw.WriteLineAsync(INDENT + "return new ol.style.Style({ image: pointStyle(style) });"); }
public void TestFilterParse() { FdoFilter filter = null; FdoFilter left = null; FdoFilter right = null; filter = FdoFilter.Parse("A = 'B'"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A = 'B')"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("A <> 'B'"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.NotEqualsTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A <> 'B')"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.NotEqualsTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("A > 2.3"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.GreaterThan, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A > 2.3)"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.GreaterThan, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("A >= 2.3"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.GreaterThanOrEqualTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A >= 2.3)"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.GreaterThanOrEqualTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("A < 2.3"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.LessThan, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A < 2.3)"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.LessThan, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("A <= 2.3"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.LessThanOrEqualTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A <= 2.3)"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.LessThanOrEqualTo, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("A LIKE 'B%'"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.Like, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("(A LIKE 'B%')"); Assert.IsAssignableFrom <FdoComparisonCondition>(filter); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)filter).Left); Assert.Equal(ComparisonOperations.Like, ((FdoComparisonCondition)filter).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)filter).Right); filter = FdoFilter.Parse("NOT (A LIKE 'B%')"); Assert.IsAssignableFrom <FdoUnaryLogicalOperator>(filter); var subExpr = ((FdoUnaryLogicalOperator)filter).NegatedFilter; Assert.IsAssignableFrom <FdoComparisonCondition>(subExpr); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)subExpr).Left); Assert.Equal(ComparisonOperations.Like, ((FdoComparisonCondition)subExpr).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)subExpr).Right); filter = FdoFilter.Parse("NAME NULL"); Assert.IsAssignableFrom <FdoNullCondition>(filter); Assert.Equal("NAME", ((FdoNullCondition)filter).Identifier.Name); filter = FdoFilter.Parse("NOT NAME NULL"); Assert.IsAssignableFrom <FdoUnaryLogicalOperator>(filter); subExpr = ((FdoUnaryLogicalOperator)filter).NegatedFilter; Assert.Equal("NAME", ((FdoNullCondition)subExpr).Identifier.Name); filter = FdoFilter.Parse("A = 'B' OR B = 'C'"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.Or, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("A = 'B' AND B = 'C'"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.And, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A = 'B') OR (B = 'C')"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.Or, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A = 'B') AND (B = 'C')"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.And, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.EqualsTo, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A <> 'B') OR (B LIKE 'C%')"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.Or, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.NotEqualsTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.Like, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoStringValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A < 2.2) OR (B > 1.4)"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.Or, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.LessThan, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.GreaterThan, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A < 2.2) AND (B > 1.4)"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.And, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.LessThan, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.GreaterThan, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A <= 2.2) OR (B >= 1.4)"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.Or, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.LessThanOrEqualTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.GreaterThanOrEqualTo, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("(A <= 2.2) AND (B >= 1.4)"); left = ((FdoBinaryLogicalOperator)filter).Left; right = ((FdoBinaryLogicalOperator)filter).Right; Assert.IsAssignableFrom <FdoBinaryLogicalOperator>(filter); Assert.IsAssignableFrom <FdoComparisonCondition>(left); Assert.Equal(BinaryLogicalOperations.And, ((FdoBinaryLogicalOperator)filter).Operator); Assert.IsAssignableFrom <FdoComparisonCondition>(right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)left).Left); Assert.Equal(ComparisonOperations.LessThanOrEqualTo, ((FdoComparisonCondition)left).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)left).Right); Assert.IsAssignableFrom <FdoIdentifier>(((FdoComparisonCondition)right).Left); Assert.Equal(ComparisonOperations.GreaterThanOrEqualTo, ((FdoComparisonCondition)right).Operator); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoComparisonCondition)right).Right); filter = FdoFilter.Parse("A IN ('A', 'B', 'C')"); Assert.IsAssignableFrom <FdoInCondition>(filter); Assert.Equal("A", ((FdoInCondition)filter).Identifier.Name); Assert.Equal(3, ((FdoInCondition)filter).ValueList.Count); Assert.IsAssignableFrom <FdoStringValue>(((FdoInCondition)filter).ValueList[0]); Assert.IsAssignableFrom <FdoStringValue>(((FdoInCondition)filter).ValueList[1]); Assert.IsAssignableFrom <FdoStringValue>(((FdoInCondition)filter).ValueList[2]); filter = FdoFilter.Parse("A IN (1, 2.0, '3', TRUE, FALSE)"); Assert.IsAssignableFrom <FdoInCondition>(filter); Assert.Equal("A", ((FdoInCondition)filter).Identifier.Name); Assert.Equal(5, ((FdoInCondition)filter).ValueList.Count); Assert.IsAssignableFrom <FdoInt32Value>(((FdoInCondition)filter).ValueList[0]); Assert.IsAssignableFrom <FdoDoubleValue>(((FdoInCondition)filter).ValueList[1]); Assert.IsAssignableFrom <FdoStringValue>(((FdoInCondition)filter).ValueList[2]); Assert.IsAssignableFrom <FdoBooleanValue>(((FdoInCondition)filter).ValueList[3]); Assert.IsAssignableFrom <FdoBooleanValue>(((FdoInCondition)filter).ValueList[4]); filter = FdoFilter.Parse("Geometry CONTAINS GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Contains, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry CROSSES GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Crosses, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry DISJOINT GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Disjoint, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry EQUALS GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Equals, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry INTERSECTS GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Intersects, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry OVERLAPS GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Overlaps, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry TOUCHES GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Touches, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry WITHIN GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Within, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry COVEREDBY GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.CoveredBy, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry INSIDE GeomFromText('POINT (1 1)')"); Assert.IsAssignableFrom <FdoSpatialCondition>(filter); Assert.Equal("Geometry", ((FdoSpatialCondition)filter).Identifier.Name); Assert.Equal(SpatialOperations.Inside, ((FdoSpatialCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoSpatialCondition)filter).Expression); filter = FdoFilter.Parse("Geometry BEYOND GeomFromText('POINT (1 1)') 2.0"); Assert.IsAssignableFrom <FdoDistanceCondition>(filter); Assert.Equal("Geometry", ((FdoDistanceCondition)filter).Identifier.Name); Assert.Equal(DistanceOperations.Beyond, ((FdoDistanceCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoDistanceCondition)filter).Expression); Assert.Equal(DataType.Double, ((FdoDistanceCondition)filter).Distance.DataType); Assert.Equal(2.0, ((FdoDoubleValue)((FdoDistanceCondition)filter).Distance).Value); filter = FdoFilter.Parse("Geometry BEYOND GeomFromText('POINT (1 1)') 5"); Assert.IsAssignableFrom <FdoDistanceCondition>(filter); Assert.Equal("Geometry", ((FdoDistanceCondition)filter).Identifier.Name); Assert.Equal(DistanceOperations.Beyond, ((FdoDistanceCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoDistanceCondition)filter).Expression); Assert.Equal(DataType.Int32, ((FdoDistanceCondition)filter).Distance.DataType); Assert.Equal(5, ((FdoInt32Value)((FdoDistanceCondition)filter).Distance).Value); filter = FdoFilter.Parse("Geometry WITHINDISTANCE GeomFromText('POINT (1 1)') 2.0"); Assert.IsAssignableFrom <FdoDistanceCondition>(filter); Assert.Equal("Geometry", ((FdoDistanceCondition)filter).Identifier.Name); Assert.Equal(DistanceOperations.WithinDistance, ((FdoDistanceCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoDistanceCondition)filter).Expression); Assert.Equal(DataType.Double, ((FdoDistanceCondition)filter).Distance.DataType); Assert.Equal(2.0, ((FdoDoubleValue)((FdoDistanceCondition)filter).Distance).Value); filter = FdoFilter.Parse("Geometry WITHINDISTANCE GeomFromText('POINT (1 1)') 5"); Assert.IsAssignableFrom <FdoDistanceCondition>(filter); Assert.Equal("Geometry", ((FdoDistanceCondition)filter).Identifier.Name); Assert.Equal(DistanceOperations.WithinDistance, ((FdoDistanceCondition)filter).Operator); Assert.IsAssignableFrom <FdoGeometryValue>(((FdoDistanceCondition)filter).Expression); Assert.Equal(DataType.Int32, ((FdoDistanceCondition)filter).Distance.DataType); Assert.Equal(5, ((FdoInt32Value)((FdoDistanceCondition)filter).Distance).Value); }
public async Task WritePolygonStyleFunctionAsync(StreamWriter sw, IVectorLayerDefinition vl, IAreaVectorStyle areaStyle) { await sw.WriteLineAsync(INDENT + "var fillColor;"); await sw.WriteLineAsync(INDENT + "var edgeColor;"); await sw.WriteLineAsync(INDENT + "var edgeThickness;"); var sb = new StringBuilder(512); var defaultRuleBlock = ""; var themes = new List <(string conditon, string filter, string block)>(); foreach (var rule in areaStyle.Rules) { if (rule.AreaSymbolization2D != null) { if (string.IsNullOrEmpty(rule.Filter)) //No filter = default rule effectively { if (string.IsNullOrEmpty(defaultRuleBlock)) { BuildPolygonRuleAssignment(sb, rule); defaultRuleBlock = sb.ToString(); } } else { //Parse this filter and see if it's translateable var filter = FdoFilter.Parse(rule.Filter); var check = TryTranslateFdoFilter(filter, _featureVarName); BuildPolygonRuleAssignment(sb, rule); themes.Add((check, rule.Filter, sb.ToString())); } } } //Now write out the theme if (themes.Count > 0) { bool bFirst = true; foreach (var th in themes) { if (bFirst) { await sw.WriteLineAsync(INDENT + $"if ({th.conditon}) {{ // Translated from rule filter: {th.filter}"); await sw.WriteLineAsync(th.block); await sw.WriteLineAsync(INDENT + "}"); } else { await sw.WriteLineAsync(INDENT + $"else if ({th.conditon}) {{ // Translated from rule filter: {th.filter}"); await sw.WriteLineAsync(th.block); await sw.WriteLineAsync(INDENT + "}"); } bFirst = false; } if (!string.IsNullOrEmpty(defaultRuleBlock)) { await sw.WriteLineAsync(INDENT + $"else {{ // Default rule"); await sw.WriteLineAsync(defaultRuleBlock); await sw.WriteLineAsync(INDENT + "}"); } } else { await sw.WriteLineAsync("//Default rule"); await sw.WriteLineAsync(defaultRuleBlock); } await sw.WriteLineAsync(INDENT + "var style = {"); await sw.WriteLineAsync(INDENT + INDENT + $"opacity: 1, fillOpacity: 1,"); await sw.WriteLineAsync(INDENT + INDENT + $"fillColor: fillColor,"); await sw.WriteLineAsync(INDENT + INDENT + $"color: edgeColor, weight: Math.max(edgeThickness, 1)"); await sw.WriteLineAsync(INDENT + "}"); await sw.WriteLineAsync(INDENT + "return style;"); }