コード例 #1
0
        private JToken EncodeFixed(FixedSchema schema, GenericFixed value)
        {
            var jvalue = new JObject();

            jvalue.Add("type", new JValue("fixed"));
            jvalue.Add("data", new JValue(value.Value));

            return(jvalue);
        }
コード例 #2
0
        protected override void WriteFixed(FixedSchema es, object value, Encoder encoder)
        {
            if (value == null || !(value is GenericFixed) || !(value as GenericFixed).Schema.Equals(es))
            {
                throw TypeMismatch(value, "fixed", "GenericFixed");
            }
            GenericFixed ba = (GenericFixed)value;

            encoder.WriteFixed(ba.Value);
        }
コード例 #3
0
        protected virtual object ReadFixed(FixedSchema writerSchema, Schema readerSchema, IDecoder d)
        {
            FixedSchema rs = (FixedSchema)readerSchema;

            if (rs.Size != writerSchema.Size)
            {
                throw new AvroException("Size mismatch between reader and writer fixed schemas. Writer: " + writerSchema +
                                        ", reader: " + readerSchema);
            }

            object ru = new GenericFixed(rs);

            byte[] bb = (ru as GenericFixed).Value;
            d.ReadFixed(bb);
            return(ru);
        }
コード例 #4
0
    private static void AddFixed(XContainer parent, GenericFixed value, string name = null,
                                 string nspace = null)
    {
        var element = new XElement(XFixed);

        if (name != null)
        {
            element.SetAttributeValue(XName, name);
        }

        if (nspace != null)
        {
            element.SetAttributeValue(XNamespace, nspace);
        }

        //element.Value = BitConverter.ToString(value.Value).Replace("-", string.Empty).ToLowerInvariant();
        element.Value = Convert.ToBase64String(value.Value);

        parent.Add(element);
    }
コード例 #5
0
        public void RecordGenericTest()
        {
            var enumSchema      = AvroParser.ReadSchema <EnumSchema>(@"{""name"":""Avro.Test.Generic.TestEnum"",""type"":""enum"",""symbols"":[""A"",""B"",""C""]}");
            var fixedSchema     = AvroParser.ReadSchema <FixedSchema>(@"{""name"":""Avro.Test.Generic.TestFixed"",""type"":""fixed"",""size"":40}");
            var subRecordSchema = AvroParser.ReadSchema <RecordSchema>(@"{""name"":""Avro.Test.Generic.TestSubRecord"",""type"":""record"",""fields"":[{""name"":""FieldD"",""type"":""boolean""}]}");
            var recordSchema    = AvroParser.ReadSchema <RecordSchema>(@"{""name"":""Avro.Test.Generic.TestRecord"",""type"":""record"",""fields"":[{""name"":""FieldA"",""type"":""int""},{""name"":""FieldB"",""type"":""string""},{""name"":""FieldC"",""type"":{""name"":""Avro.Test.Generic.TestSubRecord"",""type"":""record"",""fields"":[{""name"":""FieldD"",""type"":""boolean""}]}},{""name"":""FieldX"",""type"":{""name"":""Avro.Test.Generic.TestEnum"",""type"":""enum"",""symbols"":[""A"",""B"",""C""]}},{""name"":""TestFixed"",""type"":{""name"":""Avro.Test.Generic.TestFixed"",""type"":""fixed"",""size"":40}}]}");

            var subRecordInstance = new GenericRecord(subRecordSchema);
            var fixedInstance     = new GenericFixed(fixedSchema);
            var enumInstance      = new GenericEnum(enumSchema, "B");

            subRecordInstance["FieldD"] = false;

            var expectedValue = new GenericRecord(recordSchema);

            expectedValue["FieldA"]    = 123;
            expectedValue["FieldB"]    = "Test";
            expectedValue["FieldC"]    = subRecordInstance;
            expectedValue["FieldX"]    = enumInstance;
            expectedValue["TestFixed"] = fixedInstance;

            var writer = new DatumWriter <GenericRecord>(recordSchema);
            var reader = new DatumReader <GenericRecord>(recordSchema, recordSchema);

            using (var stream = new MemoryStream())
                using (var encoder = new BinaryEncoder(stream))
                    using (var decoder = new BinaryDecoder(stream))
                    {
                        writer.Write(encoder, expectedValue);
                        stream.Seek(0, SeekOrigin.Begin);
                        var actualValue = reader.Read(decoder);
                        for (int i = 0; i < expectedValue.FieldCount; i++)
                        {
                            Assert.AreEqual(expectedValue[i], actualValue[i]);
                        }
                    }
        }
