Пример #1
0
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <IdentityModelType>(name: "authRequired",
                                                     description: null,
                                                     resolve: async context =>
            {
                try
                {
                    var userContext = context.UserContext.As <GraphQLUserContext>();
                    var result      = new GraphQLCore.ExtensionGrants.Models.IdentityModel {
                        Claims = new List <ClaimHandle>()
                    };
                    foreach (var claim in userContext.HttpContextAccessor.HttpContext.User.Claims)
                    {
                        result.Claims.Add(new ClaimHandle()
                        {
                            Name  = claim.Type,
                            Value = claim.Value
                        });
                    }

                    return(result);
                }
                catch (Exception e)
                {
                }

                return(null);
                //                    return await Task.Run(() => { return ""; });
            },
                                                     deprecationReason: null);
        }
Пример #2
0
        public override bool Compile(string queryText, QueryCore query, TempFileRef dataContextAssembly)
        {
            bool          flag;
            StringBuilder builder = new StringBuilder(this.GetHeader(query));

            base.LineOffset = builder.ToString().Count <char>(c => c == '\n');
            builder.AppendLine(Regex.Replace(queryText.Trim(), "(?<!\r)\n", "\r\n"));
            builder.Append(this.GetFooter(query));
            string str = "v4.0";
            Dictionary <string, string> providerOptions = new Dictionary <string, string>();

            providerOptions.Add("CompilerVersion", str);
            VBCodeProvider codeProvider = new VBCodeProvider(providerOptions);

            if ((!(flag = base.Compile(codeProvider, builder.ToString(), dataContextAssembly, query.QueryKind, this.GetCompilerOptions(query))) && (query.QueryKind == QueryLanguage.VBExpression)) && (base.ErrorMessage == ") expected"))
            {
                base.ErrorMessage = ") or end of expression expected";
                return(flag);
            }
            if (!(flag || !base.ErrorMessage.ToLowerInvariant().Contains("predicatebuilder")))
            {
                base.ErrorMessage = base.ErrorMessage + QueryCompiler.PredicateBuilderMessage;
                return(flag);
            }
            if (!(((flag || (query.QueryKind != QueryLanguage.VBStatements)) || !(base.ErrorMessage == "Expression is not a method.")) || query.Source.TrimStart(new char[0]).StartsWith("dim", StringComparison.OrdinalIgnoreCase)))
            {
                base.ErrorMessage = base.ErrorMessage + "\r\n(Try setting the query language to 'VB Expression' rather than 'VB Statements')";
                return(flag);
            }
            if ((!flag && (query.QueryKind == QueryLanguage.VBExpression)) && (base.ErrorMessage == "Expression expected."))
            {
                base.ErrorMessage = base.ErrorMessage + "\r\n(Set the query language to 'VB Statement(s)' for a statement-based code)";
            }
            return(flag);
        }
