Skip to content

Commit 6b8aa66

Browse files
committed
TableSchemaBuilder seems to be working correctly for advance types.
Failing Component test when trying to write to BQ itself
1 parent 9cf6360 commit 6b8aa66

File tree

4 files changed

+34
-10
lines changed

4 files changed

+34
-10
lines changed

AzureFunctions.Extensions.GoogleBigQuery.ComponentTests/BigQueryServiceTests.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,31 @@
11
using AzureFunctions.Extensions.GoogleBigQuery.TestsCommon;
2+
using Microsoft.Azure.WebJobs.Host.Config;
23
using Microsoft.VisualStudio.TestTools.UnitTesting;
34
using System;
5+
using System.Threading;
6+
using System.Threading.Tasks;
47

58
namespace AzureFunctions.Extensions.GoogleBigQuery.ComponentTests {
69
[TestClass]
710
public class BigQueryServiceTests {
811

12+
private BigQueryService bigQueryService = null;
13+
14+
[TestInitialize]
15+
public void Initialize() {
16+
bigQueryService = new BigQueryService(null, "damiao-1982", "extensiontest", "table1", typeof(TestBigQueryRow));
17+
}
18+
919
[TestMethod]
10-
public void InsertRecord_NullablesNulls() {
20+
public async Task InsertRowsAsync_EmptyTestBigQueryRow() {
1121

1222
//Arrange
1323
TestBigQueryRow testBigQueryRow = new TestBigQueryRow(DateTime.UtcNow, "insertId_1") {
14-
24+
1525
};
16-
26+
1727
//Act
28+
await bigQueryService.InsertRowsAsync(testBigQueryRow.Date, new TestBigQueryRow[] { testBigQueryRow }, CancellationToken.None);
1829

1930
//Assert
2031

AzureFunctions.Extensions.GoogleBigQuery.UnitTests/TableSchemaBuilderServiceTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ public void GetTableSchema_TestBigQueryRow() {
2323

2424
//...
2525

26+
Assert.IsNull(tabelSchema.Fields[4].Description);
27+
Assert.AreEqual("BoolEnumerable", tabelSchema.Fields[4].Name);
28+
Assert.AreEqual("REPEATED", tabelSchema.Fields[4].Mode);
29+
Assert.AreEqual("BOOLEAN", tabelSchema.Fields[4].Type);
30+
Assert.IsNull(tabelSchema.Fields[4].Fields);
31+
32+
//...
33+
2634
Assert.IsNull(tabelSchema.Fields[65].Description);
2735
Assert.AreEqual("Record1", tabelSchema.Fields[65].Name);
2836
Assert.AreEqual("NULLABLE", tabelSchema.Fields[65].Mode);

AzureFunctions.Extensions.GoogleBigQuery/BigQueryService.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace AzureFunctions.Extensions.GoogleBigQuery {
1212

13-
internal class BigQueryService {
13+
public class BigQueryService {
1414

1515
private const string BigQueryDateTimeFormat = "yyyy-MM-dd HH:mm:ss";
1616
private System.Globalization.CultureInfo cultureUS = new System.Globalization.CultureInfo("en-US");
@@ -75,7 +75,10 @@ public BigQueryService(byte[] credentials, string projectId, string datasetId, s
7575

7676
private Task<BigQueryTable> GetTable(DateTime date, CancellationToken cancellationToken) {
7777

78-
GoogleCredential googleCredential = GoogleCredential.FromStream(new System.IO.MemoryStream(credentials));
78+
GoogleCredential googleCredential = null;
79+
if (credentials != null) {
80+
googleCredential = GoogleCredential.FromStream(new System.IO.MemoryStream(credentials));
81+
}
7982
var client = Google.Cloud.BigQuery.V2.BigQueryClient.Create(projectId, googleCredential);
8083

8184
return client.GetOrCreateTableAsync(

AzureFunctions.Extensions.GoogleBigQuery/TableSchemaBuilderService.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,10 @@ private static TableFieldSchema GetTableFieldSchema(PropertyInfo propertyInfo) {
4848
innerPropertyType = propertyType.GenericTypeArguments[0];
4949
} else {
5050
if (propertyType.IsArray) {
51-
52-
//TODO: find real base type in array
53-
54-
innerPropertyType = propertyType.GenericTypeArguments[0];
51+
innerPropertyType = propertyType.GetElementType();
5552
}
5653
}
57-
54+
5855
if (innerPropertyType.IsClass && innerPropertyType.Namespace != "System") {//crappy but works for now
5956

6057
mode = BigQueryFieldMode.Nullable;
@@ -123,6 +120,10 @@ private static (string, BigQueryFieldMode) GetBigQueryTypeAndMode(PropertyInfo p
123120
isIEnumerable = true;
124121
}
125122

123+
if (isIEnumerable && propertyTypeName != "BYTE") {
124+
fieldMode = BigQueryFieldMode.Repeated;
125+
}
126+
126127
switch (propertyTypeName) {
127128
case "BOOLEAN":
128129
type = "BOOLEAN";
@@ -150,6 +151,7 @@ private static (string, BigQueryFieldMode) GetBigQueryTypeAndMode(PropertyInfo p
150151
type = "BYTES";
151152
} else {
152153
type = "INTEGER";
154+
fieldMode = BigQueryFieldMode.Repeated;
153155
}
154156
break;
155157
}

0 commit comments

Comments
 (0)