SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Roland Bouman
http://rpbouman.blogspot.com/
1
Writing MySQL 5.1 Information
Schema Plugins
Roland Bouman
http://rpbouman.blogspot.com/
2
Tasks Before Implementing
Information Schema Plugins
● Standard headers
– <stdlib.h>, <ctype.h>
● Non-specific MySQL headers:
– <mysql_version.h>, <mysql/plugin.h>
● Extra headers for Information Schema plug-ins
– <mysql_priv.h>
– <my_global.h>
– <my_dir.h>
Roland Bouman
http://rpbouman.blogspot.com/
3
Implementing Information
Schema Plug-ins
● Setup the column layout
– Defines the column names and data types
● Implement a fill function
– Is called to fill the (in-memory) table
● Hook up table object with colum layout and fill
function
– Plug-in initialization function
Roland Bouman
http://rpbouman.blogspot.com/
4
Information Schema Plug-ins:
Column Layout
● Array of ST_FIELD_INFO
– typedef struct st_field_info
– Defined in sql/table.h
typedef struct st_field_info
{
const char* field_name;
uint field_length;
enum enum_field_types field_type;
int value;
uint field_flags;
const char* old_name;
uint open_method;
} ST_FIELD_INFO;
Roland Bouman
http://rpbouman.blogspot.com/
5
ST_FIELD_INFO members (1/2)
● field_name: Column name
● field_length:
– String type columns: #characters
– Non-string types: 'display length'
● field_type: type constant
– enum_field_types (mysql_com.h)
● field_flags:
– MY_I_S_MAYBE_NULL
– MY_I_S_UNSIGNED
Roland Bouman
http://rpbouman.blogspot.com/
6
ST_FIELD_INFO members (2/2)
● open_method: (sql/table.h)
– SKIP_OPEN_TABLE
– OPEN_FRM_ONLY
– OPEN_FULL_TABLE
● old_name: Column name for SHOW command
● value: ??
Roland Bouman
http://rpbouman.blogspot.com/
7
Information Schema Plug-ins:
Column Layout Example
● information_schema.SCHEMATA
ST_FIELD_INFO schema_fields_info[]=
{
{"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING,
0, 1, 0, SKIP_OPEN_TABLE},
{"SCHEMA_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING,
0, 0, "Database", SKIP_OPEN_TABLE},
{"DEFAULT_CHARACTER_SET_NAME", MY_CS_NAME_SIZE, MYSQL_TYPE_STRING,
0, 0, 0, SKIP_OPEN_TABLE},
{"DEFAULT_COLLATION_NAME", MY_CS_NAME_SIZE, MYSQL_TYPE_STRING,
0, 0, 0, SKIP_OPEN_TABLE},
{"SQL_PATH", FN_REFLEN, MYSQL_TYPE_STRING,
0, 1, 0, SKIP_OPEN_TABLE},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
}
Roland Bouman
http://rpbouman.blogspot.com/
8
Information Schema Plug-ins:
Fill Function (1/4)
● fill_table(
THD *thd,
TABLE_LIST *tables,
COND *cond
)
● THD: thread descriptor (sql/sql_class.h)
● TABLE_LIST: (sql/sql_table.h)
– List of struct st_table (a.k.a. TABLE)
● COND: Condition.
Roland Bouman
http://rpbouman.blogspot.com/
9
Information Schema Plug-ins:
Fill Function (2/4)
● Grab first table from the list:
TABLE *table= (TABLE *)tables->table;
● Store data in fields:
table->field[i]->store(...);
● Store row in table
schema_table_store_record(thd, table);
Roland Bouman
http://rpbouman.blogspot.com/
10
Information Schema Plug-ins:
Fill Function (3/4)
● schema_table_store_record(
THD *thd
, TABLE *table
)
● Forward declaration in mysql_priv.h
● Defined in sql/sql_show.cc
Roland Bouman
http://rpbouman.blogspot.com/
11
Information Schema Plug-ins:
Fill Function (4/4)
int myplugin_fill_table(
THD *thd, TABLE_LIST *tables, COND *cond
){
int status;
CHARSET_INFO *scs= system_charset_info;
TABLE *table= (TABLE *)tables->table;
for ( ... ) { //
table->field[0]->store( ... );
...
table->field[X]->store( ... );
status= schema_table_store_record(
thd, table
);
}
return status;
}
Roland Bouman
http://rpbouman.blogspot.com/
12
Information Schema Plug-ins:
Hookup Column Layout and Filler
● plugin_init
static int myplugin_init(void *p)
{
ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p;
schema->fields_info= myplugin_field_info;
schema->fill_table= myplugin_fill_table;
return 0;
}
Roland Bouman
http://rpbouman.blogspot.com/
13
Information Schema Plug-ins:
ST_SCHEMA_TABLE
● ST_SCHEMA_TABLE a.k.a st_schema_table
typedef struct st_schema_table
{
const char* table_name;
ST_FIELD_INFO *fields_info;
TABLE *(*create_table)(THD *thd, TABLE_LIST *table_list);
int (*fill_table) (
THD *thd, TABLE_LIST *tables, COND *cond);
int (*old_format) (
THD *thd, struct st_schema_table *schema_table);
int (*process_table) (
THD *thd, TABLE_LIST *tables,TABLE *table,
bool res, LEX_STRING *db_name, LEX_STRING *table_name);
int idx_field1, idx_field2;
bool hidden;
uint i_s_requested_object;
} ST_SCHEMA_TABLE;
Roland Bouman
http://rpbouman.blogspot.com/
14
Information Schema Plug-ins:
Hookup Column Layout and Filler
● plugin_init
static int myplugin_init(void *p)
{
ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p;
schema->fields_info= myplugin_field_info;
schema->fill_table= myplugin_fill_table;
return 0;
}
Roland Bouman
http://rpbouman.blogspot.com/
15
Information Schema Plug-ins:
Hookup Column Layout and Filler
● plugin_init
static int myplugin_init(void *p)
{
ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p;
schema->fields_info= myplugin_field_info;
schema->fill_table= myplugin_fill_table;
return 0;
}
Roland Bouman
http://rpbouman.blogspot.com/
16
Information Schema Plug-ins:
Hookup Column Layout and Filler
● plugin_init
static int myplugin_init(void *p)
{
ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p;
schema->fields_info= myplugin_field_info;
schema->fill_table= myplugin_fill_table;
return 0;
}