Пример #3
0
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <ArbitraryNoSubjectResultType>(name: GrantType,
                                                                description: $"mints a custom {GrantType} token.",
                                                                arguments: new QueryArguments(new QueryArgument <NonNullGraphType <ArbitraryNoSubjectInput> > {
                Name = "input"
            }),
                                                                resolve: async context =>
            {
                try
                {
                    var userContext = context.UserContext.As <GraphQLUserContext>();
                    var input       = context.GetArgument <ArbitraryNoSubjectInputHandle>("input");

                    var formValues = new Dictionary <string, StringValues>()
                    {
                        { "grant_type", GrantType },
                        { "client_id", input.client_id },
                        { "client_secret", input.client_secret },
                        { "scope", input.scope },
                        { "arbitrary_claims", input.arbitrary_claims }
                    };
                    if (!string.IsNullOrWhiteSpace(input.arbitrary_amrs))
                    {
                        formValues.Add("arbitrary_amrs", input.arbitrary_amrs);
                    }
                    if (!string.IsNullOrWhiteSpace(input.arbitrary_audiences))
                    {
                        formValues.Add("arbitrary_audiences", input.arbitrary_audiences);
                    }
                    if (input.access_token_lifetime > 0)
                    {
                        formValues.Add("access_token_lifetime", input.access_token_lifetime.ToString());
                    }

                    IFormCollection formCollection = new FormCollection(formValues);

                    var processsedResult = await _endpointHandlerExtra.ProcessRawAsync(formCollection);

                    if (processsedResult.TokenErrorResult != null)
                    {
                        context.Errors.Add(new ExecutionError($"{processsedResult.TokenErrorResult.Response.Error}:{processsedResult.TokenErrorResult.Response.ErrorDescription}"));
                        return(null);
                    }
                    var result = new ArbitraryNoSubjectResult
                    {
                        access_token = processsedResult.TokenResult.Response.AccessToken,
                        expires_in   = processsedResult.TokenResult.Response.AccessTokenLifetime,
                        token_type   = "bearer"
                    };
                    return(result);
                }
                catch (Exception e)
                {
                    context.Errors.Add(new ExecutionError("Unable to process request", e));
                }
                return(null);
            },
                                                                deprecationReason: null);
        }
Пример #4
0
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <BindResultType>(name: "bind",
                                                  description: "Given a type of token, we will exchange it for an oAuth2 token to access this service.",
                                                  arguments: new QueryArguments(new QueryArgument <NonNullGraphType <BindInput> > {
                Name = "input"
            }),
                                                  resolve: async context =>
            {
                try
                {
                    var userContext = context.UserContext.As <GraphQLUserContext>();
                    var input       = context.GetArgument <BindInputHandle>("input");

                    var result = await _bindStore.BindAsync(input.Type, input.Token);
                    return(result);
                }
                catch (Exception e)
                {
                    context.Errors.Add(new ExecutionError("Unable to bind with giving input"));
                }
                return(null);
                //                    return await Task.Run(() => { return ""; });
            },
                                                  deprecationReason: null);
        }
Пример #5
0
 internal void UpdateSelection(QueryCore query)
 {
     this._selectedQuery = query;
     if (((query == null) || query.Predefined) || (query.FilePath.Length == 0))
     {
         if (base.SelectedNode != null)
         {
             base.SelectedNode = null;
         }
     }
     else if ((this._myExtensionsNode != null) && (query.FilePath == this._myExtensionsNode.FilePath))
     {
         base.SelectedNode = this._myExtensionsNode;
     }
     else if (!this._fileNodes.ContainsKey(query.FilePath))
     {
         FileNode node = this.FindQueryByPath(query.FilePath);
         if (node != base.SelectedNode)
         {
             base.SelectedNode = node;
         }
     }
     else
     {
         FileNode node2 = this._fileNodes[query.FilePath];
         if (node2 != base.SelectedNode)
         {
             base.SelectedNode = node2;
         }
     }
 }
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <PublishStateModelType>(name: "publishState",
                                                         description: $"Fetches current state.",
                                                         resolve: async context =>
            {
                // Authorization worked, but who is calling us
                var graphQLUserContext = context.UserContext as GraphQLUserContext;
                var principal          = graphQLUserContext.HttpContextAccessor.HttpContext.User;

                // Since this is a B2B api, there probably will not be a subject, hence no real user
                // What we have here is an organization, so we have to find out the clientId, and the client_namespace

                var authContext     = principal.ToAuthContext();
                var requestedFields = (from item in context.SubFields
                                       select item.Key).ToList();

                var result = await _b2bPublisherStore.GetPublishStateAsync(
                    authContext, new Contracts.Models.RequestedFields
                {
                    Fields = requestedFields
                });
                return(result);
            },
                                                         deprecationReason: null);
        }
