Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SqlXml.cs
Go to the documentation of this file.
1
using
System.Data.Common
;
2
using
System.IO
;
3
using
System.Reflection
;
4
using
System.Text
;
5
using
System.Xml
;
6
using
System.Xml.Schema
;
7
using
System.Xml.Serialization
;
8
9
namespace
System.Data.SqlTypes
;
10
11
[
XmlSchemaProvider
(
"GetXsdType"
)]
12
public
sealed
class
SqlXml
:
INullable
,
IXmlSerializable
13
{
14
private
static
readonly
Func<Stream, XmlReaderSettings, XmlParserContext, XmlReader>
s_sqlReaderDelegate
=
CreateSqlReaderDelegate
();
15
16
private
static
readonly
XmlReaderSettings
s_defaultXmlReaderSettings
=
new
XmlReaderSettings
17
{
18
ConformanceLevel
=
ConformanceLevel.Fragment
19
};
20
21
private
static
readonly
XmlReaderSettings
s_defaultXmlReaderSettingsCloseInput
=
new
XmlReaderSettings
22
{
23
ConformanceLevel
=
ConformanceLevel
.Fragment,
24
CloseInput =
true
25
};
26
27
private
static
MethodInfo
s_createSqlReaderMethodInfo
;
28
29
private
MethodInfo
_createSqlReaderMethodInfo
;
30
31
private
bool
_fNotNull
;
32
33
private
Stream
_stream
;
34
35
private
bool
_firstCreateReader
;
36
37
private
static
MethodInfo
CreateSqlReaderMethodInfo
38
{
39
get
40
{
41
if
(
s_createSqlReaderMethodInfo
==
null
)
42
{
43
s_createSqlReaderMethodInfo
=
typeof
(
XmlReader
).GetMethod(
"CreateSqlReader"
,
BindingFlags
.Static |
BindingFlags
.NonPublic);
44
}
45
return
s_createSqlReaderMethodInfo
;
46
}
47
}
48
49
public
bool
IsNull
=> !
_fNotNull
;
50
51
public
string
Value
52
{
53
get
54
{
55
if
(
IsNull
)
56
{
57
throw
new
SqlNullValueException
();
58
}
59
StringWriter
stringWriter
=
new
StringWriter
((
IFormatProvider
?)
null
);
60
XmlWriterSettings
xmlWriterSettings
=
new
XmlWriterSettings
();
61
xmlWriterSettings.CloseOutput
=
false
;
62
xmlWriterSettings.ConformanceLevel
=
ConformanceLevel
.Fragment;
63
XmlWriter
xmlWriter
=
XmlWriter
.
Create
(
stringWriter
,
xmlWriterSettings
);
64
XmlReader
xmlReader
=
CreateReader
();
65
if
(
xmlReader
.ReadState ==
ReadState
.Initial)
66
{
67
xmlReader
.Read();
68
}
69
while
(!
xmlReader
.EOF)
70
{
71
xmlWriter
.WriteNode(
xmlReader
,
defattr
:
true
);
72
}
73
xmlWriter
.Flush();
74
return
stringWriter
.ToString();
75
}
76
}
77
78
public
static
SqlXml
Null
=>
new
SqlXml
(
fNull
:
true
);
79
80
public
SqlXml
()
81
{
82
SetNull
();
83
}
84
85
private
SqlXml
(
bool
fNull
)
86
{
87
SetNull
();
88
}
89
90
public
SqlXml
(
XmlReader
?
value
)
91
{
92
if
(
value
==
null
)
93
{
94
SetNull
();
95
return
;
96
}
97
_fNotNull
=
true
;
98
_firstCreateReader
=
true
;
99
_stream
=
CreateMemoryStreamFromXmlReader
(
value
);
100
}
101
102
public
SqlXml
(
Stream
?
value
)
103
{
104
if
(
value
==
null
)
105
{
106
SetNull
();
107
return
;
108
}
109
_firstCreateReader
=
true
;
110
_fNotNull
=
true
;
111
_stream
=
value
;
112
}
113
114
public
XmlReader
CreateReader
()
115
{
116
if
(
IsNull
)
117
{
118
throw
new
SqlNullValueException
();
119
}
120
SqlXmlStreamWrapper
sqlXmlStreamWrapper
=
new
SqlXmlStreamWrapper
(
_stream
);
121
if
((!
_firstCreateReader
||
sqlXmlStreamWrapper
.CanSeek) &&
sqlXmlStreamWrapper
.Position != 0
L
)
122
{
123
sqlXmlStreamWrapper
.Seek(0
L
,
SeekOrigin
.Begin);
124
}
125
if
(
_createSqlReaderMethodInfo
==
null
)
126
{
127
_createSqlReaderMethodInfo
=
CreateSqlReaderMethodInfo
;
128
}
129
XmlReader
result =
CreateSqlXmlReader
(
sqlXmlStreamWrapper
);
130
_firstCreateReader
=
false
;
131
return
result;
132
}
133
134
internal
static
XmlReader
CreateSqlXmlReader
(
Stream
stream
,
bool
closeInput
=
false
,
bool
throwTargetInvocationExceptions
=
false
)
135
{
136
XmlReaderSettings
arg
= (
closeInput
?
s_defaultXmlReaderSettingsCloseInput
:
s_defaultXmlReaderSettings
);
137
try
138
{
139
return
s_sqlReaderDelegate
(
stream
,
arg
,
null
);
140
}
141
catch
(
Exception
ex
)
142
{
143
if
(!
throwTargetInvocationExceptions
|| !
ADP
.
IsCatchableExceptionType
(
ex
))
144
{
145
throw
;
146
}
147
throw
new
TargetInvocationException
(
ex
);
148
}
149
}
150
151
private
static
Func<Stream, XmlReaderSettings, XmlParserContext, XmlReader>
CreateSqlReaderDelegate
()
152
{
153
return
CreateSqlReaderMethodInfo
.CreateDelegate<
Func<Stream, XmlReaderSettings, XmlParserContext, XmlReader>
>();
154
}
155
156
private
void
SetNull
()
157
{
158
_fNotNull
=
false
;
159
_stream
=
null
;
160
_firstCreateReader
=
true
;
161
}
162
163
private
Stream
CreateMemoryStreamFromXmlReader
(
XmlReader
reader)
164
{
165
XmlWriterSettings
xmlWriterSettings
=
new
XmlWriterSettings
();
166
xmlWriterSettings.CloseOutput
=
false
;
167
xmlWriterSettings.ConformanceLevel
=
ConformanceLevel
.Fragment;
168
xmlWriterSettings.Encoding
=
Encoding
.
GetEncoding
(
"utf-16"
);
169
xmlWriterSettings.OmitXmlDeclaration
=
true
;
170
MemoryStream
memoryStream
=
new
MemoryStream
();
171
XmlWriter
xmlWriter
=
XmlWriter
.
Create
(
memoryStream
,
xmlWriterSettings
);
172
if
(reader.
ReadState
==
ReadState
.Closed)
173
{
174
throw
new
InvalidOperationException
(
SQLResource
.
ClosedXmlReaderMessage
);
175
}
176
if
(reader.
ReadState
==
ReadState
.Initial)
177
{
178
reader.
Read
();
179
}
180
while
(!reader.
EOF
)
181
{
182
xmlWriter
.WriteNode(reader,
defattr
:
true
);
183
}
184
xmlWriter
.Flush();
185
memoryStream
.Seek(0
L
,
SeekOrigin
.Begin);
186
return
memoryStream
;
187
}
188
189
XmlSchema
IXmlSerializable
.
GetSchema
()
190
{
191
return
null
;
192
}
193
194
void
IXmlSerializable
.
ReadXml
(
XmlReader
r
)
195
{
196
string
attribute
=
r
.GetAttribute(
"nil"
,
"http://www.w3.org/2001/XMLSchema-instance"
);
197
if
(
attribute
!=
null
&&
XmlConvert
.
ToBoolean
(
attribute
))
198
{
199
r
.ReadInnerXml();
200
SetNull
();
201
return
;
202
}
203
_fNotNull
=
true
;
204
_firstCreateReader
=
true
;
205
_stream
=
new
MemoryStream
();
206
StreamWriter
streamWriter
=
new
StreamWriter
(
_stream
);
207
streamWriter
.Write(
r
.ReadInnerXml());
208
streamWriter
.Flush();
209
if
(
_stream
.
CanSeek
)
210
{
211
_stream
.
Seek
(0
L
,
SeekOrigin
.Begin);
212
}
213
}
214
215
void
IXmlSerializable
.
WriteXml
(
XmlWriter
writer
)
216
{
217
if
(
IsNull
)
218
{
219
writer
.WriteAttributeString(
"xsi"
,
"nil"
,
"http://www.w3.org/2001/XMLSchema-instance"
,
"true"
);
220
}
221
else
222
{
223
XmlReader
xmlReader
=
CreateReader
();
224
if
(
xmlReader
.ReadState ==
ReadState
.Initial)
225
{
226
xmlReader
.Read();
227
}
228
while
(!
xmlReader
.EOF)
229
{
230
writer
.WriteNode(
xmlReader
,
defattr
:
true
);
231
}
232
}
233
writer
.Flush();
234
}
235
236
public
static
XmlQualifiedName
GetXsdType
(
XmlSchemaSet
schemaSet
)
237
{
238
return
new
XmlQualifiedName
(
"anyType"
,
"http://www.w3.org/2001/XMLSchema"
);
239
}
240
}
System.Data.Common.ADP.IsCatchableExceptionType
static bool IsCatchableExceptionType(Exception e)
Definition
ADP.cs:790
System.Data.Common.ADP
Definition
ADP.cs:15
System.Data.SqlTypes.SQLResource.ClosedXmlReaderMessage
static string ClosedXmlReaderMessage
Definition
SQLResource.cs:37
System.Data.SqlTypes.SQLResource
Definition
SQLResource.cs:4
System.Data.SqlTypes.SqlNullValueException
Definition
SqlNullValueException.cs:9
System.Data.SqlTypes.SqlXmlStreamWrapper
Definition
SqlXmlStreamWrapper.cs:7
System.Data.SqlTypes.SqlXml.s_createSqlReaderMethodInfo
static MethodInfo s_createSqlReaderMethodInfo
Definition
SqlXml.cs:27
System.Data.SqlTypes.SqlXml.GetXsdType
static XmlQualifiedName GetXsdType(XmlSchemaSet schemaSet)
Definition
SqlXml.cs:236
System.Data.SqlTypes.SqlXml.SqlXml
SqlXml(XmlReader? value)
Definition
SqlXml.cs:90
System.Data.SqlTypes.SqlXml._stream
Stream _stream
Definition
SqlXml.cs:33
System.Data.SqlTypes.SqlXml.SqlXml
SqlXml(bool fNull)
Definition
SqlXml.cs:85
System.Data.SqlTypes.SqlXml.SqlXml
SqlXml()
Definition
SqlXml.cs:80
System.Data.SqlTypes.SqlXml.Value
string Value
Definition
SqlXml.cs:52
System.Data.SqlTypes.SqlXml.CreateReader
XmlReader CreateReader()
Definition
SqlXml.cs:114
System.Data.SqlTypes.SqlXml.Null
static SqlXml Null
Definition
SqlXml.cs:78
System.Data.SqlTypes.SqlXml.CreateSqlReaderMethodInfo
static MethodInfo CreateSqlReaderMethodInfo
Definition
SqlXml.cs:38
System.Data.SqlTypes.SqlXml._fNotNull
bool _fNotNull
Definition
SqlXml.cs:31
System.Data.SqlTypes.SqlXml.SqlXml
SqlXml(Stream? value)
Definition
SqlXml.cs:102
System.Data.SqlTypes.SqlXml.IsNull
bool IsNull
Definition
SqlXml.cs:49
System.Data.SqlTypes.SqlXml._firstCreateReader
bool _firstCreateReader
Definition
SqlXml.cs:35
System.Data.SqlTypes.SqlXml.s_sqlReaderDelegate
static readonly Func< Stream, XmlReaderSettings, XmlParserContext, XmlReader > s_sqlReaderDelegate
Definition
SqlXml.cs:14
System.Data.SqlTypes.SqlXml.CreateSqlReaderDelegate
static Func< Stream, XmlReaderSettings, XmlParserContext, XmlReader > CreateSqlReaderDelegate()
Definition
SqlXml.cs:151
System.Data.SqlTypes.SqlXml.CreateMemoryStreamFromXmlReader
Stream CreateMemoryStreamFromXmlReader(XmlReader reader)
Definition
SqlXml.cs:163
System.Data.SqlTypes.SqlXml.s_defaultXmlReaderSettings
static readonly XmlReaderSettings s_defaultXmlReaderSettings
Definition
SqlXml.cs:16
System.Data.SqlTypes.SqlXml.CreateSqlXmlReader
static XmlReader CreateSqlXmlReader(Stream stream, bool closeInput=false, bool throwTargetInvocationExceptions=false)
Definition
SqlXml.cs:134
System.Data.SqlTypes.SqlXml._createSqlReaderMethodInfo
MethodInfo _createSqlReaderMethodInfo
Definition
SqlXml.cs:29
System.Data.SqlTypes.SqlXml.s_defaultXmlReaderSettingsCloseInput
static readonly XmlReaderSettings s_defaultXmlReaderSettingsCloseInput
Definition
SqlXml.cs:21
System.Data.SqlTypes.SqlXml.SetNull
void SetNull()
Definition
SqlXml.cs:156
System.Data.SqlTypes.SqlXml
Definition
SqlXml.cs:13
System.Exception
Definition
Exception.cs:15
System.IO.MemoryStream
Definition
MemoryStream.cs:9
System.IO.StreamWriter
Definition
StreamWriter.cs:11
System.IO.Stream.Seek
long Seek(long offset, SeekOrigin origin)
System.IO.Stream.CanSeek
bool CanSeek
Definition
Stream.cs:496
System.IO.Stream
Definition
Stream.cs:11
System.IO.StringWriter
Definition
StringWriter.cs:9
System.InvalidOperationException
Definition
InvalidOperationException.cs:9
System.Reflection.MethodInfo
Definition
MethodInfo.cs:7
System.Reflection.TargetInvocationException
Definition
TargetInvocationException.cs:9
System.Text.Encoding.GetEncoding
static Encoding GetEncoding(int codepage)
Definition
Encoding.cs:593
System.Text.Encoding
Definition
Encoding.cs:15
System.Xml.Schema.XmlSchemaSet
Definition
XmlSchemaSet.cs:9
System.Xml.Schema.XmlSchema
Definition
XmlSchema.cs:12
System.Xml.XmlConvert.ToBoolean
static bool ToBoolean(string s)
Definition
XmlConvert.cs:656
System.Xml.XmlConvert
Definition
XmlConvert.cs:11
System.Xml.XmlQualifiedName
Definition
XmlQualifiedName.cs:6
System.Xml.XmlReaderSettings
Definition
XmlReaderSettings.cs:7
System.Xml.XmlReader.EOF
bool EOF
Definition
XmlReader.cs:112
System.Xml.XmlReader.Read
bool Read()
System.Xml.XmlReader.ReadState
ReadState ReadState
Definition
XmlReader.cs:114
System.Xml.XmlReader
Definition
XmlReader.cs:14
System.Xml.XmlWriterSettings
Definition
XmlWriterSettings.cs:10
System.Xml.XmlWriter.Create
static XmlWriter Create(string outputFileName)
Definition
XmlWriter.cs:468
System.Xml.XmlWriter
Definition
XmlWriter.cs:11
System.Data.SqlTypes.INullable
Definition
INullable.cs:4
System.IFormatProvider
Definition
IFormatProvider.cs:4
System.Xml.Serialization.IXmlSerializable.GetSchema
XmlSchema? GetSchema()
System.Xml.Serialization.IXmlSerializable.WriteXml
void WriteXml(XmlWriter writer)
System.Xml.Serialization.IXmlSerializable.ReadXml
void ReadXml(XmlReader reader)
System.Xml.Serialization.IXmlSerializable
Definition
IXmlSerializable.cs:6
System.Data.Common
Definition
ADP.cs:12
System.Data.SqlTypes
Definition
EComparison.cs:1
System.IO.SeekOrigin
SeekOrigin
Definition
SeekOrigin.cs:4
System.IO
Definition
ConsoleStream.cs:3
System.Reflection.BindingFlags
BindingFlags
Definition
BindingFlags.cs:5
System.Reflection
Definition
ICustomTypeProvider.cs:1
System.Text
Definition
ConsoleEncoding.cs:1
System.Xml.Schema
Definition
Extensions.cs:3
System.Xml.Serialization
Definition
DateTimeSerializationSection.cs:1
System.Xml.ConformanceLevel
ConformanceLevel
Definition
ConformanceLevel.cs:4
System.Xml.ReadState
ReadState
Definition
ReadState.cs:4
System.Xml.ValueHandleType.Dictionary
@ Dictionary
System.Xml
Definition
BaseRegionIterator.cs:1
System.ExceptionArgument.value
@ value
System.ExceptionArgument.writer
@ writer
System.ExceptionArgument.stream
@ stream
System.ConsoleKey.L
@ L
source
System.Data.Common
System.Data.SqlTypes
SqlXml.cs
Generated by
1.10.0