[Groonga-commit] groonga/grngo at f57eab4 [master] Add newInvalidValueTypeError.

Back to archive index

susumu.yata null+****@clear*****
Fri Jun 26 16:19:11 JST 2015


susumu.yata	2015-06-26 16:19:11 +0900 (Fri, 26 Jun 2015)

  New Revision: f57eab4eb4c588cfbb63b62c2ac924d980829f7b
  https://github.com/groonga/grngo/commit/f57eab4eb4c588cfbb63b62c2ac924d980829f7b

  Message:
    Add newInvalidValueTypeError.
    
    GitHub: #12

  Modified files:
    grngo.go

  Modified: grngo.go (+20 -7)
===================================================================
--- grngo.go    2015-06-26 16:02:24 +0900 (7a031a9)
+++ grngo.go    2015-06-26 16:19:11 +0900 (2fb8cb0)
@@ -19,6 +19,19 @@ func newInvalidKeyTypeError(expected, actual DataType) error {
 	return fmt.Errorf("invalid data type: expected = %s, actual = %s", expected, actual)
 }
 
+// newInvalidValueTypeError returns an error for data type conflict.
+func newInvalidValueTypeError(expectedDataType DataType, expectedIsVector bool, actualDataType DataType, actualIsVector bool) error {
+	expected := expectedDataType.String()
+	if expectedIsVector {
+		expected = "[]" + expected
+	}
+	actual := actualDataType.String()
+	if actualIsVector {
+		actual = "[]" + actual
+	}
+	return fmt.Errorf("invalid data type: expected = %s, actual = %s", expected, actual)
+}
+
 // -- Data types --
 
 // GeoPoint represents a coordinate of latitude and longitude.
@@ -987,7 +1000,7 @@ func newColumn(table *Table, obj *C.grn_obj, name string, valueType DataType, is
 // setBool assigns a Bool value.
 func (column *Column) setBool(id uint32, value bool) error {
 	if (column.valueType != Bool) || column.isVector {
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, Bool, false)
 	}
 	var grnValue C.grn_bool = C.GRN_FALSE
 	if value {
@@ -1003,7 +1016,7 @@ func (column *Column) setBool(id uint32, value bool) error {
 // setInt assigns an Int value.
 func (column *Column) setInt(id uint32, value int64) error {
 	if column.isVector {
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyInt, false)
 	}
 	ctx := column.table.db.ctx
 	var ok C.grn_bool
@@ -1036,7 +1049,7 @@ func (column *Column) setInt(id uint32, value int64) error {
 		grnValue := C.int64_t(value)
 		ok = C.grngo_column_set_time(ctx, column.obj, C.grn_id(id), grnValue)
 	default:
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyInt, false)
 	}
 	if ok != C.GRN_TRUE {
 		return fmt.Errorf("grngo_column_set_int*() failed")
@@ -1047,7 +1060,7 @@ func (column *Column) setInt(id uint32, value int64) error {
 // setFloat assigns a Float value.
 func (column *Column) setFloat(id uint32, value float64) error {
 	if (column.valueType != Float) || column.isVector {
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, Float, false)
 	}
 	grnValue := C.double(value)
 	if ok := C.grngo_column_set_float(column.table.db.ctx, column.obj,
@@ -1062,7 +1075,7 @@ func (column *Column) setGeoPoint(id uint32, value GeoPoint) error {
 	switch column.valueType {
 	case TokyoGeoPoint, WGS84GeoPoint:
 	default:
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, false)
 	}
 	if column.isVector {
 		return fmt.Errorf("value type conflict")
@@ -1081,10 +1094,10 @@ func (column *Column) setText(id uint32, value []byte) error {
 	switch column.valueType {
 	case ShortText, Text, LongText:
 	default:
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, Text, false)
 	}
 	if column.isVector {
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, Text, false)
 	}
 	var grnValue C.grngo_text
 	if len(value) != 0 {
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index