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
ce09acfb
Commit
ce09acfb
authored
Jul 01, 2001
by
Sinisa@sinisa.nasamreza.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Making multi-table delete BETA !!
parent
85388703
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
46 additions
and
9 deletions
+46
-9
.bzrignore
.bzrignore
+1
-0
mysql-test/t/multi_update.test
mysql-test/t/multi_update.test
+1
-1
mysys/my_compress.c
mysys/my_compress.c
+1
-1
sql/filesort.cc
sql/filesort.cc
+0
-5
sql/sql_class.h
sql/sql_class.h
+4
-0
sql/sql_delete.cc
sql/sql_delete.cc
+38
-2
sql/sql_select.cc
sql/sql_select.cc
+1
-0
No files found.
.bzrignore
View file @
ce09acfb
...
@@ -368,3 +368,4 @@ libmysqld/hash_filo.cc
...
@@ -368,3 +368,4 @@ libmysqld/hash_filo.cc
libmysqld/sql_unions.cc
libmysqld/sql_unions.cc
libmysqld/stacktrace.c
libmysqld/stacktrace.c
sql/share/mysql
sql/share/mysql
locked
mysql-test/t/multi_update.test
View file @
ce09acfb
...
@@ -7,7 +7,7 @@ eval select $BIG_TEST as using_big_test;
...
@@ -7,7 +7,7 @@ eval select $BIG_TEST as using_big_test;
drop
table
if
exists
t1
,
t2
,
t3
;
drop
table
if
exists
t1
,
t2
,
t3
;
create
table
t1
(
id1
int
not
null
auto_increment
primary
key
,
t
char
(
12
));
create
table
t1
(
id1
int
not
null
auto_increment
primary
key
,
t
char
(
12
));
create
table
t2
(
id2
int
not
null
,
t
char
(
12
)
,
index
(
id2
)
);
create
table
t2
(
id2
int
not
null
,
t
char
(
12
));
create
table
t3
(
id3
int
not
null
,
t
char
(
12
),
index
(
id3
));
create
table
t3
(
id3
int
not
null
,
t
char
(
12
),
index
(
id3
));
let
$
1
=
10000
;
let
$
1
=
10000
;
while
(
$
1
)
while
(
$
1
)
...
...
mysys/my_compress.c
View file @
ce09acfb
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
MA 02111-1307, USA */
/* Written by Sinisa Milivojevic <sinisa@
coresinc
.com> */
/* Written by Sinisa Milivojevic <sinisa@
mysql
.com> */
#include <global.h>
#include <global.h>
#ifdef HAVE_COMPRESS
#ifdef HAVE_COMPRESS
...
...
sql/filesort.cc
View file @
ce09acfb
...
@@ -685,7 +685,6 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
...
@@ -685,7 +685,6 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
uchar
*
strpos
;
uchar
*
strpos
;
BUFFPEK
*
buffpek
,
**
refpek
;
BUFFPEK
*
buffpek
,
**
refpek
;
QUEUE
queue
;
QUEUE
queue
;
volatile
bool
*
killed
=
&
current_thd
->
killed
;
qsort2_cmp
cmp
;
qsort2_cmp
cmp
;
DBUG_ENTER
(
"merge_buffers"
);
DBUG_ENTER
(
"merge_buffers"
);
...
@@ -739,10 +738,6 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
...
@@ -739,10 +738,6 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
while
(
queue
.
elements
>
1
)
while
(
queue
.
elements
>
1
)
{
{
if
(
*
killed
)
{
error
=
1
;
goto
err
;
/* purecov: inspected */
}
for
(;;)
for
(;;)
{
{
buffpek
=
(
BUFFPEK
*
)
queue_top
(
&
queue
);
buffpek
=
(
BUFFPEK
*
)
queue_top
(
&
queue
);
...
...
sql/sql_class.h
View file @
ce09acfb
...
@@ -410,6 +410,8 @@ public:
...
@@ -410,6 +410,8 @@ public:
** This is used to get result from a select
** This is used to get result from a select
*/
*/
class
JOIN
;
class
select_result
:
public
Sql_alloc
{
class
select_result
:
public
Sql_alloc
{
protected:
protected:
THD
*
thd
;
THD
*
thd
;
...
@@ -419,6 +421,7 @@ public:
...
@@ -419,6 +421,7 @@ public:
virtual
int
prepare
(
List
<
Item
>
&
list
)
{
return
0
;
}
virtual
int
prepare
(
List
<
Item
>
&
list
)
{
return
0
;
}
virtual
bool
send_fields
(
List
<
Item
>
&
list
,
uint
flag
)
=
0
;
virtual
bool
send_fields
(
List
<
Item
>
&
list
,
uint
flag
)
=
0
;
virtual
bool
send_data
(
List
<
Item
>
&
items
)
=
0
;
virtual
bool
send_data
(
List
<
Item
>
&
items
)
=
0
;
virtual
void
initialize_tables
(
JOIN
*
join
=
0
)
{};
virtual
void
send_error
(
uint
errcode
,
const
char
*
err
)
=
0
;
virtual
void
send_error
(
uint
errcode
,
const
char
*
err
)
=
0
;
virtual
bool
send_eof
()
=
0
;
virtual
bool
send_eof
()
=
0
;
virtual
void
abort
()
{}
virtual
void
abort
()
{}
...
@@ -621,6 +624,7 @@ public:
...
@@ -621,6 +624,7 @@ public:
bool
send_fields
(
List
<
Item
>
&
list
,
bool
send_fields
(
List
<
Item
>
&
list
,
uint
flag
)
{
return
0
;
}
uint
flag
)
{
return
0
;
}
bool
send_data
(
List
<
Item
>
&
items
);
bool
send_data
(
List
<
Item
>
&
items
);
void
initialize_tables
(
JOIN
*
join
);
void
send_error
(
uint
errcode
,
const
char
*
err
);
void
send_error
(
uint
errcode
,
const
char
*
err
);
int
do_deletes
(
bool
from_send_error
);
int
do_deletes
(
bool
from_send_error
);
bool
send_eof
();
bool
send_eof
();
...
...
sql/sql_delete.cc
View file @
ce09acfb
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
& Sinisa
This program is free software; you can redistribute it and/or modify
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
it under the terms of the GNU General Public License as published by
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
#include "mysql_priv.h"
#include "mysql_priv.h"
#include "ha_innobase.h"
#include "ha_innobase.h"
#include "sql_select.h"
/*
/*
Optimize delete of all rows by doing a full generate of the table
Optimize delete of all rows by doing a full generate of the table
...
@@ -319,12 +320,14 @@ multi_delete::multi_delete(THD *thd_arg, TABLE_LIST *dt,
...
@@ -319,12 +320,14 @@ multi_delete::multi_delete(THD *thd_arg, TABLE_LIST *dt,
#endif
#endif
(
void
)
dt
->
table
->
file
->
extra
(
HA_EXTRA_NO_READCHECK
);
(
void
)
dt
->
table
->
file
->
extra
(
HA_EXTRA_NO_READCHECK
);
(
void
)
dt
->
table
->
file
->
extra
(
HA_EXTRA_NO_KEYREAD
);
/* Don't use key read with MULTI-TABLE-DELETE */
/* Don't use key read with MULTI-TABLE-DELETE */
dt
->
table
->
used_keys
=
0
;
dt
->
table
->
used_keys
=
0
;
for
(
dt
=
dt
->
next
;
dt
;
dt
=
dt
->
next
,
counter
++
)
for
(
dt
=
dt
->
next
;
dt
;
dt
=
dt
->
next
,
counter
++
)
{
{
TABLE
*
table
=
dt
->
table
;
TABLE
*
table
=
dt
->
table
;
(
void
)
table
->
file
->
extra
(
HA_EXTRA_NO_READCHECK
);
(
void
)
dt
->
table
->
file
->
extra
(
HA_EXTRA_NO_READCHECK
);
(
void
)
dt
->
table
->
file
->
extra
(
HA_EXTRA_NO_KEYREAD
);
#ifdef SINISAS_STRIP
#ifdef SINISAS_STRIP
tempfiles
[
counter
]
=
(
IO_CACHE
*
)
sql_alloc
(
sizeof
(
IO_CACHE
));
tempfiles
[
counter
]
=
(
IO_CACHE
*
)
sql_alloc
(
sizeof
(
IO_CACHE
));
if
(
open_cached_file
(
tempfiles
[
counter
],
mysql_tmpdir
,
TEMP_PREFIX
,
if
(
open_cached_file
(
tempfiles
[
counter
],
mysql_tmpdir
,
TEMP_PREFIX
,
...
@@ -367,6 +370,39 @@ multi_delete::prepare(List<Item> &values)
...
@@ -367,6 +370,39 @@ multi_delete::prepare(List<Item> &values)
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
inline
static
void
link_in_list
(
SQL_LIST
*
list
,
byte
*
element
,
byte
**
next
)
{
list
->
elements
++
;
(
*
list
->
next
)
=
element
;
list
->
next
=
next
;
*
next
=
0
;
}
void
multi_delete
::
initialize_tables
(
JOIN
*
join
)
{
SQL_LIST
*
new_list
=
(
SQL_LIST
*
)
sql_alloc
(
sizeof
(
SQL_LIST
));
new_list
->
elements
=
0
;
new_list
->
first
=
0
;
new_list
->
next
=
(
byte
**
)
&
(
new_list
->
first
);
for
(
JOIN_TAB
*
tab
=
join
->
join_tab
,
*
end
=
join
->
join_tab
+
join
->
tables
;
tab
<
end
;
tab
++
)
{
TABLE_LIST
*
walk
;
for
(
walk
=
(
TABLE_LIST
*
)
delete_tables
;
walk
;
walk
=
walk
->
next
)
if
(
!
strcmp
(
tab
->
table
->
path
,
walk
->
table
->
path
))
break
;
if
(
walk
)
// Table need not be the one to be deleted
{
register
TABLE_LIST
*
ptr
=
(
TABLE_LIST
*
)
sql_alloc
(
sizeof
(
TABLE_LIST
));
memcpy
(
ptr
,
walk
,
sizeof
(
TABLE_LIST
));
ptr
->
next
=
0
;
link_in_list
(
new_list
,(
byte
*
)
ptr
,(
byte
**
)
&
ptr
->
next
);
}
}
delete_tables
=
(
TABLE_LIST
*
)
new_list
->
first
;
return
;
}
multi_delete
::~
multi_delete
()
multi_delete
::~
multi_delete
()
{
{
...
...
sql/sql_select.cc
View file @
ce09acfb
...
@@ -385,6 +385,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
...
@@ -385,6 +385,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
thd
->
fatal_error
)
thd
->
fatal_error
)
goto
err
;
goto
err
;
thd
->
proc_info
=
"preparing"
;
thd
->
proc_info
=
"preparing"
;
result
->
initialize_tables
(
&
join
);
if
((
tmp
=
join_read_const_tables
(
&
join
))
>
0
)
if
((
tmp
=
join_read_const_tables
(
&
join
))
>
0
)
goto
err
;
goto
err
;
if
(
tmp
&&
!
(
select_options
&
SELECT_DESCRIBE
))
if
(
tmp
&&
!
(
select_options
&
SELECT_DESCRIBE
))
...
...
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