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)); }
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)); }