Skip to content

Commit 2da68e2

Browse files
committed
fix (sqllite-timestamp): manually parse to string dates queries
1 parent 06defee commit 2da68e2

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

src/Serilog.Ui.SqliteDataProvider/Models/SqliteSinkColumnNames.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ public SqliteSinkColumnNames()
1111
LogEventSerialized = "Properties";
1212
Message = "RenderedMessage";
1313
MessageTemplate = "";
14-
Timestamp = "TimeStamp";
14+
Timestamp = "Timestamp";
1515
}
1616
}

src/Serilog.Ui.SqliteDataProvider/SqliteDataProvider.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public class SqliteDataProvider(SqliteDbOptions options, SqliteQueryBuilder quer
1919

2020
public async Task<(IEnumerable<LogModel>, int)> FetchDataAsync(FetchLogsQuery queryParams, CancellationToken cancellationToken = default)
2121
{
22+
queryParams.ToUtcDates(); // assuming data is saved in UTC, due to UTC predictability
23+
2224
var logsTask = GetLogsAsync(queryParams);
2325
var logCountTask = CountLogsAsync(queryParams);
2426

@@ -42,17 +44,18 @@ private async Task<IEnumerable<LogModel>> GetLogsAsync(FetchLogsQuery queryParam
4244
queryParams.Count,
4345
queryParams.Level,
4446
Search = queryParams.SearchCriteria != null ? $"%{queryParams.SearchCriteria}%" : null,
45-
queryParams.StartDate,
46-
queryParams.EndDate
47+
StartDate = StringifyDate(queryParams.StartDate),
48+
EndDate = StringifyDate(queryParams.EndDate)
4749
};
4850
var logs = await connection.QueryAsync<LogModel>(query.ToString(), queryParameters);
4951

5052
return logs.Select((item, i) =>
5153
{
5254
item.PropertyType = "json";
53-
// both sinks save UTC but MariaDb is queried as Unspecified, MySql is queried as Local
54-
var ts = DateTime.SpecifyKind(item.Timestamp, item.Timestamp.Kind == DateTimeKind.Unspecified ? DateTimeKind.Local : item.Timestamp.Kind);
55+
56+
var ts = DateTime.SpecifyKind(item.Timestamp, item.Timestamp.Kind == DateTimeKind.Unspecified ? DateTimeKind.Utc : item.Timestamp.Kind);
5557
item.Timestamp = ts.ToUniversalTime();
58+
5659
item.SetRowNo(rowNoStart, i);
5760
return item;
5861
}).ToList();
@@ -70,8 +73,10 @@ private Task<int> CountLogsAsync(FetchLogsQuery queryParams)
7073
{
7174
queryParams.Level,
7275
Search = queryParams.SearchCriteria != null ? $"%{queryParams.SearchCriteria}%" : null,
73-
queryParams.StartDate,
74-
queryParams.EndDate
76+
StartDate = StringifyDate(queryParams.StartDate),
77+
EndDate = StringifyDate(queryParams.EndDate)
7578
});
7679
}
80+
81+
private static string StringifyDate(DateTime? date) => date.HasValue ? date.Value.ToString("s") + ".999" : "null";
7782
}

tests/Serilog.Ui.SqliteProvider.Tests/Util/SqliteTestProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ private void InitializeAdditional()
5252
var serilog = new SerilogSinkSetup(logger =>
5353
logger
5454
.WriteTo
55-
.SQLite(_dbInstanceName, batchSize: 1, storeTimestampInUtc: true));
55+
.SQLite(_dbInstanceName, storeTimestampInUtc: true));
5656
_collector = serilog.InitializeLogs();
5757

5858
_provider = new SqliteDataProvider(DbOptions, new SqliteQueryBuilder());

0 commit comments

Comments
 (0)