Weitere ähnliche Inhalte

Was ist angesagt?

Database Oracle Basic
Database Oracle BasicDatabase Oracle Basic
Database Oracle Basic
Kamlesh Singh
 
11 Things About 11gr2
11 Things About 11gr211 Things About 11gr2
11 Things About 11gr2
afa reg
 
Smolder @Silex
Smolder @SilexSmolder @Silex
Smolder @Silex
Jeen Lee
 

Was ist angesagt? (20)

Database Oracle Basic
Database Oracle BasicDatabase Oracle Basic
Database Oracle Basic
 
235689260 oracle-forms-10g-tutorial
235689260 oracle-forms-10g-tutorial235689260 oracle-forms-10g-tutorial
235689260 oracle-forms-10g-tutorial
 
11 Things About 11gr2
11 Things About 11gr211 Things About 11gr2
11 Things About 11gr2
 
PostgreSQL Procedural Languages: Tips, Tricks and Gotchas
PostgreSQL Procedural Languages: Tips, Tricks and GotchasPostgreSQL Procedural Languages: Tips, Tricks and Gotchas
PostgreSQL Procedural Languages: Tips, Tricks and Gotchas
 
Dbmsmanual
DbmsmanualDbmsmanual
Dbmsmanual
 
Linux /proc filesystem for MySQL DBAs - FOSDEM 2021
Linux  /proc filesystem for MySQL DBAs - FOSDEM 2021Linux  /proc filesystem for MySQL DBAs - FOSDEM 2021
Linux /proc filesystem for MySQL DBAs - FOSDEM 2021
 
Documento
DocumentoDocumento
Documento
 
MySQL Stored Procedures: Building High Performance Web Applications
MySQL Stored Procedures: Building High Performance Web ApplicationsMySQL Stored Procedures: Building High Performance Web Applications
MySQL Stored Procedures: Building High Performance Web Applications
 
