Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Data / System / Data / SQLTypes / SqlTypesSchemaImporter.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="SqlTypesSchemaImporter.cs" company="Microsoft">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">dondu</owner>
6 // <owner current="true" primary="false">Microsoft</owner>
7 // <owner current="true" primary="false">Microsoft</owner>
8 //------------------------------------------------------------------------------
9
10
11 namespace System.Data.SqlTypes {
12
13     using System;
14     using System.CodeDom;
15     using System.CodeDom.Compiler;
16     using System.Collections;
17     using System.Collections.Specialized;
18     using System.Xml;
19     using System.Xml.Schema;
20     using System.Xml.Serialization;
21     using System.Xml.Serialization.Advanced;
22
23     public class SqlTypesSchemaImporterExtensionHelper : SchemaImporterExtension {
24         private string m_name;
25         private string m_targetNamespace;
26         private string[] m_references;
27         private CodeNamespaceImport[] m_namespaceImports;
28         private string m_destinationType;
29         private bool m_direct;
30        public SqlTypesSchemaImporterExtensionHelper(string name,
31                                                      string targetNamespace,
32                                                      string[] references,
33                                                      CodeNamespaceImport[] namespaceImports,
34                                                      string destinationType,
35                                                      bool direct) {
36             Init(name, targetNamespace, references, namespaceImports, destinationType, direct);
37         }
38         public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType) {
39             Init(name, SqlTypesNamespace, null, null, destinationType, true);
40         }
41         public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType, bool direct) {
42             Init(name, SqlTypesNamespace, null, null, destinationType, direct);
43         }
44         private void Init(string name,
45                           string targetNamespace,
46                           string[] references,
47                           CodeNamespaceImport[] namespaceImports,
48                           string destinationType,
49                           bool direct) {
50             m_name = name;
51             m_targetNamespace = targetNamespace;
52             if (references == null) {
53                 m_references = new string[1];
54                 m_references[0] = "System.Data.dll";
55             } else {
56                 m_references = references;
57             }
58             if (namespaceImports == null) {
59                 m_namespaceImports = new CodeNamespaceImport[2];
60                 m_namespaceImports[0] = new CodeNamespaceImport("System.Data");
61                 m_namespaceImports[1] = new CodeNamespaceImport("System.Data.SqlTypes");
62             } else {
63                 m_namespaceImports = namespaceImports;
64             }
65             m_destinationType = destinationType;
66             m_direct = direct;
67         }
68         public override string ImportSchemaType(string name,
69                                                 string xmlNamespace,
70                                                 XmlSchemaObject context,
71                                                 XmlSchemas schemas,
72                                                 XmlSchemaImporter importer,
73                                                 CodeCompileUnit compileUnit,
74                                                 CodeNamespace mainNamespace,
75                                                 CodeGenerationOptions options,
76                                                 CodeDomProvider codeProvider) {
77             if (m_direct) {
78                 if (context is XmlSchemaElement) {
79                     if ((0 == string.CompareOrdinal(m_name, name)) && (0 == string.CompareOrdinal(m_targetNamespace, xmlNamespace))) {
80                         compileUnit.ReferencedAssemblies.AddRange(m_references);
81                         mainNamespace.Imports.AddRange(m_namespaceImports);
82                         return m_destinationType;
83                     }
84                 }
85             }
86             return null;
87         }
88         public override string ImportSchemaType(XmlSchemaType type,
89                                                 XmlSchemaObject context,
90                                                 XmlSchemas schemas,
91                                                 XmlSchemaImporter importer,
92                                                 CodeCompileUnit compileUnit,
93                                                 CodeNamespace mainNamespace,
94                                                 CodeGenerationOptions options,
95                                                 CodeDomProvider codeProvider) {
96             if (!m_direct) {
97                 if ((type is XmlSchemaSimpleType) && (context is XmlSchemaElement)) {
98                     XmlSchemaType basetype = ((XmlSchemaSimpleType) type).BaseXmlSchemaType;
99                     XmlQualifiedName qname = basetype.QualifiedName;
100                     if ((0 == string.CompareOrdinal(m_name, qname.Name)) && (0 == string.CompareOrdinal(m_targetNamespace, qname.Namespace))) {
101                         compileUnit.ReferencedAssemblies.AddRange(m_references);
102                         mainNamespace.Imports.AddRange(m_namespaceImports);
103                         return m_destinationType;
104                     }
105                 }
106             }
107             return null;
108         }
109
110         protected static readonly string SqlTypesNamespace = "http://schemas.microsoft.com/sqlserver/2004/sqltypes";
111     };
112     
113     public sealed class TypeCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
114         public TypeCharSchemaImporterExtension() : base("char", "System.Data.SqlTypes.SqlString", false) { }
115     }
116
117     public sealed class TypeNCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
118         public TypeNCharSchemaImporterExtension() : base("nchar", "System.Data.SqlTypes.SqlString", false) { }
119     }
120
121     public sealed class TypeVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
122         public TypeVarCharSchemaImporterExtension() : base("varchar", "System.Data.SqlTypes.SqlString", false) { }
123     }
124
125     public sealed class TypeNVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
126         public TypeNVarCharSchemaImporterExtension() : base("nvarchar", "System.Data.SqlTypes.SqlString", false) { }
127     }
128
129     public sealed class TypeTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
130         public TypeTextSchemaImporterExtension() : base("text", "System.Data.SqlTypes.SqlString", false) { }
131     }
132
133     public sealed class TypeNTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
134         public TypeNTextSchemaImporterExtension() : base("ntext", "System.Data.SqlTypes.SqlString", false) { }
135     }
136
137     public sealed class TypeVarBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
138         public TypeVarBinarySchemaImporterExtension() : base("varbinary", "System.Data.SqlTypes.SqlBinary", false) { }
139     }
140
141     public sealed class TypeBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
142         public TypeBinarySchemaImporterExtension() : base("binary", "System.Data.SqlTypes.SqlBinary", false) { }
143     }
144
145     public sealed class TypeVarImageSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
146         public TypeVarImageSchemaImporterExtension() : base("image", "System.Data.SqlTypes.SqlBinary", false) { }
147     }
148
149 /*
150   <xsd:simpleType name=\"timestamp\">
151     <xsd:restriction base=\"xsd:base64Binary\">
152       <xsd:maxLength value=\"8\"/>
153     </xsd:restriction>
154   </xsd:simpleType>
155 */
156
157 /*
158   <xsd:simpleType name=\"timestampNumeric\">
159   <!-- The timestampNumeric type supports a legacy format of timestamp. -->
160     <xsd:restriction base=\"xsd:long\"/>
161   </xsd:simpleType>
162 */
163
164     public sealed class TypeDecimalSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
165         public TypeDecimalSchemaImporterExtension() : base("decimal", "System.Data.SqlTypes.SqlDecimal", false) { }
166     }
167
168     public sealed class TypeNumericSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
169         public TypeNumericSchemaImporterExtension() : base("numeric", "System.Data.SqlTypes.SqlDecimal", false) { }
170     }
171
172     public sealed class TypeBigIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
173         public TypeBigIntSchemaImporterExtension() : base("bigint", "System.Data.SqlTypes.SqlInt64") { }
174     }
175
176     public sealed class TypeIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
177         public TypeIntSchemaImporterExtension() : base("int", "System.Data.SqlTypes.SqlInt32") { }
178     }
179
180     public sealed class TypeSmallIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
181         public TypeSmallIntSchemaImporterExtension() : base("smallint", "System.Data.SqlTypes.SqlInt16") { }
182     }
183
184     public sealed class TypeTinyIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
185         public TypeTinyIntSchemaImporterExtension() : base("tinyint", "System.Data.SqlTypes.SqlByte") { }
186     }
187
188     public sealed class TypeBitSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
189         public TypeBitSchemaImporterExtension() : base("bit", "System.Data.SqlTypes.SqlBoolean") { }
190     }
191
192     public sealed class TypeFloatSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
193         public TypeFloatSchemaImporterExtension() : base("float", "System.Data.SqlTypes.SqlDouble") { }
194     }
195
196     public sealed class TypeRealSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
197         public TypeRealSchemaImporterExtension() : base("real", "System.Data.SqlTypes.SqlSingle") { }
198     }
199
200 /*
201   <xsd:simpleType name=\"utcdatetime\">
202     <xsd:restriction base=\"xsd:dateTime\">
203       <xsd:pattern value=\"((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[0,1,2]))-((0[1-9])|([1,2][0-9])|(3[0,1]))T(([0,1][0-9])|(2[0-3]))(:[0-5][0-9]){2}\.[0-9]{7}(Z|(\-|\+)(((0[1-9])|(1[0-2])):[0-5][0-9]))\"/>
204       <xsd:maxInclusive value=\"9999-12-31T23:59:59.9999999Z\"/>
205       <xsd:minInclusive value=\"0001-01-01T00:00:00.0000000Z\"/>
206     </xsd:restriction>
207   </xsd:simpleType>
208 */
209
210     public sealed class TypeDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
211         public TypeDateTimeSchemaImporterExtension() : base("datetime", "System.Data.SqlTypes.SqlDateTime") { }
212     }
213
214     public sealed class TypeSmallDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
215         public TypeSmallDateTimeSchemaImporterExtension() : base("smalldatetime", "System.Data.SqlTypes.SqlDateTime") { }
216     }
217
218     public sealed class TypeMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
219         public TypeMoneySchemaImporterExtension() : base("money", "System.Data.SqlTypes.SqlMoney") { }
220     }
221
222     public sealed class TypeSmallMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
223         public TypeSmallMoneySchemaImporterExtension() : base("smallmoney", "System.Data.SqlTypes.SqlMoney") { }
224     }
225
226     public sealed class TypeUniqueIdentifierSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
227         public TypeUniqueIdentifierSchemaImporterExtension() : base("uniqueidentifier", "System.Data.SqlTypes.SqlGuid") { }
228     }
229
230 /*
231   <!-- sql_variant directly maps to xsd:anyType -->
232 */
233
234 /*
235   <xsd:complexType name=\"xml\" mixed=\"true\">
236     <xsd:sequence>
237       <xsd:any minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\" />
238     </xsd:sequence>
239   </xsd:complexType>
240 */
241
242 /*
243   <xsd:simpleType name=\"dbobject\">
244     <xsd:restriction base=\"xsd:anyURI\" />
245   </xsd:simpleType>
246 */
247
248 }