/* * Probes to test ExecuteSql and ExecuteStreamingSql call from Spanner stub. * * Args: * stub: An object of SpannerStub. * metrics: A list of metrics. * */ public static void executeSql(Spanner.SpannerClient client, ref Dictionary <string, long> metrics) { long latency; //Create Session Session session = StartSession(client); //Probing ExecuteSql Call stopwatch.Start(); ExecuteSqlRequest executeSqlRequest = new ExecuteSqlRequest(); executeSqlRequest.Session = session.Name; executeSqlRequest.Sql = "select * FROM users"; client.ExecuteSql(executeSqlRequest); stopwatch.Stop(); latency = stopwatch.ElapsedMilliseconds; metrics.Add("execute_sql_latency_ms", latency); //Probing ExecuteStreamingSql Call AsyncServerStreamingCall <PartialResultSet> partial_result_set = client.ExecuteStreamingSql(executeSqlRequest); stopwatch.Start(); var header = partial_result_set.ResponseHeadersAsync; stopwatch.Stop(); latency = stopwatch.ElapsedMilliseconds; metrics.Add("execute_streaming_sql_latency_ms", latency); //Delete Session EndSession(client, session); }
public void ExecuteStreamingSql() { Session session; session = client.CreateSession( new CreateSessionRequest { Database = DatabaseUrl }); Assert.IsNotNull(session); AssertAffinityCount(1); var streamingCall = client.ExecuteStreamingSql( new ExecuteSqlRequest { Session = session.Name, Sql = string.Format("select id, data from {0}", TableName) }); AssertAffinityCount(1, expectedActiveStreamCount: 1); CancellationTokenSource tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var responseStream = streamingCall.ResponseStream; PartialResultSet firstResultSet = null; while (responseStream.MoveNext(token).Result) { if (firstResultSet == null) { firstResultSet = responseStream.Current; } } Assert.AreEqual(ColumnId, firstResultSet?.Values[0].StringValue); AssertAffinityCount(1); client.DeleteSession(new DeleteSessionRequest { Name = session.Name }); AssertAffinityCount(0); }