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
5a14bb2a
Commit
5a14bb2a
authored
Sep 21, 2001
by
monty@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Integrated table->ref_primary_key into table->part_of_key
Fixed bug in UNION
parent
ea0523bd
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
164 additions
and
124 deletions
+164
-124
client/mysqlbinlog.cc
client/mysqlbinlog.cc
+3
-2
heap/hp_write.c
heap/hp_write.c
+1
-0
myisam/myisampack.c
myisam/myisampack.c
+1
-1
mysql-test/mysql-test-run.sh
mysql-test/mysql-test-run.sh
+6
-5
mysql-test/r/union.result
mysql-test/r/union.result
+12
-0
mysql-test/t/union.test
mysql-test/t/union.test
+3
-0
sql/Makefile.am
sql/Makefile.am
+1
-1
sql/item.cc
sql/item.cc
+9
-1
sql/log_event.cc
sql/log_event.cc
+74
-69
sql/log_event.h
sql/log_event.h
+6
-4
sql/mysql_embed.h
sql/mysql_embed.h
+26
-0
sql/mysql_priv.h
sql/mysql_priv.h
+2
-1
sql/opt_sum.cc
sql/opt_sum.cc
+2
-2
sql/slave.cc
sql/slave.cc
+2
-1
sql/sql_base.cc
sql/sql_base.cc
+8
-31
sql/sql_union.cc
sql/sql_union.cc
+2
-2
sql/table.cc
sql/table.cc
+5
-3
sql/table.h
sql/table.h
+1
-1
No files found.
client/mysqlbinlog.cc
View file @
5a14bb2a
...
...
@@ -321,6 +321,7 @@ static void dump_remote_log_entries(const char* logname)
for
(;;)
{
const
char
*
error
;
len
=
net_safe_read
(
mysql
);
if
(
len
==
packet_error
)
die
(
"Error reading packet from server: %s"
,
mysql_error
(
mysql
));
...
...
@@ -330,8 +331,8 @@ static void dump_remote_log_entries(const char* logname)
len
,
net
->
read_pos
[
5
]));
Log_event
*
ev
=
Log_event
::
read_log_event
(
(
const
char
*
)
net
->
read_pos
+
1
,
len
-
1
);
if
(
ev
)
len
-
1
,
&
error
);
if
(
ev
)
{
ev
->
print
(
result_file
,
short_form
,
last_db
);
if
(
ev
->
get_type_code
()
==
LOAD_EVENT
)
...
...
heap/hp_write.c
View file @
5a14bb2a
...
...
@@ -62,6 +62,7 @@ int heap_write(HP_INFO *info, const byte *record)
info
->
update
|=
HA_STATE_AKTIV
;
DBUG_RETURN
(
0
);
err:
DBUG_PRINT
(
"info"
,(
"Duplicate key: %d"
,
key
));
info
->
errkey
=
key
;
do
{
...
...
myisam/myisampack.c
View file @
5a14bb2a
...
...
@@ -284,7 +284,7 @@ static void usage(void)
-?, --help Display this help and exit.
\n
\
-V, --version Output version information and exit."
);
print_defaults
(
"my"
,
load_default_groups
);
}
;
}
/* reads options */
/* Initiates DEBUG - but no debugging here ! */
...
...
mysql-test/mysql-test-run.sh
View file @
5a14bb2a
...
...
@@ -269,8 +269,7 @@ DASH72=`$ECHO '-----------------------------------------------------------------
# on binary, use what is installed
if
[
x
$SOURCE_DIST
=
x1
]
;
then
MYSQLD
=
"
$BASEDIR
/sql/mysqld"
if
[
-e
"
$BASEDIR
/client/.libs/mysqltest"
]
;
then
[
-e
"
$BASEDIR
/client/.libs/lt-mysqltest"
]
||
$BASEDIR
/client/mysqltest
-V
if
[
-f
"
$BASEDIR
/client/.libs/lt-mysqltest"
]
;
then
MYSQL_TEST
=
"
$BASEDIR
/client/.libs/lt-mysqltest"
else
MYSQL_TEST
=
"
$BASEDIR
/client/mysqltest"
...
...
@@ -502,7 +501,7 @@ start_master()
#start master
if
[
-z
"
$DO_BENCH
"
]
then
master_args
=
"--no-defaults --log-bin=master-bin
\
master_args
=
"--no-defaults --log-bin=
$MYSQL_TEST_DIR
/var/log/
master-bin
\
--server-id=1
\
--basedir=
$MY_BASEDIR
\
--port=
$MASTER_MYPORT
\
...
...
@@ -519,7 +518,8 @@ start_master()
$SMALL_SERVER
\
$EXTRA_MASTER_OPT
$EXTRA_MASTER_MYSQLD_OPT
"
else
master_args
=
"--no-defaults --log-bin=master-bin --server-id=1
\
master_args
=
"--no-defaults --log-bin=
$MYSQL_TEST_DIR
/var/log/master-bin
\
--server-id=1
\
--basedir=
$MY_BASEDIR
\
--port=
$MASTER_MYPORT
\
--datadir=
$MASTER_MYDDIR
\
...
...
@@ -576,7 +576,8 @@ start_slave()
$RM
-f
$SLAVE_MYDDIR
/log.
*
slave_args
=
"--no-defaults
$master_info
\
--exit-info=256
\
--log-bin=slave-bin --log-slave-updates
\
--log-bin=
$MYSQL_TEST_DIR
/var/log/slave-bin
--log-slave-updates
\
--basedir=
$MY_BASEDIR
\
--datadir=
$SLAVE_MYDDIR
\
--pid-file=
$SLAVE_MYPID
\
...
...
mysql-test/r/union.result
View file @
5a14bb2a
...
...
@@ -70,3 +70,15 @@ pseudo pseudo1 same
joce tsestset 1
joce testtt 1
dekad joce 1
pseudo1
testtt
tsestset
dekad
pseudo1
testtt
tsestset
dekad
pseudo1
testtt
tsestset
1
mysql-test/t/union.test
View file @
5a14bb2a
...
...
@@ -62,4 +62,7 @@ INSERT INTO t1 (pseudo,pseudo1,same) VALUES ('joce', 'testtt', 1),('joce', 'tses
SELECT
pseudo
FROM
t1
WHERE
pseudo1
=
'joce'
UNION
SELECT
pseudo
FROM
t1
WHERE
pseudo
=
'joce'
;
SELECT
pseudo1
FROM
t1
WHERE
pseudo1
=
'joce'
UNION
SELECT
pseudo1
FROM
t1
WHERE
pseudo
=
'joce'
;
SELECT
*
FROM
t1
WHERE
pseudo1
=
'joce'
UNION
SELECT
*
FROM
t1
WHERE
pseudo
=
'joce'
order
by
pseudo
desc
;
SELECT
pseudo1
FROM
t1
WHERE
pseudo
=
'joce'
UNION
SELECT
pseudo
FROM
t1
WHERE
pseudo1
=
'joce'
;
SELECT
pseudo1
FROM
t1
WHERE
pseudo
=
'joce'
UNION
ALL
SELECT
pseudo
FROM
t1
WHERE
pseudo1
=
'joce'
;
SELECT
pseudo1
FROM
t1
WHERE
pseudo
=
'joce'
UNION
SELECT
1
;
drop
table
t1
;
sql/Makefile.am
View file @
5a14bb2a
...
...
@@ -57,7 +57,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
sql_select.h structs.h table.h sql_udf.h hash_filo.h
\
lex.h lex_symbol.h sql_acl.h sql_crypt.h md5.h
\
log_event.h mini_client.h sql_repl.h slave.h
\
stacktrace.h sql_sort.h
stacktrace.h sql_sort.h
mysql_embed.h
mysqld_SOURCES
=
sql_lex.cc sql_handler.cc
\
item.cc item_sum.cc item_buff.cc item_func.cc
\
item_cmpfunc.cc item_strfunc.cc item_timefunc.cc
\
...
...
sql/item.cc
View file @
5a14bb2a
...
...
@@ -298,13 +298,21 @@ bool Item::fix_fields(THD *thd,
bool
Item_field
::
fix_fields
(
THD
*
thd
,
TABLE_LIST
*
tables
)
{
if
(
!
field
)
if
(
!
field
)
// If field is not checked
{
Field
*
tmp
;
if
(
!
(
tmp
=
find_field_in_tables
(
thd
,
this
,
tables
)))
return
1
;
set_field
(
tmp
);
}
else
if
(
thd
&&
thd
->
set_query_id
&&
field
->
query_id
!=
thd
->
query_id
)
{
/* We only come here in unions */
TABLE
*
table
=
field
->
table
;
field
->
query_id
=
thd
->
query_id
;
table
->
used_fields
++
;
table
->
used_keys
&=
field
->
part_of_key
;
}
return
0
;
}
...
...
sql/log_event.cc
View file @
5a14bb2a
...
...
@@ -469,7 +469,7 @@ Log_event* Log_event::read_log_event(IO_CACHE* file)
error
=
"read error"
;
goto
err
;
}
if
((
res
=
read_log_event
(
buf
,
data_len
)))
if
((
res
=
read_log_event
(
buf
,
data_len
,
&
error
)))
res
->
register_temp_buf
(
buf
);
err:
UNLOCK_MUTEX
;
...
...
@@ -481,10 +481,11 @@ Log_event* Log_event::read_log_event(IO_CACHE* file)
return
res
;
}
Log_event
*
Log_event
::
read_log_event
(
const
char
*
buf
,
int
event_len
)
Log_event
*
Log_event
::
read_log_event
(
const
char
*
buf
,
int
event_len
,
const
char
**
error
)
{
if
(
event_len
<
EVENT_LEN_OFFSET
||
(
uint
)
event_len
!=
uint4korr
(
buf
+
EVENT_LEN_OFFSET
))
if
(
event_len
<
EVENT_LEN_OFFSET
||
(
uint
)
event_len
!=
uint4korr
(
buf
+
EVENT_LEN_OFFSET
))
return
NULL
;
// general sanity check - will fail on a partial read
Log_event
*
ev
=
NULL
;
...
...
@@ -531,6 +532,7 @@ Log_event* Log_event::read_log_event(const char* buf, int event_len)
if
(
!
ev
)
return
0
;
if
(
!
ev
->
is_valid
())
{
*
error
=
"Found invalid event in binary log"
;
delete
ev
;
return
0
;
}
...
...
@@ -812,80 +814,92 @@ int Load_log_event::write_data_body(IO_CACHE* file)
if
(
sql_ex
.
write_data
(
file
))
return
1
;
if
(
num_fields
&&
fields
&&
field_lens
)
{
if
(
my_b_write
(
file
,
(
byte
*
)
field_lens
,
num_fields
)
||
my_b_write
(
file
,
(
byte
*
)
fields
,
field_block_len
))
if
(
my_b_write
(
file
,
(
byte
*
)
field_lens
,
num_fields
)
||
my_b_write
(
file
,
(
byte
*
)
fields
,
field_block_len
))
return
1
;
}
return
my_b_write
(
file
,
(
byte
*
)
table_name
,
table_name_len
+
1
)
||
my_b_write
(
file
,
(
byte
*
)
db
,
db_len
+
1
)
||
my_b_write
(
file
,
(
byte
*
)
fname
,
fname_len
);
return
(
my_b_write
(
file
,
(
byte
*
)
table_name
,
table_name_len
+
1
)
||
my_b_write
(
file
,
(
byte
*
)
db
,
db_len
+
1
)
||
my_b_write
(
file
,
(
byte
*
)
fname
,
fname_len
)
);
}
#define WRITE_STR(name) my_b_write(file,(byte*)&name ## _len, 1) || \
my_b_write(file,(byte*)name,name ## _len)
#define OLD_EX_INIT(name) old_ex.##name = *name
static
bool
write_str
(
IO_CACHE
*
file
,
char
*
str
,
byte
length
)
{
return
(
my_b_write
(
file
,
&
length
,
1
)
||
my_b_write
(
file
,
(
byte
*
)
str
,
(
int
)
length
));
}
int
sql_ex_info
::
write_data
(
IO_CACHE
*
file
)
{
if
(
new_format
())
{
return
WRITE_STR
(
field_term
)
||
WRITE_STR
(
enclosed
)
||
WRITE_STR
(
line_term
)
||
WRITE_STR
(
line_start
)
||
WRITE_STR
(
escaped
)
||
my_b_write
(
file
,(
byte
*
)
&
opt_flags
,
1
);
return
(
write_str
(
file
,
field_term
,
field_term_len
)
||
write_str
(
file
,
enclosed
,
enclosed_len
)
||
write_str
(
file
,
line_term
,
line_term_len
)
||
write_str
(
file
,
line_start
,
line_start_len
)
||
write_str
(
file
,
escaped
,
escaped_len
)
||
my_b_write
(
file
,(
byte
*
)
&
opt_flags
,
1
));
}
else
{
old_sql_ex
old_ex
;
OLD_EX_INIT
(
field_term
)
;
OLD_EX_INIT
(
enclosed
)
;
OLD_EX_INIT
(
line_term
)
;
OLD_EX_INIT
(
line_start
)
;
OLD_EX_INIT
(
escaped
)
;
old_ex
.
opt_flags
=
opt_flags
;
old_ex
.
empty_flags
=
empty_flags
;
return
my_b_write
(
file
,
(
byte
*
)
&
old_ex
,
sizeof
(
old_ex
));
old_ex
.
field_term
=
*
field_term
;
old_ex
.
enclosed
=
*
enclosed
;
old_ex
.
line_term
=
*
line_term
;
old_ex
.
line_start
=
*
line_start
;
old_ex
.
escaped
=
*
escaped
;
old_ex
.
opt_flags
=
opt_flags
;
old_ex
.
empty_flags
=
empty_flags
;
return
my_b_write
(
file
,
(
byte
*
)
&
old_ex
,
sizeof
(
old_ex
));
}
}
#define READ_STR(name) name ## _len = *buf++;\
if (buf >= buf_end) return 0;\
name = buf; \
buf += name ## _len; \
if (buf >= buf_end) return 0;
#define READ_OLD_STR(name) name ## _len = 1; \
name = buf++; \
if (buf >= buf_end) return 0;
#define FIX_OLD_LEN(name,NAME) if (empty_flags & NAME ## _EMPTY) \
name ## _len = 0
static
inline
int
read_str
(
char
*
&
buf
,
char
*
buf_end
,
char
*
&
str
,
uint8
&
len
)
{
if
(
buf
+
(
uint
)
(
uchar
)
*
buf
>=
buf_end
)
return
1
;
len
=
(
uint8
)
*
buf
;
str
=
buf
+
1
;
buf
+=
(
uint
)
len
+
1
;
return
0
;
}
char
*
sql_ex_info
::
init
(
char
*
buf
,
char
*
buf_end
,
bool
use_new_format
)
{
cached_new_format
=
use_new_format
;
if
(
use_new_format
)
{
READ_STR
(
field_term
);
READ_STR
(
enclosed
);
READ_STR
(
line_term
);
READ_STR
(
line_start
);
READ_STR
(
escaped
);
empty_flags
=
0
;
if
(
read_str
(
buf
,
buf_end
,
field_term
,
field_term_len
)
||
read_str
(
buf
,
buf_end
,
enclosed
,
enclosed_len
)
||
read_str
(
buf
,
buf_end
,
line_term
,
line_term_len
)
||
read_str
(
buf
,
buf_end
,
line_start
,
line_start_len
)
||
read_str
(
buf
,
buf_end
,
escaped
,
escaped_len
))
return
0
;
opt_flags
=
*
buf
++
;
}
else
{
READ_OLD_STR
(
field_term
);
READ_OLD_STR
(
enclosed
);
READ_OLD_STR
(
line_term
);
READ_OLD_STR
(
line_start
);
READ_OLD_STR
(
escaped
);
field_term_len
=
enclosed_len
=
line_term_len
=
line_start_len
=
escaped_len
=
1
;
*
field_term
=*
buf
++
;
*
enclosed
=
*
buf
++
;
*
line_term
=
*
buf
++
;
*
line_start
=*
buf
++
;
*
escaped
=
*
buf
++
;
opt_flags
=
*
buf
++
;
empty_flags
=
*
buf
++
;
FIX_OLD_LEN
(
field_term
,
FIELD_TERM
);
FIX_OLD_LEN
(
enclosed
,
ENCLOSED
);
FIX_OLD_LEN
(
line_term
,
LINE_TERM
);
FIX_OLD_LEN
(
line_start
,
LINE_START
);
FIX_OLD_LEN
(
escaped
,
ESCAPED
);
empty_flags
=*
buf
++
;
if
(
empty_flags
&
FIELD_TERM_EMPTY
)
field_term_len
=
0
;
if
(
empty_flags
&
ENCLOSED_EMPTY
)
enclosed_len
=
0
;
if
(
empty_flags
&
LINE_TERM_EMPTY
)
line_term_len
=
0
;
if
(
empty_flags
&
LINE_START_EMPTY
)
line_start_len
=
0
;
if
(
empty_flags
&
ESCAPED_EMPTY
)
escaped_len
=
0
;
}
return
buf
;
}
...
...
@@ -1271,6 +1285,8 @@ Create_file_log_event::Create_file_log_event(const char* buf, int len):
block
=
(
char
*
)
buf
+
block_offset
;
block_len
=
len
-
block_offset
;
}
#ifdef MYSQL_CLIENT
void
Create_file_log_event
::
print
(
FILE
*
file
,
bool
short_form
,
char
*
last_db
)
...
...
@@ -1553,20 +1569,16 @@ int Load_log_event::exec_event(NET* net, struct st_master_info* mi)
handle_dup
=
DUP_REPLACE
;
sql_exchange
ex
((
char
*
)
fname
,
sql_ex
.
opt_flags
&&
DUMPFILE_FLAG
);
#define SET_EX(name) String name(sql_ex.name,sql_ex.name ## _len);\
ex.name = &name;
SET_EX
(
field_term
);
SET_EX
(
enclosed
);
SET_EX
(
line_term
);
SET_EX
(
line_start
);
SET_EX
(
escaped
);
String
field_term
(
sql_ex
.
field_term
,
sql_ex
.
field_term_len
);
String
enclosed
(
sql_ex
.
enclosed
,
sql_ex
.
enclosed_len
);
String
line_term
(
sql_ex
.
line_term
,
sql_ex
.
line_term_len
);
String
line_start
(
sql_ex
.
line_start
,
sql_ex
.
line_start_len
);
String
escaped
(
sql_ex
.
escaped
,
sql_ex
.
escaped_len
);
ex
.
opt_enclosed
=
(
sql_ex
.
opt_flags
&
OPT_ENCLOSED_FLAG
);
if
(
sql_ex
.
empty_flags
&
FIELD_TERM_EMPTY
)
if
(
sql_ex
.
empty_flags
&
FIELD_TERM_EMPTY
)
ex
.
field_term
->
length
(
0
);
ex
.
skip_lines
=
skip_lines
;
List
<
Item
>
fields
;
set_fields
(
fields
);
...
...
@@ -1862,10 +1874,3 @@ int Execute_load_log_event::exec_event(struct st_master_info* mi)
#endif
sql/log_event.h
View file @
5a14bb2a
...
...
@@ -272,7 +272,8 @@ class Log_event
#else // avoid having to link mysqlbinlog against libpthread
static
Log_event
*
read_log_event
(
IO_CACHE
*
file
);
#endif
static
Log_event
*
read_log_event
(
const
char
*
buf
,
int
event_len
);
static
Log_event
*
read_log_event
(
const
char
*
buf
,
int
event_len
,
const
char
**
error
);
const
char
*
get_type_str
();
#ifndef MYSQL_CLIENT
...
...
@@ -567,9 +568,10 @@ class Create_file_log_event: public Load_log_event
uint
file_id
;
#ifndef MYSQL_CLIENT
Create_file_log_event
(
THD
*
thd
,
sql_exchange
*
ex
,
const
char
*
db_arg
,
const
char
*
table_name_arg
,
List
<
Item
>&
fields_arg
,
enum
enum_duplicates
handle_dup
,
char
*
block_arg
,
uint
block_len_arg
);
const
char
*
table_name_arg
,
List
<
Item
>&
fields_arg
,
enum
enum_duplicates
handle_dup
,
char
*
block_arg
,
uint
block_len_arg
);
#endif
Create_file_log_event
(
const
char
*
buf
,
int
event_len
);
...
...
sql/mysql_embed.h
0 → 100644
View file @
5a14bb2a
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* Defines that are unique to the embedded version of MySQL */
#ifdef EMBEDDED_LIBRARY
/* Things we don't need in the embedded version of MySQL */
#undef HAVE_PSTACK
/* No stacktrace */
#undef HAVE_DLOPEN
/* No udf functions */
#endif
/* EMBEDDED_LIBRARY */
sql/mysql_priv.h
View file @
5a14bb2a
...
...
@@ -18,9 +18,10 @@
#define _MYSQL_PRIV_H
#include <my_global.h>
#include "mysql_embed.h"
#include <my_sys.h>
#include <m_string.h>
#include
"mysql_version.h"
#include
<mysql_version.h>
#include <hash.h>
#include <signal.h>
#include <thr_lock.h>
...
...
sql/opt_sum.cc
View file @
5a14bb2a
...
...
@@ -305,7 +305,7 @@ static bool find_range_key(TABLE_REF *ref, Field* field, COND *cond)
key
>>=
1
;
ref
->
key_length
=
0
;
ref
->
key
=
idx
;
if
(
field
->
part_of_key
&
((
table
_map
)
1
<<
idx
))
if
(
field
->
part_of_key
&
((
key
_map
)
1
<<
idx
))
{
table
->
key_read
=
1
;
table
->
file
->
extra
(
HA_EXTRA_KEYREAD
);
...
...
@@ -350,7 +350,7 @@ static bool find_range_key(TABLE_REF *ref, Field* field, COND *cond)
{
ref
->
key_length
=
(
uint
)
(
key_ptr
-
ref
->
key_buff
);
ref
->
key
=
idx
;
if
(
field
->
part_of_key
&
((
table
_map
)
1
<<
idx
))
if
(
field
->
part_of_key
&
((
key
_map
)
1
<<
idx
))
{
table
->
key_read
=
1
;
table
->
file
->
extra
(
HA_EXTRA_KEYREAD
);
...
...
sql/slave.cc
View file @
5a14bb2a
...
...
@@ -934,8 +934,9 @@ point. If you are sure that your master is ok, run this query manually on the\
static
int
exec_event
(
THD
*
thd
,
NET
*
net
,
MASTER_INFO
*
mi
,
int
event_len
)
{
const
char
*
error_msg
;
Log_event
*
ev
=
Log_event
::
read_log_event
((
const
char
*
)
net
->
read_pos
+
1
,
event_len
);
event_len
,
&
error_msg
);
if
(
ev
)
{
int
type_code
=
ev
->
get_type_code
();
...
...
sql/sql_base.cc
View file @
5a14bb2a
...
...
@@ -160,7 +160,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *wild)
if
(
table
)
continue
;
if
(
!
(
*
start_list
=
(
OPEN_TABLE_LIST
*
)
sql_alloc
(
sizeof
(
OPEN_TABLE_LIST
)
+
entry
->
key_length
)))
sql_alloc
(
sizeof
(
*
start_list
)
+
entry
->
key_length
)))
{
open_list
=
0
;
// Out of memory
break
;
...
...
@@ -172,6 +172,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *wild)
(
*
start_list
)
->
locked
=
entry
->
locked_by_name
?
1
:
0
;
start_list
=
&
(
*
start_list
)
->
next
;
}
*
start_list
=
0
;
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
DBUG_RETURN
(
open_list
);
}
...
...
@@ -1579,13 +1580,7 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
{
field
->
query_id
=
thd
->
query_id
;
table
->
used_fields
++
;
if
(
field
->
part_of_key
)
{
if
(
!
(
field
->
part_of_key
&
table
->
ref_primary_key
))
table
->
used_keys
&=
field
->
part_of_key
;
}
else
table
->
used_keys
=
0
;
table
->
used_keys
&=
field
->
part_of_key
;
}
else
thd
->
dupp_field
=
field
;
...
...
@@ -1655,7 +1650,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables)
for
(;
tables
;
tables
=
tables
->
next
)
{
Field
*
field
=
find_field_in_table
(
thd
,
tables
->
table
,
name
,
length
,
grant_option
&&
!
thd
->
master_access
,
allow_rowid
);
grant_option
&&
!
thd
->
master_access
,
allow_rowid
);
if
(
field
)
{
if
(
field
==
WRONG_GRANT
)
...
...
@@ -1879,14 +1875,7 @@ insert_fields(THD *thd,TABLE_LIST *tables, const char *db_name,
if
(
field
->
query_id
==
thd
->
query_id
)
thd
->
dupp_field
=
field
;
field
->
query_id
=
thd
->
query_id
;
if
(
field
->
part_of_key
)
{
if
(
!
(
field
->
part_of_key
&
table
->
ref_primary_key
))
table
->
used_keys
&=
field
->
part_of_key
;
}
else
table
->
used_keys
=
0
;
table
->
used_keys
&=
field
->
part_of_key
;
}
/* All fields are used */
table
->
used_fields
=
table
->
fields
;
...
...
@@ -1967,20 +1956,8 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds)
/* Mark field used for table cache */
t1
->
field
[
i
]
->
query_id
=
t2
->
field
[
j
]
->
query_id
=
thd
->
query_id
;
cond_and
->
list
.
push_back
(
tmp
);
if
((
tmp_map
=
t1
->
field
[
i
]
->
part_of_key
))
{
if
(
!
(
tmp_map
&
t1
->
ref_primary_key
))
t1
->
used_keys
&=
tmp_map
;
}
else
t1
->
used_keys
=
0
;
if
((
tmp_map
=
t2
->
field
[
j
]
->
part_of_key
))
{
if
(
!
(
tmp_map
&
t2
->
ref_primary_key
))
t2
->
used_keys
&=
tmp_map
;
}
else
t2
->
used_keys
=
0
;
t1
->
used_keys
&=
t1
->
field
[
i
]
->
part_of_key
;
t2
->
used_keys
&=
t2
->
field
[
j
]
->
part_of_key
;
break
;
}
}
...
...
sql/sql_union.cc
View file @
5a14bb2a
...
...
@@ -31,7 +31,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
ORDER
*
order
;
List
<
Item
>
item_list
;
TABLE
*
table
;
TABLE_LIST
*
first_table
,
result_table_list
;
TABLE_LIST
result_table_list
;
TMP_TABLE_PARAM
tmp_table_param
;
select_union
*
union_result
;
int
res
;
...
...
@@ -75,9 +75,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
{
Item
*
item
;
List_iterator
<
Item
>
it
(
lex
->
select_lex
.
item_list
);
TABLE_LIST
*
first_table
=
(
TABLE_LIST
*
)
lex
->
select_lex
.
table_list
.
first
;
/* Create a list of items that will be in the result set */
first_table
=
(
TABLE_LIST
*
)
lex
->
select_lex
.
table_list
.
first
;
while
((
item
=
it
++
))
if
(
item_list
.
push_back
(
item
))
DBUG_RETURN
(
-
1
);
...
...
sql/table.cc
View file @
5a14bb2a
...
...
@@ -455,8 +455,12 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
if
(
key
==
primary_key
)
{
field
->
flags
|=
PRI_KEY_FLAG
;
/*
If this field is part of the primary key and all keys contains
the primary key, then we can use any key to find this column
*/
if
(
ha_option
&
HA_PRIMARY_KEY_IN_READ_INDEX
)
field
->
part_of_key
|=
((
key_map
)
1
<<
primary_key
)
;
field
->
part_of_key
=
outparam
->
keys_in_use
;
}
if
(
field
->
key_length
()
!=
key_part
->
length
)
{
...
...
@@ -480,8 +484,6 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
(
outparam
->
keys_in_use
&
((
key_map
)
1
<<
primary_key
)))
{
outparam
->
primary_key
=
primary_key
;
if
(
outparam
->
file
->
option_flag
()
&
HA_PRIMARY_KEY_IN_READ_INDEX
)
outparam
->
ref_primary_key
=
(
key_map
)
1
<<
primary_key
;
/*
If we are using an integer as the primary key then allow the user to
refer to it as '_rowid'
...
...
sql/table.h
View file @
5a14bb2a
...
...
@@ -117,7 +117,7 @@ struct st_table {
byte
*
record_pointers
;
/* If sorted in memory */
ha_rows
found_records
;
/* How many records in sort */
ORDER
*
group
;
key_map
quick_keys
,
used_keys
,
ref_primary_key
;
key_map
quick_keys
,
used_keys
;
ha_rows
quick_rows
[
MAX_KEY
];
uint
quick_key_parts
[
MAX_KEY
];
key_part_map
const_key_parts
[
MAX_KEY
];
...
...
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