コード例 #1
0
ファイル: EventResponse.cs プロジェクト: mlag/csharp-driver
        public static SchemaChangeEventArgs ParseSchemaChangeBody(ProtocolVersion protocolVersion, FrameReader reader)
        {
            var ce             = new SchemaChangeEventArgs();
            var changeTypeText = reader.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 (!protocolVersion.SupportsSchemaChangeFullMetadata())
            {
                //protocol v1 and v2: <change_type><keyspace><table>
                ce.Keyspace = reader.ReadString();
                ce.Table    = reader.ReadString();
                return(ce);
            }
            //protocol v3+: <change_type><target><options>
            var target = reader.ReadString();

            ce.Keyspace = reader.ReadString();
            switch (target)
            {
            case "TABLE":
                ce.Table = reader.ReadString();
                break;

            case "TYPE":
                ce.Type = reader.ReadString();
                break;

            case "FUNCTION":
                ce.FunctionName = reader.ReadString();
                ce.Signature    = reader.ReadStringList();
                break;

            case "AGGREGATE":
                ce.AggregateName = reader.ReadString();
                ce.Signature     = reader.ReadStringList();
                break;
            }

            return(ce);
        }