protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
        {
            var sequence = builder.BuildSequence(new BuildInfo(buildInfo, methodCall.Arguments[0]));
            var table    = SequenceHelper.GetTableContext(sequence) ?? throw new LinqToDBException($"Cannot get table context from {sequence.GetType()}");
            var value    = methodCall.Arguments.Count == 1 && methodCall.Method.Name == nameof(TableExtensions.IsTemporary) ?
                           true :
                           methodCall.Arguments[1].EvaluateExpression();

            switch (methodCall.Method.Name)
            {
            case nameof(LinqExtensions.TableName): table.SqlTable.PhysicalName = (string)value !; break;

            case nameof(LinqExtensions.ServerName): table.SqlTable.Server = (string?)value;  break;

            case nameof(LinqExtensions.DatabaseName): table.SqlTable.Database = (string?)value;  break;

            case nameof(LinqExtensions.SchemaName): table.SqlTable.Schema = (string?)value;  break;

            case nameof(TableExtensions.TableOptions): table.SqlTable.TableOptions = (TableOptions)value !; break;

            case nameof(TableExtensions.IsTemporary): table.SqlTable.Set((bool)value !, TableOptions.IsTemporary); break;
            }

            return(sequence);
        }
        protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
        {
            var sequence = builder.BuildSequence(new BuildInfo(buildInfo, methodCall.Arguments[0]));
            var table    = SequenceHelper.GetTableContext(sequence) ?? throw new LinqToDBException($"Cannot get table context from {sequence.GetType()}");
            var value    = (string)methodCall.Arguments[1].EvaluateExpression() !;

            table.SqlTable.SqlTableType   = SqlTableType.Expression;
            table.SqlTable.TableArguments = Array <ISqlExpression> .Empty;

            switch (methodCall.Method.Name)
            {
            case "With": table.SqlTable.Name = $"{{0}} {{1}} WITH ({value})"; break;

            case "WithTableExpression": table.SqlTable.Name = value;                         break;
            }

            return(sequence);
        }