@@ -99,7 +99,7 @@ func TestCanMapEnumAndSetValues(t *testing.T) {
9999 },
100100 }
101101
102- output := QueryResultToRecords (& input )
102+ output := QueryResultToRecords (& input , & PlanetScaleSource {} )
103103 assert .Equal (t , 2 , len (output ))
104104 firstRow := output [0 ]
105105 assert .Equal (t , "active" , firstRow ["status" ].(sqltypes.Value ).ToString ())
@@ -109,13 +109,65 @@ func TestCanMapEnumAndSetValues(t *testing.T) {
109109 assert .Equal (t , "San Francisco,Oakland" , secondRow ["locations" ].(sqltypes.Value ).ToString ())
110110}
111111
112+ func TestCanMapTinyIntValues (t * testing.T ) {
113+ input := sqltypes.Result {
114+ Fields : []* query.Field {
115+ {Name : "verified" , Type : query .Type_INT8 , ColumnType : "tinyint(1)" },
116+ },
117+ Rows : [][]sqltypes.Value {
118+ {sqltypes .NewInt8 (1 )},
119+ {sqltypes .NewInt8 (0 )},
120+ },
121+ }
122+
123+ output := QueryResultToRecords (& input , & PlanetScaleSource {
124+ Options : CustomSourceOptions {
125+ DoNotTreatTinyIntAsBoolean : false ,
126+ },
127+ })
128+
129+ assert .Equal (t , 2 , len (output ))
130+ firstRow := output [0 ]
131+ assert .Equal (t , true , firstRow ["verified" ].(bool ))
132+ secondRow := output [1 ]
133+ assert .Equal (t , false , secondRow ["verified" ].(bool ))
134+
135+ input = sqltypes.Result {
136+ Fields : []* query.Field {
137+ {Name : "verified" , Type : query .Type_INT8 , ColumnType : "tinyint(1)" },
138+ },
139+ Rows : [][]sqltypes.Value {
140+ {sqltypes .NewInt8 (1 )},
141+ {sqltypes .NewInt8 (0 )},
142+ },
143+ }
144+
145+ output = QueryResultToRecords (& input , & PlanetScaleSource {
146+ Options : CustomSourceOptions {
147+ DoNotTreatTinyIntAsBoolean : true ,
148+ },
149+ })
150+
151+ assert .Equal (t , 2 , len (output ))
152+ firstRow = output [0 ]
153+ assert .Equal (t , sqltypes .NewInt8 (1 ), firstRow ["verified" ])
154+ secondRow = output [1 ]
155+ assert .Equal (t , sqltypes .NewInt8 (0 ), secondRow ["verified" ])
156+ }
157+
112158func TestCanFormatISO8601Values (t * testing.T ) {
113159 datetimeValue , err := sqltypes .NewValue (query .Type_DATETIME , []byte ("2025-02-14 08:08:08" ))
114160 assert .NoError (t , err )
115161 dateValue , err := sqltypes .NewValue (query .Type_DATE , []byte ("2025-02-14" ))
116162 assert .NoError (t , err )
117163 timestampValue , err := sqltypes .NewValue (query .Type_TIMESTAMP , []byte ("2025-02-14 08:08:08" ))
118164 assert .NoError (t , err )
165+ zeroDatetimeValue , err := sqltypes .NewValue (query .Type_DATETIME , []byte ("0000-00-00 00:00:00" ))
166+ assert .NoError (t , err )
167+ zeroDateValue , err := sqltypes .NewValue (query .Type_DATE , []byte ("0000-00-00" ))
168+ assert .NoError (t , err )
169+ zeroTimestampValue , err := sqltypes .NewValue (query .Type_TIMESTAMP , []byte ("0000-00-00 00:00:00" ))
170+ assert .NoError (t , err )
119171 input := sqltypes.Result {
120172 Fields : []* query.Field {
121173 {Name : "datetime_created_at" , Type : sqltypes .Datetime , ColumnType : "datetime" },
@@ -124,13 +176,23 @@ func TestCanFormatISO8601Values(t *testing.T) {
124176 },
125177 Rows : [][]sqltypes.Value {
126178 {datetimeValue , dateValue , timestampValue },
179+ {sqltypes .NULL , sqltypes .NULL , sqltypes .NULL },
180+ {zeroDatetimeValue , zeroDateValue , zeroTimestampValue },
127181 },
128182 }
129183
130- output := QueryResultToRecords (& input )
131- assert .Equal (t , 1 , len (output ))
184+ output := QueryResultToRecords (& input , & PlanetScaleSource {} )
185+ assert .Equal (t , 3 , len (output ))
132186 row := output [0 ]
133187 assert .Equal (t , "2025-02-14T08:08:08Z" , row ["datetime_created_at" ].(sqltypes.Value ).ToString ())
134188 assert .Equal (t , "2025-02-14" , row ["date_created_at" ].(sqltypes.Value ).ToString ())
135189 assert .Equal (t , "2025-02-14T08:08:08Z" , row ["timestamp_created_at" ].(sqltypes.Value ).ToString ())
190+ nullRow := output [1 ]
191+ assert .Equal (t , nil , nullRow ["datetime_created_at" ])
192+ assert .Equal (t , nil , nullRow ["date_created_at" ])
193+ assert .Equal (t , nil , nullRow ["timestamp_created_at" ])
194+ zeroRow := output [2 ]
195+ assert .Equal (t , "1970-01-01T00:00:00Z" , zeroRow ["datetime_created_at" ].(sqltypes.Value ).ToString ())
196+ assert .Equal (t , "1970-01-01" , zeroRow ["date_created_at" ].(sqltypes.Value ).ToString ())
197+ assert .Equal (t , "1970-01-01T00:00:00Z" , zeroRow ["timestamp_created_at" ].(sqltypes.Value ).ToString ())
136198}
0 commit comments