in frame.go [1247:1329]
func (f *framer) parseResultSchemaChange() frame {
if f.proto <= protoVersion2 {
change := f.readString()
keyspace := f.readString()
table := f.readString()
if table != "" {
return &schemaChangeTable{
frameHeader: *f.header,
change: change,
keyspace: keyspace,
object: table,
}
} else {
return &schemaChangeKeyspace{
frameHeader: *f.header,
change: change,
keyspace: keyspace,
}
}
} else {
change := f.readString()
target := f.readString()
// TODO: could just use a separate type for each target
switch target {
case "KEYSPACE":
frame := &schemaChangeKeyspace{
frameHeader: *f.header,
change: change,
}
frame.keyspace = f.readString()
return frame
case "TABLE":
frame := &schemaChangeTable{
frameHeader: *f.header,
change: change,
}
frame.keyspace = f.readString()
frame.object = f.readString()
return frame
case "TYPE":
frame := &schemaChangeType{
frameHeader: *f.header,
change: change,
}
frame.keyspace = f.readString()
frame.object = f.readString()
return frame
case "FUNCTION":
frame := &schemaChangeFunction{
frameHeader: *f.header,
change: change,
}
frame.keyspace = f.readString()
frame.name = f.readString()
frame.args = f.readStringList()
return frame
case "AGGREGATE":
frame := &schemaChangeAggregate{
frameHeader: *f.header,
change: change,
}
frame.keyspace = f.readString()
frame.name = f.readString()
frame.args = f.readStringList()
return frame
default:
panic(fmt.Errorf("gocql: unknown SCHEMA_CHANGE target: %q change: %q", target, change))
}
}
}