@@ -16,7 +16,8 @@ public SchemaProvider(MySqlConnection connection)
16
16
{
17
17
{ "MetaDataCollections" , FillMetadataCollections } ,
18
18
{ "DataTypes" , FillDataTypes } ,
19
- { "Procedures" , FillProcedures }
19
+ { "Procedures" , FillProcedures } ,
20
+ { "ReservedWords" , FillReservedWords }
20
21
} ;
21
22
}
22
23
@@ -178,6 +179,294 @@ private void FillProcedures(DataTable dataTable)
178
179
close ? . Invoke ( ) ;
179
180
}
180
181
182
+ private void FillReservedWords ( DataTable dataTable )
183
+ {
184
+ dataTable . Columns . Add ( new DataColumn ( "ReservedWord" , typeof ( string ) ) ) ;
185
+
186
+ // Note:
187
+ // For MySQL 8.0, the INFORMATION_SCHEMA.KEYWORDS table could be used to load the list at runtime,
188
+ // unfortunately this bug https://bugs.mysql.com/bug.php?id=90160 makes it impratical to do it
189
+ // (the bug is marked as fixed in MySQL 8.0.13, not published yet at the time of writing this note).
190
+ //
191
+ // Note:
192
+ // Once the previously mentioned bug will be fixed, for versions >= 8.0.13 reserved words could be
193
+ // loaded at runtime form INFORMATION_SCHEMA.KEYWORDS, and for other versions the hard coded list
194
+ // could be used (notice the list could change with the release, adopting the 8.0.12 list is a
195
+ // suboptimal one-size-fits-it-all solution.
196
+ // To get the current MySQL version at runtime one could query SELECT VERSION(); which returns a
197
+ // version followed by a suffix. The problem is that MariaDB 10.0 is only compatible with MySQL 5.6
198
+ // (but has a higher version number)
199
+
200
+ // select word from information_schema.keywords where reserved = 1; on MySQL Server 8.0.12
201
+ var reservedWords = new [ ]
202
+ {
203
+ "ACCESSIBLE" ,
204
+ "ADD" ,
205
+ "ALL" ,
206
+ "ALTER" ,
207
+ "ANALYZE" ,
208
+ "AND" ,
209
+ "AS" ,
210
+ "ASC" ,
211
+ "ASENSITIVE" ,
212
+ "BEFORE" ,
213
+ "BETWEEN" ,
214
+ "BIGINT" ,
215
+ "BINARY" ,
216
+ "BLOB" ,
217
+ "BOTH" ,
218
+ "BY" ,
219
+ "CALL" ,
220
+ "CASCADE" ,
221
+ "CASE" ,
222
+ "CHANGE" ,
223
+ "CHAR" ,
224
+ "CHARACTER" ,
225
+ "CHECK" ,
226
+ "COLLATE" ,
227
+ "COLUMN" ,
228
+ "CONDITION" ,
229
+ "CONSTRAINT" ,
230
+ "CONTINUE" ,
231
+ "CONVERT" ,
232
+ "CREATE" ,
233
+ "CROSS" ,
234
+ "CUBE" ,
235
+ "CUME_DIST" ,
236
+ "CURRENT_DATE" ,
237
+ "CURRENT_TIME" ,
238
+ "CURRENT_TIMESTAMP" ,
239
+ "CURRENT_USER" ,
240
+ "CURSOR" ,
241
+ "DATABASE" ,
242
+ "DATABASES" ,
243
+ "DAY_HOUR" ,
244
+ "DAY_MICROSECOND" ,
245
+ "DAY_MINUTE" ,
246
+ "DAY_SECOND" ,
247
+ "DEC" ,
248
+ "DECIMAL" ,
249
+ "DECLARE" ,
250
+ "DEFAULT" ,
251
+ "DELAYED" ,
252
+ "DELETE" ,
253
+ "DENSE_RANK" ,
254
+ "DESC" ,
255
+ "DESCRIBE" ,
256
+ "DETERMINISTIC" ,
257
+ "DISTINCT" ,
258
+ "DISTINCTROW" ,
259
+ "DIV" ,
260
+ "DOUBLE" ,
261
+ "DROP" ,
262
+ "DUAL" ,
263
+ "EACH" ,
264
+ "ELSE" ,
265
+ "ELSEIF" ,
266
+ "EMPTY" ,
267
+ "ENCLOSED" ,
268
+ "ESCAPED" ,
269
+ "EXCEPT" ,
270
+ "EXISTS" ,
271
+ "EXIT" ,
272
+ "EXPLAIN" ,
273
+ "FALSE" ,
274
+ "FETCH" ,
275
+ "FIRST_VALUE" ,
276
+ "FLOAT" ,
277
+ "FLOAT4" ,
278
+ "FLOAT8" ,
279
+ "FOR" ,
280
+ "FORCE" ,
281
+ "FOREIGN" ,
282
+ "FROM" ,
283
+ "FULLTEXT" ,
284
+ "FUNCTION" ,
285
+ "GENERATED" ,
286
+ "GET" ,
287
+ "GRANT" ,
288
+ "GROUP" ,
289
+ "GROUPING" ,
290
+ "GROUPS" ,
291
+ "HAVING" ,
292
+ "HIGH_PRIORITY" ,
293
+ "HOUR_MICROSECOND" ,
294
+ "HOUR_MINUTE" ,
295
+ "HOUR_SECOND" ,
296
+ "IF" ,
297
+ "IGNORE" ,
298
+ "IN" ,
299
+ "INDEX" ,
300
+ "INFILE" ,
301
+ "INNER" ,
302
+ "INOUT" ,
303
+ "INSENSITIVE" ,
304
+ "INSERT" ,
305
+ "INT" ,
306
+ "INT1" ,
307
+ "INT2" ,
308
+ "INT3" ,
309
+ "INT4" ,
310
+ "INT8" ,
311
+ "INTEGER" ,
312
+ "INTERVAL" ,
313
+ "INTO" ,
314
+ "IO_AFTER_GTIDS" ,
315
+ "IO_BEFORE_GTIDS" ,
316
+ "IS" ,
317
+ "ITERATE" ,
318
+ "JOIN" ,
319
+ "JSON_TABLE" ,
320
+ "KEY" ,
321
+ "KEYS" ,
322
+ "KILL" ,
323
+ "LAG" ,
324
+ "LAST_VALUE" ,
325
+ "LEAD" ,
326
+ "LEADING" ,
327
+ "LEAVE" ,
328
+ "LEFT" ,
329
+ "LIKE" ,
330
+ "LIMIT" ,
331
+ "LINEAR" ,
332
+ "LINES" ,
333
+ "LOAD" ,
334
+ "LOCALTIME" ,
335
+ "LOCALTIMESTAMP" ,
336
+ "LOCK" ,
337
+ "LONG" ,
338
+ "LONGBLOB" ,
339
+ "LONGTEXT" ,
340
+ "LOOP" ,
341
+ "LOW_PRIORITY" ,
342
+ "MASTER_BIND" ,
343
+ "MASTER_SSL_VERIFY_SERVER_CERT" ,
344
+ "MATCH" ,
345
+ "MAXVALUE" ,
346
+ "MEDIUMBLOB" ,
347
+ "MEDIUMINT" ,
348
+ "MEDIUMTEXT" ,
349
+ "MIDDLEINT" ,
350
+ "MINUTE_MICROSECOND" ,
351
+ "MINUTE_SECOND" ,
352
+ "MOD" ,
353
+ "MODIFIES" ,
354
+ "NATURAL" ,
355
+ "NOT" ,
356
+ "NO_WRITE_TO_BINLOG" ,
357
+ "NTH_VALUE" ,
358
+ "NTILE" ,
359
+ "NULL" ,
360
+ "NUMERIC" ,
361
+ "OF" ,
362
+ "ON" ,
363
+ "OPTIMIZE" ,
364
+ "OPTIMIZER_COSTS" ,
365
+ "OPTION" ,
366
+ "OPTIONALLY" ,
367
+ "OR" ,
368
+ "ORDER" ,
369
+ "OUT" ,
370
+ "OUTER" ,
371
+ "OUTFILE" ,
372
+ "OVER" ,
373
+ "PARTITION" ,
374
+ "PERCENT_RANK" ,
375
+ "PERSIST" ,
376
+ "PERSIST_ONLY" ,
377
+ "PRECISION" ,
378
+ "PRIMARY" ,
379
+ "PROCEDURE" ,
380
+ "PURGE" ,
381
+ "RANGE" ,
382
+ "RANK" ,
383
+ "READ" ,
384
+ "READS" ,
385
+ "READ_WRITE" ,
386
+ "REAL" ,
387
+ "RECURSIVE" ,
388
+ "REFERENCES" ,
389
+ "REGEXP" ,
390
+ "RELEASE" ,
391
+ "RENAME" ,
392
+ "REPEAT" ,
393
+ "REPLACE" ,
394
+ "REQUIRE" ,
395
+ "RESIGNAL" ,
396
+ "RESTRICT" ,
397
+ "RETURN" ,
398
+ "REVOKE" ,
399
+ "RIGHT" ,
400
+ "RLIKE" ,
401
+ "ROW" ,
402
+ "ROWS" ,
403
+ "ROW_NUMBER" ,
404
+ "SCHEMA" ,
405
+ "SCHEMAS" ,
406
+ "SECOND_MICROSECOND" ,
407
+ "SELECT" ,
408
+ "SENSITIVE" ,
409
+ "SEPARATOR" ,
410
+ "SET" ,
411
+ "SHOW" ,
412
+ "SIGNAL" ,
413
+ "SMALLINT" ,
414
+ "SPATIAL" ,
415
+ "SPECIFIC" ,
416
+ "SQL" ,
417
+ "SQLEXCEPTION" ,
418
+ "SQLSTATE" ,
419
+ "SQLWARNING" ,
420
+ "SQL_BIG_RESULT" ,
421
+ "SQL_CALC_FOUND_ROWS" ,
422
+ "SQL_SMALL_RESULT" ,
423
+ "SSL" ,
424
+ "STARTING" ,
425
+ "STORED" ,
426
+ "STRAIGHT_JOIN" ,
427
+ "SYSTEM" ,
428
+ "TABLE" ,
429
+ "TERMINATED" ,
430
+ "THEN" ,
431
+ "TINYBLOB" ,
432
+ "TINYINT" ,
433
+ "TINYTEXT" ,
434
+ "TO" ,
435
+ "TRAILING" ,
436
+ "TRIGGER" ,
437
+ "TRUE" ,
438
+ "UNDO" ,
439
+ "UNION" ,
440
+ "UNIQUE" ,
441
+ "UNLOCK" ,
442
+ "UNSIGNED" ,
443
+ "UPDATE" ,
444
+ "USAGE" ,
445
+ "USE" ,
446
+ "USING" ,
447
+ "UTC_DATE" ,
448
+ "UTC_TIME" ,
449
+ "UTC_TIMESTAMP" ,
450
+ "VALUES" ,
451
+ "VARBINARY" ,
452
+ "VARCHAR" ,
453
+ "VARCHARACTER" ,
454
+ "VARYING" ,
455
+ "VIRTUAL" ,
456
+ "WHEN" ,
457
+ "WHERE" ,
458
+ "WHILE" ,
459
+ "WINDOW" ,
460
+ "WITH" ,
461
+ "WRITE" ,
462
+ "XOR" ,
463
+ "YEAR_MONTH" ,
464
+ "ZEROFILL" ,
465
+ } ;
466
+ foreach ( string word in reservedWords )
467
+ dataTable . Rows . Add ( word ) ;
468
+ }
469
+
181
470
readonly MySqlConnection m_connection ;
182
471
readonly Dictionary < string , Action < DataTable > > m_schemaCollections ;
183
472
}
0 commit comments