Browse Source

1.fix find bit
2.fix error on mysql

xormplus 8 years ago
parent
commit
b17bb2bb1b
4 changed files with 41 additions and 6 deletions
  1. 12 0
      convert.go
  2. 1 1
      session.go
  3. 1 2
      session_convert.go
  4. 27 3
      session_find_test.go

+ 12 - 0
convert.go

@@ -334,3 +334,15 @@ func convertInt(v interface{}) (int64, error) {
 	}
 	return 0, fmt.Errorf("unsupported type: %v", v)
 }
+
+func asBool(bs []byte) (bool, error) {
+	if len(bs) == 0 {
+		return false, nil
+	}
+	if bs[0] == 0x00 {
+		return false, nil
+	} else if bs[0] == 0x01 {
+		return true, nil
+	}
+	return strconv.ParseBool(string(bs))
+}

+ 1 - 1
session.go

@@ -309,6 +309,7 @@ func (session *Session) rows2Beans(rows *core.Rows, fields []string, fieldsCount
 		var newValue = newElemFunc(fields)
 		bean := newValue.Interface()
 		dataStruct := rValue(bean)
+
 		// handle beforeClosures
 		scanResults, err := session.row2Slice(rows, fields, fieldsCount, bean)
 		if err != nil {
@@ -318,7 +319,6 @@ func (session *Session) rows2Beans(rows *core.Rows, fields []string, fieldsCount
 		if err != nil {
 			return err
 		}
-
 		err = sliceValueSetFunc(&newValue, pk)
 		if err != nil {
 			return err

+ 1 - 2
session_convert.go

@@ -144,8 +144,7 @@ func (session *Session) bytes2Value(col *core.Column, fieldValue *reflect.Value,
 	case reflect.String:
 		fieldValue.SetString(string(data))
 	case reflect.Bool:
-		d := string(data)
-		v, err := strconv.ParseBool(d)
+		v, err := asBool(data)
 		if err != nil {
 			return fmt.Errorf("arg %v as bool: %s", key, err.Error())
 		}

+ 27 - 3
session_find_test.go

@@ -457,10 +457,34 @@ func TestFindMapPtrString(t *testing.T) {
 	userinfo := testEngine.TableMapper.Obj2Table("Userinfo")
 	var ids []map[string]*string
 	err := testEngine.Table(userinfo).Desc("id").Find(&ids)
-	if err != nil {
-		t.Fatal(err)
-	}
+	assert.NoError(t, err)
 	for _, record := range ids {
 		fmt.Println(record)
 	}
 }
+
+func TestFindBit(t *testing.T) {
+	type FindBitStruct struct {
+		Id  int64
+		Msg bool `xorm:"bit"`
+	}
+
+	assert.NoError(t, prepareEngine())
+	assertSync(t, new(FindBitStruct))
+
+	cnt, err := testEngine.Insert([]FindBitStruct{
+		{
+			Msg: false,
+		},
+		{
+			Msg: true,
+		},
+	})
+	assert.NoError(t, err)
+	assert.EqualValues(t, 2, cnt)
+
+	var results = make([]FindBitStruct, 0, 2)
+	err = testEngine.Find(&results)
+	assert.NoError(t, err)
+	assert.EqualValues(t, 2, len(results))
+}