Skip to content

Commit c58e7a5

Browse files
committed
Fixed issues with time window expressions in the mapping writer and compiler.
1 parent 03729d8 commit c58e7a5

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

Source/Libraries/ECAClientUtilities/MappingCompiler.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,8 @@ private FieldMapping ParseSignalMapping()
560560
if (!m_endOfFile && m_currentChar != '\n')
561561
ParseRelativeTime(fieldMapping);
562562

563+
SkipToNewline();
564+
563565
if (!m_endOfFile && m_currentChar == '@')
564566
ParseSampleRate(fieldMapping);
565567

@@ -583,6 +585,8 @@ private FieldMapping ParseMappingMapping()
583585
if (!m_endOfFile && m_currentChar != '\n')
584586
ParseRelativeTime(fieldMapping);
585587

588+
SkipToNewline();
589+
586590
if (!m_endOfFile && m_currentChar == '@')
587591
ParseSampleRate(fieldMapping);
588592

@@ -611,6 +615,8 @@ private ArrayMapping ParseArraySignalMapping()
611615
else if (m_currentChar != '\n')
612616
ParseWindowExpression(arrayMapping);
613617

618+
SkipToNewline();
619+
614620
if (!m_endOfFile && m_currentChar == '@')
615621
ParseSampleRate(arrayMapping);
616622

@@ -639,6 +645,8 @@ private ArrayMapping ParseArrayMappingMapping()
639645
else if (m_currentChar != '\n')
640646
ParseWindowExpression(arrayMapping);
641647

648+
SkipToNewline();
649+
642650
if (!m_endOfFile && m_currentChar == '@')
643651
ParseSampleRate(arrayMapping);
644652

@@ -661,7 +669,6 @@ private void ParseWindowExpression(ArrayMapping arrayMapping)
661669
ParseTimeSpan(arrayMapping);
662670
arrayMapping.RelativeTime = arrayMapping.WindowSize;
663671
arrayMapping.RelativeUnit = arrayMapping.WindowUnit;
664-
SkipToNewline();
665672
}
666673
else if (identifier.Equals("from", StringComparison.OrdinalIgnoreCase))
667674
{
@@ -721,8 +728,6 @@ private void ParseRelativeTime(FieldMapping fieldMapping)
721728

722729
if (identifier != "ago")
723730
RaiseCompileError($"Unexpected identifier: {identifier}. Expected 'ago' keyword.");
724-
725-
SkipToNewline();
726731
}
727732
else if (timeUnit != TimeSpan.Zero)
728733
{
@@ -759,18 +764,12 @@ private void ParseTimeSpan(ArrayMapping arrayMapping)
759764
arrayMapping.TimeWindowExpression += " " + identifier;
760765
timeUnit = ToTimeUnit(identifier);
761766

762-
if (identifier.Equals("point", StringComparison.OrdinalIgnoreCase) || identifier.Equals("points", StringComparison.OrdinalIgnoreCase))
763-
{
764-
// The "points" keyword is followed
765-
// by an optional sample rate
766-
SkipToNewline();
767-
}
768-
else if (timeUnit != TimeSpan.Zero)
767+
if (timeUnit != TimeSpan.Zero)
769768
{
770769
// If the identifier was a time unit, set WindowUnit
771770
arrayMapping.WindowUnit = timeUnit;
772771
}
773-
else
772+
else if (!identifier.Equals("point", StringComparison.OrdinalIgnoreCase) && !identifier.Equals("points", StringComparison.OrdinalIgnoreCase))
774773
{
775774
// If the identifier was not the ago keyword, raise an error
776775
RaiseCompileError($"Unexpected identifier: {identifier}. Expected 'points' keyword or time unit.");

Source/Libraries/ECAClientUtilities/MappingWriter.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,17 @@ private void Write(TextWriter writer, TypeMapping typeMapping)
143143
fieldMappingText = $" {fieldMapping.Field.Identifier}: {expression} {ToRelativeTimeText(fieldMapping)}";
144144
else if (arrayMapping.WindowSize == 0.0M)
145145
fieldMappingText = $" {fieldMapping.Field.Identifier}: {{ {fieldMapping.Expression} }} {ToRelativeTimeText(fieldMapping)}";
146+
else if (fieldMapping.RelativeTime == 0.0M)
147+
fieldMappingText = $" {fieldMapping.Field.Identifier}: {expression} last {ToTimeSpanText(arrayMapping)}";
146148
else if (fieldMapping.RelativeTime != arrayMapping.WindowSize || fieldMapping.RelativeUnit != arrayMapping.WindowUnit)
147149
fieldMappingText = $" {fieldMapping.Field.Identifier}: {expression} from {ToRelativeTimeText(fieldMapping)} for {ToTimeSpanText(arrayMapping)}";
148150
else
149151
fieldMappingText = $" {fieldMapping.Field.Identifier}: {expression} last {ToTimeSpanText(arrayMapping)}";
150152

151-
if (fieldMapping.SampleRate == 0.0M)
152-
writer.WriteLine(fieldMappingText);
153-
else
153+
if (fieldMapping.SampleRate != 0.0M)
154154
writer.WriteLine($"{fieldMappingText} {ToSampleRateText(fieldMapping)}");
155+
else
156+
writer.WriteLine(fieldMappingText);
155157
}
156158

157159
writer.WriteLine("}");

0 commit comments

Comments
 (0)