コード例 #1
0
ファイル: NamedSchema.cs プロジェクト: torgebo/avro
 /// <summary>
 /// Constructor for named schema class
 /// </summary>
 /// <param name="type">schema type</param>
 /// <param name="name">name</param>
 /// <param name="names">list of named schemas already read</param>
 protected NamedSchema(Type type, SchemaName name, IList<SchemaName> aliases, PropertyMap props, SchemaNames names)
     : base(type, props)
 {
     this.SchemaName = name;
     this.aliases = aliases;
     if (null != name.Name)  // Added this check for anonymous records inside Message
         if (!names.Add(name, this))
             throw new AvroException("Duplicate schema name " + name.Fullname);
 }
コード例 #2
0
ファイル: NamedSchema.cs プロジェクト: gth828r/avro-python3
 /// <summary>
 /// Constructor for named schema class
 /// </summary>
 /// <param name="type">schema type</param>
 /// <param name="name">name</param>
 /// <param name="names">list of named schemas already read</param>
 protected NamedSchema(Type type, SchemaName name, IList <SchemaName> aliases, PropertyMap props, SchemaNames names)
     : base(type, props)
 {
     this.SchemaName = name;
     this.aliases    = aliases;
     if (null != name.Name)  // Added this check for anonymous records inside Message
     {
         if (!names.Add(name, this))
         {
             throw new AvroException("Duplicate schema name " + name.Fullname);
         }
     }
 }
コード例 #3
0
ファイル: AvroGen.cs プロジェクト: vivekk1010/Apache-Avro
 private static void GenSchema(IEnumerable <string> infile, string outdir)
 {
     try
     {
         var codeGen    = new CodeGen();
         var schemaName = new SchemaNames();
         foreach (var str in infile)
         {
             var schema = Schema.Parse(System.IO.File.ReadAllText(str), schemaName);
             schemaName.Add(schema as NamedSchema);
             codeGen.AddSchema(schema);
         }
         codeGen.GenerateCode();
         codeGen.WriteTypes(outdir);
     }
     catch (Exception exception)
     {
         //Console.WriteLine(string.Concat("Exception occurred. ", exception.Message));
         throw new Exception(string.Concat("Exception occurred. ", exception.Message));
     }
 }
コード例 #4
0
 /// <summary>
 /// Writes named schema in JSON format
 /// </summary>
 /// <param name="writer">JSON writer</param>
 /// <param name="names">list of named schemas already written</param>
 /// <param name="encspace">enclosing namespace of the named schema</param>
 protected internal override void WriteJson(Newtonsoft.Json.JsonTextWriter writer, SchemaNames names, string encspace)
 {
     if (!names.Add(this))
     {
         // schema is already in the list, write name only
         SchemaName schemaName = this.SchemaName;
         string     name;
         if (schemaName.Namespace != encspace)
         {
             name = schemaName.Namespace + "." + schemaName.Name;  // we need to add the qualifying namespace of the target schema if it's not the same as current namespace
         }
         else
         {
             name = schemaName.Name;
         }
         writer.WriteValue(name);
     }
     else
     {
         // schema is not in the list, write full schema definition
         base.WriteJson(writer, names, encspace);
     }
 }