Пример #7
0
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     var fieldType = queryCore.FieldAsync <HumanType>(
         name: "human",
         description: null,
         arguments: new QueryArguments(new QueryArgument <NonNullGraphType <StringGraphType> >
     {
         Name = "id", Description = "id of the human"
     }),
         resolve: async context =>
     {
         try
         {
             var userContext = context.UserContext.As <GraphQLUserContext>();
             var human       = await _starWarsData.GetHumanByIdAsync(context.GetArgument <string>("id"));
             return(human);
         }
         catch (Exception e)
         {
         }
         return(null);
         //                    return await Task.Run(() => { return ""; });
     },
         deprecationReason: null);
 }
Пример #8
0
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     queryCore.FieldAsync <StringGraphType>(
         "dogName2",
         resolve: async context => await DogNameAsync()
         );
 }
Пример #9
0
 public void Dispose()
 {
     lock (this._locker)
     {
         if (!this._isDisposed)
         {
             this._isDisposed         = true;
             this.ReadLineRequested   = null;
             this.QueryCompiled       = null;
             this.QueryCompleted      = null;
             this.PluginsReady        = null;
             this.CustomClickComplete = null;
             this._executionProgress  = LINQPad.ExecutionModel.ExecutionProgress.Finished;
             this._cancelRequest      = true;
             this.ClearServer();
             this._query  = null;
             this._source = null;
             try
             {
                 RemotingServices.Disconnect(this);
             }
             catch
             {
             }
         }
     }
 }
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     queryCore.Field <IdentityModelType>(name: "authRequired",
                                         description: null,
                                         resolve: Resolver,
                                         deprecationReason: null);
 }
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     var fieldName = "subscription";
     var fieldType = queryCore.FieldAsync <SubscriptionDocumentType>(name: fieldName,
                                                                     description: null,
                                                                     arguments: new QueryArguments(new QueryArgument <NonNullGraphType <SubscriptionQueryInput> > {
         Name = "input"
     }),
                                                                     resolve: async context =>
     {
         try
         {
             var userContext = context.UserContext.As <GraphQLUserContext>();
             var input       = context.GetArgument <SubscriptionQueryHandle>("input");
             var result      = new SubscriptionDocumentHandle
             {
                 Value = new SomeData()
                 {
                     SubscriptionQueryHandle = input, Ted = "Well Hellow"
                 },
                 Id       = input.Id,
                 MetaData = input.MetaData
             };
             return(result);
         }
         catch (Exception e)
         {
         }
         return(null);
         //                    return await Task.Run(() => { return ""; });
     },
                                                                     deprecationReason: null);
 }
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <DiscoveryResultType>(name: "graphQLDiscovery",
                                                       description: $"Discovery of downstream graphQL services",
                                                       resolve: GraphQLDiscoveryResolver,

                                                       deprecationReason: null);
        }
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <ListGraphType <TokenExchangeResponseType> >(name: "tokenExchange",
                                                                              description: $"Given a proper list of OAuth2 Tokens, returns an authorization payload for downstream authorized calls.",
                                                                              arguments: new QueryArguments(new QueryArgument <NonNullGraphType <TokenExchangeInput> > {
                Name = "input"
            }),
                                                                              resolve: async context =>
            {
                try
                {
                    var graphQLUserContext = context.UserContext as GraphQLUserContext;


                    _summaryLogger.Add("query", "bind");
                    var input = context.GetArgument <BindInputModel>("input");

                    if (input.Tokens == null || input.Tokens.Count == 0)
                    {
                        throw new Exception("no tokens present in the request!");
                    }
                    var requestedFields = (from item in context.SubFields
                                           select item.Key).ToList();

                    var summaryLog = string.Join(";", _summaryLogger.Select(x => x.Key + "=" + x.Value).ToArray());


                    _summaryLogger.Add("requestedFields", string.Join(" ", requestedFields));

                    var tokens = (from item in input.Tokens
                                  let c = new TokenWithScheme()
                    {
                        Token = item.Token,
                        TokenScheme = item.TokenScheme
                    }
                                  select c).ToList();

                    var tokenExchangeRequest = new TokenExchangeRequest()
                    {
                        Tokens = tokens,
                        Extras = input.Extras
                    };
                    var tokenExchangeResponse = await _tokenExchangeHandlerRouter.ProcessExchangeAsync(input.Exchange, tokenExchangeRequest);

                    return(tokenExchangeResponse);
                }
                catch (Exception e)
                {
                    _summaryLogger.Add("exception", e.Message);
                    context.Errors.Add(new ExecutionError("Unable to process request", e));
                }

                return(null);
            },
                                                                              deprecationReason: null);
        }
