Skip to content

Commit c369784

Browse files
committed
trying to make all types work
1 parent 6b8aa66 commit c369784

File tree

2 files changed

+63
-5
lines changed

2 files changed

+63
-5
lines changed

AzureFunctions.Extensions.GoogleBigQuery.ComponentTests/BigQueryServiceTests.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,28 @@ public async Task InsertRowsAsync_EmptyTestBigQueryRow() {
2121

2222
//Arrange
2323
TestBigQueryRow testBigQueryRow = new TestBigQueryRow(DateTime.UtcNow, "insertId_1") {
24-
24+
Double1Enumerable = new double[] { },
25+
Double2Enumerable = new double[] { },
26+
String1Enumerable = new string[] { },
27+
String2Enumerable = new string[] { },
28+
BooleanEnumerable = new bool[] { },
29+
BoolEnumerable = new bool[] { },
30+
Byte1Enumerable = new byte[] { },
31+
Byte2Enumerable = new byte[] { },
32+
CharEnumerable = new char[] { },
33+
DateTimeEnumerable = new DateTime[] { },
34+
DateTimeOffsetEnumerable =new DateTimeOffset[] { },
35+
DecimalEnumerable = new decimal[] { },
36+
FloatEnumerable = new float[] { },
37+
GuidEnumerable = new Guid[] { },
38+
Int16Enumerable = new Int16[] { },
39+
Int32Enumerable = new Int32[] { },
40+
Int64Enumerable = new Int64[] { },
41+
IntEnumerable = new int[] { },
42+
SingleEnumerable = new Single[] { },
43+
UInt16Enumerable = new UInt16[] { },
44+
UInt32Enumerable = new UInt32[] { },
45+
UInt64Enumerable = new UInt64[] { },
2546
};
2647

2748
//Act

AzureFunctions.Extensions.GoogleBigQuery/BigQueryService.cs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,21 @@ private Task<BigQueryTable> GetTable(DateTime date, CancellationToken cancellati
8181
}
8282
var client = Google.Cloud.BigQuery.V2.BigQueryClient.Create(projectId, googleCredential);
8383

84+
85+
//client.GetTable
86+
87+
//tableSchema.Fields.Insert(0, new TableFieldSchema() { Name = "_PARTITIONTIME", Mode = "REQUIRED", Type = "DATE" });
88+
8489
return client.GetOrCreateTableAsync(
8590
datasetId,
8691
$"{tableId}${date.ToString("yyyyMMdd")}",
92+
//tableId,
8793
tableSchema,
8894
new GetTableOptions(),
89-
new CreateTableOptions(),
95+
new CreateTableOptions() {
96+
FriendlyName = $"{tableId}${date.ToString("yyyyMMdd")}",
97+
TimePartitioning = new TimePartitioning() { Type = "DAY"/*, Field = "_PARTITIONTIME"*/ }
98+
},
9099
cancellationToken);
91100
}
92101

@@ -103,7 +112,7 @@ public Task InsertRowsAsync(DateTime date, IEnumerable<GoogleBigQueryRow> rows,
103112

104113
return GetTable(date, cancellationToken)
105114
.ContinueWith((tableTask) => {
106-
var table = tableTask.Result;
115+
BigQueryTable table = tableTask.Result;
107116
return table.InsertRowsAsync(bigQueryRows, new InsertOptions() { AllowUnknownFields = true }, cancellationToken);
108117
}, cancellationToken).Unwrap();
109118

@@ -115,9 +124,37 @@ public Task InsertRowsAsync(DateTime date, IEnumerable<GoogleBigQueryRow> rows,
115124

116125
private object GetBigQueryValue(PropertyInfo property, GoogleBigQueryRow row) {
117126
switch (property.PropertyType.Name.ToUpper()) {
127+
case "BYTE":
128+
return (int)(byte)property.GetValue(row);
129+
case "CHAR":
130+
return ((char)property.GetValue(row)).ToString();
131+
case "CHAR[]":
132+
return ((char[])property.GetValue(row)).ToString();
118133
case "DATETIME":
119-
var value = (DateTime)property.GetValue(row);
120-
return value.ToString(BigQueryDateTimeFormat, cultureUS);
134+
var datetimeValue = (DateTime)property.GetValue(row);
135+
return datetimeValue.ToString(BigQueryDateTimeFormat, cultureUS);
136+
case "DECIMAL":
137+
return (float)(decimal)property.GetValue(row);
138+
case "GUID":
139+
return ((Guid)property.GetValue(row)).ToString();
140+
case "UINT64":
141+
return (int)(UInt64)property.GetValue(row);
142+
case "IENUMERABLE`1":
143+
var enumerableValue = property.GetValue(row);
144+
Type innerPropertyType = property.PropertyType.GenericTypeArguments[0];
145+
switch (innerPropertyType.Name.ToUpper()) {
146+
case "BOOLEAN":
147+
return new bool[] { };
148+
case "CHAR":
149+
return ((char[])enumerableValue).ToString();
150+
case "DECIMAL":
151+
return ((decimal[])enumerableValue).Select(c => (float)c);
152+
case "SINGLE":
153+
//return ((Single[])enumerableValue).Select(c => (float)c);
154+
return new float[] { };
155+
}
156+
157+
return enumerableValue;
121158
default:
122159
return property.GetValue(row);
123160
}

0 commit comments

Comments
 (0)