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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
98091b15
Commit
98091b15
authored
Feb 02, 2006
by
konstantin@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/opt/local/work/mysql-4.1-root
into mysql.com:/opt/local/work/mysql-5.0-root
parents
c9b7317f
736faf47
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
290 additions
and
29 deletions
+290
-29
configure.in
configure.in
+1
-1
heap/hp_create.c
heap/hp_create.c
+1
-0
include/heap.h
include/heap.h
+1
-0
libmysql/libmysql.c
libmysql/libmysql.c
+6
-0
mysql-test/r/date_formats.result
mysql-test/r/date_formats.result
+9
-0
mysql-test/r/kill.result
mysql-test/r/kill.result
+13
-1
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+1
-1
mysql-test/r/update.result
mysql-test/r/update.result
+19
-0
mysql-test/t/date_formats.test
mysql-test/t/date_formats.test
+7
-0
mysql-test/t/heap.test
mysql-test/t/heap.test
+11
-0
mysql-test/t/kill.test
mysql-test/t/kill.test
+48
-1
mysql-test/t/update.test
mysql-test/t/update.test
+19
-0
ndb/include/mgmapi/mgmapi_config_parameters.h
ndb/include/mgmapi/mgmapi_config_parameters.h
+5
-0
ndb/test/ndbapi/testBlobs.cpp
ndb/test/ndbapi/testBlobs.cpp
+12
-6
sql/ha_heap.cc
sql/ha_heap.cc
+45
-11
sql/ha_heap.h
sql/ha_heap.h
+1
-1
sql/item_timefunc.cc
sql/item_timefunc.cc
+2
-2
sql/sql_class.cc
sql/sql_class.cc
+3
-0
sql/sql_select.cc
sql/sql_select.cc
+14
-0
sql/sql_select.h
sql/sql_select.h
+9
-2
sql/sql_update.cc
sql/sql_update.cc
+12
-2
tests/mysql_client_test.c
tests/mysql_client_test.c
+51
-1
No files found.
configure.in
View file @
98091b15
...
...
@@ -365,7 +365,7 @@ MYSQL_PROG_AR
# libmysqlclient versioning when linked with GNU ld.
if
$LD
--version
2>/dev/null|grep
-q
GNU
;
then
LD_VERSION_SCRIPT
=
"-Wl,--version-script=
\$
(top_
src
dir)/libmysql/libmysql.ver"
LD_VERSION_SCRIPT
=
"-Wl,--version-script=
\$
(top_
build
dir)/libmysql/libmysql.ver"
AC_CONFIG_FILES
(
libmysql/libmysql.ver
)
fi
AC_SUBST
(
LD_VERSION_SCRIPT
)
...
...
heap/hp_create.c
View file @
98091b15
...
...
@@ -135,6 +135,7 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
DBUG_RETURN
(
1
);
}
share
->
keydef
=
(
HP_KEYDEF
*
)
(
share
+
1
);
share
->
key_stat_version
=
1
;
keyseg
=
(
HA_KEYSEG
*
)
(
share
->
keydef
+
keys
);
init_block
(
&
share
->
block
,
reclength
+
1
,
min_records
,
max_records
);
/* Fix keys */
...
...
include/heap.h
View file @
98091b15
...
...
@@ -136,6 +136,7 @@ typedef struct st_heap_share
HP_KEYDEF
*
keydef
;
ulong
min_records
,
max_records
;
/* Params to open */
ulong
data_length
,
index_length
,
max_table_size
;
uint
key_stat_version
;
/* version to indicate insert/delete */
uint
records
;
/* records */
uint
blength
;
/* records rounded up to 2^n */
uint
deleted
;
/* Deleted records in database */
...
...
libmysql/libmysql.c
View file @
98091b15
...
...
@@ -5036,6 +5036,12 @@ my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt)
{
DBUG_ENTER
(
"mysql_stmt_reset"
);
DBUG_ASSERT
(
stmt
!=
0
);
if
(
!
stmt
->
mysql
)
{
/* mysql can be reset in mysql_close called from mysql_reconnect */
set_stmt_error
(
stmt
,
CR_SERVER_LOST
,
unknown_sqlstate
);
DBUG_RETURN
(
1
);
}
/* Reset the client and server sides of the prepared statement */
DBUG_RETURN
(
reset_stmt_handle
(
stmt
,
RESET_SERVER_SIDE
|
RESET_LONG_DATA
));
}
...
...
mysql-test/r/date_formats.result
View file @
98091b15
...
...
@@ -503,3 +503,12 @@ d1 d2
02 February
01 January
drop table t1;
select str_to_date( 1, NULL );
str_to_date( 1, NULL )
NULL
select str_to_date( NULL, 1 );
str_to_date( NULL, 1 )
NULL
select str_to_date( 1, IF(1=1,NULL,NULL) );
str_to_date( 1, IF(1=1,NULL,NULL) )
NULL
mysql-test/r/kill.result
View file @
98091b15
drop table if exists t1;
drop table if exists t1
, t2, t3
;
create table t1 (kill_id int);
insert into t1 values(connection_id());
select ((@id := kill_id) - kill_id) from t1;
...
...
@@ -27,3 +27,15 @@ select 1;
select RELEASE_LOCK("a");
RELEASE_LOCK("a")
1
create table t1 (id int primary key);
create table t2 (id int unsigned not null);
insert into t2 select id from t1;
create table t3 (kill_id int);
insert into t3 values(connection_id());
select id from t1 where id in (select distinct id from t2);
select ((@id := kill_id) - kill_id) from t3;
((@id := kill_id) - kill_id)
0
kill @id;
ERROR 08S01: Server shutdown in progress
drop table t1, t2, t3;
mysql-test/r/myisam.result
View file @
98091b15
...
...
@@ -567,7 +567,7 @@ Warnings:
Note 1031 Table storage engine for 't1' doesn't have this option
show keys from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t1 1 a 1 a NULL
10
00 NULL NULL YES HASH
t1 1 a 1 a NULL
5
00 NULL NULL YES HASH
drop table t1,t2;
create table t1 ( a tinytext, b char(1), index idx (a(1),b) );
insert into t1 values (null,''), (null,'');
...
...
mysql-test/r/update.result
View file @
98091b15
...
...
@@ -358,3 +358,22 @@ update t2,t1 set f1=3,f2=3 where f1=f2 and f1=1;
affected rows: 3
info: Rows matched: 3 Changed: 3 Warnings: 0
drop table t1,t2;
create table t1 (a int);
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t2 (a int, filler1 char(200), filler2 char(200), key(a));
insert into t2 select A.a + 10*B.a, 'filler','filler' from t1 A, t1 B;
flush status;
update t2 set a=3 where a=2;
show status like 'handler_read%';
Variable_name Value
Handler_read_first 0
Handler_read_key 1
Handler_read_next 1
Handler_read_prev 0
Handler_read_rnd 1
Handler_read_rnd_next 0
drop table t1, t2;
create table t1(f1 int, `*f2` int);
insert into t1 values (1,1);
update t1 set `*f2`=1;
drop table t1;
mysql-test/t/date_formats.test
View file @
98091b15
...
...
@@ -269,4 +269,11 @@ insert into t1 (f1) values ("2005-01-01");
insert
into
t1
(
f1
)
values
(
"2005-02-01"
);
select
date_format
(
f1
,
"%m"
)
as
d1
,
date_format
(
f1
,
"%M"
)
as
d2
from
t1
order
by
date_format
(
f1
,
"%M"
);
drop
table
t1
;
#
# Bug #15828
#
select
str_to_date
(
1
,
NULL
);
select
str_to_date
(
NULL
,
1
);
select
str_to_date
(
1
,
IF
(
1
=
1
,
NULL
,
NULL
)
);
# End of 4.1 tests
mysql-test/t/heap.test
View file @
98091b15
...
...
@@ -436,6 +436,17 @@ insert into t1 values ("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd
insert
into
t1
values
(
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
);
drop
table
t1
;
#
# Bug 12796: Record doesn't show when selecting through index
#
CREATE
TABLE
t1
(
a
int
,
key
(
a
))
engine
=
heap
;
insert
delayed
into
t1
values
(
0
);
delete
from
t1
;
select
*
from
t1
;
insert
delayed
into
t1
values
(
0
),
(
1
);
select
*
from
t1
where
a
=
0
;
drop
table
t1
;
# End of 4.1 tests
#
...
...
mysql-test/t/kill.test
View file @
98091b15
...
...
@@ -12,7 +12,7 @@ connect (con2, localhost, root,,);
#remember id of con1
connection
con1
;
--
disable_warnings
drop
table
if
exists
t1
;
drop
table
if
exists
t1
,
t2
,
t3
;
--
enable_warnings
--
disable_reconnect
...
...
@@ -47,6 +47,53 @@ connection con2;
select
4
;
drop
table
t1
;
disconnect
con2
;
connection
default
;
#
# BUG#14851: killing long running subquery processed via a temporary table.
#
create
table
t1
(
id
int
primary
key
);
create
table
t2
(
id
int
unsigned
not
null
);
connect
(
conn1
,
localhost
,
root
,,);
connection
conn1
;
--
disable_result_log
--
disable_query_log
let
$
1
=
4096
;
while
(
$
1
)
{
eval
insert
into
t1
values
(
$
1
);
dec
$
1
;
}
--
enable_query_log
--
enable_result_log
insert
into
t2
select
id
from
t1
;
create
table
t3
(
kill_id
int
);
insert
into
t3
values
(
connection_id
());
--
disable_result_log
send
select
id
from
t1
where
id
in
(
select
distinct
id
from
t2
);
--
enable_result_log
connect
(
conn2
,
localhost
,
root
,,);
connection
conn2
;
select
((
@
id
:=
kill_id
)
-
kill_id
)
from
t3
;
--
sleep
1
kill
@
id
;
connection
conn1
;
--
error
1053
reap
;
disconnect
conn1
;
disconnect
conn2
;
connection
default
;
drop
table
t1
,
t2
,
t3
;
# End of 4.1 tests
#
...
...
mysql-test/t/update.test
View file @
98091b15
...
...
@@ -287,4 +287,23 @@ update t1 set f1=1 where f1=3;
update
t2
,
t1
set
f1
=
3
,
f2
=
3
where
f1
=
f2
and
f1
=
1
;
--
disable_info
drop
table
t1
,
t2
;
# BUG#15935
create
table
t1
(
a
int
);
insert
into
t1
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
create
table
t2
(
a
int
,
filler1
char
(
200
),
filler2
char
(
200
),
key
(
a
));
insert
into
t2
select
A
.
a
+
10
*
B
.
a
,
'filler'
,
'filler'
from
t1
A
,
t1
B
;
flush
status
;
update
t2
set
a
=
3
where
a
=
2
;
show
status
like
'handler_read%'
;
drop
table
t1
,
t2
;
#
# Bug #16510 Updating field named like '*name' caused server crash
#
create
table
t1
(
f1
int
,
`*f2`
int
);
insert
into
t1
values
(
1
,
1
);
update
t1
set
`*f2`
=
1
;
drop
table
t1
;
# End of 4.1 tests
ndb/include/mgmapi/mgmapi_config_parameters.h
View file @
98091b15
...
...
@@ -85,6 +85,11 @@
#define CFG_DB_BACKUP_DATADIR 158
#define CFG_DB_MAX_OPEN_FILES 159
#define CFG_DB_DISK_PAGE_BUFFER_MEMORY 160
/* used from 5.1 */
#define CFG_DB_STRING_MEMORY 161
/* used from 5.1 */
#define CFG_DB_INITIAL_OPEN_FILES 162
/* used from 5.1 */
#define CFG_DB_DATA_MEM_2 199
/* used in special build in 5.1 */
#define CFG_NODE_ARBIT_RANK 200
#define CFG_NODE_ARBIT_DELAY 201
...
...
ndb/test/ndbapi/testBlobs.cpp
View file @
98091b15
...
...
@@ -1483,13 +1483,16 @@ testperf()
// insert char (one trans)
{
DBG
(
"--- insert char ---"
);
char
b
[
20
];
t1
.
on
();
CHK
((
g_con
=
g_ndb
->
startTransaction
())
!=
0
);
for
(
Uint32
k
=
0
;
k
<
g_opt
.
m_rowsperf
;
k
++
)
{
CHK
((
g_opr
=
g_con
->
getNdbOperation
(
tab
.
getName
()))
!=
0
);
CHK
(
g_opr
->
insertTuple
()
==
0
);
CHK
(
g_opr
->
equal
(
cA
,
(
char
*
)
&
k
)
==
0
);
CHK
(
g_opr
->
setValue
(
cB
,
"b"
)
==
0
);
memset
(
b
,
0x20
,
sizeof
(
b
));
b
[
0
]
=
'b'
;
CHK
(
g_opr
->
setValue
(
cB
,
b
)
==
0
);
CHK
(
g_con
->
execute
(
NoCommit
)
==
0
);
}
t1
.
off
(
g_opt
.
m_rowsperf
);
...
...
@@ -1526,12 +1529,15 @@ testperf()
{
DBG
(
"--- insert for read test ---"
);
unsigned
n
=
0
;
char
b
[
20
];
CHK
((
g_con
=
g_ndb
->
startTransaction
())
!=
0
);
for
(
Uint32
k
=
0
;
k
<
g_opt
.
m_rowsperf
;
k
++
)
{
CHK
((
g_opr
=
g_con
->
getNdbOperation
(
tab
.
getName
()))
!=
0
);
CHK
(
g_opr
->
insertTuple
()
==
0
);
CHK
(
g_opr
->
equal
(
cA
,
(
char
*
)
&
k
)
==
0
);
CHK
(
g_opr
->
setValue
(
cB
,
"b"
)
==
0
);
memset
(
b
,
0x20
,
sizeof
(
b
));
b
[
0
]
=
'b'
;
CHK
(
g_opr
->
setValue
(
cB
,
b
)
==
0
);
CHK
((
g_bh1
=
g_opr
->
getBlobHandle
(
cC
))
!=
0
);
CHK
((
g_bh1
->
setValue
(
"c"
,
1
)
==
0
));
if
(
++
n
==
g_opt
.
m_batch
)
{
...
...
@@ -1565,7 +1571,7 @@ testperf()
a
=
(
Uint32
)
-
1
;
b
[
0
]
=
0
;
CHK
(
g_con
->
execute
(
NoCommit
)
==
0
);
CHK
(
a
==
k
&&
strcmp
(
b
,
"b"
)
==
0
);
CHK
(
a
==
k
&&
b
[
0
]
==
'b'
);
}
CHK
(
g_con
->
execute
(
Commit
)
==
0
);
t1
.
off
(
g_opt
.
m_rowsperf
);
...
...
@@ -1591,7 +1597,7 @@ testperf()
CHK
(
g_con
->
execute
(
NoCommit
)
==
0
);
Uint32
m
=
20
;
CHK
(
g_bh1
->
readData
(
c
,
m
)
==
0
);
CHK
(
a
==
k
&&
m
==
1
&&
strcmp
(
c
,
"c"
)
==
0
);
CHK
(
a
==
k
&&
m
==
1
&&
c
[
0
]
==
'c'
);
}
CHK
(
g_con
->
execute
(
Commit
)
==
0
);
t2
.
off
(
g_opt
.
m_rowsperf
);
...
...
@@ -1623,7 +1629,7 @@ testperf()
CHK
((
ret
=
g_ops
->
nextResult
(
true
))
==
0
||
ret
==
1
);
if
(
ret
==
1
)
break
;
CHK
(
a
<
g_opt
.
m_rowsperf
&&
strcmp
(
b
,
"b"
)
==
0
);
CHK
(
a
<
g_opt
.
m_rowsperf
&&
b
[
0
]
==
'b'
);
n
++
;
}
CHK
(
n
==
g_opt
.
m_rowsperf
);
...
...
@@ -1654,7 +1660,7 @@ testperf()
break
;
Uint32
m
=
20
;
CHK
(
g_bh1
->
readData
(
c
,
m
)
==
0
);
CHK
(
a
<
g_opt
.
m_rowsperf
&&
m
==
1
&&
strcmp
(
c
,
"c"
)
==
0
);
CHK
(
a
<
g_opt
.
m_rowsperf
&&
m
==
1
&&
c
[
0
]
==
'c'
);
n
++
;
}
CHK
(
n
==
g_opt
.
m_rowsperf
);
...
...
sql/ha_heap.cc
View file @
98091b15
...
...
@@ -53,7 +53,7 @@ handlerton heap_hton= {
ha_heap
::
ha_heap
(
TABLE
*
table_arg
)
:
handler
(
&
heap_hton
,
table_arg
),
file
(
0
),
records_changed
(
0
),
key_stats_
ok
(
0
)
key_stats_
version
(
0
)
{}
...
...
@@ -104,7 +104,7 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked)
ha_heap::info(), which is always called before key statistics are
used.
*/
key_stat
s_ok
=
FALSE
;
key_stat
_version
=
file
->
s
->
key_stat_version
-
1
;
}
return
(
file
?
0
:
1
);
}
...
...
@@ -151,14 +151,21 @@ void ha_heap::update_key_stats()
continue
;
if
(
key
->
algorithm
!=
HA_KEY_ALG_BTREE
)
{
ha_rows
hash_buckets
=
file
->
s
->
keydef
[
i
].
hash_buckets
;
key
->
rec_per_key
[
key
->
key_parts
-
1
]
=
hash_buckets
?
file
->
s
->
records
/
hash_buckets
:
0
;
if
(
key
->
flags
&
HA_NOSAME
)
key
->
rec_per_key
[
key
->
key_parts
-
1
]
=
1
;
else
{
ha_rows
hash_buckets
=
file
->
s
->
keydef
[
i
].
hash_buckets
;
uint
no_records
=
hash_buckets
?
file
->
s
->
records
/
hash_buckets
:
2
;
if
(
no_records
<
2
)
no_records
=
2
;
key
->
rec_per_key
[
key
->
key_parts
-
1
]
=
no_records
;
}
}
}
records_changed
=
0
;
/* At the end of update_key_stats() we can proudly claim they are OK. */
key_stat
s_ok
=
TRUE
;
key_stat
_version
=
file
->
s
->
key_stat_version
;
}
...
...
@@ -173,7 +180,13 @@ int ha_heap::write_row(byte * buf)
res
=
heap_write
(
file
,
buf
);
if
(
!
res
&&
(
++
records_changed
*
HEAP_STATS_UPDATE_THRESHOLD
>
file
->
s
->
records
))
key_stats_ok
=
FALSE
;
{
/*
We can perform this safely since only one writer at the time is
allowed on the table.
*/
file
->
s
->
key_stat_version
++
;
}
return
res
;
}
...
...
@@ -186,7 +199,13 @@ int ha_heap::update_row(const byte * old_data, byte * new_data)
res
=
heap_update
(
file
,
old_data
,
new_data
);
if
(
!
res
&&
++
records_changed
*
HEAP_STATS_UPDATE_THRESHOLD
>
file
->
s
->
records
)
key_stats_ok
=
FALSE
;
{
/*
We can perform this safely since only one writer at the time is
allowed on the table.
*/
file
->
s
->
key_stat_version
++
;
}
return
res
;
}
...
...
@@ -197,7 +216,13 @@ int ha_heap::delete_row(const byte * buf)
res
=
heap_delete
(
file
,
buf
);
if
(
!
res
&&
table
->
s
->
tmp_table
==
NO_TMP_TABLE
&&
++
records_changed
*
HEAP_STATS_UPDATE_THRESHOLD
>
file
->
s
->
records
)
key_stats_ok
=
FALSE
;
{
/*
We can perform this safely since only one writer at the time is
allowed on the table.
*/
file
->
s
->
key_stat_version
++
;
}
return
res
;
}
...
...
@@ -324,7 +349,7 @@ void ha_heap::info(uint flag)
have to update the key statistics. Hoping that a table lock is now
in place.
*/
if
(
!
key_stats_ok
)
if
(
key_stat_version
!=
file
->
s
->
key_stat_version
)
update_key_stats
();
}
...
...
@@ -337,7 +362,13 @@ int ha_heap::delete_all_rows()
{
heap_clear
(
file
);
if
(
table
->
s
->
tmp_table
==
NO_TMP_TABLE
)
key_stats_ok
=
FALSE
;
{
/*
We can perform this safely since only one writer at the time is
allowed on the table.
*/
file
->
s
->
key_stat_version
++
;
}
return
0
;
}
...
...
@@ -497,6 +528,9 @@ ha_rows ha_heap::records_in_range(uint inx, key_range *min_key,
max_key
->
flag
!=
HA_READ_AFTER_KEY
)
return
HA_POS_ERROR
;
// Can only use exact keys
if
(
records
<=
1
)
return
records
;
/* Assert that info() did run. We need current statistics here. */
DBUG_ASSERT
(
key_stats_ok
);
return
key
->
rec_per_key
[
key
->
key_parts
-
1
];
...
...
sql/ha_heap.h
View file @
98091b15
...
...
@@ -29,7 +29,7 @@ class ha_heap: public handler
key_map
btree_keys
;
/* number of records changed since last statistics update */
uint
records_changed
;
bool
key_stats_ok
;
uint
key_stat_version
;
public:
ha_heap
(
TABLE
*
table
);
~
ha_heap
()
{}
...
...
sql/item_timefunc.cc
View file @
98091b15
...
...
@@ -3023,9 +3023,9 @@ void Item_func_str_to_date::fix_length_and_dec()
cached_field_type
=
MYSQL_TYPE_STRING
;
max_length
=
MAX_DATETIME_FULL_WIDTH
*
MY_CHARSET_BIN_MB_MAXLEN
;
cached_timestamp_type
=
MYSQL_TIMESTAMP_NONE
;
if
((
const_item
=
args
[
1
]
->
const_item
()))
format
=
args
[
1
]
->
val_str
(
&
format_str
);
if
(
!
args
[
1
]
->
null_value
&&
(
const_item
=
args
[
1
]
->
const_item
()))
{
format
=
args
[
1
]
->
val_str
(
&
format_str
);
cached_format_type
=
get_date_time_result_type
(
format
->
ptr
(),
format
->
length
());
switch
(
cached_format_type
)
{
...
...
sql/sql_class.cc
View file @
98091b15
...
...
@@ -1816,11 +1816,14 @@ bool select_dumpvar::send_eof()
void
TMP_TABLE_PARAM
::
init
()
{
DBUG_ENTER
(
"TMP_TABLE_PARAM::init"
);
DBUG_PRINT
(
"enter"
,
(
"this: 0x%lx"
,
(
ulong
)
this
));
field_count
=
sum_func_count
=
func_count
=
hidden_field_count
=
0
;
group_parts
=
group_length
=
group_null_parts
=
0
;
quick_group
=
1
;
table_charset
=
0
;
precomputed_group_by
=
0
;
DBUG_VOID_RETURN
;
}
...
...
sql/sql_select.cc
View file @
98091b15
...
...
@@ -6016,6 +6016,20 @@ void JOIN::cleanup(bool full)
problems in free_elements() as some of the elements are then deleted.
*/
tmp_table_param
.
copy_funcs
.
empty
();
/*
If we have tmp_join and 'this' JOIN is not tmp_join and
tmp_table_param.copy_field's of them are equal then we have to remove
pointer to tmp_table_param.copy_field from tmp_join, because it qill
be removed in tmp_table_param.cleanup().
*/
if
(
tmp_join
&&
tmp_join
!=
this
&&
tmp_join
->
tmp_table_param
.
copy_field
==
tmp_table_param
.
copy_field
)
{
tmp_join
->
tmp_table_param
.
copy_field
=
tmp_join
->
tmp_table_param
.
save_copy_field
=
0
;
}
tmp_table_param
.
cleanup
();
}
DBUG_VOID_RETURN
;
...
...
sql/sql_select.h
View file @
98091b15
...
...
@@ -285,7 +285,14 @@ class JOIN :public Sql_alloc
{
init
(
thd_arg
,
fields_arg
,
select_options_arg
,
result_arg
);
}
JOIN
(
JOIN
&
join
)
:
fields_list
(
join
.
fields_list
)
{
init
(
join
.
thd
,
join
.
fields_list
,
join
.
select_options
,
join
.
result
);
}
void
init
(
THD
*
thd_arg
,
List
<
Item
>
&
fields_arg
,
ulonglong
select_options_arg
,
select_result
*
result_arg
)
{
...
...
@@ -332,7 +339,7 @@ class JOIN :public Sql_alloc
all_fields
=
fields_arg
;
fields_list
=
fields_arg
;
bzero
((
char
*
)
&
keyuse
,
sizeof
(
keyuse
));
tmp_table_param
.
copy_field
=
0
;
tmp_table_param
.
init
()
;
tmp_table_param
.
end_write_records
=
HA_POS_ERROR
;
rollup
.
state
=
ROLLUP
::
STATE_NONE
;
}
...
...
sql/sql_update.cc
View file @
98091b15
...
...
@@ -308,7 +308,6 @@ int mysql_update(THD *thd,
SORT_FIELD
*
sortorder
;
ha_rows
examined_rows
;
used_index
=
MAX_KEY
;
// For call to init_read_record()
table
->
sort
.
io_cache
=
(
IO_CACHE
*
)
my_malloc
(
sizeof
(
IO_CACHE
),
MYF
(
MY_FAE
|
MY_ZEROFILL
));
if
(
!
(
sortorder
=
make_unireg_sortorder
(
order
,
&
length
))
||
...
...
@@ -339,10 +338,21 @@ int mysql_update(THD *thd,
if
(
open_cached_file
(
&
tempfile
,
mysql_tmpdir
,
TEMP_PREFIX
,
DISK_BUFFER_SIZE
,
MYF
(
MY_WME
)))
goto
err
;
/* If quick select is used, initialize it before retrieving rows. */
if
(
select
&&
select
->
quick
&&
select
->
quick
->
reset
())
goto
err
;
/*
When we get here, we have one of the following options:
A. used_index == MAX_KEY
This means we should use full table scan, and start it with
init_read_record call
B. used_index != MAX_KEY
B.1 quick select is used, start the scan with init_read_record
B.2 quick select is not used, this is full index scan (with LIMIT)
Full index scan must be started with init_read_record_idx
*/
if
(
used_index
==
MAX_KEY
||
(
select
&&
select
->
quick
))
init_read_record
(
&
info
,
thd
,
table
,
select
,
0
,
1
);
else
...
...
tests/mysql_client_test.c
View file @
98091b15
...
...
@@ -14714,6 +14714,56 @@ static void test_bug16144()
mysql_stmt_close
(
stmt
);
}
static
void
test_bug12744
()
{
MYSQL_STMT
*
prep_stmt
=
NULL
;
int
rc
;
myheader
(
"test_bug12744"
);
prep_stmt
=
mysql_stmt_init
(
mysql
);
rc
=
mysql_stmt_prepare
(
prep_stmt
,
"SELECT 1"
,
8
);
DIE_UNLESS
(
rc
==
0
);
rc
=
mysql_kill
(
mysql
,
mysql_thread_id
(
mysql
));
DIE_UNLESS
(
rc
==
0
);
if
(
rc
=
mysql_stmt_execute
(
prep_stmt
))
{
if
(
rc
=
mysql_stmt_reset
(
prep_stmt
))
printf
(
"OK!
\n
"
);
else
{
printf
(
"Error!"
);
DIE_UNLESS
(
1
==
0
);
}
}
else
{
fprintf
(
stderr
,
"expected error but no error occured
\n
"
);
DIE_UNLESS
(
1
==
0
);
}
rc
=
mysql_stmt_close
(
prep_stmt
);
}
/* Bug #16144: mysql_stmt_attr_get type error */
static
void
test_bug16144
()
{
const
my_bool
flag_orig
=
(
my_bool
)
0xde
;
my_bool
flag
=
flag_orig
;
MYSQL_STMT
*
stmt
;
myheader
(
"test_bug16144"
);
/* Check that attr_get returns correct data on little and big endian CPUs */
stmt
=
mysql_stmt_init
(
mysql
);
mysql_stmt_attr_set
(
stmt
,
STMT_ATTR_UPDATE_MAX_LENGTH
,
(
const
void
*
)
&
flag
);
mysql_stmt_attr_get
(
stmt
,
STMT_ATTR_UPDATE_MAX_LENGTH
,
(
void
*
)
&
flag
);
DIE_UNLESS
(
flag
==
flag_orig
);
mysql_stmt_close
(
stmt
);
}
/*
Bug #15613: "libmysqlclient API function mysql_stmt_prepare returns wrong
field length"
...
...
@@ -15039,7 +15089,7 @@ static struct my_tests_st my_tests[]= {
{
"test_bug14845"
,
test_bug14845
},
{
"test_bug15510"
,
test_bug15510
},
{
"test_opt_reconnect"
,
test_opt_reconnect
},
{
"test_bug12744"
,
test_bug12744
},
{
"test_bug16144"
,
test_bug16144
},
{
"test_bug15613"
,
test_bug15613
},
{
0
,
0
}
...
...
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