From 27d6829d4cd3527d4cc697454b57ce2d31cce107 Mon Sep 17 00:00:00 2001 From: Teemu Koponen Date: Wed, 3 Apr 2024 11:49:58 -0700 Subject: [PATCH] server: Remove an unnecessary AST-to-JSON conversion for the eval input. The cost of this can become non-trivial with larger inputs. Signed-off-by: Teemu Koponen --- server/server.go | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/server/server.go b/server/server.go index 64eeaa6388..b968815f7c 100644 --- a/server/server.go +++ b/server/server.go @@ -884,7 +884,7 @@ func (s *Server) instrumentHandler(handler func(http.ResponseWriter, *http.Reque return httpHandler } -func (s *Server) execQuery(ctx context.Context, br bundleRevisions, txn storage.Transaction, parsedQuery ast.Body, input ast.Value, m metrics.Metrics, explainMode types.ExplainModeV1, includeMetrics, includeInstrumentation, pretty bool) (*types.QueryResponseV1, error) { +func (s *Server) execQuery(ctx context.Context, br bundleRevisions, txn storage.Transaction, parsedQuery ast.Body, input ast.Value, rawInput *interface{}, m metrics.Metrics, explainMode types.ExplainModeV1, includeMetrics, includeInstrumentation, pretty bool) (*types.QueryResponseV1, error) { results := types.QueryResponseV1{} logger := s.getDecisionLogger(br) @@ -893,15 +893,6 @@ func (s *Server) execQuery(ctx context.Context, br bundleRevisions, txn storage. buf = topdown.NewBufferTracer() } - var rawInput *interface{} - if input != nil { - x, err := ast.JSON(input) - if err != nil { - return nil, err - } - rawInput = &x - } - var ndbCache builtins.NDBCache if s.ndbCacheEnabled { ndbCache = builtins.NDBCache{} @@ -2277,7 +2268,7 @@ func (s *Server) v1QueryGet(w http.ResponseWriter, r *http.Request) { return } pretty := pretty(r) - results, err := s.execQuery(ctx, br, txn, parsedQuery, nil, m, explainMode, includeMetrics(r), includeInstrumentation, pretty) + results, err := s.execQuery(ctx, br, txn, parsedQuery, nil, nil, m, explainMode, includeMetrics(r), includeInstrumentation, pretty) if err != nil { switch err := err.(type) { case ast.Errors: @@ -2347,7 +2338,7 @@ func (s *Server) v1QueryPost(w http.ResponseWriter, r *http.Request) { return } - results, err := s.execQuery(ctx, br, txn, parsedQuery, input, m, explainMode, includeMetrics, includeInstrumentation, pretty) + results, err := s.execQuery(ctx, br, txn, parsedQuery, input, request.Input, m, explainMode, includeMetrics, includeInstrumentation, pretty) if err != nil { switch err := err.(type) { case ast.Errors: