From: Weldon Whipple Date: November 17 2010 9:07pm Subject: Re: mysql grammatical and semantic souce code List-Archive: http://lists.mysql.com/internals/38207 Message-Id: MIME-Version: 1.0 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: quoted-printable TC, I've successfully expanded the MySQL syntax several times for local use. (I'm still looking for MySQL hacks I've made that are of sufficiently general interest for the open-source community. ... One of these days ... :-) Here are the steps I used to add SHOW BAN_STATISTICS, patterned after the google (or is it percona?) patch that implements SHOW USER_STATISTICS (and several other kinds of statistics): 1. In sql/lex.h: Add BAN_STATS_SYM symbol at the appropriate place. Also add SQLCOM_SHOW_BAN_STATS to the enum with all the SQLCOM_* values. { "BAN_STATISTICS", SYM(BAN_STATS_SYM)}, /* Later ... */ SQLCOM_SHOW_BAN_STATS 2. In sql/sql_yacc.yy, add these: %token BAN_STATS_SYM /* Then, later in the file, expend the SHOW section */ | BAN_STATS_SYM wild_and_where { LEX *lex=3D Lex; lex->sql_command=3D SQLCOM_SHOW_BAN_STATS; if (prepare_schema_table(YYTHD, lex, 0, SCH_BAN_STATS)) MYSQL_YYABORT; } (Of course, I had to implement prepare_schema_table and a bunch of other functions/methods to collect the data for the SHOWing. ... But the above should get you started.) My first use of lex and yacc was for a senior computer science project years ago. I THINK what MySQL uses is actually flex and bison (flex being the successor to lex and bison being the successor to [another (bovine?) animal] yacc), but I could be very wrong. I still have my old "lex and yacc" O'Reilly book (copyright 1992), which seems a bit outdated now. I found GNU Press's "The Bison Manual" (copyright 2003 by FSF--there's probably a more recent one online) quite handy. Appendix J of the "lex and yacc" book has lex and yacc code for a SQL parser (an old one, obviously), which is quite illuminating to read and understand. In the MySQL code, the following files warrant a look if you're extending the MySQL syntax: gen_lex_hash.cc lex.h lex_symbol.h sql_lex.cc sql_lex.h sql_yacc.yy generates sql_yacc.h and sql_yacc.cc during the build process, which are in turn compiled and linked into the mysqld executables, etc. I hope I haven't lied too much in the above. I'm just returning to my database-per-file binlog assignment which has been simmering on the back burner for 2-3 weeks while I wrote an apache module. ... So some of this isn't completely fresh in my memory. ... But I couldn't leave you without an answer: Yes (AFAICT), mysql DOES use current generations of the old lex and yacc (maybe flex and bison or some variants??) Good luck! 2010/11/17 tc yang : > thanks a lot=A3=A1 > mysql not use lex for tokenizing, only use sql_lex.cc and the > lex_hash.h to supply the same interface as lex/flex supplied? and the > up level also use yacc? > I can find sql_yacc.yy, Is it equal .y file? when I see other yacc > demo, yacc file always named .y > In websit http://forge.mysql.com/wiki/MySQL_Internals,I can't find > subject helpfull for this Lexical and grammatical implement > > > =D4=DA 2010=C4=EA11=D4=C217=C8=D5 =CF=C2=CE=E72:46=A3=ACHartmut Holzgraef= e =D0=B4=B5=C0=A3=BA >> On 11/17/2010 06:33 AM, tc yang wrote: >>> =D4=DA 2010=C4=EA11=D4=C217=C8=D5 =C9=CF=CE=E711:22=A3=ACtc yang=D0=B4=B5=C0=A3=BA >>>> >>>> hi: >>>> I recently study mysql source code, grammatical and semantic ana= lysis=A3=ACmysql source version 5.57 >>>> but I can't find .l file for lex and .y for yacc in mysql level= =A3=ACinnbase dictonary have /pars0lex.l, why mysql don't have lex source? >>>> in sql directory only have sql_lex.cc,this is generated from lex = source ? and where is the lex source(".l" file), and how is generated? >> >> mysql does not use lex/flex for tokenizing, it uses a self made scanner >> instead, which consists of sql_lex.cc and the lex_hash.h header >> generated by the bundled gen_lex_hash tool >> >> the lex and yacc files in the innobase stem back from the time when >> InnoDB was meant to be a standalone SQL database, most of this parser >> is not in use anymore, parts of it are still needed to parse foreign >> key constraint definitions though as far as i remember. >> >> -- >> hartmut >> >> -- >> MySQL Internals Mailing List >> For list archives: http://lists.mysql.com/internals >> To unsubscribe: http://lists.mysql.com/internals?unsub=3Dyangtc.sub@g= mail.com >> >> > > -- > MySQL Internals Mailing List > For list archives: http://lists.mysql.com/internals > To unsubscribe: http://lists.mysql.com/internals?unsub=3Dweldon@whippl= e.org > >