Browse Source

Merge remote-tracking branch 'upstream/master' into expose_query_info

Ben Hood 11 years ago
parent
commit
62dab2c16e
3 changed files with 33 additions and 5 deletions
  1. 22 0
      cassandra_test.go
  2. 8 3
      conn.go
  3. 3 2
      frame.go

+ 22 - 0
cassandra_test.go

@@ -763,6 +763,28 @@ func TestReprepareBatch(t *testing.T) {
 
 }
 
+func TestQueryInfo(t *testing.T) {
+	session := createSession(t)
+	defer session.Close()
+
+	conn := session.Pool.Pick(nil)
+	info, err := conn.prepareStatement("SELECT release_version, host_id FROM system.local WHERE key = ?", nil)
+
+	if err != nil {
+		t.Fatalf("Failed to execute query for preparing statement: %v", err)
+	}
+
+	if len(info.args) != 1 {
+		t.Fatalf("Was not expecting meta data for %d query arguments, but got %d\n", 1, len(info.args))
+	}
+
+	if *flagProto > 1 {
+		if len(info.rval) != 2 {
+			t.Fatalf("Was not expecting meta data for %d result columns, but got %d\n", 2, len(info.rval))
+		}
+	}
+}
+
 //TestPreparedCacheEviction will make sure that the cache size is maintained
 func TestPreparedCacheEviction(t *testing.T) {
 	session := createSession(t)

+ 8 - 3
conn.go

@@ -330,7 +330,8 @@ func (c *Conn) prepareStatement(stmt string, trace Tracer) (*QueryInfo, error) {
 		case resultPreparedFrame:
 			flight.info = &QueryInfo{
 				id:   x.PreparedId,
-				args: x.Values,
+				args: x.Arguments,
+				rval: x.ReturnValues,
 			}
 		case error:
 			flight.err = x
@@ -600,8 +601,12 @@ func (c *Conn) decodeFrame(f frame, trace Tracer) (rval interface{}, err error)
 			return resultKeyspaceFrame{keyspace}, nil
 		case resultKindPrepared:
 			id := f.readShortBytes()
-			values, _ := f.readMetaData()
-			return resultPreparedFrame{id, values}, nil
+			args, _ := f.readMetaData()
+			if c.version < 2 {
+				return resultPreparedFrame{PreparedId: id, Arguments: args}, nil
+			}
+			rvals, _ := f.readMetaData()
+			return resultPreparedFrame{PreparedId: id, Arguments: args, ReturnValues: rvals}, nil
 		case resultKindSchemaChanged:
 			return resultVoidFrame{}, nil
 		default:

+ 3 - 2
frame.go

@@ -366,8 +366,9 @@ type resultKeyspaceFrame struct {
 }
 
 type resultPreparedFrame struct {
-	PreparedId []byte
-	Values     []ColumnInfo
+	PreparedId   []byte
+	Arguments    []ColumnInfo
+	ReturnValues []ColumnInfo
 }
 
 type operation interface {