[Groonga-commit] groonga/grnci at 11af5b6 [master] Add error handling for JSON-decoding errors.

Back to archive index

Susumu Yata null+****@clear*****
Fri Jul 7 12:13:42 JST 2017


Susumu Yata	2017-07-07 12:13:42 +0900 (Fri, 07 Jul 2017)

  New Revision: 11af5b6d6ebe6d67e2f3b430d6a023e3128abacf
  https://github.com/groonga/grnci/commit/11af5b6d6ebe6d67e2f3b430d6a023e3128abacf

  Message:
    Add error handling for JSON-decoding errors.

  Modified files:
    v2/db.go

  Modified: v2/db.go (+79 -4)
===================================================================
--- v2/db.go    2017-07-07 11:36:46 +0900 (a1c7fb0)
+++ v2/db.go    2017-07-07 12:13:42 +0900 (e369d78)
@@ -30,6 +30,9 @@ func (db *DB) recvBool(resp Response) (bool, Response, error) {
 	}
 	var result bool
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return false, resp, nil
+		}
 		return false, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -47,6 +50,9 @@ func (db *DB) recvInt(resp Response) (int, Response, error) {
 	}
 	var result int
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return 0, resp, nil
+		}
 		return 0, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -64,6 +70,9 @@ func (db *DB) recvString(resp Response) (string, Response, error) {
 	}
 	var result string
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return "", resp, nil
+		}
 		return "", resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -183,11 +192,11 @@ func (db *DB) ColumnList(tbl string) ([]DBColumn, Response, error) {
 	if err != nil {
 		return nil, resp, err
 	}
-	if len(jsonData) == 0 {
-		return nil, resp, nil
-	}
 	var result [][]interface{}
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -722,6 +731,9 @@ func (db *DB) LogicalParameters(rangeIndex string) (*DBLogicalParameters, Respon
 	}
 	var result DBLogicalParameters
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -904,6 +916,9 @@ func (db *DB) LogicalShardList(logicalTable string) ([]DBLogicalShard, Response,
 	}
 	var result []DBLogicalShard
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -983,6 +998,9 @@ func (db *DB) Normalize(normalizer, str string, flags []string) (*DBNormalizedTe
 	}
 	var result DBNormalizedText
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -1009,6 +1027,9 @@ func (db *DB) NormalizerList() ([]DBNormalizer, Response, error) {
 	}
 	var result []DBNormalizer
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -1141,6 +1162,9 @@ func (db *DB) ObjectInspect(name string) (interface{}, Response, error) {
 	case name == "": // Database
 		var result DBObjectDatabase
 		if err := json.Unmarshal(jsonData, &result); err != nil {
+			if resp.Err() != nil {
+				return nil, resp, nil
+			}
 			return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 				"method": "json.Unmarshal",
 				"error":  err.Error(),
@@ -1150,6 +1174,9 @@ func (db *DB) ObjectInspect(name string) (interface{}, Response, error) {
 	case strings.Contains(name, "."): // Column
 		var result DBObjectColumn
 		if err := json.Unmarshal(jsonData, &result); err != nil {
+			if resp.Err() != nil {
+				return nil, resp, nil
+			}
 			return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 				"method": "json.Unmarshal",
 				"error":  err.Error(),
@@ -1163,6 +1190,9 @@ func (db *DB) ObjectInspect(name string) (interface{}, Response, error) {
 		}
 		var sizeNRecords SizeNRecords
 		if err := json.Unmarshal(jsonData, &sizeNRecords); err != nil {
+			if resp.Err() != nil {
+				return nil, resp, nil
+			}
 			return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 				"method": "json.Unmarshal",
 				"error":  err.Error(),
@@ -1172,6 +1202,9 @@ func (db *DB) ObjectInspect(name string) (interface{}, Response, error) {
 		case sizeNRecords.Size != nil:
 			var result DBObjectType
 			if err := json.Unmarshal(jsonData, &result); err != nil {
+				if resp.Err() != nil {
+					return nil, resp, nil
+				}
 				return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 					"method": "json.Unmarshal",
 					"error":  err.Error(),
@@ -1181,6 +1214,9 @@ func (db *DB) ObjectInspect(name string) (interface{}, Response, error) {
 		case sizeNRecords.NRecords != nil:
 			var result DBObjectTable
 			if err := json.Unmarshal(jsonData, &result); err != nil {
+				if resp.Err() != nil {
+					return nil, resp, nil
+				}
 				return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 					"method": "json.Unmarshal",
 					"error":  err.Error(),
@@ -1188,6 +1224,9 @@ func (db *DB) ObjectInspect(name string) (interface{}, Response, error) {
 			}
 			return &result, resp, nil
 		default:
+			if resp.Err() != nil {
+				return nil, resp, nil
+			}
 			return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 				"command": "object_inspect",
 				"error":   "The response format is not invalid.",
@@ -1232,6 +1271,9 @@ func (db *DB) ObjectList() (map[string]*DBObject, Response, error) {
 	}
 	var result map[string]*DBObject
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -1361,6 +1403,9 @@ func (db *DB) RequestCancel(id int) (bool, Response, error) {
 	}
 	var result Result
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return false, resp, nil
+		}
 		return false, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -1387,6 +1432,9 @@ func (db *DB) RubyEval(script string) (interface{}, Response, error) {
 	}
 	var result Result
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return false, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -1413,6 +1461,9 @@ func (db *DB) RubyLoad(path string) (interface{}, Response, error) {
 	}
 	var result Result
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return false, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -1536,6 +1587,9 @@ func (db *DB) Schema() (*DBSchema, Response, error) {
 	}
 	var result DBSchema
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -2085,7 +2139,13 @@ func (db *DB) SelectRows(tbl string, rows interface{}, options *DBSelectOptions)
 		return 0, resp, err
 	}
 	n, err := db.parseRows(rows, data, cfs)
-	return n, resp, err
+	if err != nil {
+		if resp.Err() != nil {
+			return n, resp, nil
+		}
+		return n, resp, err
+	}
+	return n, resp, nil
 }
 
 // Shutdown executes shutdown.
@@ -2123,6 +2183,9 @@ func (db *DB) Status() (*DBStatus, Response, error) {
 	}
 	var data map[string]interface{}
 	if err := json.Unmarshal(jsonData, &data); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -2309,6 +2372,9 @@ func (db *DB) TableList() ([]DBTable, Response, error) {
 	}
 	var result [][]interface{}
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -2443,6 +2509,9 @@ func (db *DB) TableTokenize(tbl, str string, options *DBTableTokenizeOptions) ([
 	}
 	var result []DBToken
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -2512,6 +2581,9 @@ func (db *DB) Tokenize(tokenizer, str string, options *DBTokenizeOptions) ([]DBT
 	}
 	var result []DBToken
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
@@ -2538,6 +2610,9 @@ func (db *DB) TokenizerList() ([]DBTokenizer, Response, error) {
 	}
 	var result []DBTokenizer
 	if err := json.Unmarshal(jsonData, &result); err != nil {
+		if resp.Err() != nil {
+			return nil, resp, nil
+		}
 		return nil, resp, NewError(InvalidResponse, map[string]interface{}{
 			"method": "json.Unmarshal",
 			"error":  err.Error(),
-------------- next part --------------
HTML����������������������������...
Télécharger 



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