Datei: NDOInterfaces/AbstractSQLGenerator.cs

Last Commit (2a2e7ba)
1 //
2 // Copyright (c) 2002-2019 Mirko Matytschak
3 // (www.netdataobjects.de)
4 //
5 // Author: Mirko Matytschak
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
8 // documentation files (the "Software"), to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10 // Software, and to permit persons to whom the Software is furnished to do so, subject to the following
11 // conditions:
12
13 // The above copyright notice and this permission notice shall be included in all copies or substantial portions
14 // of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17 // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 // DEALINGS IN THE SOFTWARE.
21
22
23 using System;
24 using System.Data;
25 using System.Text;
26
27 namespace NDOInterfaces
28 {
29 ····/// <summary>
30 ····/// Zusammenfassung für AbstractSQLGenerator.
31 ····/// </summary>
32 ····public abstract class AbstractSQLGenerator : ISqlGenerator
33 ····{
34 ········/// <summary>
35 ········/// The NDO provider used to quote names.
36 ········/// </summary>
37 ········private IProvider provider;
38
39 ········/// <summary>
40 ········/// This property is used by the enhancer to get and set the ndo provider,
41 ········/// the generator belongs to. The provider is used to quote table and column names.
42 ········/// </summary>
43 ········public virtual IProvider Provider
44 ········{
45 ············get { return provider; }
46 ············set { provider = value; }
47 ········}
48
49 ········/// <summary>
50 ········/// Error messages go there.
51 ········/// </summary>
52 ········protected IMessageAdapter messages;
53
54 ········/// <summary>
55 ········/// Default Constructor.
56 ········/// </summary>
57 ········public AbstractSQLGenerator()
58 ········{
59 ········}
60
61 ········#region ISqlGenerator Member
62
63 ········/// <summary>
64 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
65 ········/// </summary>
66 ········public abstract string ProviderName { get; }
67
68 ········/// <summary>
69 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
70 ········/// </summary>
71 ········/// <param name="messages"></param>
72 ········public virtual void SetMessageAdapter(IMessageAdapter messages)
73 ········{
74 ············this.messages = messages;
75 ········}
76 ········/// <summary>
77 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
78 ········/// </summary>
79 ········/// <param name="tableName"></param>
80 ········/// <returns></returns>
81 ········public virtual string DropTable(string tableName)
82 ········{
83 ············return "DROP TABLE " + tableName + ";";············
84 ········}
85
86 ········/// <summary>
87 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
88 ········/// </summary>
89 ········/// <param name="connectionString"></param>
90 ········/// <returns></returns>
91 ········public virtual string ConnectToDatabase(string connectionString)
92 ········{
93 ············return string.Empty;
94 ········}
95
96 ········/// <summary>
97 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
98 ········/// </summary>
99 ········/// <param name="tableName"></param>
100 ········/// <returns></returns>
101 ········public virtual string BeginnTable(string tableName)
102 ········{············
103 ············return "CREATE TABLE " + tableName + "(";
104 ········}
105
106 ········/// <summary>
107 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
108 ········/// </summary>
109 ········/// <param name="tableName"></param>
110 ········/// <returns></returns>
111 ········public virtual string EndTable(string tableName)
112 ········{
113 ············return ");";
114 ········}
115
116 ········/// <summary>
117 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
118 ········/// </summary>
119 ········public virtual NDOInterfaces.PrimaryConstraintPlacement PrimaryConstraintPlacement
120 ········{
121 ············get { return PrimaryConstraintPlacement.InTable; }
122 ········}
123
124 ········/// <summary>
125 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
126 ········/// </summary>
127 ········/// <param name="t"></param>
128 ········/// <returns></returns>
129 ········public abstract bool LengthAllowed(Type t);
130
131 ········/// <summary>
132 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
133 ········/// </summary>
134 ········/// <param name="dbType"></param>
135 ········/// <returns></returns>
136 ········public abstract bool LengthAllowed(string dbType);
137
138 ········/// <summary>
139 ········/// Converts a System.Type to default DbType value.
140 ········/// </summary>
141 ········/// <param name="t">The type to convert.</param>
142 ········/// <param name="size">The intended size of the type. If type is string, the value -1 means, that a CLOB type should be returned.</param>
143 ········/// <returns>A string representation of the DbType.</returns>
144 ········/// <remarks>
145 ········/// Concrete providers should override this function to provide DbType names,
146 ········/// which can be used in the DDL code of the underlying database.
147 ········/// </remarks>
148 ········public abstract string DbTypeFromType(Type t, int size = 0);
149
150 ········/// <summary>
151 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
152 ········/// </summary>
153 ········/// <param name="columnName"></param>
154 ········/// <param name="dataType"></param>
155 ········/// <param name="columnType"></param>
156 ········/// <param name="width"></param>
157 ········/// <returns></returns>
158 public virtual string AutoIncrementColumn( string columnName, Type dataType, string columnType, string width)
159 ········{
160 ············return string.Empty;
161 ········}
162
163 ········/// <summary>
164 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
165 ········/// </summary>
166 ········/// <param name="columnName"></param>
167 ········/// <param name="dataType"></param>
168 ········/// <param name="columnType"></param>
169 ········/// <param name="width"></param>
170 ········/// <returns></returns>
171 ········public virtual string PrimaryKeyColumn(string columnName, Type dataType, string columnType, string width)
172 ········{
173 ············return string.Empty;
174 ········}
175
176 ········/// <summary>
177 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
178 ········/// </summary>
179 ········public virtual bool HasSpecialAutoIncrementColumnFormat
180 ········{
181 ············get { return false; }
182 ········}
183
184 ········/// <summary>
185 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
186 ········/// </summary>
187 ········/// <param name="primaryKeyColumns"></param>
188 ········/// <param name="constraintName"></param>
189 ········/// <param name="tableName"></param>
190 ········/// <returns></returns>
191 ········public virtual string CreatePrimaryKeyConstraint(System.Data.DataColumn[] primaryKeyColumns, string constraintName, string tableName)
192 ········{
193 ············StringBuilder sb = new StringBuilder("CONSTRAINT ");
194 ············sb.Append(constraintName);
195 ············sb.Append(" PRIMARY KEY ");
196 ············GenerateColumnList(primaryKeyColumns, sb);
197 ············return sb.ToString();
198 ········}
199
200 ········/// <summary>
201 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
202 ········/// </summary>
203 ········/// <param name="sourceColumns"></param>
204 ········/// <param name="relatedColumns"></param>
205 ········/// <param name="constraintName"></param>
206 ········/// <param name="relatedTableName"></param>
207 ········/// <returns></returns>
208 ········public virtual string CreateForeignKeyConstraint(DataColumn[] sourceColumns, DataColumn[] relatedColumns, string constraintName, string relatedTableName)
209 ········{
210 ············StringBuilder sb = new StringBuilder("CONSTRAINT ");
211 ············sb.Append(constraintName);
212 ············sb.Append(" FOREIGN KEY ");
213 ············GenerateColumnList(sourceColumns, sb);
214 ············sb.Append(" REFERENCES ");
215 ············sb.Append(relatedTableName);
216 ············GenerateColumnList(relatedColumns, sb);
217 ············return sb.ToString();
218 ········}
219
220
221 ········/// <summary>
222 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
223 ········/// </summary>
224 ········/// <param name="allowNull"></param>
225 ········/// <returns></returns>
226 ········public virtual string NullExpression(bool allowNull)
227 ········{
228 ············if (allowNull)
229 ················return "NULL";
230 ············else
231 ················return "NOT NULL";
232 ········}
233
234 ········/// <summary>
235 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
236 ········/// </summary>
237 ········/// <param name="columns"></param>
238 ········/// <param name="sb"></param>
239 ········void GenerateColumnList(DataColumn[] columns, StringBuilder sb)
240 ········{
241 ············sb.Append("(");
242 ············int lastIndex = columns.Length - 1;
243 ············for (int i = 0; i < columns.Length; i++)
244 ············{
245 ················DataColumn dc = columns[i];
246 ················sb.Append(provider.GetQuotedName(dc.ColumnName));
247 ················if (i < lastIndex)
248 ····················sb.Append(",");
249 ············}
250 ············sb.Append(")");
251 ········}
252
253 ········/// <summary>
254 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
255 ········/// </summary>
256 ········/// <param name="indexName"></param>
257 ········/// <param name="tableName"></param>
258 ········/// <param name="indexColums"></param>
259 ········/// <returns></returns>
260 ········public virtual string CreateIndex(string indexName, string tableName, DataColumn[] indexColums)
261 ········{
262 ············StringBuilder sb = new StringBuilder("CREATE INDEX ");
263 ············sb.Append(indexName);
264 ············sb.Append(" ON ");
265 ············sb.Append(tableName);
266 ············GenerateColumnList(indexColums, sb);
267 ············return sb.ToString();
268 ········}
269
270 ········/// <summary>
271 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
272 ········/// Override this function, if dropping a column needs another syntax than
273 ········/// 'ADD column_definition'.
274 ········/// </summary>
275 ········/// <returns></returns>
276 ········public virtual string AddColumn()
277 ········{
278 ············return "ADD";
279 ········}
280
281 ········/// <summary>
282 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
283 ········/// Override this function, if dropping a column needs another syntax than
284 ········/// 'DROP COLUMN ColName'
285 ········/// </summary>
286 ········/// <param name="colName"></param>
287 ········/// <returns></returns>
288 ········public virtual string RemoveColumn(string colName)
289 ········{
290 ············return "DROP COLUMN " + colName;
291 ········}
292
293 ········/// <summary>
294 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
295 ········/// Override this function, if renaming a column needs another syntax than
296 ········/// a sequence of ADD COLUMN, UPDATE and DROP COLUMN.
297 ········/// </summary>
298 ········/// <param name="tableName"></param>
299 ········/// <param name="oldName"></param>
300 ········/// <param name="newName"></param>
301 ········/// <param name="typeName"></param>
302 ········/// <returns>This default implementaton returns an empty string (see remarks).</returns>
303 ········/// <remarks>
304 ········/// If RenameColumn returns an empty string, NDO tries to synthesize the rename function
305 ········/// with a sequence of ADD COLUMN, UPDATE and DROP COLUMN.
306 ········/// </remarks>
307 ········public virtual string RenameColumn(string tableName, string oldName, string newName, string typeName)
308 ········{
309 ············return string.Empty;
310 ········}
311
312 ········/// <summary>
313 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
314 ········/// Override this function, if altering a column type needs another syntax than
315 ········/// 'ALTER column_definition'
316 ········/// </summary>
317 ········/// <returns></returns>
318 ········public virtual string AlterColumnType()
319 ········{
320 ············return "ALTER";
321 ········}
322
323 ········#endregion
324 ····}
325 }
326
New Commit (1e68dc7)
1 //
2 // Copyright (c) 2002-2019 Mirko Matytschak
3 // (www.netdataobjects.de)
4 //
5 // Author: Mirko Matytschak
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
8 // documentation files (the "Software"), to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10 // Software, and to permit persons to whom the Software is furnished to do so, subject to the following
11 // conditions:
12
13 // The above copyright notice and this permission notice shall be included in all copies or substantial portions
14 // of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17 // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 // DEALINGS IN THE SOFTWARE.
21
22
23 using System;
24 using System.Data;
25 using System.Text;
26
27 namespace NDOInterfaces
28 {
29 ····/// <summary>
30 ····/// Zusammenfassung für AbstractSQLGenerator.
31 ····/// </summary>
32 ····public abstract class AbstractSQLGenerator : ISqlGenerator
33 ····{
34 ········/// <summary>
35 ········/// The NDO provider used to quote names.
36 ········/// </summary>
37 ········private IProvider provider;
38
39 ········/// <summary>
40 ········/// This property is used by the enhancer to get and set the ndo provider,
41 ········/// the generator belongs to. The provider is used to quote table and column names.
42 ········/// </summary>
43 ········public virtual IProvider Provider
44 ········{
45 ············get { return provider; }
46 ············set { provider = value; }
47 ········}
48
49 ········/// <summary>
50 ········/// Error messages go there.
51 ········/// </summary>
52 ········protected IMessageAdapter messages;
53
54 ········/// <summary>
55 ········/// Default Constructor.
56 ········/// </summary>
57 ········public AbstractSQLGenerator()
58 ········{
59 ········}
60
61 ········#region ISqlGenerator Member
62
63 ········/// <summary>
64 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
65 ········/// </summary>
66 ········public abstract string ProviderName { get; }
67
68 ········/// <summary>
69 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
70 ········/// </summary>
71 ········/// <param name="messages"></param>
72 ········public virtual void SetMessageAdapter(IMessageAdapter messages)
73 ········{
74 ············this.messages = messages;
75 ········}
76 ········/// <summary>
77 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
78 ········/// </summary>
79 ········/// <param name="tableName"></param>
80 ········/// <returns></returns>
81 ········public virtual string DropTable(string tableName)
82 ········{
83 ············return "DROP TABLE " + tableName + ";";············
84 ········}
85
86 ········/// <summary>
87 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
88 ········/// </summary>
89 ········/// <param name="connectionString"></param>
90 ········/// <returns></returns>
91 ········public virtual string ConnectToDatabase(string connectionString)
92 ········{
93 ············return string.Empty;
94 ········}
95
96 ········/// <summary>
97 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
98 ········/// </summary>
99 ········/// <param name="tableName"></param>
100 ········/// <returns></returns>
101 ········public virtual string BeginnTable(string tableName)
102 ········{············
103 ············return "CREATE TABLE " + tableName + "(";
104 ········}
105
106 ········/// <summary>
107 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
108 ········/// </summary>
109 ········/// <param name="tableName"></param>
110 ········/// <returns></returns>
111 ········public virtual string EndTable(string tableName)
112 ········{
113 ············return ");";
114 ········}
115
116 ········/// <summary>
117 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
118 ········/// </summary>
119 ········public virtual NDOInterfaces.PrimaryConstraintPlacement PrimaryConstraintPlacement
120 ········{
121 ············get { return PrimaryConstraintPlacement.InTable; }
122 ········}
123
124 ········/// <summary>
125 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
126 ········/// </summary>
127 ········/// <param name="t"></param>
128 ········/// <returns></returns>
129 ········public abstract bool LengthAllowed(Type t);
130
131 ········/// <summary>
132 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
133 ········/// </summary>
134 ········/// <param name="dbType"></param>
135 ········/// <returns></returns>
136 ········public abstract bool LengthAllowed(string dbType);
137
138 ········/// <summary>
139 ········/// Converts a System.Type to default DbType value.
140 ········/// </summary>
141 ········/// <param name="t">The type to convert.</param>
142 ········/// <param name="size">The intended size of the type. If type is string, the value -1 means, that a CLOB type should be returned.</param>
143 ········/// <returns>A string representation of the DbType.</returns>
144 ········/// <remarks>
145 ········/// Concrete providers should override this function to provide DbType names,
146 ········/// which can be used in the DDL code of the underlying database.
147 ········/// </remarks>
148 ········public abstract string DbTypeFromType(Type t, int size = 0);
149
150 ········/// <summary>
151 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
152 ········/// </summary>
153 ········/// <param name="columnName"></param>
154 ········/// <param name="dataType"></param>
155 ········/// <param name="columnType"></param>
156 ········/// <param name="width"></param>
157 ········/// <returns></returns>
158 public virtual string AutoIncrementColumn( string columnName, Type dataType, string columnType, string width, bool isPrimary)
159 ········{
160 ············return string.Empty;
161 ········}
162
163 ········/// <summary>
164 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
165 ········/// </summary>
166 ········/// <param name="columnName"></param>
167 ········/// <param name="dataType"></param>
168 ········/// <param name="columnType"></param>
169 ········/// <param name="width"></param>
170 ········/// <returns></returns>
171 ········public virtual string PrimaryKeyColumn(string columnName, Type dataType, string columnType, string width)
172 ········{
173 ············return string.Empty;
174 ········}
175
176 ········/// <summary>
177 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
178 ········/// </summary>
179 ········public virtual bool HasSpecialAutoIncrementColumnFormat
180 ········{
181 ············get { return false; }
182 ········}
183
184 ········/// <summary>
185 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
186 ········/// </summary>
187 ········/// <param name="primaryKeyColumns"></param>
188 ········/// <param name="constraintName"></param>
189 ········/// <param name="tableName"></param>
190 ········/// <returns></returns>
191 ········public virtual string CreatePrimaryKeyConstraint(System.Data.DataColumn[] primaryKeyColumns, string constraintName, string tableName)
192 ········{
193 ············StringBuilder sb = new StringBuilder("CONSTRAINT ");
194 ············sb.Append(constraintName);
195 ············sb.Append(" PRIMARY KEY ");
196 ············GenerateColumnList(primaryKeyColumns, sb);
197 ············return sb.ToString();
198 ········}
199
200 ········/// <summary>
201 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
202 ········/// </summary>
203 ········/// <param name="sourceColumns"></param>
204 ········/// <param name="relatedColumns"></param>
205 ········/// <param name="constraintName"></param>
206 ········/// <param name="relatedTableName"></param>
207 ········/// <returns></returns>
208 ········public virtual string CreateForeignKeyConstraint(DataColumn[] sourceColumns, DataColumn[] relatedColumns, string constraintName, string relatedTableName)
209 ········{
210 ············StringBuilder sb = new StringBuilder("CONSTRAINT ");
211 ············sb.Append(constraintName);
212 ············sb.Append(" FOREIGN KEY ");
213 ············GenerateColumnList(sourceColumns, sb);
214 ············sb.Append(" REFERENCES ");
215 ············sb.Append(relatedTableName);
216 ············GenerateColumnList(relatedColumns, sb);
217 ············return sb.ToString();
218 ········}
219
220
221 ········/// <summary>
222 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
223 ········/// </summary>
224 ········/// <param name="allowNull"></param>
225 ········/// <returns></returns>
226 ········public virtual string NullExpression(bool allowNull)
227 ········{
228 ············if (allowNull)
229 ················return "NULL";
230 ············else
231 ················return "NOT NULL";
232 ········}
233
234 ········/// <summary>
235 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
236 ········/// </summary>
237 ········/// <param name="columns"></param>
238 ········/// <param name="sb"></param>
239 ········void GenerateColumnList(DataColumn[] columns, StringBuilder sb)
240 ········{
241 ············sb.Append("(");
242 ············int lastIndex = columns.Length - 1;
243 ············for (int i = 0; i < columns.Length; i++)
244 ············{
245 ················DataColumn dc = columns[i];
246 ················sb.Append(provider.GetQuotedName(dc.ColumnName));
247 ················if (i < lastIndex)
248 ····················sb.Append(",");
249 ············}
250 ············sb.Append(")");
251 ········}
252
253 ········/// <summary>
254 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
255 ········/// </summary>
256 ········/// <param name="indexName"></param>
257 ········/// <param name="tableName"></param>
258 ········/// <param name="indexColums"></param>
259 ········/// <returns></returns>
260 ········public virtual string CreateIndex(string indexName, string tableName, DataColumn[] indexColums)
261 ········{
262 ············StringBuilder sb = new StringBuilder("CREATE INDEX ");
263 ············sb.Append(indexName);
264 ············sb.Append(" ON ");
265 ············sb.Append(tableName);
266 ············GenerateColumnList(indexColums, sb);
267 ············return sb.ToString();
268 ········}
269
270 ········/// <summary>
271 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
272 ········/// Override this function, if dropping a column needs another syntax than
273 ········/// 'ADD column_definition'.
274 ········/// </summary>
275 ········/// <returns></returns>
276 ········public virtual string AddColumn()
277 ········{
278 ············return "ADD";
279 ········}
280
281 ········/// <summary>
282 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
283 ········/// Override this function, if dropping a column needs another syntax than
284 ········/// 'DROP COLUMN ColName'
285 ········/// </summary>
286 ········/// <param name="colName"></param>
287 ········/// <returns></returns>
288 ········public virtual string RemoveColumn(string colName)
289 ········{
290 ············return "DROP COLUMN " + colName;
291 ········}
292
293 ········/// <summary>
294 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
295 ········/// Override this function, if renaming a column needs another syntax than
296 ········/// a sequence of ADD COLUMN, UPDATE and DROP COLUMN.
297 ········/// </summary>
298 ········/// <param name="tableName"></param>
299 ········/// <param name="oldName"></param>
300 ········/// <param name="newName"></param>
301 ········/// <param name="typeName"></param>
302 ········/// <returns>This default implementaton returns an empty string (see remarks).</returns>
303 ········/// <remarks>
304 ········/// If RenameColumn returns an empty string, NDO tries to synthesize the rename function
305 ········/// with a sequence of ADD COLUMN, UPDATE and DROP COLUMN.
306 ········/// </remarks>
307 ········public virtual string RenameColumn(string tableName, string oldName, string newName, string typeName)
308 ········{
309 ············return string.Empty;
310 ········}
311
312 ········/// <summary>
313 ········/// See <see cref="ISqlGenerator">ISqlGenerator interface</see>.
314 ········/// Override this function, if altering a column type needs another syntax than
315 ········/// 'ALTER column_definition'
316 ········/// </summary>
317 ········/// <returns></returns>
318 ········public virtual string AlterColumnType()
319 ········{
320 ············return "ALTER";
321 ········}
322
323 ········#endregion
324 ····}
325 }
326