فهرست منبع

dont reset prepared statements after schema chages, add test

Chris Bannister 9 سال پیش
والد
کامیت
32d78cee3b
3فایلهای تغییر یافته به همراه53 افزوده شده و 5 حذف شده
  1. 53 0
      cassandra_test.go
  2. 0 3
      conn.go
  3. 0 2
      events.go

+ 53 - 0
cassandra_test.go

@@ -2280,3 +2280,56 @@ func TestUnmarshallNestedTypes(t *testing.T) {
 		t.Fatalf("%+#v != %+#v", data, m)
 	}
 }
+
+func TestSchemaReset(t *testing.T) {
+	cluster := createCluster()
+	cluster.NumConns = 1
+
+	session := createSessionFromCluster(cluster, t)
+	defer session.Close()
+
+	if err := createTable(session, `CREATE TABLE gocql_test.test_schema_reset (
+		id text PRIMARY KEY)`); err != nil {
+
+		t.Fatal(err)
+	}
+
+	const key = "test"
+
+	err := session.Query("INSERT INTO test_schema_reset(id) VALUES(?)", key).Exec()
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	var id string
+	err = session.Query("SELECT * FROM test_schema_reset WHERE id=?", key).Scan(&id)
+	if err != nil {
+		t.Fatal(err)
+	} else if id != key {
+		t.Fatalf("expected to get id=%q got=%q", key, id)
+	}
+
+	if err := createTable(session, `ALTER TABLE gocql_test.test_schema_reset ADD val text`); err != nil {
+		t.Fatal(err)
+	}
+
+	const expVal = "test-val"
+	err = session.Query("INSERT INTO test_schema_reset(id, val) VALUES(?, ?)", key, expVal).Exec()
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	var val string
+	err = session.Query("SELECT * FROM test_schema_reset WHERE id=?", key).Scan(&id, &val)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if id != key {
+		t.Errorf("expected to get id=%q got=%q", key, id)
+	}
+	if val != expVal {
+		t.Errorf("expected to get val=%q got=%q", expVal, val)
+	}
+
+}

+ 0 - 3
conn.go

@@ -786,9 +786,6 @@ func (c *Conn) executeQuery(qry *Query) *Iter {
 	case *resultKeyspaceFrame:
 		return &Iter{framer: framer}
 	case *schemaChangeKeyspace, *schemaChangeTable, *schemaChangeFunction:
-		// Clear the statments cache so that we dont use stale table info for requests.
-		// TODO: only reset a specific table/keyapce and only when it is changed.
-		c.session.stmtsLRU.clear()
 		iter := &Iter{framer: framer}
 		if err := c.awaitSchemaAgreement(); err != nil {
 			// TODO: should have this behind a flag

+ 0 - 2
events.go

@@ -107,8 +107,6 @@ func (s *Session) handleEvent(framer *framer) {
 }
 
 func (s *Session) handleSchemaEvent(frames []frame) {
-	// for now we dont care about them, just reset the prepared statements
-	s.stmtsLRU.clear()
 }
 
 func (s *Session) handleNodeEvent(frames []frame) {