浏览代码

add v4 read_failure and function_failure errors

Chris Bannister 10 年之前
父节点
当前提交
b4e2ff39e2
共有 2 个文件被更改,包括 50 次插入15 次删除
  1. 33 15
      errors.go
  2. 17 0
      frame.go

+ 33 - 15
errors.go

@@ -3,21 +3,23 @@ package gocql
 import "fmt"
 import "fmt"
 
 
 const (
 const (
-	errServer        = 0x0000
-	errProtocol      = 0x000A
-	errCredentials   = 0x0100
-	errUnavailable   = 0x1000
-	errOverloaded    = 0x1001
-	errBootstrapping = 0x1002
-	errTruncate      = 0x1003
-	errWriteTimeout  = 0x1100
-	errReadTimeout   = 0x1200
-	errSyntax        = 0x2000
-	errUnauthorized  = 0x2100
-	errInvalid       = 0x2200
-	errConfig        = 0x2300
-	errAlreadyExists = 0x2400
-	errUnprepared    = 0x2500
+	errServer          = 0x0000
+	errProtocol        = 0x000A
+	errCredentials     = 0x0100
+	errUnavailable     = 0x1000
+	errOverloaded      = 0x1001
+	errBootstrapping   = 0x1002
+	errTruncate        = 0x1003
+	errWriteTimeout    = 0x1100
+	errReadTimeout     = 0x1200
+	errReadFailure     = 0x1300
+	errFunctionFailure = 0x1400
+	errSyntax          = 0x2000
+	errUnauthorized    = 0x2100
+	errInvalid         = 0x2200
+	errConfig          = 0x2300
+	errAlreadyExists   = 0x2400
+	errUnprepared      = 0x2500
 )
 )
 
 
 type RequestError interface {
 type RequestError interface {
@@ -86,3 +88,19 @@ type RequestErrUnprepared struct {
 	errorFrame
 	errorFrame
 	StatementId []byte
 	StatementId []byte
 }
 }
+
+type RequestErrReadFailure struct {
+	errorFrame
+	Consistency Consistency
+	Received    int
+	BlockFor    int
+	NumFailures int
+	DataPresent bool
+}
+
+type RequestErrFunctionFailure struct {
+	errorFrame
+	Keyspace string
+	Function string
+	ArgTypes []string
+}

+ 17 - 0
frame.go

@@ -502,6 +502,23 @@ func (f *framer) parseErrorFrame() frame {
 			errorFrame:  errD,
 			errorFrame:  errD,
 			StatementId: stmtId,
 			StatementId: stmtId,
 		}
 		}
+	case errReadFailure:
+		res := &RequestErrReadFailure{
+			errorFrame: errD,
+		}
+		res.Consistency = f.readConsistency()
+		res.Received = f.readInt()
+		res.BlockFor = f.readInt()
+		res.DataPresent = f.readByte() != 0
+		return res
+	case errFunctionFailure:
+		res := RequestErrFunctionFailure{
+			errorFrame: errD,
+		}
+		res.Keyspace = f.readString()
+		res.Function = f.readString()
+		res.ArgTypes = f.readStringList()
+		return res
 	default:
 	default:
 		return &errD
 		return &errD
 	}
 	}