Пример #14
0
 public Client(QueryCore query, string querySelection, bool compileOnly, QueryCompilationEventArgs lastCompilation, Func <Client, Server> serverGenerator, PluginWindowManager pluginWinManager)
 {
     this._query            = query;
     this._partialSource    = !string.IsNullOrEmpty(querySelection);
     this._source           = this._partialSource ? querySelection : this._query.Source;
     this._compileOnly      = compileOnly;
     this._lastCompilation  = lastCompilation;
     this._serverGenerator  = serverGenerator;
     this._pluginWinManager = pluginWinManager;
 }
Пример #15
0
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     queryCore.FieldAsync <UnitTestResultType>(name: "unitTestCollection",
                                               description: $"a set of complex data collections",
                                               resolve: UnitTestCollectionResolver,
                                               deprecationReason: null);
     queryCore.FieldAsync <UnitTestResultType>(name: "unitTestCollectionThrow",
                                               description: $"THROWS a set of complex data collections",
                                               resolve: UnitTestCollectionResolverThrows,
                                               deprecationReason: null);
 }
Пример #16
0
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     var fieldType = queryCore.FieldAsync <CharacterInterface>(
         name: "hero",
         description: null,
         resolve: async context =>
     {
         var result = await _starWarsData.GetDroidByIdAsync("3");
         return(result);
     });
 }
Пример #17
0
        public override string GetFooter(QueryCore query)
        {
            StringBuilder builder = new StringBuilder();

            builder.AppendLine();
            if (query.QueryKind == QueryLanguage.FSharpExpression)
            {
                builder.AppendLine("  ).Dump()");
                builder.AppendLine("end");
            }
            return(builder.ToString());
        }
Пример #18
0
 public static QueryCompiler Create(QueryCore query, bool addReferences)
 {
     if (query.QueryKind.ToString().StartsWith("VB", StringComparison.Ordinal))
     {
         return(new VBQueryCompiler(query, addReferences));
     }
     if (query.QueryKind.ToString().StartsWith("FSharp", StringComparison.Ordinal))
     {
         return(new FSharpQueryCompiler(query, addReferences));
     }
     return(new CSharpQueryCompiler(query, addReferences));
 }
Пример #19
0
 public void AddGraphTypeFields(QueryCore queryCore)
 {
     queryCore.FieldAsync <CustomerType>(
         "customer",
         arguments: new QueryArguments(new QueryArgument <NonNullGraphType <StringGraphType> > {
         Name = "id"
     }),
         resolve: async context => {
         return(await context.TryAsyncResolve(CustomerResolver));
     }
         );
 }
