Skip to content

Commit 31ce6ee

Browse files
committed
feat: ExecuteQuery initial implementation for BigTable Conformance Tests
1 parent 54d5780 commit 31ce6ee

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

apis/Google.Cloud.Bigtable.V2/Google.Cloud.Bigtable.V2.ConformanceTests/CloudBigtableV2TestProxyImpl.cs

+46
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Grpc.Core;
2121
using System;
2222
using System.Collections.Generic;
23+
using System.Linq;
2324
using System.Threading.Tasks;
2425

2526
namespace Google.Cloud.Bigtable.V2.ConformanceTests;
@@ -307,6 +308,51 @@ public override async Task<RowResult> ReadModifyWriteRow(ReadModifyWriteRowReque
307308
}
308309
}
309310

311+
public override async Task<ExecuteQueryResult> ExecuteQuery(ExecuteQueryRequest request, ServerCallContext context)
312+
{
313+
CbtClient cbtClient = GetClient(request.ClientId, context);
314+
try
315+
{
316+
BigtableServiceApiClient.ExecuteQueryStream stream = cbtClient.Client.ExecuteQuery(request.Request);
317+
AsyncResponseStream<ExecuteQueryResponse> enumerator = stream.GetResponseStream();
318+
ExecuteQueryResult result = new ExecuteQueryResult()
319+
{
320+
Metadata = new ResultSetMetadata()
321+
};
322+
IEnumerable<byte> bytes = Enumerable.Empty<byte>();
323+
while (await enumerator.MoveNextAsync())
324+
{
325+
ExecuteQueryResponse response = enumerator.Current;
326+
if (response.ResponseCase == ExecuteQueryResponse.ResponseOneofCase.Metadata)
327+
{
328+
result.ResultSetMetadata = response.Metadata;
329+
result.Metadata.Columns.Add(response.Metadata.ProtoSchema.Columns);
330+
}
331+
// TODO: confirm this implementation works as intended
332+
else if (response.ResponseCase == ExecuteQueryResponse.ResponseOneofCase.Results
333+
&& response.Results.PartialRowsCase == PartialResultSet.PartialRowsOneofCase.ProtoRowsBatch)
334+
{
335+
SqlRow sqlRow = new SqlRow();
336+
sqlRow.Values.Add(ProtoRows.Parser.ParseFrom(response.Results.ProtoRowsBatch.BatchData).Values);
337+
result.Rows.Add(sqlRow);
338+
}
339+
else
340+
{
341+
break;
342+
}
343+
}
344+
result.Status = SetSuccessStatus("ExecuteQuery succeeded", context);
345+
return result;
346+
}
347+
catch (Exception e)
348+
{
349+
return new ExecuteQueryResult
350+
{
351+
Status = SetExceptionStatus(e, context)
352+
};
353+
}
354+
}
355+
310356
public static CloudBigtableV2TestProxyImpl Create() => new();
311357

312358
private CloudBigtableV2TestProxyImpl() => _idClientMap = new();

0 commit comments

Comments
 (0)