@@ -378,6 +378,16 @@ func rowIterForGoSqlRows(ctx *sql.Context, sch sql.Schema, rows *gosql.Rows) (sq
378378func convertValue (ctx * sql.Context , sch sql.Schema , row sql.Row ) sql.Row {
379379 for i , col := range sch {
380380 switch col .Type .Type () {
381+ case query .Type_BIT :
382+ if row [i ] != nil {
383+ if bytes , ok := row [i ].([]byte ); ok {
384+ if bt , ok := col .Type .(types.BitType ); ok {
385+ if v , _ , err := bt .Convert (ctx , bytes ); err == nil {
386+ row [i ] = v
387+ }
388+ }
389+ }
390+ }
381391 case query .Type_GEOMETRY :
382392 if row [i ] != nil {
383393 r , _ , err := types.GeometryType {}.Convert (ctx , row [i ].([]byte ))
@@ -562,9 +572,12 @@ func emptyRowForSchema(sch sql.Schema) ([]any, error) {
562572func emptyValuePointerForType (t sql.Type ) (any , error ) {
563573 switch t .Type () {
564574 case query .Type_INT8 , query .Type_INT16 , query .Type_INT24 , query .Type_INT64 ,
565- query .Type_BIT , query . Type_YEAR :
575+ query .Type_YEAR :
566576 var i gosql.NullInt64
567577 return & i , nil
578+ case query .Type_BIT :
579+ var b []byte
580+ return & b , nil
568581 case query .Type_INT32 :
569582 var i gosql.NullInt32
570583 return & i , nil
@@ -624,8 +637,10 @@ func schemaForRows(rows *gosql.Rows) (sql.Schema, error) {
624637
625638func convertGoSqlType (columnType * gosql.ColumnType ) (sql.Type , error ) {
626639 switch strings .ToLower (columnType .DatabaseTypeName ()) {
627- case "tinyint" , "smallint" , "mediumint" , "int" , "bigint" , "bit" :
640+ case "tinyint" , "smallint" , "mediumint" , "int" , "bigint" :
628641 return types .Int64 , nil
642+ case "bit" :
643+ return types .MustCreateBitType (1 ), nil
629644 case "unsigned tinyint" , "unsigned smallint" , "unsigned mediumint" , "unsigned int" , "unsigned bigint" :
630645 return types .Uint64 , nil
631646 case "float" , "double" :
0 commit comments