Пример #20
0
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            queryCore.FieldAsync <CustomerResultType>(name: "customerLoyalty",
                                                      description: null,
                                                      resolve: async context =>
            {
                var startQuery = context?.Operation?
                                 .SelectionSet?
                                 .Selections
                                 .Select(x => x as Field)
                                 .FirstOrDefault();


                var fields = startQuery?.SelectionSet?
                             .Selections
                             .Select(x => x as Field)
                             .ToList();
                var prizesField = fields?
                                  .Where(x => "prizes".EqualsNoCase(x.Name))
                                  .FirstOrDefault();


                var userContext = context.UserContext.As <GraphQLUserContext>();
                var user        = userContext.HttpContextAccessor.HttpContext.User;
                var query       = from item in user.Claims
                                  where item.Type == ClaimTypes.NameIdentifier
                                  select item;
                if (query.Any())
                {
                    var claim          = query.First();
                    var userId         = claim.Value;
                    var customer       = await _customerLoyaltyStore.GetCustomerAsync(userId);
                    var customerResult = new CustomerResult
                    {
                        ID = customer.ID,
                        LoyaltyPointBalance = customer.LoyaltyPointBalance
                    };

                    if (prizesField != null)
                    {
                        var prizeStore = _lazyPrizeStore;
                        var prizes     =
                            await prizeStore.GetAvailablePrizesAsync(customer.LoyaltyPointBalance);
                        customerResult.Prizes = prizes;
                    }

                    return(customerResult);
                }
                return(null);
            },
                                                      deprecationReason: null);
        }
Пример #21
0
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            Func <ResolveFieldContext, string, object> func = (context, id) => _starWarsData.GetDroidByIdAsync(id);

            queryCore.FieldDelegate <DroidType>(
                "droid",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "id", Description = "id of the droid"
            }
                    ),
                resolve: func
                );
        }
Пример #22
0
        protected QueryCompiler(QueryCore query, bool addReferences)
        {
            this.IsMyExtensions = query.IsMyExtensions;
            if (this.IsMyExtensions)
            {
                MyExtensions.UpdateAdditionalRefs(query);
            }
            if (GacResolver.IsEntityFrameworkAvailable)
            {
                this.References.Add("System.Data.Entity.dll");
            }
            DataContextDriver driver = query.GetDriver(true);

            if ((query.Repository != null) && (driver != null))
            {
                this.ImportedNamespaces.RemoveRange(driver.GetNamespacesToRemoveInternal(query.Repository));
                this.ImportedNamespaces.AddRange(driver.GetNamespacesToAddInternal(query.Repository));
                if (addReferences)
                {
                    this.References.AddRange(query.Repository.GetDriverAssemblies());
                }
            }
            if (addReferences)
            {
                this.References.AddRange(PluginAssembly.GetCompatibleAssemblies(query.IsMyExtensions));
            }
            this.ImportedNamespaces.AddRange(query.AdditionalNamespaces);
            if (!string.IsNullOrEmpty(query.QueryBaseClassNamespace))
            {
                this.ImportedNamespaces.Add(query.QueryBaseClassNamespace);
            }
            if (addReferences)
            {
                this.References.AddRange(query.AllFileReferences);
                foreach (string str in query.AdditionalGACReferences)
                {
                    string item = GacResolver.FindPath(str);
                    if (item != null)
                    {
                        this.References.Add(item);
                    }
                }
                this.References.AddRange(query.GetStaticSchemaSameFolderReferences());
                if (!this.IsMyExtensions)
                {
                    this.References.AddRange(MyExtensions.AdditionalRefs);
                }
            }
        }
Пример #23
0
        public override string GetFooter(QueryCore query)
        {
            StringBuilder builder = new StringBuilder();

            if (query.QueryKind == QueryLanguage.VBExpression)
            {
                builder.AppendLine("LINQPad.Extensions.Dump(linqPadQuery)");
            }
            if (query.QueryKind != QueryLanguage.VBProgram)
            {
                builder.AppendLine("End Sub");
            }
            builder.AppendLine("End Class");
            return(builder.ToString());
        }
