History

TimeSeriesPlatformLibrary: Fixed build errors from last check-in

J. Ritchie Carroll committed 7 years ago

Commit 9f9cf2b1 parent 5945ab63 files · +63 −44Browse files

Unified · Split

3 files
  1. Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.cpp +44 −1
  2. Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.h +3 −0
  3. Source/Libraries/TimeSeriesPlatformLibrary/Transport/FilterExpressions/FilterExpressionParser.cpp +16 −43
Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.cpp+44−1
@@ -188,6 +188,49 @@ const char* GSF::TimeSeries::Coalesce(const char* data, const char* nonEmptyValu · 187 unmodified lines
188188 return data;
189189 }
190190
191+time_t GSF::TimeSeries::ParseTimestamp(const char* time)
192+{
193+ // Need a "generic" ParseTimestamp function...
194+// istringstream in { time };
195+// sys_seconds timestamp;
196+//
197+// // Try parsing several date-time formats formatted timestamp string
198+// // using the Hinnant date library: https://github.com/HowardHinnant/date
199+//
200+// // Need to try several date/time format variations per:
201+// // https://howardhinnant.github.io/date/date.html#from_stream_formatting
202+// /*
203+// istringstream in { "2018-01-12 12:05:14" };
204+// sys_seconds timestamp;
205+//
206+// in >> parse("%Y-%m-%dT%T%z", timestamp);
207+//
208+// if (bool(in))
209+// {
210+// std::cout << "Parsed XML time: " << system_clock::to_time_t(timestamp) << "\n";
211+// }
212+// else
213+// {
214+// in.clear();
215+// in.str("2018-01-12 12:05:14");
216+// in >> parse("%F%n %T", timestamp);
217+//
218+// if (bool(in))
219+// {
220+// std::cout << "Parsed std time: " << system_clock::to_time_t(timestamp) << "\n";
221+// }
222+// else
223+// {
224+// std::cout << "Failed to parse time...\n";
225+// }
226+// }
227+// */
228+//
229+// // Try XML format, e.g.: 2018-03-14T19:23:11.665-04:00:
230+// in >> parse("%Y-%m-%dT%T%z", timestamp);
231+ return ParseXMLTimestamp(time);
232+}
233+
191234 time_t GSF::TimeSeries::ParseXMLTimestamp(const char* time)
192235 {
193236 istringstream in { time };
@@ -198,4 +241,4 @@ time_t GSF::TimeSeries::ParseXMLTimestamp(const char* time) · 4 unmodified lines
198241 in >> parse("%Y-%m-%dT%T%z", timestamp);
199242
200243 return system_clock::to_time_t(timestamp);
201−}
244+}
Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.h+3−0
@@ -50,6 +50,9 @@ namespace TimeSeries · 49 unmodified lines
5050 // Returns a non-empty nor null value
5151 const char* Coalesce(const char* data, const char* nonEmptyValue);
5252
53+ // Converts a time string to a common epoch time
54+ time_t ParseTimestamp(const char* time);
55+
5356 // Converts an XML formatted time string to a common epoch time
5457 time_t ParseXMLTimestamp(const char* time);
5558 }}
Source/Libraries/TimeSeriesPlatformLibrary/Transport/FilterExpressions/FilterExpressionParser.cpp+16−43
@@ -58,46 +58,7 @@ time_t ParseDateTimeLiteral(string time) · 57 unmodified lines
5858 time.erase(time.size() - 1);
5959 }
6060
61− // Need a "generic" ParseTimestamp function...
62− // istringstream in { time };
63− // sys_seconds timestamp;
64− //
65− // // Try parsing several date-time formats formatted timestamp string
66− // // using the Hinnant date library: https://github.com/HowardHinnant/date
67− //
68− // // Need to try several date/time format variations per:
69− // // https://howardhinnant.github.io/date/date.html#from_stream_formatting
70− // /*
71− // istringstream in { "2018-01-12 12:05:14" };
72− // sys_seconds timestamp;
73− //
74− // in >> parse("%Y-%m-%dT%T%z", timestamp);
75− //
76− // if (bool(in))
77− // {
78− // std::cout << "Parsed XML time: " << system_clock::to_time_t(timestamp) << "\n";
79− // }
80− // else
81− // {
82− // in.clear();
83− // in.str("2018-01-12 12:05:14");
84− // in >> parse("%F%n %T", timestamp);
85− //
86− // if (bool(in))
87− // {
88− // std::cout << "Parsed std time: " << system_clock::to_time_t(timestamp) << "\n";
89− // }
90− // else
91− // {
92− // std::cout << "Failed to parse time...\n";
93− // }
94− // }
95− // */
96− //
97− // // Try XML format, e.g.: 2018-03-14T19:23:11.665-04:00:
98− // in >> parse("%Y-%m-%dT%T%z", timestamp);
99−
100− return ParseXMLTimestamp(time.c_str());
61+ return ParseTimestamp(time.c_str());
10162 }
10263
10364 FilterExpressionException::FilterExpressionException(string message) noexcept :
@@ -253,14 +214,26 @@ void FilterExpressionParser::Evaluate() · 149 unmodified lines
253214 ValueExpressionPtr result = expressionTree->Evaluate(row);
254215
255216 // If final result is Null (due to Null propagation), treat result as False
256− if (result->DataType == ExpressionDataType::Null)
257− result = ExpressionTree::False;
217+ if (result->IsNullable)
218+ {
219+ NullableType value = Cast<NullableType>(result->Value);
220+
221+ if (!value.HasValue())
222+ result = ExpressionTree::False;
223+ }
258224
259225 // Final expression should have a boolean data type (it's part of a WHERE clause)
260226 if (result->DataType != ExpressionDataType::Boolean)
261227 throw FilterExpressionException("Final expression tree evaluation did not result in a boolean value, result data type is " + string(EnumName(result->DataType)));
262228
263− if (Cast<bool>(CastSharedPtr<ValueExpression>(result)->Value))
229+ bool expressionValue;
230+
231+ if (result->IsNullable)
232+ expressionValue = static_cast<bool>(Cast<Nullable<bool>>(result->Value).Value);
233+ else
234+ expressionValue = Cast<bool>(result->Value);
235+
236+ if (expressionValue)
264237 {
265238 Nullable<guid> signalIDField = row->ValueAsGuid(signalIDColumnIndex);
266239

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t