Skip to content

Instantly share code, notes, and snippets.

@jods4
Created January 15, 2023 16:25
Show Gist options
  • Save jods4/6b145327f3c7563836c357984b723caf to your computer and use it in GitHub Desktop.
Save jods4/6b145327f3c7563836c357984b723caf to your computer and use it in GitHub Desktop.
Generated source for ExpressionBuilder
// <auto-generated />
#nullable enable
using LinqToDB.Expressions;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
namespace LinqToDB.Linq.Builder;
partial class ExpressionBuilder
{
private static class Builder<T> where T: ISequenceBuilder, new()
{
public static T Instance = new();
}
private static partial ISequenceBuilder? FindBuilderImpl(BuildInfo info, ExpressionBuilder builder)
{
var expr = info.Expression = info.Expression.Unwrap();
switch (expr.NodeType)
{
case ChangeTypeExpression.ChangeTypeType:
if (ChangeTypeExpressionBuilder.CanBuild(expr, info, builder))
return Builder<ChangeTypeExpressionBuilder>.Instance;
break;
case ExpressionType.Constant:
if (EnumerableBuilder.CanBuild(expr, info, builder))
return Builder<EnumerableBuilder>.Instance;
if (TableBuilder.CanBuild(expr, info, builder))
return Builder<TableBuilder>.Instance;
break;
case ExpressionType.MemberAccess:
if (EnumerableBuilder.CanBuild(expr, info, builder))
return Builder<EnumerableBuilder>.Instance;
if (TableBuilder.CanBuild(expr, info, builder))
return Builder<TableBuilder>.Instance;
break;
case ExpressionType.NewArrayInit:
if (EnumerableBuilder.CanBuild(expr, info, builder))
return Builder<EnumerableBuilder>.Instance;
break;
case ExpressionType.Lambda:
if (ScalarSelectBuilder.CanBuild(expr, info, builder))
return Builder<ScalarSelectBuilder>.Instance;
break;
case ExpressionType.Call:
var call = (MethodCallExpression)expr;
switch (call.Method.Name)
{
case "Alias":
if (PassThroughBuilder.CanBuildMethod(call, info, builder))
return Builder<PassThroughBuilder>.Instance;
break;
case "All":
if (AllAnyBuilder.CanBuildMethod(call, info, builder))
return Builder<AllAnyBuilder>.Instance;
break;
case "AllAsync":
if (AllAnyBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AllAnyBuilder>.Instance;
break;
case "Any":
if (AllAnyBuilder.CanBuildMethod(call, info, builder))
return Builder<AllAnyBuilder>.Instance;
break;
case "AnyAsync":
if (AllAnyBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AllAnyBuilder>.Instance;
break;
case "AsQueryable":
if (PassThroughBuilder.CanBuildMethod(call, info, builder))
return Builder<PassThroughBuilder>.Instance;
break;
case "AsSubQuery":
if (AsSubQueryBuilder.CanBuildMethod(call, info, builder))
return Builder<AsSubQueryBuilder>.Instance;
break;
case "AsUpdatable":
if (AsUpdatableBuilder.CanBuildMethod(call, info, builder))
return Builder<AsUpdatableBuilder>.Instance;
break;
case "AsValueInsertable":
if (AsValueInsertableBuilder.CanBuildMethod(call, info, builder))
return Builder<AsValueInsertableBuilder>.Instance;
break;
case "Average":
if (AggregationBuilder.CanBuildMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "AverageAsync":
if (AggregationBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "Cast":
if (CastBuilder.CanBuildMethod(call, info, builder))
return Builder<CastBuilder>.Instance;
break;
case "Concat":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "Contains":
if (ContainsBuilder.CanBuildMethod(call, info, builder))
return Builder<ContainsBuilder>.Instance;
break;
case "ContainsAsync":
if (ContainsBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<ContainsBuilder>.Instance;
break;
case "Count":
if (AggregationBuilder.CanBuildMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "CountAsync":
if (AggregationBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "CrossJoin":
if (AllJoinsLinqBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsLinqBuilder>.Instance;
break;
case "DatabaseName":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "DefaultIfEmpty":
if (DefaultIfEmptyBuilder.CanBuildMethod(call, info, builder))
return Builder<DefaultIfEmptyBuilder>.Instance;
break;
case "Delete":
if (DeleteBuilder.CanBuildMethod(call, info, builder))
return Builder<DeleteBuilder>.Instance;
break;
case "DeleteWhenMatchedAnd":
if (MergeBuilder.DeleteWhenMatched.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.DeleteWhenMatched>.Instance;
break;
case "DeleteWhenNotMatchedBySourceAnd":
if (MergeBuilder.DeleteWhenNotMatchedBySource.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.DeleteWhenNotMatchedBySource>.Instance;
break;
case "DeleteWithOutput":
if (DeleteBuilder.CanBuildMethod(call, info, builder))
return Builder<DeleteBuilder>.Instance;
break;
case "DeleteWithOutputInto":
if (DeleteBuilder.CanBuildMethod(call, info, builder))
return Builder<DeleteBuilder>.Instance;
break;
case "DisableGuard":
if (DisableGroupingGuardBuilder.CanBuildMethod(call, info, builder))
return Builder<DisableGroupingGuardBuilder>.Instance;
break;
case "Distinct":
if (DistinctBuilder.CanBuildMethod(call, info, builder))
return Builder<DistinctBuilder>.Instance;
break;
case "Drop":
if (DropBuilder.CanBuildMethod(call, info, builder))
return Builder<DropBuilder>.Instance;
break;
case "Else":
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "Except":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "ExceptAll":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "First":
if (FirstSingleBuilder.CanBuildMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "FirstAsync":
if (FirstSingleBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "FirstOrDefault":
if (FirstSingleBuilder.CanBuildMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "FirstOrDefaultAsync":
if (FirstSingleBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "FullJoin":
if (AllJoinsBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsBuilder>.Instance;
if (AllJoinsLinqBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsLinqBuilder>.Instance;
break;
case "GetContext":
if (ContextParser.CanBuildMethod(call, info, builder))
return Builder<ContextParser>.Instance;
break;
case "GroupBy":
if (GroupByBuilder.CanBuildMethod(call, info, builder))
return Builder<GroupByBuilder>.Instance;
break;
case "GroupJoin":
if (GroupJoinBuilder.CanBuildMethod(call, info, builder))
return Builder<GroupJoinBuilder>.Instance;
break;
case "HasUniqueKey":
if (HasUniqueKeyBuilder.CanBuildMethod(call, info, builder))
return Builder<HasUniqueKeyBuilder>.Instance;
break;
case "Having":
if (WhereBuilder.CanBuildMethod(call, info, builder))
return Builder<WhereBuilder>.Instance;
break;
case "IgnoreFilters":
if (IgnoreFiltersBuilder.CanBuildMethod(call, info, builder))
return Builder<IgnoreFiltersBuilder>.Instance;
break;
case "InlineParameters":
if (InlineParametersBuilder.CanBuildMethod(call, info, builder))
return Builder<InlineParametersBuilder>.Instance;
break;
case "InnerJoin":
if (AllJoinsBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsBuilder>.Instance;
if (AllJoinsLinqBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsLinqBuilder>.Instance;
break;
case "Insert":
if (InsertBuilder.CanBuildMethod(call, info, builder))
return Builder<InsertBuilder>.Instance;
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "InsertAll":
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "InsertFirst":
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "InsertOrUpdate":
if (InsertOrUpdateBuilder.CanBuildMethod(call, info, builder))
return Builder<InsertOrUpdateBuilder>.Instance;
break;
case "InsertWhenNotMatchedAnd":
if (MergeBuilder.InsertWhenNotMatched.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.InsertWhenNotMatched>.Instance;
break;
case "InsertWithIdentity":
if (InsertBuilder.CanBuildMethod(call, info, builder))
return Builder<InsertBuilder>.Instance;
break;
case "InsertWithOutput":
if (InsertBuilder.CanBuildMethod(call, info, builder))
return Builder<InsertBuilder>.Instance;
break;
case "InsertWithOutputInto":
if (InsertBuilder.CanBuildMethod(call, info, builder))
return Builder<InsertBuilder>.Instance;
break;
case "Intersect":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "IntersectAll":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "Into":
if (InsertBuilder.Into.CanBuildMethod(call, info, builder))
return Builder<InsertBuilder.Into>.Instance;
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "IsTemporary":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "Join":
if (AllJoinsBuilder.CanBuildJoin(call, info, builder))
return Builder<AllJoinsBuilder>.Instance;
if (AllJoinsLinqBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsLinqBuilder>.Instance;
if (JoinBuilder.CanBuildMethod(call, info, builder))
return Builder<JoinBuilder>.Instance;
break;
case "LeftJoin":
if (AllJoinsBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsBuilder>.Instance;
if (AllJoinsLinqBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsLinqBuilder>.Instance;
break;
case "LoadWith":
if (LoadWithBuilder.CanBuildMethod(call, info, builder))
return Builder<LoadWithBuilder>.Instance;
break;
case "LoadWithAsTable":
if (LoadWithBuilder.CanBuildMethod(call, info, builder))
return Builder<LoadWithBuilder>.Instance;
break;
case "LongCount":
if (AggregationBuilder.CanBuildMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "LongCountAsync":
if (AggregationBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "Max":
if (AggregationBuilder.CanBuildMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "MaxAsync":
if (AggregationBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "Merge":
if (MergeBuilder.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder>.Instance;
if (MergeBuilder.Merge.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.Merge>.Instance;
break;
case "MergeInto":
if (MergeBuilder.MergeInto.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.MergeInto>.Instance;
break;
case "MergeWithOutput":
if (MergeBuilder.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder>.Instance;
break;
case "MergeWithOutputInto":
if (MergeBuilder.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder>.Instance;
break;
case "Min":
if (AggregationBuilder.CanBuildMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "MinAsync":
if (AggregationBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "MultiInsert":
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "OfType":
if (OfTypeBuilder.CanBuildMethod(call, info, builder))
return Builder<OfTypeBuilder>.Instance;
break;
case "On":
if (MergeBuilder.On.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.On>.Instance;
break;
case "OnTargetKey":
if (MergeBuilder.On.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.On>.Instance;
break;
case "OrderBy":
if (OrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<OrderByBuilder>.Instance;
break;
case "OrderByDescending":
if (OrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<OrderByBuilder>.Instance;
break;
case "QueryName":
if (QueryNameBuilder.CanBuildMethod(call, info, builder))
return Builder<QueryNameBuilder>.Instance;
break;
case "RemoveOrderBy":
if (RemoveOrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<RemoveOrderByBuilder>.Instance;
break;
case "RightJoin":
if (AllJoinsBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsBuilder>.Instance;
if (AllJoinsLinqBuilder.CanBuildMethod(call, info, builder))
return Builder<AllJoinsLinqBuilder>.Instance;
break;
case "SchemaName":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "Select":
if (SelectBuilder.CanBuildMethod(call, info, builder))
return Builder<SelectBuilder>.Instance;
break;
case "SelectDistinct":
if (DistinctBuilder.CanBuildMethod(call, info, builder))
return Builder<DistinctBuilder>.Instance;
break;
case "SelectMany":
if (SelectManyBuilder.CanBuildMethod(call, info, builder))
return Builder<SelectManyBuilder>.Instance;
break;
case "SelectQuery":
if (SelectQueryBuilder.CanBuildMethod(call, info, builder))
return Builder<SelectQueryBuilder>.Instance;
break;
case "ServerName":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "Set":
if (UpdateBuilder.Set.CanBuildMethod(call, info, builder))
return Builder<UpdateBuilder.Set>.Instance;
break;
case "Single":
if (FirstSingleBuilder.CanBuildMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "SingleAsync":
if (FirstSingleBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "SingleOrDefault":
if (FirstSingleBuilder.CanBuildMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "SingleOrDefaultAsync":
if (FirstSingleBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<FirstSingleBuilder>.Instance;
break;
case "Skip":
if (TakeSkipBuilder.CanBuildMethod(call, info, builder))
return Builder<TakeSkipBuilder>.Instance;
break;
case "Sum":
if (AggregationBuilder.CanBuildMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "SumAsync":
if (AggregationBuilder.CanBuildAsyncMethod(call, info, builder))
return Builder<AggregationBuilder>.Instance;
break;
case "TableID":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "TableName":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "TableOptions":
if (TableAttributeBuilder.CanBuildMethod(call, info, builder))
return Builder<TableAttributeBuilder>.Instance;
break;
case "TagQuery":
if (TagQueryBuilder.CanBuildMethod(call, info, builder))
return Builder<TagQueryBuilder>.Instance;
break;
case "Take":
if (TakeSkipBuilder.CanBuildMethod(call, info, builder))
return Builder<TakeSkipBuilder>.Instance;
break;
case "ThenBy":
if (OrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<OrderByBuilder>.Instance;
break;
case "ThenByDescending":
if (OrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<OrderByBuilder>.Instance;
break;
case "ThenLoad":
if (LoadWithBuilder.CanBuildMethod(call, info, builder))
return Builder<LoadWithBuilder>.Instance;
break;
case "ThenOrBy":
if (OrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<OrderByBuilder>.Instance;
break;
case "ThenOrByDescending":
if (OrderByBuilder.CanBuildMethod(call, info, builder))
return Builder<OrderByBuilder>.Instance;
break;
case "Truncate":
if (TruncateBuilder.CanBuildMethod(call, info, builder))
return Builder<TruncateBuilder>.Instance;
break;
case "Union":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "UnionAll":
if (SetOperationBuilder.CanBuildMethod(call, info, builder))
return Builder<SetOperationBuilder>.Instance;
break;
case "Update":
if (UpdateBuilder.CanBuildMethod(call, info, builder))
return Builder<UpdateBuilder>.Instance;
break;
case "UpdateWhenMatchedAnd":
if (MergeBuilder.UpdateWhenMatched.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.UpdateWhenMatched>.Instance;
break;
case "UpdateWhenMatchedAndThenDelete":
if (MergeBuilder.UpdateWhenMatchedThenDelete.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.UpdateWhenMatchedThenDelete>.Instance;
break;
case "UpdateWhenNotMatchedBySourceAnd":
if (MergeBuilder.UpdateWhenNotMatchedBySource.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.UpdateWhenNotMatchedBySource>.Instance;
break;
case "UpdateWithOutput":
if (UpdateBuilder.CanBuildMethod(call, info, builder))
return Builder<UpdateBuilder>.Instance;
break;
case "UpdateWithOutputInto":
if (UpdateBuilder.CanBuildMethod(call, info, builder))
return Builder<UpdateBuilder>.Instance;
break;
case "Using":
if (MergeBuilder.Using.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.Using>.Instance;
break;
case "UsingTarget":
if (MergeBuilder.UsingTarget.CanBuildMethod(call, info, builder))
return Builder<MergeBuilder.UsingTarget>.Instance;
break;
case "Value":
if (InsertBuilder.Value.CanBuildMethod(call, info, builder))
return Builder<InsertBuilder.Value>.Instance;
break;
case "When":
if (MultiInsertBuilder.CanBuildMethod(call, info, builder))
return Builder<MultiInsertBuilder>.Instance;
break;
case "Where":
if (WhereBuilder.CanBuildMethod(call, info, builder))
return Builder<WhereBuilder>.Instance;
break;
case "With":
if (WithTableExpressionBuilder.CanBuildMethod(call, info, builder))
return Builder<WithTableExpressionBuilder>.Instance;
break;
case "WithTableExpression":
if (WithTableExpressionBuilder.CanBuildMethod(call, info, builder))
return Builder<WithTableExpressionBuilder>.Instance;
break;
}
if (MethodChainBuilder.CanBuild(expr, info, builder))
return Builder<MethodChainBuilder>.Instance;
if (QueryExtensionBuilder.CanBuild(expr, info, builder))
return Builder<QueryExtensionBuilder>.Instance;
if (TableBuilder.CanBuild(expr, info, builder))
return Builder<TableBuilder>.Instance;
break;
}
if (ContextRefBuilder.CanBuild(info, builder))
return Builder<ContextRefBuilder>.Instance;
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment