// Create a new Code type for a particular heading public static DataTypeCode Create(string name, DataHeading heading, TypeFlags flags, ConvertDelegate converter = null, DefaultDelegate defaulter = null) { var dt = new DataTypeCode { Name = name, Heading = heading, Flags = flags, }; dt.NativeType = TypeMaker.CreateType(dt); return(dt); }
// Get type from dictionary, or create and add public static DataTypeTuple Get(DataHeading heading) { if (_headings.ContainsKey(heading)) { return(_headings[heading]); } var dt = DataTypeTuple.Create("tuple", heading, TypeFlags.Variable | TypeFlags.Generated | TypeFlags.HasHeading); dt.Ordinal = _headings.Count + 1; dt.NativeType = TypeMaker.CreateType(dt); _headings[heading] = dt; return(dt); }
// Get type from dictionary, or create and add // Every relation needs a row type, so make sure they use the same heading public static DataTypeRelation Get(DataHeading heading) { if (_headings.ContainsKey(heading)) { return(_headings[heading]); } var tupletype = DataTypeTuple.Get(heading); var dt = DataTypeRelation.Create("relation", tupletype.Heading, TypeFlags.Variable | TypeFlags.Generated | TypeFlags.HasHeading); dt.Ordinal = _headings.Count + 1; dt.ChildTupleType = tupletype; dt.NativeType = TypeMaker.CreateType(dt); _headings[heading] = dt; var x = Activator.CreateInstance(dt.NativeType); return(dt); }