[Groonga-commit] groonga/grngo at 50716c4 [master] Add missing value type checks.

Back to archive index

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


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

  New Revision: 50716c4948e893c32d5d1f35321b96539520a70f
  https://github.com/groonga/grngo/commit/50716c4948e893c32d5d1f35321b96539520a70f

  Message:
    Add missing value type checks.
    
    GitHub: #12

  Modified files:
    grngo.go

  Modified: grngo.go (+26 -1)
===================================================================
--- grngo.go    2015-06-26 16:19:11 +0900 (2fb8cb0)
+++ grngo.go    2015-06-26 16:26:06 +0900 (181c63f)
@@ -1113,6 +1113,9 @@ func (column *Column) setText(id uint32, value []byte) error {
 
 // setBoolVector assigns a Bool vector.
 func (column *Column) setBoolVector(id uint32, value []bool) error {
+	if (column.valueType != Bool) || !column.isVector {
+		return newInvalidValueTypeError(column.valueType, column.isVector, Bool, true)
+	}
 	grnValue := make([]C.grn_bool, len(value))
 	for i, v := range value {
 		if v {
@@ -1133,6 +1136,9 @@ func (column *Column) setBoolVector(id uint32, value []bool) error {
 
 // setIntVector assigns an Int vector.
 func (column *Column) setIntVector(id uint32, value []int64) error {
+	if !column.isVector {
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyInt, true)
+	}
 	var grnVector C.grngo_vector
 	if len(value) != 0 {
 		grnVector.ptr = unsafe.Pointer(&value[0])
@@ -1161,7 +1167,7 @@ func (column *Column) setIntVector(id uint32, value []int64) error {
 	case Time:
 		ok = C.grngo_column_set_time_vector(ctx, obj, C.grn_id(id), &grnVector)
 	default:
-		return fmt.Errorf("value type conflict")
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyInt, true)
 	}
 	if ok != C.GRN_TRUE {
 		return fmt.Errorf("grngo_column_set_int*_vector() failed")
@@ -1171,6 +1177,9 @@ func (column *Column) setIntVector(id uint32, value []int64) error {
 
 // setFloatVector assigns a Float vector.
 func (column *Column) setFloatVector(id uint32, value []float64) error {
+	if (column.valueType != Float) || !column.isVector {
+		return newInvalidValueTypeError(column.valueType, column.isVector, Float, true)
+	}
 	var grnVector C.grngo_vector
 	if len(value) != 0 {
 		grnVector.ptr = unsafe.Pointer(&value[0])
@@ -1185,6 +1194,14 @@ func (column *Column) setFloatVector(id uint32, value []float64) error {
 
 // setGeoPointVector assigns a GeoPoint vector.
 func (column *Column) setGeoPointVector(id uint32, value []GeoPoint) error {
+	if !column.isVector {
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, true)
+	}
+	switch column.valueType {
+	case TokyoGeoPoint, WGS84GeoPoint:
+	default:
+		return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, true)
+	}
 	var grnVector C.grngo_vector
 	if len(value) != 0 {
 		grnVector.ptr = unsafe.Pointer(&value[0])
@@ -1200,6 +1217,14 @@ func (column *Column) setGeoPointVector(id uint32, value []GeoPoint) error {
 
 // setTextVector assigns a Text vector.
 func (column *Column) setTextVector(id uint32, value [][]byte) error {
+	if !column.isVector {
+		return newInvalidValueTypeError(column.valueType, column.isVector, Text, true)
+	}
+	switch column.valueType {
+	case ShortText, Text, LongText:
+	default:
+		return newInvalidValueTypeError(column.valueType, column.isVector, Text, true)
+	}
 	grnValue := make([]C.grngo_text, len(value))
 	for i, v := range value {
 		if len(v) != 0 {
-------------- next part --------------
HTML����������������������������...
Download 



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