コード例 #6
0
        private static GenericRecord mkRecord(object[] kv, RecordSchema s)
        {
            GenericRecord input = new GenericRecord(s);

            for (int i = 0; i < kv.Length; i += 2)
            {
                string fieldName  = (string)kv[i];
                object fieldValue = kv[i + 1];
                Schema inner      = s[fieldName].Schema;
                if (inner is EnumSchema)
                {
                    GenericEnum ge = new GenericEnum(inner as EnumSchema, (string)fieldValue);
                    fieldValue = ge;
                }
                else if (inner is FixedSchema)
                {
                    GenericFixed gf = new GenericFixed(inner as FixedSchema);
                    gf.Value   = (byte[])fieldValue;
                    fieldValue = gf;
                }
                input.Add(fieldName, fieldValue);
            }
            return(input);
        }
コード例 #7
0
        static void GenerateInteropData(string schemaPath, string outputDir)
        {
            RecordSchema schema = null;

            using (var reader = new StreamReader(schemaPath))
            {
                schema = Schema.Parse(reader.ReadToEnd()) as RecordSchema;
            }

            var mapFieldSchema  = (schema.Fields.Find(x => x.Name == "mapField").Schema as MapSchema).ValueSchema as RecordSchema;
            var mapFieldRecord0 = new GenericRecord(mapFieldSchema);
            var mapFieldRecord1 = new GenericRecord(mapFieldSchema);

            mapFieldRecord0.Add("label", "a");
            mapFieldRecord1.Add("label", "cee");
            var mapFieldValue = new Dictionary <string, GenericRecord>
            {
                { "a", mapFieldRecord0 },
                { "bee", mapFieldRecord1 }
            };

            var enumFieldValue = new GenericEnum(schema.Fields.Find(x => x.Name == "enumField").Schema as EnumSchema, "C");

            var fixedFieldValue = new GenericFixed(
                schema.Fields.Find(x => x.Name == "fixedField").Schema as FixedSchema,
                Encoding.ASCII.GetBytes("1019181716151413"));

            var nodeSchema            = schema.Fields.Find(x => x.Name == "recordField").Schema as RecordSchema;
            var recordFieldValue      = new GenericRecord(nodeSchema);
            var innerRecordFieldValue = new GenericRecord(nodeSchema);

            innerRecordFieldValue.Add("label", "inner");
            innerRecordFieldValue.Add("children", new GenericRecord[] { });
            recordFieldValue.Add("label", "blah");
            recordFieldValue.Add("children", new GenericRecord[] { innerRecordFieldValue });

            GenericRecord record = new GenericRecord(schema);

            record.Add("intField", 12);
            record.Add("longField", 15234324L);
            record.Add("stringField", "hey");
            record.Add("boolField", true);
            record.Add("floatField", 1234.0f);
            record.Add("doubleField", -1234.0);
            record.Add("bytesField", Encoding.UTF8.GetBytes("12312adf"));
            record.Add("nullField", null);
            record.Add("arrayField", new double[] { 5.0, 0.0, 12.0 });
            record.Add("mapField", mapFieldValue);
            record.Add("unionField", 12.0);
            record.Add("enumField", enumFieldValue);
            record.Add("fixedField", fixedFieldValue);
            record.Add("recordField", recordFieldValue);

            var datumWriter = new GenericDatumWriter <GenericRecord>(schema);

            foreach (var codecName in InteropDataConstants.SupportedCodecNames)
            {
                var outputFile = "csharp.avro";
                if (codecName != DataFileConstants.NullCodec)
                {
                    outputFile = string.Format("csharp_{0}.avro", codecName);
                }
                var outputPath = Path.Combine(outputDir, outputFile);
                var codec      = Codec.CreateCodecFromString(codecName);
                using (var dataFileWriter = DataFileWriter <GenericRecord> .OpenWriter(datumWriter, outputPath, codec))
                {
                    dataFileWriter.Append(record);
                }
            }
        }