Пример #24
0
 public QueryProps(QueryCore q)
 {
     this._query = q;
     this.InitializeComponent();
     foreach (string str in q.AdditionalReferences)
     {
         this.AddListViewAssembly(str);
     }
     foreach (string str in q.AdditionalGACReferences)
     {
         this.AddListViewAssembly(new AssemblyName(str));
     }
     if (q.IsMyExtensions)
     {
         Label label = new Label {
             Dock     = DockStyle.Top,
             AutoSize = true,
             Text     = "My Extensions: References that you add here will apply to all queries",
             Padding  = new Padding(0, 0, 0, 3),
             Font     = new Font(FontManager.GetDefaultFont(), FontStyle.Bold)
         };
         this.tabPage1.Controls.Add(label);
         this.btnSetAsDefault.Enabled = false;
     }
     else
     {
         QueryCore query = MyExtensions.Query;
         if (query != null)
         {
             foreach (string str in query.AdditionalReferences)
             {
                 this.FlagAsInherited(this.AddListViewAssembly(str));
             }
             foreach (string str in query.AdditionalGACReferences)
             {
                 this.FlagAsInherited(this.AddListViewAssembly(new AssemblyName(str)));
             }
         }
     }
     this.txtNS.Lines = q.AdditionalNamespaces.ToArray <string>();
     this.chkIncludePredicateBuilder.Checked = q.IncludePredicateBuilder;
     this._origNS = this.txtNS.Text.Trim();
     this.EnableControls();
     this.lvRefs.Sorting    = SortOrder.Ascending;
     this.lvRefs.MouseMove += new MouseEventHandler(this.lvRefs_MouseMove);
     this.lvRefs.MouseDown += new MouseEventHandler(this.lvRefs_MouseDown);
     this.tc.TabPages[2].Dispose();
 }
Пример #25
0
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            var fieldName = "echo";

            var fieldType = queryCore.FieldAsync <VersionQueryOutput>(name: fieldName,
                                                                      description: null,
                                                                      arguments: new QueryArguments(new QueryArgument <VersionQueryInput> {
                Name = "input"
            }),
                                                                      resolve: async context =>
            {
                var input = context.GetArgument <VersionQueryHandle>("input");
                return(input);
            },
                                                                      deprecationReason: null);
        }
Пример #26
0
        public override string GetFooter(QueryCore query)
        {
            StringBuilder builder = new StringBuilder();

            builder.AppendLine();
            if (query.QueryKind == QueryLanguage.Expression)
            {
                builder.AppendLine("  );");
            }
            if (query.QueryKind != QueryLanguage.Program)
            {
                builder.AppendLine("  }");
            }
            builder.AppendLine("}");
            return(builder.ToString());
        }
        public void AddGraphTypeFields(QueryCore queryCore)
        {
            var fieldName = "program";

            var fieldType = queryCore.FieldAsync <ProgramQueryOutput>(name: fieldName,
                                                                      description: null,
                                                                      arguments: new QueryArguments(new QueryArgument <ProgramQueryInput> {
                Name = "input"
            }),
                                                                      resolve: async context =>
            {
                var input    = context.GetArgument <IsInstalledQuery>("input");
                var programs = new Programs();
                var result   = programs.GetIsInstalled(input);
                var final    = new IsInstalledOutput()
                {
                    DisplayName = input.DisplayName,
                    IsInstalled = result.Result.Value
                };
                return(final);
            },
                                                                      deprecationReason: null);

            fieldName = "installedApps";

            fieldType = queryCore.FieldAsync <InstalledPageType>(name: fieldName,
                                                                 description: null,
                                                                 arguments: new QueryArguments(new QueryArgument <ProgramPageQueryInput> {
                Name = "input"
            }),
                                                                 resolve: async context =>
            {
                var input    = context.GetArgument <PageQuery>("input");
                var programs = new Programs();
                var result   = programs.GetPage(input);
                var final    = new InstalledPage()
                {
                    Count         = result.Length,
                    NextOffset    = input.Offset + input.Count,
                    CurrentOffset = input.Offset,
                    InstalledApps = new List <InstalledApp>(result)
                };
                return(final);
            },
                                                                 deprecationReason: null);
        }
