型係統在 C一個 引擎 類 查詢上實現
IQueryNode<TRow,型系 TRuntimeResult, TRoot>;TRuntimeResult;TPublicResult
。塞進 CompiledQuery<TRow,统上 TResult>。比如:City = 'Seattle'Salary >= 180000Team != null都會變成一個具體的实现過濾器類型:
Type BuildComparisonPredicate<TRow>(ComparisonExpression comparison){ var rowType = typeof(TRow); var column = SchemaRegistry<TRow>.ResolveColumn(comparison.ColumnIdentifier); var runtimeColumnType = column.GetRuntimeColumnType(rowType); var runtimeColumnValueType = column.GetRuntimeValueType(); var literalType = CreateLiteralType(runtimeColumnValueType, comparison.Literal); var filterDefinition = comparison.Operator switch { ComparisonOperator.Equals => typeof(EqualsFilter<,,,>), ComparisonOperator.GreaterThan => typeof(GreaterThanFilter<,,,>), ComparisonOperator.LessThan => typeof(LessThanFilter<,,,>), ComparisonOperator.GreaterOrEqual=> typeof(GreaterOrEqualFilter<,,,>), ComparisonOperator.LessOrEqual => typeof(LessOrEqualFilter<,,,>), ComparisonOperator.NotEqual => typeof(NotEqualFilter<,,,>), _ => throw … }; return filterDefinition.MakeGenericType( rowType, runtimeColumnType, literalType, runtimeColumnValueType);}以 City = 'Seattle'為例 ,bool
、查询

把查詢變成嵌套的泛型類型
TypedSql 的核心想法看上去非常簡單:一個查詢 ,全是型系靜態方法 。.NET 又能針對這些類型生成多快的统上代碼 ?
於是,要遞歸下去做同樣的实现事情 。也可以把它輸出到代碼裏然後通過 NativeAOT 編譯成原生二進製文件,查询而你甚至不需要實現任何的引擎代碼生成後端,生成 ParsedQuery;
- 管道類型
TPipeline; TRuntimeResult;TPublicResult;
TPublicResult是型系否和你指定的 TResult一致;QueryProgram<TRow, TPipeline, TRuntimeResult, TPublicResult>這個類型;Execute(ReadOnlySpan<TRow>);- 一個封閉的查询管道類型
TPipeline,委托帶來的引擎那點開銷; - 要麽幹脆極端一點
:把數據塞進數據庫,隻是單純看作 SQL 結構。兩全其美。而外麵看到的則是
(string, int, string, …),DSL 編譯器 、't'
目擊道存網