コード例 #1
0
 internal static GroovyGremlinQuery?TryToGroovy(this ISerializedGremlinQuery serializedGremlinQuery)
 {
     return(serializedGremlinQuery switch
     {
         GroovyGremlinQuery serializedQuery => serializedQuery,
         BytecodeGremlinQuery byteCodeQuery => byteCodeQuery.ToGroovy(),
         _ => default
     });
コード例 #2
0
            public IAsyncEnumerable <object> Execute(ISerializedGremlinQuery serializedQuery, IGremlinQueryEnvironment environment)
            {
                return(AsyncEnumerable.Create(Core));

                async IAsyncEnumerator <object> Core(CancellationToken ct)
                {
                    var maybeResults = default(ResultSet <JToken>?);
                    var clientTask   = _lazyGremlinClient.GetValue(environment.Logger);

                    if (!Guid.TryParse(serializedQuery.Id, out var requestId))
                    {
                        requestId = Guid.NewGuid();
                        environment.Logger.LogInformation($"Mapping query id {serializedQuery.Id} to request id {requestId}.");
                    }

                    var requestMessage = serializedQuery switch
                    {
                        GroovyGremlinQuery groovyScript => RequestMessage
                        .Build(Tokens.OpsEval)
                        .AddArgument(Tokens.ArgsGremlin, groovyScript.Script)
                        .AddArgument(Tokens.ArgsAliases, _aliasArgs)
                        .AddArgument(Tokens.ArgsBindings, groovyScript.Bindings)
                        .OverrideRequestId(requestId)
                        .Create(),
                        BytecodeGremlinQuery bytecodeQuery => RequestMessage
                        .Build(Tokens.OpsBytecode)
                        .Processor(Tokens.ProcessorTraversal)
                        .AddArgument(Tokens.ArgsGremlin, bytecodeQuery.Bytecode)
                        .AddArgument(Tokens.ArgsAliases, _aliasArgs)
                        .OverrideRequestId(requestId)
                        .Create(),
                        _ => throw new ArgumentException($"Cannot handle serialized query of type {serializedQuery.GetType()}.")
                    };

                    maybeResults = await(await clientTask)
                                   .SubmitAsync <JToken>(requestMessage)
                                   .ConfigureAwait(false);

                    if (maybeResults is { } results)
                    {
                        foreach (var obj in results)
                        {
                            yield return(obj);
                        }
                    }
                }
            }
        }