/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param context custom object provided to each {@link graphql.schema.DataFetcher} * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, Object context) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .context(context) .root(context) // This we are doing do be backwards compatible .build(); return execute(executionInput); }
public static void main(String[] args) { GraphQLSchema schema = buildSchema(); GraphQL graphql = GraphQL.newGraphQL(schema).build(); Map<String, Object> root = new HashMap<>(); root.put("dateField", LocalDateTime.of(1969, 10, 8, 0, 0)); String query = "" + "query {\n" + " default : dateField \n" + " usa : dateField(format : \"MM-dd-YYYY\") \n" + "}"; ExecutionInput executionInput = ExecutionInput.newExecutionInput() .root(root) .query(query) .build(); ExecutionResult executionResult = graphql.execute(executionInput); Map<String, Object> data = executionResult.getData(); // data['default'] == '08-10-1969' // data['usa'] == '10-08-1969' } }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param context custom object provided to each {@link graphql.schema.DataFetcher} * @param variables variable values uses as argument * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, Object context, Map<String, Object> variables) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .context(context) .root(context) // This we are doing do be backwards compatible .variables(variables) .build(); return execute(executionInput); }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param context custom object provided to each {@link graphql.schema.DataFetcher} * @param variables variable values uses as argument * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, Object context, Map<String, Object> variables) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .context(context) .root(context) // This we are doing do be backwards compatible .variables(variables) .build(); return execute(executionInput); }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param context custom object provided to each {@link graphql.schema.DataFetcher} * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, Object context) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .context(context) .root(context) // This we are doing do be backwards compatible .build(); return execute(executionInput); }
/** * This helps you transform the current ExecutionInput object into another one by starting a builder with all * the current values and allows you to transform it how you want. * * @param builderConsumer the consumer code that will be given a builder to transform * * @return a new ExecutionInput object based on calling build on that builder */ public ExecutionInput transform(Consumer<Builder> builderConsumer) { Builder builder = new Builder() .query(this.query) .operationName(this.operationName) .context(this.context) .root(this.root) .dataLoaderRegistry(this.dataLoaderRegistry) .variables(this.variables); builderConsumer.accept(builder); return builder.build(); }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param operationName the name of the operation to execute * @param context custom object provided to each {@link graphql.schema.DataFetcher} * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, String operationName, Object context) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .operationName(operationName) .context(context) .root(context) // This we are doing do be backwards compatible .build(); return execute(executionInput); }
@Override @Transactional(TxType.SUPPORTS) public ExecutionResult execute(String query, Map<String, Object> arguments) { // Need to inject variables in context to support parameter bindings in reverse queries Map<String, Object> context = Collections.singletonMap("variables", arguments); ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .variables(arguments) .root(context) .context(context) .build(); if (arguments == null) return graphQL.execute(query); else return graphQL.execute(executionInput); }
@Test public void query_apiAndDbClass_valueIsDeterminedByDBMethod() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query7.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { nameX } }").root(new Query7())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("nameX").toString(), "guy/yarin"); }
@Test public void query_apiAndDbClass_valueIsDeterminedByGetPrefixDBMethod() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query4.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { nameX } }").root(new Query4())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("nameX").toString(), "guy/yarin"); }
@Test public void query_apiAndDbClass_valueIsDeterminedByDBField() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query3.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { nameX } }").root(new Query3())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("nameX").toString(), "osher"); }
@Test public void query_staticMethod_valueIsDeterminedByMethod(){ GraphQLObjectType object = GraphQLAnnotations.object(StaticApi.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { name }").root(new StaticApi())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, String>) result.getData()).get("name").toString(), "osher"); }
@Test public void query_onlyApiClass_valueIsDeterminedByMethod() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query2.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { name } }").root(new Query2())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("name").toString(), "guy"); }
@Test public void query_apiAndDbClassAndApiIsInvokeDetached_valueIsDeterminedByApiMethod() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query5.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { name } }").root(new Query5())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("name").toString(), "yarin/guy/osher"); }
@Test public void query_apiAndDbClass_valueIsDeterminedByIsPrefixDBMethod() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query6.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { nameX } }").root(new Query6())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("nameX").toString(), "guy/yarin"); }
@Test public void query_onlyApiClass_valueIsDeterminedByField() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(Query1.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(builder -> builder.query("query { queryField { name } }").root(new Query1())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("queryField").get("name").toString(), "yarin"); }
protected ExecutionInput createExecutionInput(GraphQLRequest graphQLRequest) { return ExecutionInput.newExecutionInput() .query(graphQLRequest.getQuery()) .operationName(graphQLRequest.getOperationName()) .context(context) .root(root) .variables(graphQLRequest.getVariables()) .dataLoaderRegistry(context.getDataLoaderRegistry().orElse(new DataLoaderRegistry())) .build(); }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param operationName the name of the operation to execute * @param context custom object provided to each {@link graphql.schema.DataFetcher} * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, String operationName, Object context) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .operationName(operationName) .context(context) .root(context) // This we are doing do be backwards compatible .build(); return execute(executionInput); }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param operationName name of the operation to execute * @param context custom object provided to each {@link graphql.schema.DataFetcher} * @param variables variable values uses as argument * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, String operationName, Object context, Map<String, Object> variables) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .operationName(operationName) .context(context) .root(context) // This we are doing do be backwards compatible .variables(variables) .build(); return execute(executionInput); }
/** * This helps you transform the current ExecutionInput object into another one by starting a builder with all * the current values and allows you to transform it how you want. * * @param builderConsumer the consumer code that will be given a builder to transform * * @return a new ExecutionInput object based on calling build on that builder */ public ExecutionInput transform(Consumer<Builder> builderConsumer) { Builder builder = new Builder() .query(this.query) .operationName(this.operationName) .context(this.context) .root(this.root) .dataLoaderRegistry(this.dataLoaderRegistry) .variables(this.variables); builderConsumer.accept(builder); return builder.build(); }