Browse Source

add more error check on Get

xormplus 8 years ago
parent
commit
74ad440655
2 changed files with 23 additions and 1 deletions
  1. 3 1
      session_get.go
  2. 20 0
      session_get_test.go

+ 3 - 1
session_get.go

@@ -22,7 +22,9 @@ func (session *Session) Get(bean interface{}) (bool, error) {
 
 	beanValue := reflect.ValueOf(bean)
 	if beanValue.Kind() != reflect.Ptr {
-		return false, errors.New("needs a pointer")
+		return false, errors.New("needs a pointer to a value")
+	} else if beanValue.Elem().Kind() == reflect.Ptr {
+		return false, errors.New("a pointer to a pointer is not allowed")
 	}
 
 	if beanValue.Elem().Kind() == reflect.Struct {

+ 20 - 0
session_get_test.go

@@ -174,3 +174,23 @@ func TestGetSlice(t *testing.T) {
 	assert.False(t, has)
 	assert.Error(t, err)
 }
+
+func TestGetError(t *testing.T) {
+	assert.NoError(t, prepareEngine())
+
+	type GetError struct {
+		Uid   int `xorm:"pk autoincr"`
+		IsMan bool
+	}
+
+	assertSync(t, new(GetError))
+
+	var info = new(GetError)
+	has, err := testEngine.Get(&info)
+	assert.False(t, has)
+	assert.Error(t, err)
+
+	has, err = testEngine.Get(info)
+	assert.False(t, has)
+	assert.NoError(t, err)
+}