Bläddra i källkod

Merge branch 'reprepare-statement' of git://github.com/ChannelMeter/gocql into reprepare

Christoph Hack 12 år sedan
förälder
incheckning
db153edd28
2 ändrade filer med 29 tillägg och 0 borttagningar
  1. 13 0
      conn.go
  2. 16 0
      frame.go

+ 13 - 0
conn.go

@@ -322,6 +322,19 @@ func (c *Conn) executeQuery(qry *Query) *Iter {
 	case resultKeyspaceFrame:
 		c.cluster.HandleKeyspace(c, x.Keyspace)
 		return &Iter{}
+	case errorFrame:
+		if x.Code == errUnprepared && len(qry.values) > 0 {
+			c.prepMu.Lock()
+			if val, ok := c.prep[qry.stmt]; ok && val != nil {
+				delete(c.prep, qry.stmt)
+				c.prepMu.Unlock()
+				return c.executeQuery(qry)
+			}
+			c.prepMu.Unlock()
+			return &Iter{err: x}
+		} else {
+			return &Iter{err: x}
+		}
 	case error:
 		return &Iter{err: x}
 	default:

+ 16 - 0
frame.go

@@ -42,6 +42,22 @@ const (
 	flagPageState   uint8 = 8
 	flagHasMore     uint8 = 2
 
+	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
+
 	headerSize = 8
 )