What steps will reproduce the problem?
1.
When parsing the following MySQL Query:
select usr_id, usr_login, case id_tipousuario when 1 then 'Usuario CVE' when 2
then concat('Usuario Vendedor -', codigovendedor, '-') when 3 then
concat('Usuario Vendedor Meson -', codigovendedor, '-') end tipousuario,
CONCAT( usr_nombres, ' ', usr_apellidos ) as nom_com, cod_local from usuarios
where usr_estado <> 2 order by 3, 1, 4
What is the expected output? What do you see instead?
and print_r the parsed thing you get:
SELECT =>
0 =>
expr_type => colref
alias => `usr_id`
base_expr => usr_id
sub_tree =>
1 =>
expr_type => colref
alias => `usr_login`
base_expr => usr_login
sub_tree =>
2 =>
expr_type => expression
alias => `tipousuario`
base_expr => case id_tipousuario when 1 then 'Usuario CVE' when 2 then concat('Usuario Vendedor -', codigovendedor, '-') when 3 then concat('Usuario Vendedor Meson -', codigovendedor, '-') end
sub_tree =>
0 =>
expr_type => operator
base_expr => case
sub_tree =>
1 =>
expr_type => colref
base_expr => id_tipousuario
sub_tree =>
2 =>
expr_type => operator
base_expr => when
sub_tree =>
3 =>
expr_type => const
base_expr => 1
sub_tree =>
4 =>
expr_type => reserved
base_expr => THEN
sub_tree =>
5 =>
expr_type => const
base_expr => 'Usuario CVE'
sub_tree =>
6 =>
expr_type => operator
base_expr => when
sub_tree =>
7 =>
expr_type => const
base_expr => 2
sub_tree =>
8 =>
expr_type => reserved
base_expr => THEN
sub_tree =>
9 =>
expr_type => function
base_expr => CONCAT
sub_tree =>
10 =>
expr_type => expression
base_expr => ('Usuario Vendedor -', codigovendedor, '-')
sub_tree =>
0 =>
expr_type => const
base_expr => 'Usuario Vendedor -'
sub_tree =>
1 =>
expr_type => colref
base_expr => ,
sub_tree =>
2 =>
expr_type => colref
base_expr => codigovendedor
sub_tree =>
3 =>
expr_type => colref
base_expr => ,
sub_tree =>
4 =>
expr_type => const
base_expr => '-'
sub_tree =>
11 =>
expr_type => operator
base_expr => when
sub_tree =>
12 =>
expr_type => const
base_expr => 3
sub_tree =>
13 =>
expr_type => reserved
base_expr => THEN
sub_tree =>
14 =>
expr_type => function
base_expr => CONCAT
sub_tree =>
15 =>
expr_type => expression
base_expr => ('Usuario Vendedor Meson -', codigovendedor, '-')
sub_tree =>
0 =>
expr_type => const
base_expr => 'Usuario Vendedor Meson -'
sub_tree =>
1 =>
expr_type => colref
base_expr => ,
sub_tree =>
2 =>
expr_type => colref
base_expr => codigovendedor
sub_tree =>
3 =>
expr_type => colref
base_expr => ,
sub_tree =>
4 =>
expr_type => const
base_expr => '-'
sub_tree =>
16 =>
expr_type => operator
base_expr => end
sub_tree =>
3 =>
expr_type => expression
alias => `nom_com`
base_expr => CONCAT( usr_nombres, ' ', usr_apellidos )
sub_tree =>
0 =>
expr_type => function
base_expr => CONCAT
sub_tree =>
1 =>
expr_type => expression
base_expr => ( usr_nombres, ' ', usr_apellidos )
sub_tree =>
0 =>
expr_type => colref
base_expr => usr_nombres
sub_tree =>
1 =>
expr_type => colref
base_expr => ,
sub_tree =>
2 =>
expr_type => const
base_expr => ' '
sub_tree =>
3 =>
expr_type => colref
base_expr => ,
sub_tree =>
4 =>
expr_type => colref
base_expr => usr_apellidos
sub_tree =>
4 =>
expr_type => colref
alias => `cod_local`
base_expr => cod_local
sub_tree =>
FROM =>
0 =>
table => usuarios
alias => usuarios
join_type => JOIN
ref_type =>
ref_clause =>
base_expr =>
sub_tree =>
WHERE =>
0 =>
expr_type => colref
base_expr => usr_estado
sub_tree =>
1 =>
expr_type => operator
base_expr => <>
sub_tree =>
2 =>
expr_type => const
base_expr => 2
sub_tree =>
ORDER =>
0 =>
type => pos
base_expr => 3
direction => ASC
1 =>
type => pos
base_expr => 1
direction => ASC
2 =>
type => pos
base_expr => 4
direction => ASC
That is correct however if you input the following MySQL query instead (
changes in red )
select usr_id, usr_login, case id_tipousuario when 1 then 'Usuario CVE' when 2
then concat('Usuario Vendedor -', codigovendedor, '-') when 3 then
concat('Usuario Vendedor Meson (', codigovendedor, ')') end tipousuario,
CONCAT( usr_nombres, ' ', usr_apellidos ) as nom_com, cod_local from usuarios
where usr_estado <> 2 order by 3, 1, 4
You get via print_r ( errors on red section at the bottom ) :
SELECT =>
0 =>
expr_type => colref
alias => `usr_id`
base_expr => usr_id
sub_tree =>
1 =>
expr_type => colref
alias => `usr_login`
base_expr => usr_login
sub_tree =>
2 =>
expr_type => expression
alias => `case id_tipousuario when 1 then 'Usuario CVE' when 2 then
concat('Usuario Vendedor -', codigovendedor, '-') when 3 then concat('Usuario
Vendedor Meson (', codigovendedor, ')')end tipousuario, CONCAT( usr_nombres, '
'`
base_expr => case id_tipousuario when 1 then 'Usuario CVE' when 2 then
concat('Usuario Vendedor -', codigovendedor, '-') when 3 then concat('Usuario
Vendedor Meson (', codigovendedor, ')')end tipousuario, CONCAT( usr_nombres, '
'
sub_tree =>
0 =>
expr_type => operator
base_expr => case
sub_tree =>
1 =>
expr_type => colref
base_expr => id_tipousuario
sub_tree =>
2 =>
expr_type => operator
base_expr => when
sub_tree =>
3 =>
expr_type => const
base_expr => 1
sub_tree =>
4 =>
expr_type => reserved
base_expr => THEN
sub_tree =>
5 =>
expr_type => const
base_expr => 'Usuario CVE'
sub_tree =>
6 =>
expr_type => operator
base_expr => when
sub_tree =>
7 =>
expr_type => const
base_expr => 2
sub_tree =>
8 =>
expr_type => reserved
base_expr => THEN
sub_tree =>
9 =>
expr_type => function
base_expr => CONCAT
sub_tree =>
10 =>
expr_type => expression
base_expr => ('Usuario Vendedor -', codigovendedor, '-')
sub_tree =>
0 =>
expr_type => const
base_expr => 'Usuario Vendedor -'
sub_tree =>
1 =>
expr_type => colref
base_expr => ,
sub_tree =>
2 =>
expr_type => colref
base_expr => codigovendedor
sub_tree =>
3 =>
expr_type => colref
base_expr => ,
sub_tree =>
4 =>
expr_type => const
base_expr => '-'
sub_tree =>
11 =>
expr_type => operator
base_expr => when
sub_tree =>
12 =>
expr_type => const
base_expr => 3
sub_tree =>
13 =>
expr_type => reserved
base_expr => THEN
sub_tree =>
14 =>
expr_type => function
base_expr => CONCAT
sub_tree =>
15 =>
expr_type => expression
base_expr => ('Usuario Vendedor Meson (', codigovendedor, ')')
sub_tree =>
0 =>
expr_type => const
base_expr => 'Usuario Vendedor Meson ('
sub_tree =>
1 =>
expr_type => colref
base_expr => ,
sub_tree =>
2 =>
expr_type => colref
base_expr => codigovendedor
sub_tree =>
3 =>
expr_type => colref
base_expr => ,
sub_tree =>
4 =>
expr_type => const
base_expr => ')'
sub_tree =>
16 =>
expr_type => colref
base_expr => end tipousuario, CONCAT( usr_nombres, '
sub_tree =>
17 =>
expr_type => const
base_expr => '
sub_tree =>
3 =>
expr_type => colref
alias => `nom_com`
base_expr => usr_apellidos
sub_tree =>
4 =>
expr_type => colref
alias => `cod_local`
base_expr => cod_local
sub_tree =>
FROM =>
0 =>
table => usuarios
alias => usuarios
join_type => JOIN
ref_type =>
ref_clause =>
base_expr =>
sub_tree =>
WHERE =>
0 =>
expr_type => colref
base_expr => usr_estado
sub_tree =>
1 =>
expr_type => operator
base_expr => <>
sub_tree =>
2 =>
expr_type => const
base_expr => 2
sub_tree =>
ORDER =>
0 =>
type => pos
base_expr => 3
direction => ASC
1 =>
type => pos
base_expr => 1
direction => ASC
2 =>
type => pos
base_expr => 4
direction => ASC
parse time simplest query:0.0099928379058838
RED IS :
expr_type => expression
base_expr => ('Usuario Vendedor Meson (', codigovendedor, ')')
sub_tree =>
0 =>
expr_type => const
base_expr => 'Usuario Vendedor Meson ('
sub_tree =>
1 =>
expr_type => colref
base_expr => ,
sub_tree =>
2 =>
expr_type => colref
base_expr => codigovendedor
sub_tree =>
3 =>
expr_type => colref
base_expr => ,
sub_tree =>
4 =>
expr_type => const
base_expr => ')'
sub_tree =>
16 =>
expr_type => colref
base_expr => end tipousuario, CONCAT( usr_nombres, '
sub_tree =>
17 =>
expr_type => const
base_expr => '
sub_tree =>
3 =>
expr_type => colref
alias => `nom_com`
base_expr => usr_apellidos
sub_tree =>
4 =>
expr_type => colref
alias => `cod_local`
base_expr => cod_local
sub_tree =>
What version of the product are you using? On what operating system?
svn trunk head revision windows and linux
Please provide any additional information below.