PL-SQL DIFFERENT PROGRAMS
PL-SQL DIFFERENT PROGRAMSPL-SQL DIFFERENT PROGRAMS
PL-SQL DIFFERENT PROGRAMS
 
TRunner
TRunnerTRunner
TRunner
 
ZFINDALLZPROGAM
ZFINDALLZPROGAMZFINDALLZPROGAM
ZFINDALLZPROGAM
 
Optimizer Cost Model MySQL 5.7
Optimizer Cost Model MySQL 5.7Optimizer Cost Model MySQL 5.7
Optimizer Cost Model MySQL 5.7
 
Tuning SGA
Tuning SGATuning SGA
Tuning SGA
 
Smolder @Silex
Smolder @SilexSmolder @Silex
Smolder @Silex
 
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
 
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
MariaDB 10.5 new features for troubleshooting (mariadb server fest 2020)
 
Raj mysql
Raj mysqlRaj mysql
Raj mysql
 
Ruby meetup ROM
Ruby meetup ROMRuby meetup ROM
Ruby meetup ROM
 
Oracle postgre sql-mirgration-top-10-mistakes
Oracle postgre sql-mirgration-top-10-mistakesOracle postgre sql-mirgration-top-10-mistakes
Oracle postgre sql-mirgration-top-10-mistakes
 
Les01
Les01Les01
Les01
 

Andere mochten auch

Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
Roland Bouman
 
LAMP security practices
LAMP security practicesLAMP security practices
LAMP security practices
Amit Kejriwal
 
Olap scalability
Olap scalabilityOlap scalability
Olap scalability
lucboudreau
 

Andere mochten auch (8)

Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
 
LAMP security practices
LAMP security practicesLAMP security practices
LAMP security practices
 
2009 Comrise
2009 Comrise2009 Comrise
2009 Comrise
 
What Permissions Does Your Database User REALLY Need?
What Permissions Does Your Database User REALLY Need?What Permissions Does Your Database User REALLY Need?
What Permissions Does Your Database User REALLY Need?
 
Xml4js pentaho
Xml4js pentahoXml4js pentaho
Xml4js pentaho
 
Xmla4js
Xmla4jsXmla4js
Xmla4js
 
Olap scalability
Olap scalabilityOlap scalability
Olap scalability
 
Southeast Linuxfest -- MySQL User Admin Tips & Tricks
Southeast Linuxfest -- MySQL User Admin Tips & TricksSoutheast Linuxfest -- MySQL User Admin Tips & Tricks
Southeast Linuxfest -- MySQL User Admin Tips & Tricks
 

Ähnlich wie 3. writing MySql plugins for the information schema

External Language Stored Procedures for MySQL
External Language Stored Procedures for MySQLExternal Language Stored Procedures for MySQL
External Language Stored Procedures for MySQL
Antony T Curtis
 
11thingsabout11g 12659705398222 Phpapp01
11thingsabout11g 12659705398222 Phpapp0111thingsabout11g 12659705398222 Phpapp01
11thingsabout11g 12659705398222 Phpapp01
Karam Abuataya
 
Discard inport exchange table & tablespace
Discard inport exchange table & tablespaceDiscard inport exchange table & tablespace
Discard inport exchange table & tablespace
Marco Tusa
 
Less18 moving data
Less18 moving dataLess18 moving data
Less18 moving data
Imran Ali
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
Jay Patel
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
Jay Patel
 
Case_Study_-_Advanced_Oracle_PLSQL
Case_Study_-_Advanced_Oracle_PLSQLCase_Study_-_Advanced_Oracle_PLSQL
Case_Study_-_Advanced_Oracle_PLSQL
Ziemowit Jankowski
 

Ähnlich wie 3. writing MySql plugins for the information schema (20)

Developing Information Schema Plugins
Developing Information Schema PluginsDeveloping Information Schema Plugins
Developing Information Schema Plugins
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slides
 
Hive in Practice
Hive in PracticeHive in Practice
Hive in Practice
 
SQLMAP Tool Usage - A Heads Up
SQLMAP Tool Usage - A  Heads UpSQLMAP Tool Usage - A  Heads Up
SQLMAP Tool Usage - A Heads Up
 