Пример #28
0
        public override string GetHeader(QueryCore q)
        {
            StringBuilder builder = new StringBuilder();

            if (q.QueryKind == QueryLanguage.FSharpExpression)
            {
                builder.AppendLine("namespace global\r\n");
            }
            builder.AppendLine(string.Join("\r\n", (from n in base.ImportedNamespaces select "open " + n).ToArray <string>()));
            builder.AppendLine("open LINQPad.FSharpExtensions");
            if (q.QueryKind == QueryLanguage.FSharpProgram)
            {
                builder.AppendLine("let Dump = Extensions.Dump");
            }
            DataContextDriver driver   = q.GetDriver(true);
            StringBuilder     builder2 = new StringBuilder();

            if (q.QueryKind == QueryLanguage.FSharpExpression)
            {
                builder.Append("\r\ntype UserQuery(");
                if ((driver != null) && (q.QueryKind == QueryLanguage.FSharpExpression))
                {
                    builder2.Append(" inherit " + q.QueryBaseClassName + "(");
                    ParameterDescriptor[] contextConstructorParams = base.GetContextConstructorParams(driver, q.Repository);
                    builder.Append(string.Join(", ", (from p in contextConstructorParams select p.ParameterName + " : " + p.FullTypeName).ToArray <string>()));
                    builder.Append(") as this ");
                    builder2.Append(string.Join(", ", (from p in contextConstructorParams select p.ParameterName).ToArray <string>()));
                    builder2.Append(")");
                }
                else
                {
                    builder.Append(")");
                }
                builder.AppendLine(" = class");
                if (builder2.Length > 0)
                {
                    builder.AppendLine(builder2.ToString());
                }
                builder.AppendLine(" member private dc.RunUserAuthoredQuery() =");
                builder.AppendLine("  (");
            }
            return(builder.ToString());
        }
Пример #29
0
        public override string GetHeader(QueryCore query)
        {
            StringBuilder builder = new StringBuilder("#Const LINQPAD = True\r\n");

            builder.AppendLine(string.Join("\r\n", (from n in base.ImportedNamespaces select "Imports " + n).ToArray <string>()));
            builder.AppendLine();
            if (query.IncludePredicateBuilder)
            {
                builder.AppendLine("Public Module PredicateBuilder\r\n    <System.Runtime.CompilerServices.Extension> _\r\n    Public Function [And](Of T)(ByVal expr1 As Expression(Of Func(Of T, Boolean)), ByVal expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))\r\n        Dim invokedExpr As Expression = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())\r\n        Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters)\r\n    End Function\r\n\r\n    Public Function [False](Of T)() As Expression(Of Func(Of T, Boolean))\r\n      Return Function(f) False\r\n    End Function\r\n\r\n    <System.Runtime.CompilerServices.Extension> _\r\n    Public Function [Or](Of T)(ByVal expr1 As Expression(Of Func(Of T, Boolean)), ByVal expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))\r\n        Dim invokedExpr As Expression = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())\r\n        Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters)\r\n    End Function\r\n\r\n    Public Function [True](Of T)() As Expression(Of Func(Of T, Boolean))\r\n      Return Function(f) True\r\n    End Function\r\n\r\nEnd Module\r\n");
            }
            builder.AppendLine("Public Class UserQuery");
            if (query.QueryBaseClassName != null)
            {
                builder.AppendLine("  Inherits " + query.QueryBaseClassName);
            }
            builder.AppendLine();
            builder.AppendLine();
            DataContextDriver driver = query.GetDriver(true);

            if (driver != null)
            {
                ParameterDescriptor[] contextConstructorParams = base.GetContextConstructorParams(driver, query.Repository);
                builder.Append("  Public Sub New (");
                builder.Append(string.Join(", ", (from p in contextConstructorParams select "ByVal " + p.ParameterName + " As " + p.FullTypeName).ToArray <string>()));
                builder.AppendLine(")");
                builder.Append("    MyBase.New(");
                builder.Append(string.Join(", ", (from p in contextConstructorParams select p.ParameterName).ToArray <string>()));
                builder.AppendLine(")");
                builder.AppendLine("  End Sub");
                builder.AppendLine();
            }
            builder.AppendLine("  Private Sub RunUserAuthoredQuery()");
            if (query.QueryKind == QueryLanguage.VBExpression)
            {
                builder.Append("Dim linqPadQuery = ");
            }
            else if (query.QueryKind == QueryLanguage.VBProgram)
            {
                builder.AppendLine("  Main\r\nEnd Sub");
            }
            return(builder.ToString());
        }
