рд╕рдВрд╕реНрдХрд░рдг 5.1 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, MySQL рдиреЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рд╡рд┐рддрд░рдг рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрдВрдХрд╛рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ
рдЙрджрд╛рд╣рд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмреЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ,
рд╣реИрдВрдбрд▓рд░ , рдЬрд┐рд╕рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
рдЯреЗрдмрд▓ * рдЯреЗрдмрд▓ рдФрд░ рд╕рд╣рд╛рдпрдХ рд╡реЗрдХреНрдЯрд░
TABLE_SHARE * рд╢реЗрдпрд░ рдХреЗ рд▓рд┐рдП
рдПрдХ рд╕рдВрдХреЗрддрдХ рднреА
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд▓рдЧрд┐рди рд╡рд┐рдХрд╛рд╕ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╛рдХрд╛рд░ рдХрд░рдирд╛ рдФрд░ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред
рдЪреВрдВрдХрд┐
рдЙрджрд╛рд╣рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рдПрдХ рдПрдХрд▓-рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реАрдЖрд░рдпреВрдбреА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ 4 рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВ:
- int rnd_init (рдмреВрд▓ рд╕реНрдХреИрди);
- int rnd_next (uchar * buf);
- int write_row (uchar * buf);
- int delete_row (const uchar * buf);
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рддреИрдпрд╛рд░реАрдЙрджрд╛рд╣рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ MySQL рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ
рд╕рдВрдЧреНрд░рд╣рдг / рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ
ha_example.h рдФрд░
ha_example.cc рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
MySQL рд╕рдореБрджрд╛рдп 5.5.35 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
рдЙрджрд╛рд╣рд░рдг рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдирд╛рдо рдмрджрд▓реЗрдВред
wget http://downloads.mysql.com/archives/get/file/mysql-5.5.35.tar.gz tar -zxvf mysql-5.5.35.tar.gz cd mysql-5.5.35 cp -rf storage/example storage/smalldb cd storage/smalldb sed -e 's/EXAMPLE/SMALLDB/g' -e 's/example/smalldb/g' ha_example.h > ha_smalldb.h sed -e 's/EXAMPLE/SMALLDB/g' -e 's/example/smalldb/g' ha_example.cc > ha_smalldb.cc sed -i 's/EXAMPLE/SMALLDB/g;s/example/smalldb/g' CMakeLists.txt
рдЖрдЗрдП рдПрдХ рд╕рд┐рдВрдЧрд▓реА рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдФрд░ рд╕рд┐рд░, рд╡рд░реНрддрдорд╛рди, рдкрд┐рдЫрд▓реА рдФрд░ рдЕрдЧрд▓реА рд╕реВрдЪреА рдЖрдЗрдЯрдо (
ha_smalldb.h рдореЗрдВ ) рдХреЗ рд▓рд┐рдП рдХрдИ
рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
class node{ public: uchar* data;
рдЕрдм рд▓рд┐рдЦрдиреЗ рдХреЗ рдСрдкрд░реЗрд╢рди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ -
write_row (uchar * buf) ред рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ,
buf рдХреЛ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ:

рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ рддрд╛рд▓рд┐рдХрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
рддрд╛рд▓рд┐рдХрд╛-> s-> рдкреБрдирд░реНрдЧрдгрдирд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
int ha_smalldb::write_row(uchar *buf) { DBUG_ENTER("ha_smalldb::write_row"); node* n=new node(); n->data = (uchar*) malloc(sizeof(uchar)*table->s->reclength); memcpy(n->data,buf,table->s->reclength); append_node(n); row_count++; DBUG_RETURN(0); }
рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп,
rnd_init рдФрд░
rnd_next рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реНрдХреИрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд░ рдЗрдВрдЬрди рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ
rnd_init () рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
int ha_smalldb::rnd_init(bool scan) { DBUG_ENTER("ha_smalldb::rnd_init"); cur=NULL; prev=NULL; next=first; cur_pos=0; DBUG_RETURN(0); }
рдмреВрд▓рд┐рдпрди рддрд░реНрдХ
рд╕реНрдХреИрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ (рдЕрд╕рдВрдЧрдд) рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ
rnd_pos () рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ HA_ERR_WRONG_COMMAND рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдХреНрд░рдо рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХрд▓
rnd_init () рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛рдмреЗрд╕
rnd_next () рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рддрдм рддрдХ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ - HA_ERR_END_OF_FILEред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж,
рдмреБрдлрд╝ рдкрд░ рдореЗрдореЛрд░реА рдХреЛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рднрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
int ha_smalldb::rnd_next(uchar *buf) { int rc; DBUG_ENTER("ha_smalldb::rnd_next"); MYSQL_READ_ROW_START(table_share->db.str, table_share->table_name.str, TRUE); if (next!=NULL){ prev=cur; cur=next; next=cur->next; memcpy(buf,cur->data,table->s->reclength); cur_pos++; rc=0; }else{ rc= HA_ERR_END_OF_FILE; } MYSQL_READ_ROW_DONE(rc); DBUG_RETURN(rc); }
рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реВрдЪреА рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдХрд░
delete_row () рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
int ha_smalldb::delete_row(const uchar *buf) { DBUG_ENTER("ha_smalldb::delete_row"); if (cur!=first){ free(cur); prev->next=next; }else{ free(cur); cur=NULL; first=next; } row_count--; DBUG_RETURN(0); }
рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЕрдм рдЖрдк рдорд┐рдиреА-рдПрдХреНрд╢рди рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдкрдирд╛MySQL 5.5 рдореЗрдВ, cmake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ .so рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ MySQL рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВ - SHOW VARIABLES LIKE "% plugin_dir%";
рдпрджрд┐ MySQL рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ рдпрд╛
рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИ , рддреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

INSERT рдФрд░ SELECT рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк
LIKE ,
INNER JOIN , рдЖрджрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ SQL рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдЗрдВрдЬрди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдЖрдкрдХреЛ MySQL рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб
github рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬреЛ рд▓реЛрдЧ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ MySQL рдЗрдВрдЬрди рдХреЗ рдЖрдВрддрд░рд┐рдХ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди InnoDB рдХреЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рдЙрдард╛рддреЗ рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ CSV рдпрд╛ HEAP (рдирдпрд╛ рдирд╛рдо - рдореЗрдореЛрд░реА) рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред CSV рдЙрд╕реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рд╕реНрдХ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдФрд░ HEAP, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рдвреЗрд░ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣реИрд╢ рдЗрдВрдбреЗрдХреНрд╕ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдХреЗ рдореБрдХреНрдд рд╡рд░реНрдЧреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреА рд╕рд╣рд╛рдпрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдПрдХрд▓ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдВрдЬрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
MySQL рдЗрдВрдЯрд░рдиреЗрд╢рдирд▓ рдореИрдиреБрдЕрд▓ рдХреЗ рдЕрдзреНрдпрд╛рдп 22 рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ
ред рдЕрдзреНрдпрд╛рдп 22. рдПрдХ рдХрд╕реНрдЯрдо рд╕рдВрдЧреНрд░рд╣рдг рдЗрдВрдЬрди рд▓рд┐рдЦрдирд╛ ред
PS рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП
ctags рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдкрдХреЛ CTRL + рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХреВрджрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Vim, emacs рдФрд░ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдкрд╛рджрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рд╣реИред рдпрд╣рд╛рдБ рдПрдХ
рддреНрд╡рд░рд┐рдд рдЧрд╛рдЗрдб рд╣реИ ред