How to make data available for analytics ASAP
How to make data available for analytics ASAPHow to make data available for analytics ASAP
How to make data available for analytics ASAP
 
IDUG 2015 NA Data Movement Utilities final
IDUG 2015 NA Data Movement Utilities finalIDUG 2015 NA Data Movement Utilities final
IDUG 2015 NA Data Movement Utilities final
 
Playing with the CONNECT storage engine
Playing with the CONNECT storage enginePlaying with the CONNECT storage engine
Playing with the CONNECT storage engine
 
External Language Stored Procedures for MySQL
External Language Stored Procedures for MySQLExternal Language Stored Procedures for MySQL
External Language Stored Procedures for MySQL
 
11thingsabout11g 12659705398222 Phpapp01
11thingsabout11g 12659705398222 Phpapp0111thingsabout11g 12659705398222 Phpapp01
11thingsabout11g 12659705398222 Phpapp01
 
11 Things About11g
11 Things About11g11 Things About11g
11 Things About11g
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18c
 
Discard inport exchange table & tablespace
Discard inport exchange table & tablespaceDiscard inport exchange table & tablespace
Discard inport exchange table & tablespace
 
Instant add column for inno db in mariadb 10.3+ (fosdem 2018, second draft)
Instant add column for inno db in mariadb 10.3+ (fosdem 2018, second draft)Instant add column for inno db in mariadb 10.3+ (fosdem 2018, second draft)
Instant add column for inno db in mariadb 10.3+ (fosdem 2018, second draft)
 
Less18 moving data
Less18 moving dataLess18 moving data
Less18 moving data
 
Introduction to SQLite in Adobe AIR
Introduction to SQLite in Adobe AIRIntroduction to SQLite in Adobe AIR
Introduction to SQLite in Adobe AIR
 
PERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaPERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schema
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
 
Case_Study_-_Advanced_Oracle_PLSQL
Case_Study_-_Advanced_Oracle_PLSQLCase_Study_-_Advanced_Oracle_PLSQL
Case_Study_-_Advanced_Oracle_PLSQL
 
Meet MariaDB 10.3 Debconf 2017
Meet MariaDB 10.3   Debconf 2017Meet MariaDB 10.3   Debconf 2017
Meet MariaDB 10.3 Debconf 2017
 

Kürzlich hochgeladen

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

