* marc.alff@stripped <marc.alff@stripped> [07/08/09 22:33]:
> ChangeSet@stripped, 2007-08-09 12:25:48-06:00, malff@weblab.(none) +1 -0
> Bug#30333 (Performance, expressions lists in the parser)
>
> Before this patch, the parser would execute:
> - Select->expr_list.push_front()
> - Select->expr_list.pop()
> when parsing expressions lists, in the following rules:
> - udf_expr_list
> - expr_list
> - ident_list
OK to push.
Please use 5.1 tree, since everything else will go into 5.1 and
this patch doesn't help Google.
> This is unnecessary, and introduces overhead due to the memory allocations
> performed with Select->expr_list
>
> With this patch, this code has been removed.
> The list being parsed is maintained in the parser stack instead.
>
> Also, 'udf_expr_list' has been renamed 'opt_udf_expr_list', since this
> production can be empty.
>
> Simplification of the grammar around these lists also reduced the
> parser complexity:
>
> /* YYLAST -- Last index in YYTABLE. */
> #define YYLAST 43481 --> 43048 [-433]
> /* YYNTOKENS -- Number of terminals. */
> #define YYNTOKENS 570 --> 570 [0]
> /* YYNNTS -- Number of nonterminals. */
> #define YYNNTS 674 --> 668 [-6]
> /* YYNRULES -- Number of rules. */
> #define YYNRULES 2026 --> 2020 [-6]
> /* YYNRULES -- Number of states. */
> #define YYNSTATES 3672 --> 3666 [-6]
Good. Again, would be nice to remove reference to the exact
numbers from the final changeset comments.
That is all.
Thank you for looking at this!
--
-- Konstantin Osipov Software Developer, Moscow, Russia
-- MySQL AB, www.mysql.com The best DATABASE COMPANY in the GALAXY