public void HandleSchemaChange(ResponseFrame frame) { var ce = new SchemaChangeEventArgs(); CassandraEventArgs = ce; var changeTypeText = BeBinaryReader.ReadString(); SchemaChangeEventArgs.Reason changeType; switch (changeTypeText) { case "UPDATED": changeType = SchemaChangeEventArgs.Reason.Updated; break; case "DROPPED": changeType = SchemaChangeEventArgs.Reason.Dropped; break; default: changeType = SchemaChangeEventArgs.Reason.Created; break; } ce.What = changeType; if (frame.Header.Version < 3) { //protocol v1 and v2: <change_type><keyspace><table> ce.Keyspace = BeBinaryReader.ReadString(); ce.Table = BeBinaryReader.ReadString(); return; } //protocol v3+: <change_type><target><options> var target = BeBinaryReader.ReadString(); ce.Keyspace = BeBinaryReader.ReadString(); switch (target) { case "TABLE": ce.Table = BeBinaryReader.ReadString(); break; case "TYPE": ce.Type = BeBinaryReader.ReadString(); break; case "FUNCTION": ce.FunctionName = BeBinaryReader.ReadString(); ce.Signature = BeBinaryReader.ReadStringList(); break; case "AGGREGATE": ce.AggregateName = BeBinaryReader.ReadString(); ce.Signature = BeBinaryReader.ReadStringList(); break; } }
internal ResultResponse(ResponseFrame frame) : base(frame) { //Handle result flags if ((frame.Header.Flags & FrameHeader.HeaderFlag.Warning) != 0) { Warnings = BeBinaryReader.ReadStringList(); } if ((frame.Header.Flags & FrameHeader.HeaderFlag.CustomPayload) != 0) { CustomPayload = BeBinaryReader.ReadBytesMap(); } Kind = (ResultResponseKind)BeBinaryReader.ReadInt32(); switch (Kind) { case ResultResponseKind.Void: Output = new OutputVoid(TraceId); break; case ResultResponseKind.Rows: Output = new OutputRows(frame.Header.Version, BeBinaryReader, TraceId); break; case ResultResponseKind.SetKeyspace: Output = new OutputSetKeyspace(BeBinaryReader.ReadString()); break; case ResultResponseKind.Prepared: Output = new OutputPrepared(frame.Header.Version, BeBinaryReader); break; case ResultResponseKind.SchemaChange: Output = new OutputSchemaChange(BeBinaryReader, TraceId); break; default: throw new DriverInternalError("Unknown ResultResponseKind Type"); } }