3. writing MySql plugins for the information schema

  • 2. Roland Bouman http://rpbouman.blogspot.com/ 2 Tasks Before Implementing Information Schema Plugins ● Standard headers – <stdlib.h>, <ctype.h> ● Non-specific MySQL headers: – <mysql_version.h>, <mysql/plugin.h> ● Extra headers for Information Schema plug-ins – <mysql_priv.h> – <my_global.h> – <my_dir.h>
  • 3. Roland Bouman http://rpbouman.blogspot.com/ 3 Implementing Information Schema Plug-ins ● Setup the column layout – Defines the column names and data types ● Implement a fill function – Is called to fill the (in-memory) table ● Hook up table object with colum layout and fill function – Plug-in initialization function
  • 4. Roland Bouman http://rpbouman.blogspot.com/ 4 Information Schema Plug-ins: Column Layout ● Array of ST_FIELD_INFO – typedef struct st_field_info – Defined in sql/table.h typedef struct st_field_info { const char* field_name; uint field_length; enum enum_field_types field_type; int value; uint field_flags; const char* old_name; uint open_method; } ST_FIELD_INFO;
  • 5. Roland Bouman http://rpbouman.blogspot.com/ 5 ST_FIELD_INFO members (1/2) ● field_name: Column name ● field_length: – String type columns: #characters – Non-string types: 'display length' ● field_type: type constant – enum_field_types (mysql_com.h) ● field_flags: – MY_I_S_MAYBE_NULL – MY_I_S_UNSIGNED
  • 6. Roland Bouman http://rpbouman.blogspot.com/ 6 ST_FIELD_INFO members (2/2) ● open_method: (sql/table.h) – SKIP_OPEN_TABLE – OPEN_FRM_ONLY – OPEN_FULL_TABLE ● old_name: Column name for SHOW command ● value: ??
  • 7. Roland Bouman http://rpbouman.blogspot.com/ 7 Information Schema Plug-ins: Column Layout Example ● information_schema.SCHEMATA ST_FIELD_INFO schema_fields_info[]= { {"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE}, {"SCHEMA_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Database", SKIP_OPEN_TABLE}, {"DEFAULT_CHARACTER_SET_NAME", MY_CS_NAME_SIZE, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}, {"DEFAULT_COLLATION_NAME", MY_CS_NAME_SIZE, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}, {"SQL_PATH", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE}, {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE} }
  • 8. Roland Bouman http://rpbouman.blogspot.com/ 8 Information Schema Plug-ins: Fill Function (1/4) ● fill_table( THD *thd, TABLE_LIST *tables, COND *cond ) ● THD: thread descriptor (sql/sql_class.h) ● TABLE_LIST: (sql/sql_table.h) – List of struct st_table (a.k.a. TABLE) ● COND: Condition.
  • 9. Roland Bouman http://rpbouman.blogspot.com/ 9 Information Schema Plug-ins: Fill Function (2/4) ● Grab first table from the list: TABLE *table= (TABLE *)tables->table; ● Store data in fields: table->field[i]->store(...); ● Store row in table schema_table_store_record(thd, table);
  • 10. Roland Bouman http://rpbouman.blogspot.com/ 10 Information Schema Plug-ins: Fill Function (3/4) ● schema_table_store_record( THD *thd , TABLE *table ) ● Forward declaration in mysql_priv.h ● Defined in sql/sql_show.cc
  • 11. Roland Bouman http://rpbouman.blogspot.com/ 11 Information Schema Plug-ins: Fill Function (4/4) int myplugin_fill_table( THD *thd, TABLE_LIST *tables, COND *cond ){ int status; CHARSET_INFO *scs= system_charset_info; TABLE *table= (TABLE *)tables->table; for ( ... ) { // table->field[0]->store( ... ); ... table->field[X]->store( ... ); status= schema_table_store_record( thd, table ); } return status; }
  • 12. Roland Bouman http://rpbouman.blogspot.com/ 12 Information Schema Plug-ins: Hookup Column Layout and Filler ● plugin_init static int myplugin_init(void *p) { ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p; schema->fields_info= myplugin_field_info; schema->fill_table= myplugin_fill_table; return 0; }
  • 13. Roland Bouman http://rpbouman.blogspot.com/ 13 Information Schema Plug-ins: ST_SCHEMA_TABLE ● ST_SCHEMA_TABLE a.k.a st_schema_table typedef struct st_schema_table { const char* table_name; ST_FIELD_INFO *fields_info; TABLE *(*create_table)(THD *thd, TABLE_LIST *table_list); int (*fill_table) ( THD *thd, TABLE_LIST *tables, COND *cond); int (*old_format) ( THD *thd, struct st_schema_table *schema_table); int (*process_table) ( THD *thd, TABLE_LIST *tables,TABLE *table, bool res, LEX_STRING *db_name, LEX_STRING *table_name); int idx_field1, idx_field2; bool hidden; uint i_s_requested_object; } ST_SCHEMA_TABLE;
  • 14. Roland Bouman http://rpbouman.blogspot.com/ 14 Information Schema Plug-ins: Hookup Column Layout and Filler ● plugin_init static int myplugin_init(void *p) { ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p; schema->fields_info= myplugin_field_info; schema->fill_table= myplugin_fill_table; return 0; }
  • 15. Roland Bouman http://rpbouman.blogspot.com/ 15 Information Schema Plug-ins: Hookup Column Layout and Filler ● plugin_init static int myplugin_init(void *p) { ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p; schema->fields_info= myplugin_field_info; schema->fill_table= myplugin_fill_table; return 0; }
  • 16. Roland Bouman http://rpbouman.blogspot.com/ 16 Information Schema Plug-ins: Hookup Column Layout and Filler ● plugin_init static int myplugin_init(void *p) { ST_SCHEMA_TABLE *schema= (ST_SCHEMA_TABLE *)p; schema->fields_info= myplugin_field_info; schema->fill_table= myplugin_fill_table; return 0; }