2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System.Data.Linq / src / DbMetal / Schema / DbmlRename.cs
1 #region MIT license\r
2 // \r
3 // MIT license\r
4 //\r
5 // Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne\r
6 // \r
7 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
8 // of this software and associated documentation files (the "Software"), to deal\r
9 // in the Software without restriction, including without limitation the rights\r
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
11 // copies of the Software, and to permit persons to whom the Software is\r
12 // furnished to do so, subject to the following conditions:\r
13 // \r
14 // The above copyright notice and this permission notice shall be included in\r
15 // all copies or substantial portions of the Software.\r
16 // \r
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
23 // THE SOFTWARE.\r
24 // \r
25 #endregion\r
26 \r
27 using System.Linq;\r
28 using System.Xml.Serialization;\r
29 using DbLinq.Vendor;\r
30 \r
31 namespace DbMetal.Schema\r
32 {\r
33     /// <summary>\r
34     /// This class main purpose is to allow renamings.\r
35     /// It is based on DBML format (but simpler).\r
36     /// </summary>\r
37     //[XmlRoot("Database")]\r
38     [XmlRoot("Database", Namespace = "http://schemas.microsoft.com/linqtosql/dbml/2007", IsNullable = false)]\r
39     public class DbmlRename : INameAliases\r
40     {\r
41         [XmlNamespaceDeclarations]\r
42         public XmlSerializerNamespaces XmlNamespaceDeclarations { get; set; }\r
43 \r
44         [XmlAttribute("Name")]\r
45         public string Name { get; set; }\r
46 \r
47         [XmlAttribute("Class")]\r
48         public string Class { get; set; }\r
49 \r
50         [XmlElement("Table")]\r
51         public Table[] Tables { get; set; }\r
52 \r
53         public class Table\r
54         {\r
55             [XmlAttribute("Name")]\r
56             public string Name { get; set; }\r
57 \r
58             [XmlAttribute("Member")]\r
59             public string Member { get; set; }\r
60 \r
61             [XmlElement("Type")]\r
62             public Type Type { get; set; }\r
63         }\r
64 \r
65         public class Type\r
66         {\r
67             [XmlAttribute("Name")]\r
68             public string Name { get; set; }\r
69 \r
70             [XmlElement("Column")]\r
71             public Column[] Columns { get; set; }\r
72         }\r
73 \r
74         public class Column\r
75         {\r
76             [XmlAttribute("Name")]\r
77             public string Name { get; set; }\r
78 \r
79             [XmlAttribute("Member")]\r
80             public string Member { get; set; }\r
81 \r
82             [XmlAttribute("Storage")]\r
83             public string Storage { get; set; }\r
84 \r
85             [XmlAttribute("Type")]\r
86             public string Type { get; set; }\r
87         }\r
88 \r
89         protected Table GetTable(string table, string schema)\r
90         {\r
91             string qualifiedName;\r
92             if (!string.IsNullOrEmpty(schema))\r
93                 qualifiedName = string.Format("{0}.{1}", schema, table);\r
94             else\r
95                 qualifiedName = table;\r
96             return (from t in Tables where t.Name == qualifiedName select t).SingleOrDefault();\r
97         }\r
98 \r
99         protected Column GetColumn(string column, string table, string schema)\r
100         {\r
101             var t = GetTable(table, schema);\r
102             if (t == null || t.Type == null || t.Type.Columns == null)\r
103                 return null;\r
104             return (from c in t.Type.Columns where c.Name == column select c).SingleOrDefault();\r
105         }\r
106 \r
107         public string GetTableTypeAlias(string table, string schema)\r
108         {\r
109             var t = GetTable(table, schema);\r
110             if (t == null || t.Type == null)\r
111                 return null;\r
112             return t.Type.Name;\r
113         }\r
114 \r
115         public string GetTableMemberAlias(string table, string schema)\r
116         {\r
117             var t = GetTable(table, schema);\r
118             if (t == null)\r
119                 return null;\r
120             return t.Member;\r
121         }\r
122 \r
123         public string GetColumnMemberAlias(string column, string table, string schema)\r
124         {\r
125             var c = GetColumn(column, table, schema);\r
126             if (c == null)\r
127                 return null;\r
128             return c.Member;\r
129         }\r
130 \r
131         public string GetColumnForcedType(string column, string table, string schema)\r
132         {\r
133             var c = GetColumn(column, table, schema);\r
134             if (c == null)\r
135                 return null;\r
136             return c.Type;\r
137         }\r
138 \r
139         public string GetDatabaseNameAlias(string databaseName)\r
140         {\r
141             return Name;\r
142         }\r
143 \r
144         public string GetClassNameAlias(string className)\r
145         {\r
146             return Class;\r
147         }\r
148     }\r
149 }\r