2121"""
2222
2323from collections import defaultdict
24- from typing import (
25- Optional ,
26- List ,
27- Dict ,
28- Set ,
29- Type ,
30- Union ,
31- Tuple ,
32- Any ,
33- )
24+ import datetime
25+ from typing import Any , Dict , List , Optional , Set , Tuple , Type , Union
26+
27+ from google .api_core .datetime_helpers import DatetimeWithNanoseconds
28+ from google .protobuf import timestamp_pb2 # type: ignore
29+ from google .type import date_pb2 # type: ignore
30+
3431from google .cloud .bigtable .data .execute_query .values import _NamedList
3532from google .cloud .bigtable_v2 import ResultSetMetadata
3633from google .cloud .bigtable_v2 import Type as PBType
37- from google .type import date_pb2 # type: ignore
38- from google .protobuf import timestamp_pb2 # type: ignore
39- from google .api_core .datetime_helpers import DatetimeWithNanoseconds
40- import datetime
4134
4235
4336class SqlType :
@@ -127,6 +120,8 @@ class Array(Type):
127120 def __init__ (self , element_type : "SqlType.Type" ):
128121 if isinstance (element_type , SqlType .Array ):
129122 raise ValueError ("Arrays of arrays are not supported." )
123+ if isinstance (element_type , SqlType .Map ):
124+ raise ValueError ("Arrays of Maps are not supported." )
130125 self ._element_type = element_type
131126
132127 @property
@@ -140,10 +135,21 @@ def from_pb_type(cls, type_pb: Optional[PBType] = None) -> "SqlType.Array":
140135 return cls (_pb_type_to_metadata_type (type_pb .array_type .element_type ))
141136
142137 def _to_value_pb_dict (self , value : Any ):
143- raise NotImplementedError ("Array is not supported as a query parameter" )
138+ if value is None :
139+ return {}
140+
141+ return {
142+ "array_value" : {
143+ "values" : [
144+ self .element_type ._to_value_pb_dict (entry ) for entry in value
145+ ]
146+ }
147+ }
144148
145149 def _to_type_pb_dict (self ) -> Dict [str , Any ]:
146- raise NotImplementedError ("Array is not supported as a query parameter" )
150+ return {
151+ "array_type" : {"element_type" : self .element_type ._to_type_pb_dict ()}
152+ }
147153
148154 def __eq__ (self , other ):
149155 return super ().__eq__ (other ) and self .element_type == other .element_type
@@ -222,6 +228,13 @@ class Float64(Type):
222228 value_pb_dict_field_name = "float_value"
223229 type_field_name = "float64_type"
224230
231+ class Float32 (Type ):
232+ """Float32 SQL type."""
233+
234+ expected_type = float
235+ value_pb_dict_field_name = "float_value"
236+ type_field_name = "float32_type"
237+
225238 class Bool (Type ):
226239 """Bool SQL type."""
227240
@@ -376,6 +389,7 @@ def _pb_metadata_to_metadata_types(
376389 "bytes_type" : SqlType .Bytes ,
377390 "string_type" : SqlType .String ,
378391 "int64_type" : SqlType .Int64 ,
392+ "float32_type" : SqlType .Float32 ,
379393 "float64_type" : SqlType .Float64 ,
380394 "bool_type" : SqlType .Bool ,
381395 "timestamp_type" : SqlType .Timestamp ,
0 commit comments