Пример #30
0
        public override string GetHeader(QueryCore q)
        {
            StringBuilder builder = new StringBuilder("#define LINQPAD\r\n");

            builder.AppendLine(string.Join("\r\n", (from n in base.ImportedNamespaces select "using " + n + ";").ToArray <string>()));
            if (q.IncludePredicateBuilder)
            {
                builder.AppendLine("public static class PredicateBuilder\r\n{\r\n\tpublic static System.Linq.Expressions.Expression<Func<T, bool>> True<T> () { return f => true; }\r\n\tpublic static System.Linq.Expressions.Expression<Func<T, bool>> False<T> () { return f => false; }\r\n\r\n\tpublic static System.Linq.Expressions.Expression<Func<T, bool>> Or<T> (this System.Linq.Expressions.Expression<Func<T, bool>> expr1, System.Linq.Expressions.Expression<Func<T, bool>> expr2)\r\n\t{\r\n\t\tSystem.Linq.Expressions.Expression invokedExpr = System.Linq.Expressions.Expression.Invoke (\r\n\t\t  expr2, expr1.Parameters.Cast<System.Linq.Expressions.Expression> ());\r\n\r\n\t\treturn System.Linq.Expressions.Expression.Lambda<Func<T, bool>> (\r\n\t\t  System.Linq.Expressions.Expression.OrElse (expr1.Body, invokedExpr), expr1.Parameters);\r\n\t}\r\n\r\n\tpublic static System.Linq.Expressions.Expression<Func<T, bool>> And<T> (this System.Linq.Expressions.Expression<Func<T, bool>> expr1, System.Linq.Expressions.Expression<Func<T, bool>> expr2)\r\n\t{\r\n\t\tSystem.Linq.Expressions.Expression invokedExpr = System.Linq.Expressions.Expression.Invoke (\r\n\t\t  expr2, expr1.Parameters.Cast<System.Linq.Expressions.Expression> ());\r\n\r\n\t\treturn System.Linq.Expressions.Expression.Lambda<Func<T, bool>> (\r\n\t\t  System.Linq.Expressions.Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);\r\n\t}\r\n}");
            }
            builder.Append("\r\npublic partial class UserQuery");
            if (q.QueryBaseClassName != null)
            {
                builder.Append(" : " + q.QueryBaseClassName);
            }
            builder.AppendLine("\r\n{");
            DataContextDriver driver = q.GetDriver(true);

            if (driver != null)
            {
                builder.Append("  public UserQuery (");
                ParameterDescriptor[] contextConstructorParams = base.GetContextConstructorParams(driver, q.Repository);
                builder.Append(string.Join(", ", (from p in contextConstructorParams select p.FullTypeName + " " + p.ParameterName).ToArray <string>()));
                builder.Append(") : base (");
                builder.Append(string.Join(", ", (from p in contextConstructorParams select p.ParameterName).ToArray <string>()));
                builder.AppendLine(") { }");
            }
            builder.AppendLine("\r\n  [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]");
            builder.AppendLine("  void RunUserAuthoredQuery()");
            builder.AppendLine("  {");
            if (q.QueryKind == QueryLanguage.Expression)
            {
                builder.AppendLine("  LINQPad.Extensions.Dump<object> (");
            }
            else if (q.QueryKind == QueryLanguage.Program)
            {
                builder.AppendLine("  Main();");
                builder.AppendLine("}");
            }
            return(builder.ToString());
        }