mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
WL#2486 - Natural/using join according to SQL:2003.
Post-review fixes according to Monty's review.
sql/item.h:
Unite all code that stores and restores the state of a name resolution context
into a class to represent the state, and methods to save/restore that
state.
sql/mysql_priv.h:
Reorder parameters so that length is after the name of a field,
and database is before table name.
sql/sql_acl.cc:
Reorder parameters so that length is after the name of a field,
and database is before table name.
sql/sql_base.cc:
* Reorder parameters so that length is after the name of a field,
and database is before table name.
* Added new method - Field_iterator_table_ref::get_natural_column_ref
to avoid unnecessary code when it is knwon that no new columns will
be created when accessing natural join columns.
sql/sql_insert.cc:
Unite all code that stores and restores the state of a name resolution context
into a class to represent the state, and methods to save/restore that
state.
sql/sql_lex.cc:
Removed obsolete comment.
sql/sql_lex.h:
Return error from push_contex() if there is no memory.
sql/sql_list.h:
Extended base_list_iterator, List_iterator, and List_iterator_fast with an
empty constructor, and init() methods, so that one doesn't have to construct
a new iterator object every time one needs to iterate over a new list.
sql/sql_parse.cc:
Moved common functionality from the parser into one function, and renamed
the function to better reflect what it does.
sql/sql_yacc.yy:
Moved common functionality from the parser into one function, and renamed
the function to better reflect what it does.
sql/table.cc:
* Extended base_list_iterator, List_iterator, and List_iterator_fast with an
empty constructor, and init() methods, so that one doesn't have to construct
a new iterator object every time one needs to iterate over a new list.
* Added new method Field_iterator_table_ref::get_natural_column_ref to be
used in cases when it is known for sure that no new columns should be
created.
sql/table.h:
- column_ref_it no longer allocated for each new list of columns
- new method get_natural_join_column for faster/simpler access
to natural join columns.
This commit is contained in:
@@ -266,10 +266,21 @@ protected:
|
||||
ls.elements= elm;
|
||||
}
|
||||
public:
|
||||
base_list_iterator(base_list &list_par)
|
||||
:list(&list_par), el(&list_par.first), prev(0), current(0)
|
||||
base_list_iterator()
|
||||
:list(0), el(0), prev(0), current(0)
|
||||
{}
|
||||
|
||||
base_list_iterator(base_list &list_par)
|
||||
{ init(list_par); }
|
||||
|
||||
inline void init(base_list &list_par)
|
||||
{
|
||||
list= &list_par;
|
||||
el= &list_par.first;
|
||||
prev= 0;
|
||||
current= 0;
|
||||
}
|
||||
|
||||
inline void *next(void)
|
||||
{
|
||||
prev=el;
|
||||
@@ -364,6 +375,8 @@ template <class T> class List_iterator :public base_list_iterator
|
||||
{
|
||||
public:
|
||||
List_iterator(List<T> &a) : base_list_iterator(a) {}
|
||||
List_iterator() : base_list_iterator() {}
|
||||
inline void init(List<T> &a) { base_list_iterator::init(a); }
|
||||
inline T* operator++(int) { return (T*) base_list_iterator::next(); }
|
||||
inline T *replace(T *a) { return (T*) base_list_iterator::replace(a); }
|
||||
inline T *replace(List<T> &a) { return (T*) base_list_iterator::replace(a); }
|
||||
@@ -385,6 +398,8 @@ protected:
|
||||
|
||||
public:
|
||||
inline List_iterator_fast(List<T> &a) : base_list_iterator(a) {}
|
||||
inline List_iterator_fast() : base_list_iterator() {}
|
||||
inline void init(List<T> &a) { base_list_iterator::init(a); }
|
||||
inline T* operator++(int) { return (T*) base_list_iterator::next_fast(); }
|
||||
inline void rewind(void) { base_list_iterator::rewind(); }
|
||||
void sublist(List<T> &list_arg, uint el_arg)
|
||||
|
||||
Reference in New Issue
Block a user