Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SqlUdtStorage.cs
Go to the documentation of this file.
5using System.IO;
8using System.Xml;
10
11namespace System.Data.Common;
12
13internal sealed class SqlUdtStorage : DataStorage
14{
15 private object[] _values;
16
17 private readonly bool _implementsIXmlSerializable;
18
19 private readonly bool _implementsIComparable;
20
22
27
34
39
40 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2070:UnrecognizedReflectionPattern", Justification = "The only callsite is marked with DynamicallyAccessedMembers. Workaround for https://github.com/mono/linker/issues/1981")]
41 private static object GetStaticNullForUdtTypeCore(Type type)
42 {
43 PropertyInfo property = type.GetProperty("Null", BindingFlags.Static | BindingFlags.Public);
44 if (property != null)
45 {
46 return property.GetValue(null, null);
47 }
48 FieldInfo field = type.GetField("Null", BindingFlags.Static | BindingFlags.Public);
49 if (field != null)
50 {
51 return field.GetValue(null);
52 }
53 throw ExceptionBuilder.INullableUDTwithoutStaticNull(type.AssemblyQualifiedName);
54 }
55
56 public override bool IsNull(int record)
57 {
58 return ((INullable)_values[record]).IsNull;
59 }
60
61 public override object Aggregate(int[] records, AggregateType kind)
62 {
64 }
65
66 public override int Compare(int recordNo1, int recordNo2)
67 {
69 }
70
71 public override int CompareValueTo(int recordNo1, object value)
72 {
73 if (DBNull.Value == value)
74 {
76 }
78 {
80 return comparable.CompareTo(value);
81 }
82 if (_nullValue == value)
83 {
85 if (!nullable.IsNull)
86 {
87 return 1;
88 }
89 return 0;
90 }
92 }
93
94 public override void Copy(int recordNo1, int recordNo2)
95 {
98 }
99
100 public override object Get(int recordNo)
101 {
102 return _values[recordNo];
103 }
104
105 public override void Set(int recordNo, object value)
106 {
107 if (DBNull.Value == value)
108 {
110 SetNullBit(recordNo, flag: true);
111 }
112 else if (value == null)
113 {
114 if (_isValueType)
115 {
117 }
119 SetNullBit(recordNo, flag: true);
120 }
121 else
122 {
124 {
126 }
128 SetNullBit(recordNo, flag: false);
129 }
130 }
131
132 public override void SetCapacity(int capacity)
133 {
134 object[] array = new object[capacity];
135 if (_values != null)
136 {
138 }
139 _values = array;
140 base.SetCapacity(capacity);
141 }
142
143 [MethodImpl(MethodImplOptions.NoInlining)]
144 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
145 public override object ConvertXmlToObject(string s)
146 {
148 {
150 string s2 = "<col>" + s + "</col>";
152 using XmlTextReader reader = new XmlTextReader(input);
153 ((IXmlSerializable)obj).ReadXml(reader);
154 return obj;
155 }
156 StringReader textReader = new StringReader(s);
158 return xmlSerializer.Deserialize(textReader);
159 }
160
161 [MethodImpl(MethodImplOptions.NoInlining)]
162 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
164 {
165 if (xmlAttrib == null)
166 {
167 string text = xmlReader.GetAttribute("InstanceType", "urn:schemas-microsoft-com:xml-msdata");
168 if (text == null)
169 {
170 string attribute = xmlReader.GetAttribute("InstanceType", "http://www.w3.org/2001/XMLSchema-instance");
171 if (attribute != null)
172 {
173 text = XSDSchema.XsdtoClr(attribute).FullName;
174 }
175 }
176 Type type = ((text == null) ? _dataType : Type.GetType(text));
177 object obj = Activator.CreateInstance(type, nonPublic: true);
178 ((IXmlSerializable)obj).ReadXml(xmlReader);
179 return obj;
180 }
182 return xmlSerializer.Deserialize(xmlReader);
183 }
184
185 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
186 public override string ConvertObjectToXml(object value)
187 {
188 StringWriter stringWriter = new StringWriter(base.FormatProvider);
190 {
192 ((IXmlSerializable)value).WriteXml(writer);
193 }
194 else
195 {
197 xmlSerializer.Serialize(stringWriter, value);
198 }
199 return stringWriter.ToString();
200 }
201
202 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
204 {
205 if (xmlAttrib == null)
206 {
207 ((IXmlSerializable)value).WriteXml(xmlWriter);
208 return;
209 }
211 xmlSerializer.Serialize(xmlWriter, value);
212 }
213
214 protected override object GetEmptyStorage(int recordCount)
215 {
216 return new object[recordCount];
217 }
218
219 protected override void CopyValue(int record, object store, BitArray nullbits, int storeIndex)
220 {
221 object[] array = (object[])store;
224 }
225
226 protected override void SetStorage(object store, BitArray nullbits)
227 {
228 _values = (object[])store;
229 }
230}
static ? object CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type, BindingFlags bindingAttr, Binder? binder, object?[]? args, CultureInfo? culture)
Definition Activator.cs:17
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
static readonly DBNull Value
Definition DBNull.cs:8
void SetNullBit(int recordNo, bool flag)
void CopyBits(int srcRecordNo, int dstRecordNo)
static StorageType GetStorageType(Type dataType)
static XmlSerializer GetXmlSerializer(Type type)
override object ConvertXmlToObject(string s)
static readonly ConcurrentDictionary< Type, object > s_typeToNull
override void SetStorage(object store, BitArray nullbits)
override void CopyValue(int record, object store, BitArray nullbits, int storeIndex)
override object GetEmptyStorage(int recordCount)
override string ConvertObjectToXml(object value)
static object GetStaticNullForUdtTypeCore(Type type)
static object GetStaticNullForUdtType([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields|DynamicallyAccessedMemberTypes.PublicProperties)] Type type)
override bool IsNull(int record)
override object Aggregate(int[] records, AggregateType kind)
override void SetCapacity(int capacity)
SqlUdtStorage(DataColumn column, Type type, object nullValue)
override int CompareValueTo(int recordNo1, object value)
override void Copy(int recordNo1, int recordNo2)
override void Set(int recordNo, object value)
override int Compare(int recordNo1, int recordNo2)
SqlUdtStorage(DataColumn column, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields|DynamicallyAccessedMemberTypes.PublicProperties)] Type type)
override void ConvertObjectToXml(object value, XmlWriter xmlWriter, XmlRootAttribute xmlAttrib)
override object ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
override object Get(int recordNo)
static Exception IComparableNotImplemented(string typeName)
static Exception AggregateException(AggregateType aggregateType, Type type)
static Exception INullableUDTwithoutStaticNull(string typeName)
static Exception StorageSetFailed()
static Type XsdtoClr(string xsdTypeName)
static byte Min(byte val1, byte val2)
Definition Math.cs:912
object? GetValue(object? obj)
object? GetValue(object? obj)
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
Definition Type.cs:408
virtual bool IsInstanceOfType([NotNullWhen(true)] object? o)
Definition Type.cs:1020
string? AssemblyQualifiedName
Definition Type.cs:45