-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
P0Critical priorityCritical priorityanalysis-modeAnalysis Mode featureAnalysis Mode featureenhancementNew feature or requestNew feature or requestin-progressWork currently in progressWork currently in progressperformancePerformance improvementPerformance improvementphase-2Phase 2 roadmapPhase 2 roadmap
Description
Parent Epic
依賴
- [Phase2-1.4a] IGroupByStrategy 介面 + GroupByStrategyResolver #94 (1.4a 介面)
- [Phase2-1.4b] ServerSideGroupByStrategy 實作 (MSSQL 整合測試) #95 (1.4b ServerSide 實作)
任務
將雙軌策略整合進 AnalysisQueryEngine,支援 server-side 優先 + in-process fallback。
實作
修改 src/WalkingTec.Mvvm.Core/Analysis/AnalysisQueryEngine.cs:
public class AnalysisQueryEngine
{
private readonly GroupByStrategyResolver _resolver;
// 新建構子(DI 友善)
public AnalysisQueryEngine(GroupByStrategyResolver resolver)
=> _resolver = resolver;
// 保留無參數建構子(向後相容,預設 InProcess)
public AnalysisQueryEngine()
=> _resolver = GroupByStrategyResolver.Default;
public AnalysisQueryResponse Execute<TModel>(
IQueryable<TModel> baseQuery,
AnalysisQueryRequest req,
IEnumerable<AnalysisFieldMeta> whitelist,
DBTypeEnum dbType = DBTypeEnum.SQLite) // 新參數,預設 SQLite(向後相容)
{
var strategy = _resolver.Resolve(dbType, req);
List<Dictionary<string, object?>> rows;
try
{
rows = strategy.Execute<TModel>(filtered, req, wl);
}
catch (InvalidOperationException) when (strategy is ServerSideGroupByStrategy)
{
// Server-side 翻譯失敗 → fallback to in-process
rows = new InProcessGroupByStrategy().Execute<TModel>(filtered, req, wl);
}
// ... 截斷、回應組裝不變
}
}向後相容
- 無參數建構子保留,預設 InProcess 行為不變
Execute()新增dbType參數有預設值,既有呼叫端不需改動- Controller 傳入
Wtm.DC.DBType
驗證
- 既有 52 個 Engine 測試全部通過(行為不變)
- 新增 fallback 測試:模擬 ServerSide 拋例外 → 自動降級
- 新增 DI 注入測試
複雜度
中
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
P0Critical priorityCritical priorityanalysis-modeAnalysis Mode featureAnalysis Mode featureenhancementNew feature or requestNew feature or requestin-progressWork currently in progressWork currently in progressperformancePerformance improvementPerformance improvementphase-2Phase 2 roadmapPhase 2 roadmap