コード例 #5
0
ファイル: CodeGen.cs プロジェクト: genggjh/mypipe
        /// <summary>
        /// Recursively search the given schema for named schemas and adds them to the given container
        /// </summary>
        /// <param name="schema">schema object to search</param>
        /// <param name="names">list of named schemas</param>
        protected virtual void addName(Schema schema, SchemaNames names)
        {
            NamedSchema ns = schema as NamedSchema;
            if (null != ns) if (names.Contains(ns.SchemaName)) return;

            switch (schema.Tag)
            {
                case Schema.Type.Null:
                case Schema.Type.Boolean:
                case Schema.Type.Int:
                case Schema.Type.Long:
                case Schema.Type.Float:
                case Schema.Type.Double:
                case Schema.Type.Bytes:
                case Schema.Type.String:
                    break;

                case Schema.Type.Enumeration:
                case Schema.Type.Fixed:
                    names.Add(ns);
                    break;

                case Schema.Type.Record:
                case Schema.Type.Error:
                    var rs = schema as RecordSchema;
                    names.Add(rs);
                    foreach (Field field in rs.Fields)
                        addName(field.Schema, names);
                    break;

                case Schema.Type.Array:
                    var asc = schema as ArraySchema;
                    addName(asc.ItemSchema, names);
                    break;

                case Schema.Type.Map:
                    var ms = schema as MapSchema;
                    addName(ms.ValueSchema, names);
                    break;

                case Schema.Type.Union:
                    var us = schema as UnionSchema;
                    foreach (Schema usc in us.Schemas)
                        addName(usc, names);
                    break;

                default:
                    throw new CodeGenException("Unable to add name for " + schema.Name + " type " + schema.Tag);
            }
        }
コード例 #6
0
ファイル: CodeGen.cs プロジェクト: yanivru/avro
        /// <summary>
        /// Recursively search the given schema for named schemas and adds them to the given container.
        /// </summary>
        /// <param name="schema">schema object to search.</param>
        /// <param name="names">list of named schemas.</param>
        /// <exception cref="CodeGenException">Unable to add name for " + schema.Name + " type " + schema.Tag.</exception>
        protected virtual void addName(Schema schema, SchemaNames names)
        {
            NamedSchema ns = schema as NamedSchema;

            if (ns != null && names.Contains(ns.SchemaName))
            {
                return;
            }

            switch (schema.Tag)
            {
            case Schema.Type.Null:
            case Schema.Type.Boolean:
            case Schema.Type.Int:
            case Schema.Type.Long:
            case Schema.Type.Float:
            case Schema.Type.Double:
            case Schema.Type.Bytes:
            case Schema.Type.String:
            case Schema.Type.Logical:
                break;

            case Schema.Type.Enumeration:
            case Schema.Type.Fixed:
                names.Add(ns);
                break;

            case Schema.Type.Record:
            case Schema.Type.Error:
                var rs = schema as RecordSchema;
                names.Add(rs);
                foreach (Field field in rs.Fields)
                {
                    addName(field.Schema, names);
                }

                break;

            case Schema.Type.Array:
                var asc = schema as ArraySchema;
                addName(asc.ItemSchema, names);
                break;

            case Schema.Type.Map:
                var ms = schema as MapSchema;
                addName(ms.ValueSchema, names);
                break;

            case Schema.Type.Union:
                var us = schema as UnionSchema;
                foreach (Schema usc in us.Schemas)
                {
                    addName(usc, names);
                }

                break;

            default:
                throw new CodeGenException("Unable to add name for " + schema.Name + " type " + schema.Tag);
            }
        }
コード例 #7
0
ファイル: NamedSchema.cs プロジェクト: torgebo/avro
 /// <summary>
 /// Writes named schema in JSON format
 /// </summary>
 /// <param name="writer">JSON writer</param>
 /// <param name="names">list of named schemas already written</param>
 /// <param name="encspace">enclosing namespace of the named schema</param>
 protected internal override void WriteJson(Newtonsoft.Json.JsonTextWriter writer, SchemaNames names, string encspace)
 {
     if (!names.Add(this))
     {
         // schema is already in the list, write name only
         SchemaName schemaName = this.SchemaName;
         string name;
         if (schemaName.Namespace != encspace)
             name = schemaName.Namespace + "." + schemaName.Name;  // we need to add the qualifying namespace of the target schema if it's not the same as current namespace
         else
             name = schemaName.Name;
         writer.WriteValue(name);
     }
     else
         // schema is not in the list, write full schema definition
         base.WriteJson(writer, names, encspace);
 }