mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-4617 PLUGINS - Show internal Locales in I_S
INFORMATION_SCHEMA.LOCALES plugin. Contribution by Roberto Spadim
This commit is contained in:
112
mysql-test/suite/plugins/r/locales.result
Normal file
112
mysql-test/suite/plugins/r/locales.result
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
select * from information_schema.locales;
|
||||||
|
ID NAME DESCRIPTION MAX_MONTH_NAME_LENGTH MAX_DAY_NAME_LENGTH DECIMAL_POINT THOUSAND_SEP ERROR_MESSAGE_LANGUAGE
|
||||||
|
0 en_US English - United States 9 9 . , english
|
||||||
|
1 en_GB English - United Kingdom 9 9 . , english
|
||||||
|
2 ja_JP Japanese - Japan 3 3 . , japanese
|
||||||
|
3 sv_SE Swedish - Sweden 9 7 , swedish
|
||||||
|
4 de_DE German - Germany 9 10 , . german
|
||||||
|
5 fr_FR French - France 9 8 , french
|
||||||
|
6 ar_AE Arabic - United Arab Emirates 6 8 . , english
|
||||||
|
7 ar_BH Arabic - Bahrain 6 8 . , english
|
||||||
|
8 ar_JO Arabic - Jordan 12 8 . , english
|
||||||
|
9 ar_SA Arabic - Saudi Arabia 12 8 . english
|
||||||
|
10 ar_SY Arabic - Syria 12 8 . , english
|
||||||
|
11 be_BY Belarusian - Belarus 10 10 , . english
|
||||||
|
12 bg_BG Bulgarian - Bulgaria 9 10 , english
|
||||||
|
13 ca_ES Catalan - Catalan 8 9 , english
|
||||||
|
14 cs_CZ Czech - Czech Republic 8 7 , czech
|
||||||
|
15 da_DK Danish - Denmark 9 7 , . danish
|
||||||
|
16 de_AT German - Austria 9 10 , german
|
||||||
|
17 es_ES Spanish - Spain 10 9 , spanish
|
||||||
|
18 et_EE Estonian - Estonia 9 9 , estonian
|
||||||
|
19 eu_ES Basque - Basque 9 10 , english
|
||||||
|
20 fi_FI Finnish - Finland 9 11 , english
|
||||||
|
21 fo_FO Faroese - Faroe Islands 9 12 , . english
|
||||||
|
22 gl_ES Galician - Galician 8 8 , english
|
||||||
|
23 gu_IN Gujarati - India 10 8 . , english
|
||||||
|
24 he_IL Hebrew - Israel 7 5 . , english
|
||||||
|
25 hi_IN Hindi - India 7 9 . , english
|
||||||
|
26 hr_HR Croatian - Croatia 8 11 , english
|
||||||
|
27 hu_HU Hungarian - Hungary 10 9 , . hungarian
|
||||||
|
28 id_ID Indonesian - Indonesia 9 6 , . english
|
||||||
|
29 is_IS Icelandic - Iceland 9 12 , . english
|
||||||
|
30 it_CH Italian - Switzerland 9 9 , ' italian
|
||||||
|
31 ko_KR Korean - Korea 3 3 . , korean
|
||||||
|
32 lt_LT Lithuanian - Lithuania 9 14 , . english
|
||||||
|
33 lv_LV Latvian - Latvia 10 11 , english
|
||||||
|
34 mk_MK Macedonian - FYROM 9 10 , english
|
||||||
|
35 mn_MN Mongolia - Mongolian 18 6 , . english
|
||||||
|
36 ms_MY Malay - Malaysia 9 6 . , english
|
||||||
|
37 nb_NO Norwegian(Bokml) - Norway 9 7 , . norwegian
|
||||||
|
38 nl_NL Dutch - The Netherlands 9 9 , dutch
|
||||||
|
39 pl_PL Polish - Poland 11 12 , polish
|
||||||
|
40 pt_BR Portugese - Brazil 9 7 , portuguese
|
||||||
|
41 pt_PT Portugese - Portugal 9 7 , portuguese
|
||||||
|
42 ro_RO Romanian - Romania 10 8 , . romanian
|
||||||
|
43 ru_RU Russian - Russia 8 11 , russian
|
||||||
|
44 ru_UA Russian - Ukraine 8 11 , . russian
|
||||||
|
45 sk_SK Slovak - Slovakia 9 8 , slovak
|
||||||
|
46 sl_SI Slovenian - Slovenia 9 10 , english
|
||||||
|
47 sq_AL Albanian - Albania 7 10 , . english
|
||||||
|
48 sr_RS Serbian - Serbia 9 10 . serbian
|
||||||
|
49 ta_IN Tamil - India 10 8 . , english
|
||||||
|
50 te_IN Telugu - India 10 9 . , english
|
||||||
|
51 th_TH Thai - Thailand 10 8 . , english
|
||||||
|
52 tr_TR Turkish - Turkey 7 9 , . english
|
||||||
|
53 uk_UA Ukrainian - Ukraine 8 9 , . ukrainian
|
||||||
|
54 ur_PK Urdu - Pakistan 6 6 . , english
|
||||||
|
55 vi_VN Vietnamese - Vietnam 16 11 , . english
|
||||||
|
56 zh_CN Chinese - Peoples Republic of China 3 3 . , english
|
||||||
|
57 zh_TW Chinese - Taiwan 3 2 . , english
|
||||||
|
58 ar_DZ Arabic - Algeria 6 8 . , english
|
||||||
|
59 ar_EG Arabic - Egypt 6 8 . , english
|
||||||
|
60 ar_IN Arabic - Iran 6 8 . , english
|
||||||
|
61 ar_IQ Arabic - Iraq 6 8 . , english
|
||||||
|
62 ar_KW Arabic - Kuwait 6 8 . , english
|
||||||
|
63 ar_LB Arabic - Lebanon 12 8 . , english
|
||||||
|
64 ar_LY Arabic - Libya 6 8 . , english
|
||||||
|
65 ar_MA Arabic - Morocco 6 8 . , english
|
||||||
|
66 ar_OM Arabic - Oman 6 8 . , english
|
||||||
|
67 ar_QA Arabic - Qatar 6 8 . , english
|
||||||
|
68 ar_SD Arabic - Sudan 6 8 . , english
|
||||||
|
69 ar_TN Arabic - Tunisia 6 8 . , english
|
||||||
|
70 ar_YE Arabic - Yemen 6 8 . , english
|
||||||
|
71 de_BE German - Belgium 9 10 , . german
|
||||||
|
72 de_CH German - Switzerland 9 10 . ' german
|
||||||
|
73 de_LU German - Luxembourg 9 10 , . german
|
||||||
|
74 en_AU English - Australia 9 9 . , english
|
||||||
|
75 en_CA English - Canada 9 9 . , english
|
||||||
|
76 en_IN English - India 9 9 . , english
|
||||||
|
77 en_NZ English - New Zealand 9 9 . , english
|
||||||
|
78 en_PH English - Philippines 9 9 . , english
|
||||||
|
79 en_ZA English - South Africa 9 9 . , english
|
||||||
|
80 en_ZW English - Zimbabwe 9 9 . , english
|
||||||
|
81 es_AR Spanish - Argentina 10 9 , . spanish
|
||||||
|
82 es_BO Spanish - Bolivia 10 9 , spanish
|
||||||
|
83 es_CL Spanish - Chile 10 9 , spanish
|
||||||
|
84 es_CO Spanish - Columbia 10 9 , spanish
|
||||||
|
85 es_CR Spanish - Costa Rica 10 9 . spanish
|
||||||
|
86 es_DO Spanish - Dominican Republic 10 9 . spanish
|
||||||
|
87 es_EC Spanish - Ecuador 10 9 , spanish
|
||||||
|
88 es_GT Spanish - Guatemala 10 9 . spanish
|
||||||
|
89 es_HN Spanish - Honduras 10 9 . spanish
|
||||||
|
90 es_MX Spanish - Mexico 10 9 . spanish
|
||||||
|
91 es_NI Spanish - Nicaragua 10 9 . spanish
|
||||||
|
92 es_PA Spanish - Panama 10 9 . spanish
|
||||||
|
93 es_PE Spanish - Peru 10 9 . spanish
|
||||||
|
94 es_PR Spanish - Puerto Rico 10 9 . spanish
|
||||||
|
95 es_PY Spanish - Paraguay 10 9 , spanish
|
||||||
|
96 es_SV Spanish - El Salvador 10 9 . spanish
|
||||||
|
97 es_US Spanish - United States 10 9 . , spanish
|
||||||
|
98 es_UY Spanish - Uruguay 10 9 , spanish
|
||||||
|
99 es_VE Spanish - Venezuela 10 9 , spanish
|
||||||
|
100 fr_BE French - Belgium 9 8 , . french
|
||||||
|
101 fr_CA French - Canada 9 8 , french
|
||||||
|
102 fr_CH French - Switzerland 9 8 , french
|
||||||
|
103 fr_LU French - Luxembourg 9 8 , french
|
||||||
|
104 it_IT Italian - Italy 9 9 , italian
|
||||||
|
105 nl_BE Dutch - Belgium 9 9 , . dutch
|
||||||
|
106 no_NO Norwegian - Norway 9 7 , . norwegian
|
||||||
|
107 sv_FI Swedish - Finland 9 7 , swedish
|
||||||
|
108 zh_HK Chinese - Hong Kong SAR 3 3 . , english
|
||||||
|
109 el_GR Greek - Greece 11 9 , . greek
|
3
mysql-test/suite/plugins/t/locales.opt
Normal file
3
mysql-test/suite/plugins/t/locales.opt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
--loose-locale
|
||||||
|
--plugin-load=$LOCALES_SO
|
||||||
|
|
7
mysql-test/suite/plugins/t/locales.test
Normal file
7
mysql-test/suite/plugins/t/locales.test
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
if (`select count(*) = 0 from information_schema.plugins where plugin_name = 'locales' and plugin_status='active'`)
|
||||||
|
{
|
||||||
|
--skip LOCALES plugin is not active
|
||||||
|
}
|
||||||
|
|
||||||
|
select * from information_schema.locales;
|
||||||
|
|
@ -28,7 +28,7 @@ perl;
|
|||||||
thread-concurrency super-large-pages mutex-deadlock-detector
|
thread-concurrency super-large-pages mutex-deadlock-detector
|
||||||
null-audit aria pbxt oqgraph sphinx thread-handling
|
null-audit aria pbxt oqgraph sphinx thread-handling
|
||||||
test-sql-discovery rpl-semi-sync query-cache-info
|
test-sql-discovery rpl-semi-sync query-cache-info
|
||||||
query-response-time/;
|
query-response-time locales/;
|
||||||
|
|
||||||
# And substitute the content some environment variables with their
|
# And substitute the content some environment variables with their
|
||||||
# names:
|
# names:
|
||||||
|
5
plugin/locale_info/CMakeLists.txt
Normal file
5
plugin/locale_info/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex
|
||||||
|
${CMAKE_SOURCE_DIR}/extra/yassl/include)
|
||||||
|
|
||||||
|
MYSQL_ADD_PLUGIN(LOCALES locale_info.cc)
|
||||||
|
|
122
plugin/locale_info/locale_info.cc
Normal file
122
plugin/locale_info/locale_info.cc
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Spaempresarial - Brazil, Roberto Spadim
|
||||||
|
http://www.spadim.com.br/
|
||||||
|
roberto@spadim.com.br
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the Roberto Spadim nor the
|
||||||
|
names of the contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL ROBERTO SPADIM BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sql_class.h> // THD
|
||||||
|
#include <table.h> // ST_SCHEMA_TABLE
|
||||||
|
#include <mysql/plugin.h>
|
||||||
|
#include <m_ctype.h>
|
||||||
|
#include "sql_locale.h"
|
||||||
|
|
||||||
|
bool schema_table_store_record(THD *thd, TABLE *table);
|
||||||
|
static MY_LOCALE **locale_list;
|
||||||
|
|
||||||
|
/* LOCALES */
|
||||||
|
static ST_FIELD_INFO locale_info_locale_fields_info[]=
|
||||||
|
{
|
||||||
|
{"ID", 4, MYSQL_TYPE_LONGLONG, 0, 0, 0, 0},
|
||||||
|
{"NAME", 255, MYSQL_TYPE_STRING, 0, 0, 0, 0},
|
||||||
|
{"DESCRIPTION", 255, MYSQL_TYPE_STRING, 0, 0, 0, 0},
|
||||||
|
{"MAX_MONTH_NAME_LENGTH", 4, MYSQL_TYPE_LONGLONG, 0, 0, 0, 0},
|
||||||
|
{"MAX_DAY_NAME_LENGTH", 4, MYSQL_TYPE_LONGLONG, 0, 0, 0, 0},
|
||||||
|
{"DECIMAL_POINT", 2, MYSQL_TYPE_STRING, 0, 0, 0, 0},
|
||||||
|
{"THOUSAND_SEP", 2, MYSQL_TYPE_STRING, 0, 0, 0, 0},
|
||||||
|
{"ERROR_MESSAGE_LANGUAGE", 64, MYSQL_TYPE_STRING, 0, 0, 0, 0},
|
||||||
|
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
static int locale_info_fill_table_locale(THD* thd, TABLE_LIST* tables, COND* cond)
|
||||||
|
{
|
||||||
|
TABLE *table= tables->table;
|
||||||
|
CHARSET_INFO *cs= system_charset_info;
|
||||||
|
|
||||||
|
for (MY_LOCALE **loc= locale_list; *loc; loc++)
|
||||||
|
{
|
||||||
|
/* ID */
|
||||||
|
table->field[0]->store((longlong) (*loc)->number, TRUE);
|
||||||
|
/* NAME */
|
||||||
|
table->field[1]->store((*loc)->name, strlen((*loc)->name), cs);
|
||||||
|
/* DESCRIPTION */
|
||||||
|
table->field[2]->store((*loc)->description, strlen((*loc)->description), cs);
|
||||||
|
/* MAX_MONTH_NAME_LENGTH */
|
||||||
|
table->field[3]->store((longlong) (*loc)->max_month_name_length, TRUE);
|
||||||
|
/* MAX_DAY_NAME_LENGTH */
|
||||||
|
table->field[4]->store((longlong) (*loc)->max_day_name_length, TRUE);
|
||||||
|
/* DECIMAL_POINT */
|
||||||
|
char decimal= (*loc)->decimal_point;
|
||||||
|
table->field[5]->store(&decimal, decimal ? 1 : 0, cs);
|
||||||
|
/* THOUSAND_SEP */
|
||||||
|
char thousand= (*loc)->thousand_sep;
|
||||||
|
table->field[6]->store(&thousand, thousand ? 1 : 0, cs);
|
||||||
|
/* ERROR_MESSAGE_LANGUAGE */
|
||||||
|
table->field[7]->store((*loc)->errmsgs->language,
|
||||||
|
strlen((*loc)->errmsgs->language), cs);
|
||||||
|
if (schema_table_store_record(thd, table))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int locale_info_plugin_init_locales(void *p)
|
||||||
|
{
|
||||||
|
ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p;
|
||||||
|
schema->fields_info= locale_info_locale_fields_info;
|
||||||
|
schema->fill_table= locale_info_fill_table_locale;
|
||||||
|
|
||||||
|
#if defined(_WIN64)
|
||||||
|
locale_list = (MY_LOCALE **)GetProcAddress(GetModuleHandle(NULL), "?my_locales@@3PAPEAVMY_LOCALE@@A");
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
locale_list = (MY_LOCALE **)GetProcAddress(GetModuleHandle(NULL), "?my_locales@@3PAPAVMY_LOCALE@@A");
|
||||||
|
#else
|
||||||
|
locale_list = my_locales;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static struct st_mysql_information_schema locale_info_plugin=
|
||||||
|
{ MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION };
|
||||||
|
|
||||||
|
/*
|
||||||
|
Plugin library descriptor
|
||||||
|
*/
|
||||||
|
|
||||||
|
maria_declare_plugin(locales)
|
||||||
|
{
|
||||||
|
MYSQL_INFORMATION_SCHEMA_PLUGIN, /* the plugin type (see include/mysql/plugin.h) */
|
||||||
|
&locale_info_plugin, /* pointer to type-specific plugin descriptor */
|
||||||
|
"LOCALES", /* plugin name */
|
||||||
|
"Roberto Spadim, Spaempresarial - Brazil", /* plugin author */
|
||||||
|
"Lists all locales from server.", /* the plugin description */
|
||||||
|
PLUGIN_LICENSE_BSD, /* the plugin license (see include/mysql/plugin.h) */
|
||||||
|
locale_info_plugin_init_locales, /* Pointer to plugin initialization function */
|
||||||
|
0, /* Pointer to plugin deinitialization function */
|
||||||
|
0x0100, /* Numeric version 0xAABB means AA.BB veriosn */
|
||||||
|
NULL, /* Status variables */
|
||||||
|
NULL, /* System variables */
|
||||||
|
"1.0", /* String version representation */
|
||||||
|
MariaDB_PLUGIN_MATURITY_ALPHA /* Maturity (see include/mysql/plugin.h)*/
|
||||||
|
}
|
||||||
|
maria_declare_plugin_end;
|
Reference in New Issue
Block a user