1 //------------------------------------------------------------------------------
2 // <copyright file="SqlTypesSchemaImporter.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
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 //------------------------------------------------------------------------------
11 namespace System.Data.SqlTypes {
15 using System.CodeDom.Compiler;
16 using System.Collections;
17 using System.Collections.Specialized;
19 using System.Xml.Schema;
20 using System.Xml.Serialization;
21 using System.Xml.Serialization.Advanced;
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,
33 CodeNamespaceImport[] namespaceImports,
34 string destinationType,
36 Init(name, targetNamespace, references, namespaceImports, destinationType, direct);
38 public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType) {
39 Init(name, SqlTypesNamespace, null, null, destinationType, true);
41 public SqlTypesSchemaImporterExtensionHelper(string name, string destinationType, bool direct) {
42 Init(name, SqlTypesNamespace, null, null, destinationType, direct);
44 private void Init(string name,
45 string targetNamespace,
47 CodeNamespaceImport[] namespaceImports,
48 string destinationType,
51 m_targetNamespace = targetNamespace;
52 if (references == null) {
53 m_references = new string[1];
54 m_references[0] = "System.Data.dll";
56 m_references = references;
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");
63 m_namespaceImports = namespaceImports;
65 m_destinationType = destinationType;
68 public override string ImportSchemaType(string name,
70 XmlSchemaObject context,
72 XmlSchemaImporter importer,
73 CodeCompileUnit compileUnit,
74 CodeNamespace mainNamespace,
75 CodeGenerationOptions options,
76 CodeDomProvider codeProvider) {
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;
88 public override string ImportSchemaType(XmlSchemaType type,
89 XmlSchemaObject context,
91 XmlSchemaImporter importer,
92 CodeCompileUnit compileUnit,
93 CodeNamespace mainNamespace,
94 CodeGenerationOptions options,
95 CodeDomProvider codeProvider) {
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;
110 protected static readonly string SqlTypesNamespace = "http://schemas.microsoft.com/sqlserver/2004/sqltypes";
113 public sealed class TypeCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
114 public TypeCharSchemaImporterExtension() : base("char", "System.Data.SqlTypes.SqlString", false) { }
117 public sealed class TypeNCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
118 public TypeNCharSchemaImporterExtension() : base("nchar", "System.Data.SqlTypes.SqlString", false) { }
121 public sealed class TypeVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
122 public TypeVarCharSchemaImporterExtension() : base("varchar", "System.Data.SqlTypes.SqlString", false) { }
125 public sealed class TypeNVarCharSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
126 public TypeNVarCharSchemaImporterExtension() : base("nvarchar", "System.Data.SqlTypes.SqlString", false) { }
129 public sealed class TypeTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
130 public TypeTextSchemaImporterExtension() : base("text", "System.Data.SqlTypes.SqlString", false) { }
133 public sealed class TypeNTextSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
134 public TypeNTextSchemaImporterExtension() : base("ntext", "System.Data.SqlTypes.SqlString", false) { }
137 public sealed class TypeVarBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
138 public TypeVarBinarySchemaImporterExtension() : base("varbinary", "System.Data.SqlTypes.SqlBinary", false) { }
141 public sealed class TypeBinarySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
142 public TypeBinarySchemaImporterExtension() : base("binary", "System.Data.SqlTypes.SqlBinary", false) { }
145 public sealed class TypeVarImageSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
146 public TypeVarImageSchemaImporterExtension() : base("image", "System.Data.SqlTypes.SqlBinary", false) { }
150 <xsd:simpleType name=\"timestamp\">
151 <xsd:restriction base=\"xsd:base64Binary\">
152 <xsd:maxLength value=\"8\"/>
158 <xsd:simpleType name=\"timestampNumeric\">
159 <!-- The timestampNumeric type supports a legacy format of timestamp. -->
160 <xsd:restriction base=\"xsd:long\"/>
164 public sealed class TypeDecimalSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
165 public TypeDecimalSchemaImporterExtension() : base("decimal", "System.Data.SqlTypes.SqlDecimal", false) { }
168 public sealed class TypeNumericSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
169 public TypeNumericSchemaImporterExtension() : base("numeric", "System.Data.SqlTypes.SqlDecimal", false) { }
172 public sealed class TypeBigIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
173 public TypeBigIntSchemaImporterExtension() : base("bigint", "System.Data.SqlTypes.SqlInt64") { }
176 public sealed class TypeIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
177 public TypeIntSchemaImporterExtension() : base("int", "System.Data.SqlTypes.SqlInt32") { }
180 public sealed class TypeSmallIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
181 public TypeSmallIntSchemaImporterExtension() : base("smallint", "System.Data.SqlTypes.SqlInt16") { }
184 public sealed class TypeTinyIntSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
185 public TypeTinyIntSchemaImporterExtension() : base("tinyint", "System.Data.SqlTypes.SqlByte") { }
188 public sealed class TypeBitSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
189 public TypeBitSchemaImporterExtension() : base("bit", "System.Data.SqlTypes.SqlBoolean") { }
192 public sealed class TypeFloatSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
193 public TypeFloatSchemaImporterExtension() : base("float", "System.Data.SqlTypes.SqlDouble") { }
196 public sealed class TypeRealSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
197 public TypeRealSchemaImporterExtension() : base("real", "System.Data.SqlTypes.SqlSingle") { }
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\"/>
210 public sealed class TypeDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
211 public TypeDateTimeSchemaImporterExtension() : base("datetime", "System.Data.SqlTypes.SqlDateTime") { }
214 public sealed class TypeSmallDateTimeSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
215 public TypeSmallDateTimeSchemaImporterExtension() : base("smalldatetime", "System.Data.SqlTypes.SqlDateTime") { }
218 public sealed class TypeMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
219 public TypeMoneySchemaImporterExtension() : base("money", "System.Data.SqlTypes.SqlMoney") { }
222 public sealed class TypeSmallMoneySchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
223 public TypeSmallMoneySchemaImporterExtension() : base("smallmoney", "System.Data.SqlTypes.SqlMoney") { }
226 public sealed class TypeUniqueIdentifierSchemaImporterExtension : SqlTypesSchemaImporterExtensionHelper {
227 public TypeUniqueIdentifierSchemaImporterExtension() : base("uniqueidentifier", "System.Data.SqlTypes.SqlGuid") { }
231 <!-- sql_variant directly maps to xsd:anyType -->
235 <xsd:complexType name=\"xml\" mixed=\"true\">
237 <xsd:any minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\" />
243 <xsd:simpleType name=\"dbobject\">
244 <xsd:restriction base=\"xsd:anyURI\" />