joao-r-reis commented on code in PR #1822:
URL: 
https://github.com/apache/cassandra-gocql-driver/pull/1822#discussion_r1816927457


##########
conn.go:
##########
@@ -1430,6 +1529,34 @@ func (c *Conn) executeQuery(ctx context.Context, qry 
*Query) *Iter {
        case *resultVoidFrame:
                return &Iter{framer: framer}
        case *resultRowsFrame:
+               if x.meta.newMetadataID != nil {
+                       // Updating the result metadata id in prepared stmt
+                       //
+                       // If a RESULT/Rows message reports
+                       //      changed resultset metadata with the 
Metadata_changed flag, the reported new
+                       //      resultset metadata must be used in subsequent 
executions
+
+                       stmtCacheKey := 
c.session.stmtsLRU.keyFor(c.host.HostID(), c.currentKeyspace, qry.stmt)
+                       oldInflight, ok := c.session.stmtsLRU.get(stmtCacheKey)
+                       if !ok {
+                               // We didn't find the stmt in the cache, so we 
just re-prepare it
+                               return c.executeQuery(ctx, qry)
+                       }
+
+                       newInflight := &inflightPrepare{
+                               done: make(chan struct{}),
+                               preparedStatment: &preparedStatment{
+                                       id:               
oldInflight.preparedStatment.id,
+                                       resultMetadataID: x.meta.newMetadataID,
+                                       request:          
oldInflight.preparedStatment.request,
+                                       response:         x.meta,
+                               },
+                       }
+
+                       c.session.stmtsLRU.add(stmtCacheKey, newInflight)
+                       return c.executeQuery(ctx, qry)

Review Comment:
   So we are unable to test this for now (see my [earlier 
comment](https://github.com/apache/cassandra-gocql-driver/pull/1822#discussion_r1816923792)),
 but we can still try to implement it according to the v5 spec. 
   
   The expected implementation is that the driver will parse the new metadata 
from the `ROWS` response and update the local prepared statement object with 
the new result metadata AND result metadata id. Since the new up to date 
metadata is included in the response the driver has everything it needs to 
parse the response without another round trip and no new round trip should 
occur.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to