コード例 #1
0
        static async Task Main(string[] args)
        {
            var connectionToDb = await File.ReadAllTextAsync("connectionString.txt");

            var dbContext = ContextBuilder.BuildContext(connectionToDb);
            var jm        = new JoinMonsterExecuter(
                new QueryToSqlConverter(new DefaultAliasGenerator()),
                new SqlCompiler(new SQLiteDialect()),
                new Hydrator()
                );
            var serviceProvider = new FuncServiceProvider(type =>
            {
                var swQuery = new GenericQuery(dbContext, jm);

                if (type == typeof(GenericQuery))
                {
                    return(swQuery);
                }

                return(Activator.CreateInstance(type));
            });

            var schema = new TargetDbSchema(serviceProvider);

            Console.WriteLine("Built a schema");


            var queryToRun = await File.ReadAllTextAsync("query.txt");

            Console.WriteLine("Running GraphQL Query");
            Console.WriteLine(queryToRun);

            await using var connection = new SqlConnection(connectionToDb);

            await connection.OpenAsync();

            var options = new ExecutionOptions
            {
                ThrowOnUnhandledException = true,
                Schema      = schema,
                Query       = queryToRun,
                UserContext = new Dictionary <string, object>
                {
                    { nameof(IDbConnection), connection }
                },
                UnhandledExceptionDelegate = (ctx) =>
                {
                    var e = ctx.Exception;
                }
            };
            var result = await new DocumentExecuter().ExecuteAsync(
                options
                ).ConfigureAwait(true);

            //data.EnrichWithApolloTracing(start);
            Console.WriteLine("Json returned to caller:");
            var writer = new DocumentWriter(true);

            Console.WriteLine(await writer.WriteToStringAsync(result));
        }
コード例 #2
0
        static async Task Main(string[] args)
        {
            SQLiteConnection.CreateFile("starwars.db");

            await using var connection = new SQLiteConnection("Data Source=starwars.db");

            await connection.OpenAsync();

            await PopulateDatabase(connection);

            var compiler    = new SqlCompiler(new SQLiteDialect());
            var hydrator    = new Hydrator();
            var joinMonster = new JoinMonsterExecuter(
                new QueryToSqlConverter(new DefaultAliasGenerator()),
                compiler,
                new BatchPlanner(compiler, hydrator),
                hydrator
                );

            var serviceProvider = new FuncServiceProvider(type =>
            {
                if (type == typeof(StarWarsQuery))
                {
                    return(new StarWarsQuery(joinMonster));
                }

                return(Activator.CreateInstance(type));
            });

            var schema = new StarWarsSchema(serviceProvider);

            var query = @"
{
  human(id: ""1"") {
    name
    id
    homePlanet {
      id
      name
    }
    friends {
      name
    }
  }

  humans {
    name
  }
}";

            var start = DateTime.UtcNow;

            var documentExecuter = new DocumentExecuter();
            var data             = await documentExecuter.ExecuteAsync(options =>
            {
                options.Schema = schema;
                options.FieldMiddleware.Use <InstrumentFieldsMiddleware>();
                options.EnableMetrics = true;
                options.Query         = query;
                options.UserContext   = new Dictionary <string, object>
                {
                    { nameof(IDbConnection), connection }
                };
            });

            // data.EnrichWithApolloTracing(start);

            var writer = new DocumentWriter(true);

            Console.WriteLine(await writer.WriteToStringAsync(data));
        }