Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
45f098bf
Commit
45f098bf
authored
Nov 04, 2002
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
moved similar code to function
onversion with check
parent
bb49de5f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
95 additions
and
120 deletions
+95
-120
sql/item.cc
sql/item.cc
+2
-45
sql/item_sum.cc
sql/item_sum.cc
+1
-1
sql/sql_delete.cc
sql/sql_delete.cc
+1
-5
sql/sql_derived.cc
sql/sql_derived.cc
+2
-2
sql/sql_lex.cc
sql/sql_lex.cc
+54
-2
sql/sql_lex.h
sql/sql_lex.h
+5
-1
sql/sql_parse.cc
sql/sql_parse.cc
+2
-2
sql/sql_update.cc
sql/sql_update.cc
+1
-8
sql/sql_yacc.yy
sql/sql_yacc.yy
+27
-54
No files found.
sql/item.cc
View file @
45f098bf
...
...
@@ -463,27 +463,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
Mark all selects from resolved to 1 before select where was
found table as depended (of select where was found table)
*/
for
(
SELECT_LEX_NODE
*
s
=
thd
->
lex
.
current_select
;
s
&&
s
!=
last
;
s
=
s
->
outer_select
())
{
if
(
!
s
->
dependent
)
{
// Select is depended of outer select
s
->
dependent
=
1
;
if
(
s
->
linkage
!=
GLOBAL_OPTIONS_TYPE
)
{
//s is st_select_lex*
s
->
master_unit
()
->
dependent
=
1
;
//Tables will be reopened many times
for
(
TABLE_LIST
*
tbl
=
s
->
get_table_list
();
tbl
;
tbl
=
tbl
->
next
)
tbl
->
shared
=
1
;
}
}
}
thd
->
lex
.
current_select
->
mark_as_dependent
(
last
);
}
}
else
if
(
!
tmp
)
...
...
@@ -867,30 +847,7 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
else
{
depended_from
=
last
;
/*
Mark all selects from resolved to 1 before select where was
found table as depended (of select where was found table)
*/
for
(
SELECT_LEX_NODE
*
s
=
thd
->
lex
.
current_select
;
s
&&
s
!=
last
;
s
=
s
->
outer_select
())
if
(
!
s
->
dependent
)
{
// Select is depended of outer select
s
->
dependent
=
1
;
if
(
s
->
linkage
!=
GLOBAL_OPTIONS_TYPE
)
{
//s is st_select_lex*
s
->
master_unit
()
->
dependent
=
1
;
//Tables will be reopened many times
for
(
TABLE_LIST
*
tbl
=
s
->
get_table_list
();
tbl
;
tbl
=
tbl
->
next
)
tbl
->
shared
=
1
;
}
}
thd
->
lex
.
current_select
->
mark_as_dependent
(
last
);
}
}
else
if
(
!
ref
)
...
...
sql/item_sum.cc
View file @
45f098bf
...
...
@@ -943,7 +943,7 @@ bool Item_sum_count_distinct::fix_fields(THD *thd, TABLE_LIST *tables,
bool
Item_sum_count_distinct
::
setup
(
THD
*
thd
)
{
List
<
Item
>
list
;
SELECT_LEX
*
select_lex
=
(
SELECT_LEX
*
)
current_lex
->
current_select
;
SELECT_LEX
*
select_lex
=
current_lex
->
current_select
->
select_lex
()
;
if
(
select_lex
->
linkage
==
GLOBAL_OPTIONS_TYPE
)
return
1
;
...
...
sql/sql_delete.cc
View file @
45f098bf
...
...
@@ -285,11 +285,7 @@ multi_delete::initialize_tables(JOIN *join)
table
->
file
->
ref_length
,
MEM_STRIP_BUF_SIZE
);
}
/*
There are (SELECT_LEX*) pointer conversion here global union parameters
can't be used in multidelete
*/
init_ftfuncs
(
thd
,
(
SELECT_LEX
*
)
thd
->
lex
.
current_select
,
1
);
init_ftfuncs
(
thd
,
thd
->
lex
.
current_select
->
select_lex
(),
1
);
}
...
...
sql/sql_derived.cc
View file @
45f098bf
...
...
@@ -57,8 +57,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t,
{
if
(
cursor
->
derived
)
{
res
=
mysql_derived
(
thd
,
lex
,
(
SELECT_LEX_UNIT
*
)
cursor
->
derived
,
cursor
,
0
);
res
=
mysql_derived
(
thd
,
lex
,
(
SELECT_LEX_UNIT
*
)
cursor
->
derived
,
cursor
,
0
);
if
(
res
)
DBUG_RETURN
(
res
);
}
}
...
...
sql/sql_lex.cc
View file @
45f098bf
...
...
@@ -21,6 +21,7 @@
#include "item_create.h"
#include <m_ctype.h>
#include <hash.h>
#include <assert.h>
LEX_STRING
tmp_table_alias
=
{(
char
*
)
"tmp-table"
,
8
};
...
...
@@ -1043,17 +1044,23 @@ void st_select_lex_node::exclude()
*/
}
st_select_lex
*
st_select_lex_node
::
select_lex
()
{
DBUG_ENTER
(
"st_select_lex_node::select_lex (never should be called)"
);
DBUG_ASSERT
(
1
);
DBUG_RETURN
(
0
);
}
bool
st_select_lex_node
::
add_item_to_list
(
Item
*
item
)
{
return
1
;
}
bool
st_select_lex_node
::
add_group_to_list
(
Item
*
item
,
bool
asc
)
bool
st_select_lex_node
::
add_group_to_list
(
Item
*
item
,
bool
asc
)
{
return
1
;
}
//why compiler/linker do not allow make it inline?
bool
st_select_lex_node
::
add_order_to_list
(
Item
*
item
,
bool
asc
)
{
return
add_to_list
(
order_list
,
item
,
asc
);
...
...
@@ -1064,6 +1071,47 @@ bool st_select_lex_node::add_ftfunc_to_list(Item_func_match *func)
return
1
;
}
/*
st_select_lex_node::mark_as_dependent mark all st_select_lex struct from
this to 'last' as dependent
SYNOPSIS
last - pointer to last st_select_lex struct, before wich all
st_select_lex have to be marked as dependent
NOTE
'last' should be reachable from this st_select_lex_node
*/
void
st_select_lex_node
::
mark_as_dependent
(
SELECT_LEX
*
last
)
{
/*
Mark all selects from resolved to 1 before select where was
found table as depended (of select where was found table)
*/
for
(
SELECT_LEX_NODE
*
s
=
this
;
s
&&
s
!=
last
;
s
=
s
->
outer_select
())
if
(
!
s
->
dependent
)
{
// Select is dependent of outer select
s
->
dependent
=
1
;
if
(
s
->
linkage
!=
GLOBAL_OPTIONS_TYPE
)
{
//s is st_select_lex*
s
->
master_unit
()
->
dependent
=
1
;
//Tables will be reopened many times
for
(
TABLE_LIST
*
tbl
=
s
->
get_table_list
();
tbl
;
tbl
=
tbl
->
next
)
tbl
->
shared
=
1
;
}
}
}
bool
st_select_lex_node
::
set_braces
(
bool
value
)
{
return
1
;
}
bool
st_select_lex_node
::
inc_in_sum_expr
()
{
return
1
;
}
uint
st_select_lex_node
::
get_in_sum_expr
()
{
return
0
;
}
...
...
@@ -1168,6 +1216,10 @@ st_select_lex* st_select_lex_unit::outer_select()
return
(
st_select_lex
*
)
master
;
}
st_select_lex
*
st_select_lex
::
select_lex
()
{
return
this
;
}
bool
st_select_lex
::
add_item_to_list
(
Item
*
item
)
{
...
...
sql/sql_lex.h
View file @
45f098bf
...
...
@@ -217,6 +217,7 @@ class st_select_lex_node {
void
include_global
(
st_select_lex_node
**
plink
);
void
exclude
();
virtual
st_select_lex
*
select_lex
();
virtual
bool
add_item_to_list
(
Item
*
item
);
bool
add_order_to_list
(
Item
*
item
,
bool
asc
);
virtual
bool
add_group_to_list
(
Item
*
item
,
bool
asc
);
...
...
@@ -238,7 +239,8 @@ class st_select_lex_node {
thr_lock_type
flags
=
TL_UNLOCK
,
List
<
String
>
*
use_index
=
0
,
List
<
String
>
*
ignore_index
=
0
);
void
mark_as_dependent
(
st_select_lex
*
last
);
private:
void
fast_exclude
();
};
...
...
@@ -346,6 +348,8 @@ class st_select_lex: public st_select_lex_node
bool
set_braces
(
bool
value
);
bool
inc_in_sum_expr
();
uint
get_in_sum_expr
();
st_select_lex
*
select_lex
();
bool
add_item_to_list
(
Item
*
item
);
bool
add_group_to_list
(
Item
*
item
,
bool
asc
);
bool
add_ftfunc_to_list
(
Item_func_match
*
func
);
...
...
sql/sql_parse.cc
View file @
45f098bf
...
...
@@ -2927,7 +2927,7 @@ mysql_init_query(THD *thd)
void
mysql_init_select
(
LEX
*
lex
)
{
SELECT_LEX
*
select_lex
=
(
SELECT_LEX
*
)
lex
->
current_select
;
SELECT_LEX
*
select_lex
=
lex
->
current_select
->
select_lex
()
;
DBUG_ASSERT
(
select_lex
->
linkage
!=
GLOBAL_OPTIONS_TYPE
);
select_lex
->
init_select
();
select_lex
->
master_unit
()
->
select_limit
=
select_lex
->
select_limit
=
...
...
@@ -2964,7 +2964,7 @@ mysql_new_select(LEX *lex, bool move_down)
select_lex
->
master_unit
()
->
global_parameters
=
select_lex
;
DBUG_ASSERT
(
lex
->
current_select
->
linkage
!=
GLOBAL_OPTIONS_TYPE
);
select_lex
->
include_global
(
((
SELECT_LEX
*
)
lex
->
current_select
)
->
select_lex
->
include_global
(
lex
->
current_select
->
select_lex
(
)
->
next_select_in_list_addr
());
lex
->
current_select
=
select_lex
;
return
0
;
...
...
sql/sql_update.cc
View file @
45f098bf
...
...
@@ -508,14 +508,7 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
counter
++
;
}
}
/*
There are (SELECT_LEX*) pointer conversion here global union parameters
can't be used in multiupdate
TODO: check is thd->lex.current_select == &thd->lex.select_lex?
*/
init_ftfuncs
(
thd
,
(
SELECT_LEX
*
)
thd
->
lex
.
current_select
,
1
);
init_ftfuncs
(
thd
,
thd
->
lex
.
current_select
->
select_lex
(),
1
);
error
=
0
;
// Timestamps do not need to be restored, so far ...
DBUG_RETURN
(
0
);
}
...
...
sql/sql_yacc.yy
View file @
45f098bf
...
...
@@ -2215,11 +2215,7 @@ in_sum_expr:
}
expr
{
/*
There are (SELECT_LEX *) pointer conversionis here, because
global union parameters checked in 'increment' above
*/
((SELECT_LEX *)Select)->in_sum_expr--;
Select->select_lex()->in_sum_expr--;
$$=$2;
};
...
...
@@ -2296,12 +2292,7 @@ join_table_list:
{ add_join_on($4,$6); $$=$4; }
| join_table_list INNER_SYM JOIN_SYM join_table_list
{
/*
There are (SELECT_LEX *) pointer conversionis here and
following joins, because it is impossible FROM clause in
global union parameters
*/
SELECT_LEX *sel= (SELECT_LEX *)Select;
SELECT_LEX *sel= Select->select_lex();
sel->db1=$1->db; sel->table1=$1->alias;
sel->db2=$4->db; sel->table2=$4->alias;
}
...
...
@@ -2311,7 +2302,7 @@ join_table_list:
{ add_join_on($5,$7); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; }
| join_table_list LEFT opt_outer JOIN_SYM join_table_list
{
SELECT_LEX *sel=
(SELECT_LEX *)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
sel->db1=$1->db; sel->table1=$1->alias;
sel->db2=$5->db; sel->table2=$5->alias;
}
...
...
@@ -2323,7 +2314,7 @@ join_table_list:
{ add_join_on($1,$7); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
| join_table_list RIGHT opt_outer JOIN_SYM join_table_list
{
SELECT_LEX *sel=
(SELECT_LEX *)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
sel->db1=$1->db; sel->table1=$1->alias;
sel->db2=$5->db; sel->table2=$5->alias;
}
...
...
@@ -2341,7 +2332,7 @@ normal_join:
join_table:
{
SELECT_LEX *sel=
(SELECT_LEX *)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
sel->use_index_ptr=sel->ignore_index_ptr=0;
}
table_ident opt_table_alias opt_key_definition
...
...
@@ -2388,45 +2379,40 @@ opt_key_definition:
/* empty */ {}
| USE_SYM key_usage_list
{
/*
There are (SELECT_LEX *) pointer conversionis here and
following key definitions, because
key definitions is impossible in union global parameters
*/
SELECT_LEX *sel= (SELECT_LEX*)Select;
SELECT_LEX *sel= Select->select_lex();
sel->use_index= *$2;
sel->use_index_ptr= &sel->use_index;
}
| IGNORE_SYM key_usage_list
{
SELECT_LEX *sel=
(SELECT_LEX*)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
sel->ignore_index= *$2;
sel->ignore_index_ptr= &sel->ignore_index;
};
key_usage_list:
key_or_index {
((SELECT_LEX *)Select
)->interval_list.empty(); }
key_or_index {
Select->select_lex(
)->interval_list.empty(); }
'(' key_usage_list2 ')'
{ $$= &
((SELECT_LEX *)Select
)->interval_list; };
{ $$= &
Select->select_lex(
)->interval_list; };
key_usage_list2:
key_usage_list2 ',' ident
{
((SELECT_LEX *)Select
)->
{
Select->select_lex(
)->
interval_list.push_back(new String((const char*) $3.str, $3.length,
default_charset_info)); }
| ident
{
((SELECT_LEX *)Select
)->
{
Select->select_lex(
)->
interval_list.push_back(new String((const char*) $1.str, $1.length,
default_charset_info)); }
| PRIMARY_SYM
{
((SELECT_LEX *)Select
)->
{
Select->select_lex(
)->
interval_list.push_back(new String("PRIMARY", 7,
default_charset_info)); };
using_list:
ident
{
SELECT_LEX *sel=
(SELECT_LEX *)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
if (!($$= new Item_func_eq(new Item_field(sel->db1, sel->table1,
$1.str),
new Item_field(sel->db2, sel->table2,
...
...
@@ -2435,7 +2421,7 @@ using_list:
}
| using_list ',' ident
{
SELECT_LEX *sel=
(SELECT_LEX *)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
if (!($$= new Item_cond_and(new Item_func_eq(new Item_field(sel->db1,sel->table1,$3.str), new Item_field(sel->db2,sel->table2,$3.str)), $1)))
YYABORT;
};
...
...
@@ -2467,22 +2453,14 @@ opt_table_alias:
where_clause:
/*
There are (SELECT_LEX *) pointer conversionis here, because
it is impossible where_clause in global union parameters
*/
/* empty */ { ((SELECT_LEX *)Select)->where= 0; }
| WHERE expr { ((SELECT_LEX *)Select)->where= $2; };
/* empty */ { Select->select_lex()->where= 0; }
| WHERE expr { Select->select_lex()->where= $2; };
having_clause:
/*
There are (SELECT_LEX *) pointer conversionis here, because
it is impossible having_clause in global union parameters
*/
/* empty */
| HAVING {
((SELECT_LEX *)Select
)->create_refs= 1; } expr
| HAVING {
Select->select_lex(
)->create_refs= 1; } expr
{
SELECT_LEX *sel=
(SELECT_LEX*)Select
;
SELECT_LEX *sel=
Select->select_lex()
;
sel->having= $3; sel->create_refs=0;
};
...
...
@@ -2517,7 +2495,7 @@ olap_opt:
"global union parameters");
YYABORT;
}
((SELECT_LEX *)lex->current_select
)->olap= CUBE_TYPE;
lex->current_select->select_lex(
)->olap= CUBE_TYPE;
net_printf(lex->thd, ER_NOT_SUPPORTED_YET, "CUBE");
YYABORT; /* To be deleted in 4.1 */
}
...
...
@@ -2531,7 +2509,7 @@ olap_opt:
"global union parameters");
YYABORT;
}
((SELECT_LEX *)lex->current_select
)->olap= ROLLUP_TYPE;
lex->current_select->select_lex(
)->olap= ROLLUP_TYPE;
net_printf(lex->thd, ER_NOT_SUPPORTED_YET, "ROLLUP");
YYABORT; /* To be deleted in 4.1 */
}
...
...
@@ -2555,7 +2533,7 @@ order_clause:
YYABORT;
}
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
((SELECT_LEX*)lex->current_select
)->olap !=
lex->current_select->select_lex(
)->olap !=
UNSPECIFIED_OLAP_TYPE)
{
net_printf(lex->thd, ER_WRONG_USAGE,
...
...
@@ -2583,7 +2561,7 @@ limit_clause:
{
LEX *lex= Lex;
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
((SELECT_LEX*)lex->current_select
)->olap !=
lex->current_select->select_lex(
)->olap !=
UNSPECIFIED_OLAP_TYPE)
{
net_printf(lex->thd, ER_WRONG_USAGE, "CUBE/ROLLUP",
...
...
@@ -2598,7 +2576,7 @@ limit_clause:
{
LEX *lex=Lex;
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
((SELECT_LEX*)lex->current_select
)->olap !=
lex->current_select->select_lex(
)->olap !=
UNSPECIFIED_OLAP_TYPE)
{
net_printf(lex->thd, ER_WRONG_USAGE, "CUBE/ROLLUP",
...
...
@@ -4005,12 +3983,7 @@ opt_table:
'*'
{
LEX *lex= Lex;
/*
There are (SELECT_LEX *) pointer conversionis here and following
opt_table, because it is impossible GRANT clause in global
union parameters
*/
((SELECT_LEX *)lex->current_select)->db= lex->thd->db;
lex->current_select->select_lex()->db= lex->thd->db;
if (lex->grant == GLOBAL_ACLS)
lex->grant = DB_ACLS & ~GRANT_ACL;
else if (lex->columns.elements)
...
...
@@ -4022,7 +3995,7 @@ opt_table:
| ident '.' '*'
{
LEX *lex= Lex;
((SELECT_LEX *)lex->current_select
)->db = $1.str;
lex->current_select->select_lex(
)->db = $1.str;
if (lex->grant == GLOBAL_ACLS)
lex->grant = DB_ACLS & ~GRANT_ACL;
else if (lex->columns.elements)
...
...
@@ -4034,7 +4007,7 @@ opt_table:
| '*' '.' '*'
{
LEX *lex= Lex;
((SELECT_LEX *)lex->current_select
)->db = NULL;
lex->current_select->select_lex(
)->db = NULL;
if (lex->grant == GLOBAL_ACLS)
lex->grant= GLOBAL_ACLS & ~GRANT_ACL;
else if (lex->columns.elements)
...
...
@@ -4227,7 +4200,7 @@ optional_order_or_limit:
send_error(lex->thd, ER_SYNTAX_ERROR);
YYABORT;
}
SELECT_LEX *sel=
(SELECT_LEX *)lex->current_select
;
SELECT_LEX *sel=
lex->current_select->select_lex()
;
sel->master_unit()->global_parameters=
sel->master_unit();
lex->current_select= sel->master_unit();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment