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
042af556
Commit
042af556
authored
Mar 20, 2004
by
monty@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/my/mysql-4.1
parents
ce3a82f4
59f9dcd5
Changes
35
Show whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
611 additions
and
296 deletions
+611
-296
BitKeeper/etc/config
BitKeeper/etc/config
+1
-0
Build-tools/Do-pkg
Build-tools/Do-pkg
+11
-2
client/mysqltest.c
client/mysqltest.c
+77
-34
include/errmsg.h
include/errmsg.h
+24
-23
include/mysql_version.h.in
include/mysql_version.h.in
+5
-0
innobase/btr/btr0btr.c
innobase/btr/btr0btr.c
+30
-33
innobase/btr/btr0cur.c
innobase/btr/btr0cur.c
+20
-4
innobase/que/que0que.c
innobase/que/que0que.c
+4
-4
libmysql/errmsg.c
libmysql/errmsg.c
+3
-0
libmysql/libmysql.c
libmysql/libmysql.c
+51
-0
mysql-test/mysql-test-run.sh
mysql-test/mysql-test-run.sh
+26
-23
mysql-test/r/derived.result
mysql-test/r/derived.result
+2
-2
mysql-test/r/func_math.result
mysql-test/r/func_math.result
+0
-9
mysql-test/r/rpl000009.result
mysql-test/r/rpl000009.result
+12
-0
mysql-test/r/rpl_error_ignored_table.result
mysql-test/r/rpl_error_ignored_table.result
+1
-1
mysql-test/r/system_mysql_db.result
mysql-test/r/system_mysql_db.result
+14
-10
mysql-test/r/system_mysql_db_refs.result
mysql-test/r/system_mysql_db_refs.result
+2
-2
mysql-test/r/union.result
mysql-test/r/union.result
+15
-0
mysql-test/t/derived.test
mysql-test/t/derived.test
+2
-1
mysql-test/t/func_math.test
mysql-test/t/func_math.test
+5
-3
mysql-test/t/reserv/system_mysql_db_fix.test
mysql-test/t/reserv/system_mysql_db_fix.test
+0
-14
mysql-test/t/rpl000009.test
mysql-test/t/rpl000009.test
+15
-0
mysql-test/t/rpl_error_ignored_table.test
mysql-test/t/rpl_error_ignored_table.test
+1
-1
mysql-test/t/system_mysql_db.test
mysql-test/t/system_mysql_db.test
+8
-8
mysql-test/t/system_mysql_db_fix-master.opt
mysql-test/t/system_mysql_db_fix-master.opt
+0
-0
mysql-test/t/system_mysql_db_fix.test
mysql-test/t/system_mysql_db_fix.test
+78
-0
mysql-test/t/system_mysql_db_refs.test
mysql-test/t/system_mysql_db_refs.test
+99
-87
mysql-test/t/union.test
mysql-test/t/union.test
+13
-0
mysys/mf_soundex.c
mysys/mf_soundex.c
+4
-0
scripts/mysql_create_system_tables.sh
scripts/mysql_create_system_tables.sh
+1
-1
scripts/mysql_fix_privilege_tables.sh
scripts/mysql_fix_privilege_tables.sh
+19
-18
scripts/mysql_fix_privilege_tables.sql
scripts/mysql_fix_privilege_tables.sql
+55
-10
scripts/mysql_install_db.sh
scripts/mysql_install_db.sh
+1
-1
sql/repl_failsafe.cc
sql/repl_failsafe.cc
+11
-2
sql/set_var.cc
sql/set_var.cc
+1
-3
No files found.
BitKeeper/etc/config
View file @
042af556
...
...
@@ -71,3 +71,4 @@ hours:
[arjen:]checkout:get
[nick:]checkout:get
checkout:edit
eoln:unix
Build-tools/Do-pkg
View file @
042af556
...
...
@@ -61,6 +61,12 @@ else
}
$PM
=
"
/Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
";
# Try another location on 10.3.3
unless
(
-
e
"
$PM
")
{
$PM
=
"
/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
";
}
$TMP
=
$ENV
{
TMPDIR
};
$TMP
eq
""
?
$TMP
=
$TMP
.
"
/PKGBUILD.$$
":
$TMP
=
"
/tmp/PKGBUILD.$$
";
$PKGROOT
=
"
$TMP
/PMROOT
";
...
...
@@ -79,6 +85,9 @@ $BUILDDIR= "$PWD/$HOST";
$SRCBASEDIR
=
<
$BUILDDIR
/
mysql
*-
$VERSION
>
;
$SUPFILEDIR
=
<
$SRCBASEDIR
/support-files/
MacOSX
>
;
$TAR
=
<
$BUILDDIR
/
$NAME
-
apple
-
darwin
*-
powerpc
.
tar
.
gz
>
;
$TAR
=~
/.*\/$NAME(.*)\.tar\.gz$/
;
$ARCH
=
$1
;
$NAME
=
$NAME
.
$ARCH
;
$INFO
=
<
$SUPFILEDIR
/
Info
.
plist
>
;
$DESC
=
<
$SUPFILEDIR
/
Description
.
plist
>
;
$SI_INFO
=
<
$SUPFILEDIR
/
StartupItem
.
Info
.
plist
>
;
...
...
@@ -167,7 +176,7 @@ unless (-f "$RESOURCE_DIR/License.txt");
&
logger
("
Extracting
$TAR
to
$PKGROOT
");
&
run_command
("
gnutar zxf
$TAR
-C
$PKGROOT
",
"
Unable to extract
$TAR
!
");
&
run_command
("
cd
$PKGROOT
; ln -s mysql* ./mysql
",
"
Unable to create symlink!
");
&
run_command
("
chown -R root
.
wheel
$PKGROOT
/*
",
"
Cannot chown
$PKGROOT
!
");
&
run_command
("
chown -R root
:
wheel
$PKGROOT
/*
",
"
Cannot chown
$PKGROOT
!
");
# Now build the PGK using PackageMaker
# The "|| true" is a nasty hack to work around a problem with Package Maker
...
...
@@ -196,7 +205,7 @@ unless ($opt_skip_si)
copy
("
$SI_PARAMS
",
"
$PKGROOT
/MySQL/
")
or
&
abort
("
Error copying
$SI_PARAMS
!
");
chmod
(
0644
,
"
$PKGROOT
/MySQL/
"
.
basename
("
$SI_PARAMS
"));
&
run_command
("
chown -R root
.
wheel
$PKGROOT
/*
",
"
Cannot chown
$PKGROOT
!
");
&
run_command
("
chown -R root
:
wheel
$PKGROOT
/*
",
"
Cannot chown
$PKGROOT
!
");
copy
("
$SI_POST
",
"
$RESOURCE_DIR
/postinstall
")
or
&
abort
("
Error copying
$SI_POST
!
");
chmod
(
0644
,
"
$RESOURCE_DIR
/postinstall
");
...
...
client/mysqltest.c
View file @
042af556
...
...
@@ -109,6 +109,7 @@ MYSQL_MANAGER* manager=0;
static
char
**
default_argv
;
static
const
char
*
load_default_groups
[]
=
{
"mysqltest"
,
"client"
,
0
};
static
char
line_buffer
[
MAX_DELIMITER
],
*
line_buffer_pos
=
line_buffer
;;
static
FILE
*
file_stack
[
MAX_INCLUDE_DEPTH
];
static
FILE
**
cur_file
;
...
...
@@ -870,18 +871,25 @@ int do_exec(struct st_query* q)
char
buf
[
1024
];
FILE
*
res_file
;
char
*
cmd
=
q
->
first_argument
;
DBUG_ENTER
(
"do_exec"
);
while
(
*
cmd
&&
my_isspace
(
charset_info
,
*
cmd
))
cmd
++
;
if
(
!*
cmd
)
die
(
"Missing argument in exec
\n
"
);
if
(
disable_result_log
)
{
DBUG_PRINT
(
"info"
,
(
"Executing '%s'"
,
cmd
));
if
(
!
(
res_file
=
popen
(
cmd
,
"r"
))
&&
q
->
abort_on_error
)
die
(
"popen() failed
\n
"
);
while
(
fgets
(
buf
,
sizeof
(
buf
),
res_file
));
pclose
(
res_file
);
if
(
disable_result_log
)
{
while
(
fgets
(
buf
,
sizeof
(
buf
),
res_file
))
{
buf
[
strlen
(
buf
)
-
1
]
=
0
;
DBUG_PRINT
(
"exec_result"
,(
"%s"
,
buf
));
}
}
else
{
...
...
@@ -893,11 +901,8 @@ int do_exec(struct st_query* q)
else
ds
=
&
ds_res
;
if
(
!
(
res_file
=
popen
(
cmd
,
"r"
))
&&
q
->
abort_on_error
)
die
(
"popen() failed
\n
"
);
while
(
fgets
(
buf
,
sizeof
(
buf
),
res_file
))
replace_dynstr_append_mem
(
ds
,
buf
,
strlen
(
buf
));
pclose
(
res_file
);
if
(
glob_replace
)
free_replace
();
...
...
@@ -916,8 +921,9 @@ int do_exec(struct st_query* q)
if
(
ds
==
&
ds_tmp
)
dynstr_free
(
&
ds_tmp
);
}
pclose
(
res_file
);
return
error
;
DBUG_RETURN
(
error
)
;
}
int
var_query_set
(
VAR
*
v
,
const
char
*
p
,
const
char
**
p_end
)
...
...
@@ -1052,7 +1058,7 @@ int do_system(struct st_query* q)
eval_expr
(
&
v
,
p
,
0
);
/* NULL terminated */
if
(
v
.
str_val_len
)
{
char
expr_buf
[
512
];
char
expr_buf
[
1024
];
if
((
uint
)
v
.
str_val_len
>
sizeof
(
expr_buf
)
-
1
)
v
.
str_val_len
=
sizeof
(
expr_buf
)
-
1
;
memcpy
(
expr_buf
,
v
.
str_val
,
v
.
str_val_len
);
...
...
@@ -1646,24 +1652,49 @@ int do_while(struct st_query* q)
}
my_bool
end_of_query
(
int
c
,
char
*
p
)
/*
Read characters from line buffer or file. This is needed to allow
my_ungetc() to buffer MAX_DELIMITER characters for a file
NOTE:
This works as long as one doesn't change files (with 'source file_name')
when there is things pushed into the buffer. This should however not
happen for any tests in the test suite.
*/
int
my_getc
(
FILE
*
file
)
{
uint
i
,
j
;
int
tmp
[
MAX_DELIMITER
]
=
{
0
};
if
(
line_buffer_pos
==
line_buffer
)
return
fgetc
(
file
);
return
*--
line_buffer_pos
;
}
for
(
i
=
0
;
c
==
*
(
delimiter
+
i
)
&&
i
<
delimiter_length
;
i
++
,
c
=
fgetc
(
*
cur_file
))
tmp
[
i
]
=
c
;
void
my_ungetc
(
int
c
)
{
*
line_buffer_pos
++=
(
char
)
c
;
}
my_bool
end_of_query
(
int
c
)
{
uint
i
,
j
;
char
tmp
[
MAX_DELIMITER
];
if
(
c
!=
*
delimiter
)
return
0
;
for
(
i
=
1
;
i
<
delimiter_length
&&
(
c
=
my_getc
(
*
cur_file
))
==
*
(
delimiter
+
i
);
i
++
)
tmp
[
i
]
=
c
;
for
(
j
=
i
;
j
>
0
&&
i
!=
delimiter_length
;
j
--
)
ungetc
(
tmp
[
j
],
*
cur_file
);
if
(
i
==
delimiter_length
)
{
ungetc
(
tmp
[
i
],
*
cur_file
);
*
p
=
0
;
return
1
;
}
return
1
;
/* Found delimiter */
/* didn't find delimiter, push back things that we read */
my_ungetc
(
c
);
while
(
i
>
1
)
my_ungetc
(
tmp
[
--
i
]);
return
0
;
}
...
...
@@ -1681,7 +1712,7 @@ int read_line(char* buf, int size)
for
(;
p
<
buf_end
;)
{
no_save
=
0
;
c
=
f
getc
(
*
cur_file
);
c
=
my_
getc
(
*
cur_file
);
if
(
feof
(
*
cur_file
))
{
if
((
*
cur_file
)
!=
stdin
)
...
...
@@ -1696,8 +1727,11 @@ int read_line(char* buf, int size)
switch
(
state
)
{
case
R_NORMAL
:
/* Only accept '{' in the beginning of a line */
if
(
end_of_query
(
c
,
p
))
if
(
end_of_query
(
c
))
{
*
p
=
0
;
return
0
;
}
else
if
(
c
==
'\''
)
state
=
R_Q1
;
else
if
(
c
==
'"'
)
...
...
@@ -1733,7 +1767,7 @@ int read_line(char* buf, int size)
*
buf
=
0
;
return
0
;
}
else
if
(
end_of_query
(
c
,
p
)
||
c
==
'{'
)
else
if
(
end_of_query
(
c
)
||
c
==
'{'
)
{
*
p
=
0
;
return
0
;
...
...
@@ -1753,8 +1787,11 @@ int read_line(char* buf, int size)
state
=
R_ESC_SLASH_Q1
;
break
;
case
R_ESC_Q_Q1
:
if
(
end_of_query
(
c
,
p
))
if
(
end_of_query
(
c
))
{
*
p
=
0
;
return
0
;
}
if
(
c
!=
'\''
)
state
=
R_NORMAL
;
else
...
...
@@ -1771,8 +1808,11 @@ int read_line(char* buf, int size)
state
=
R_ESC_SLASH_Q2
;
break
;
case
R_ESC_Q_Q2
:
if
(
end_of_query
(
c
,
p
))
if
(
end_of_query
(
c
))
{
*
p
=
0
;
return
0
;
}
if
(
c
!=
'"'
)
state
=
R_NORMAL
;
else
...
...
@@ -1797,11 +1837,12 @@ int read_query(struct st_query** q_ptr)
char
*
p
=
read_query_buf
,
*
p1
;
int
expected_errno
;
struct
st_query
*
q
;
DBUG_ENTER
(
"read_query_buf"
);
if
(
parser
.
current_line
<
parser
.
read_lines
)
{
get_dynamic
(
&
q_lines
,
(
gptr
)
q_ptr
,
parser
.
current_line
)
;
return
0
;
DBUG_RETURN
(
0
)
;
}
if
(
!
(
*
q_ptr
=
q
=
(
struct
st_query
*
)
my_malloc
(
sizeof
(
*
q
),
MYF
(
MY_WME
)))
||
insert_dynamic
(
&
q_lines
,
(
gptr
)
&
q
))
...
...
@@ -1820,7 +1861,7 @@ int read_query(struct st_query** q_ptr)
q
->
type
=
Q_UNKNOWN
;
q
->
query_buf
=
q
->
query
=
0
;
if
(
read_line
(
read_query_buf
,
sizeof
(
read_query_buf
)))
return
1
;
DBUG_RETURN
(
1
)
;
if
(
*
p
==
'#'
)
{
...
...
@@ -1874,7 +1915,7 @@ int read_query(struct st_query** q_ptr)
q
->
first_argument
=
p
;
q
->
end
=
strend
(
q
->
query
);
parser
.
read_lines
++
;
return
0
;
DBUG_RETURN
(
0
)
;
}
...
...
@@ -2356,9 +2397,6 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
}
}
if
(
glob_replace
)
free_replace
();
if
(
record
)
{
if
(
!
q
->
record_file
[
0
]
&&
!
result_file
)
...
...
@@ -2379,6 +2417,7 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
mysql_error
(
mysql
);
end:
free_replace
();
last_result
=
0
;
if
(
ds
==
&
ds_tmp
)
dynstr_free
(
&
ds_tmp
);
...
...
@@ -2392,10 +2431,12 @@ void get_query_type(struct st_query* q)
{
char
save
;
uint
type
;
DBUG_ENTER
(
"get_query_type"
);
if
(
*
q
->
query
==
'}'
)
{
q
->
type
=
Q_END_BLOCK
;
return
;
DBUG_VOID_RETURN
;
}
if
(
q
->
type
!=
Q_COMMENT_WITH_COMMAND
)
q
->
type
=
Q_QUERY
;
...
...
@@ -2406,8 +2447,10 @@ void get_query_type(struct st_query* q)
q
->
query
[
q
->
first_word_len
]
=
save
;
if
(
type
>
0
)
q
->
type
=
(
enum
enum_commands
)
type
;
/* Found command */
DBUG_VOID_RETURN
;
}
static
byte
*
get_var_key
(
const
byte
*
var
,
uint
*
len
,
my_bool
__attribute__
((
unused
))
t
)
{
...
...
include/errmsg.h
View file @
042af556
...
...
@@ -63,29 +63,30 @@ extern const char *client_errors[]; /* Error messages */
#define CR_PROBE_MASTER_CONNECT 2025
#define CR_SSL_CONNECTION_ERROR 2026
#define CR_MALFORMED_PACKET 2027
#define CR_WRONG_LICENSE 2028
/* new 4.1 error codes */
#define CR_NULL_POINTER 202
8
#define CR_NO_PREPARE_STMT 20
29
#define CR_PARAMS_NOT_BOUND 203
0
#define CR_DATA_TRUNCATED 203
1
#define CR_NO_PARAMETERS_EXISTS 203
2
#define CR_INVALID_PARAMETER_NO 203
3
#define CR_INVALID_BUFFER_USE 203
4
#define CR_UNSUPPORTED_PARAM_TYPE 203
5
#define CR_NULL_POINTER 202
9
#define CR_NO_PREPARE_STMT 20
30
#define CR_PARAMS_NOT_BOUND 203
1
#define CR_DATA_TRUNCATED 203
2
#define CR_NO_PARAMETERS_EXISTS 203
3
#define CR_INVALID_PARAMETER_NO 203
4
#define CR_INVALID_BUFFER_USE 203
5
#define CR_UNSUPPORTED_PARAM_TYPE 203
6
#define CR_SHARED_MEMORY_CONNECTION 203
6
#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 203
7
#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 203
8
#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 20
39
#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 204
0
#define CR_SHARED_MEMORY_FILE_MAP_ERROR 204
1
#define CR_SHARED_MEMORY_MAP_ERROR 204
2
#define CR_SHARED_MEMORY_EVENT_ERROR 204
3
#define CR_SHARED_MEMORY_CONNECT_ABANDODED_ERROR 204
4
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 204
5
#define CR_CONN_UNKNOW_PROTOCOL 204
6
#define CR_INVALID_CONN_HANDLE 204
7
#define CR_SECURE_AUTH 204
8
#define CR_FETCH_CANCELLED 20
49
#define CR_NO_DATA 205
0
#define CR_SHARED_MEMORY_CONNECTION 203
7
#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 203
8
#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 203
9
#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 20
40
#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 204
1
#define CR_SHARED_MEMORY_FILE_MAP_ERROR 204
2
#define CR_SHARED_MEMORY_MAP_ERROR 204
3
#define CR_SHARED_MEMORY_EVENT_ERROR 204
4
#define CR_SHARED_MEMORY_CONNECT_ABANDODED_ERROR 204
5
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 204
6
#define CR_CONN_UNKNOW_PROTOCOL 204
7
#define CR_INVALID_CONN_HANDLE 204
8
#define CR_SECURE_AUTH 204
9
#define CR_FETCH_CANCELLED 20
50
#define CR_NO_DATA 205
1
include/mysql_version.h.in
View file @
042af556
...
...
@@ -23,4 +23,9 @@
/* mysqld compile time options */
#endif /* _CUSTOMCONFIG_ */
#ifndef LICENSE
#define LICENSE "GPL"
#endif /* LICENSE */
#endif /* _mysql_version_h */
innobase/btr/btr0btr.c
View file @
042af556
...
...
@@ -76,9 +76,6 @@ make them consecutive on disk if possible. From the other file segment
we allocate pages for the non-leaf levels of the tree.
*/
/* If this many inserts occur sequentially, it affects page split */
#define BTR_PAGE_SEQ_INSERT_LIMIT 5
/******************************************************************
Creates a new index page to the tree (not the root, and also not
used in page reorganization). */
...
...
@@ -1089,18 +1086,18 @@ btr_page_get_split_rec_to_left(
page
=
btr_cur_get_page
(
cursor
);
insert_point
=
btr_cur_get_rec
(
cursor
);
if
((
page_header_get_ptr
(
page
,
PAGE_LAST_INSERT
)
==
page_rec_get_next
(
insert_point
))
&&
(
page_header_get_field
(
page
,
PAGE_DIRECTION
)
==
PAGE_LEFT
)
&&
((
page_header_get_field
(
page
,
PAGE_N_DIRECTION
)
>=
BTR_PAGE_SEQ_INSERT_LIMIT
)
||
(
page_header_get_field
(
page
,
PAGE_N_DIRECTION
)
+
1
>=
page_get_n_recs
(
page
))))
{
if
(
page_header_get_ptr
(
page
,
PAGE_LAST_INSERT
)
==
page_rec_get_next
(
insert_point
))
{
infimum
=
page_get_infimum_rec
(
page
);
if
((
infimum
!=
insert_point
)
&&
(
page_rec_get_next
(
infimum
)
!=
insert_point
))
{
/* If the convergence is in the middle of a page, include also
the record immediately before the new insert to the upper
page. Otherwise, we could repeatedly move from page to page
lots of records smaller than the convergence point. */
if
(
infimum
!=
insert_point
&&
page_rec_get_next
(
infimum
)
!=
insert_point
)
{
*
split_rec
=
insert_point
;
}
else
{
...
...
@@ -1134,29 +1131,29 @@ btr_page_get_split_rec_to_right(
page
=
btr_cur_get_page
(
cursor
);
insert_point
=
btr_cur_get_rec
(
cursor
);
if
((
page_header_get_ptr
(
page
,
PAGE_LAST_INSERT
)
==
insert_point
)
&&
(
page_header_get_field
(
page
,
PAGE_DIRECTION
)
==
PAGE_RIGHT
)
&&
((
page_header_get_field
(
page
,
PAGE_N_DIRECTION
)
>=
BTR_PAGE_SEQ_INSERT_LIMIT
)
||
(
page_header_get_field
(
page
,
PAGE_N_DIRECTION
)
+
1
>=
page_get_n_recs
(
page
))))
{
/* We use eager heuristics: if the new insert would be right after
the previous insert on the same page, we assume that there is a
pattern of sequential inserts here. */
if
(
page_header_get_ptr
(
page
,
PAGE_LAST_INSERT
)
==
insert_point
)
{
supremum
=
page_get_supremum_rec
(
page
);
if
((
page_rec_get_next
(
insert_point
)
!=
supremum
)
&&
(
page_rec_get_next
(
page_rec_get_next
(
insert_point
))
!=
supremum
)
&&
(
page_rec_get_next
(
page_rec_get_next
(
page_rec_get_next
(
insert_point
)))
!=
supremum
))
{
if
(
page_rec_get_next
(
insert_point
)
!=
supremum
&&
page_rec_get_next
(
page_rec_get_next
(
insert_point
))
!=
supremum
)
{
/* If there are >= 3 user records up from the insert
point, split all but 2 off */
/* If there are >= 2 user records up from the insert
point, split all but 1 off. We want to keep one because
then sequential inserts can use the adaptive hash
index, as they can do the necessary checks of the right
search position just by looking at the records on this
page. */
*
split_rec
=
page_rec_get_next
(
page_rec_get_next
(
page_rec_get_next
(
insert_point
))
)
;
*
split_rec
=
page_rec_get_next
(
page_rec_get_next
(
insert_point
));
}
else
{
/* Else split at
inserted record
*/
/* Else split at
the new record to insert
*/
*
split_rec
=
NULL
;
}
...
...
innobase/btr/btr0cur.c
View file @
042af556
...
...
@@ -2682,10 +2682,11 @@ btr_estimate_number_of_different_key_vals(
btr_cur_open_at_rnd_pos
(
index
,
BTR_SEARCH_LEAF
,
&
cursor
,
&
mtr
);
/* Count the number of different key values minus one
for each prefix of the key on this index page: we subtract
one because otherwise our algorithm would give a wrong
estimate for an index where there is just one key value */
/* Count the number of different key values for each prefix of
the key on this index page. If the prefix does not determine
the index record uniquely in te B-tree, then we subtract one
because otherwise our algorithm would give a wrong estimate
for an index where there is just one key value. */
page
=
btr_cur_get_page
(
&
cursor
);
...
...
@@ -2707,6 +2708,9 @@ btr_estimate_number_of_different_key_vals(
&
matched_bytes
);
for
(
j
=
matched_fields
+
1
;
j
<=
n_cols
;
j
++
)
{
/* We add one if this index record has
a different prefix from the previous */
n_diff
[
j
]
++
;
}
...
...
@@ -2716,6 +2720,18 @@ btr_estimate_number_of_different_key_vals(
rec
=
page_rec_get_next
(
rec
);
}
if
(
n_cols
==
dict_index_get_n_unique_in_tree
(
index
))
{
/* We add one because we know that the first record
on the page certainly had a different prefix than the
last record on the previous index page in the
alphabetical order. Before this fix, if there was
just one big record on each clustered index page, the
algorithm grossly underestimated the number of rows
in the table. */
n_diff
[
n_cols
]
++
;
}
total_external_size
+=
btr_rec_get_externally_stored_len
(
rec
);
mtr_commit
(
&
mtr
);
...
...
innobase/que/que0que.c
View file @
042af556
...
...
@@ -668,15 +668,15 @@ does nothing! */
void
que_thr_handle_error
(
/*=================*/
que_thr_t
*
thr
__attribute
((
unused
)),
que_thr_t
*
thr
__attribute
__
((
unused
)),
/* in: query thread */
ulint
err_no
__attribute
((
unused
)),
ulint
err_no
__attribute
__
((
unused
)),
/* in: error number */
byte
*
err_str
__attribute
((
unused
)),
byte
*
err_str
__attribute
__
((
unused
)),
/* in, own: error string or NULL; NOTE: the
function will take care of freeing of the
string! */
ulint
err_len
__attribute
((
unused
)))
ulint
err_len
__attribute
__
((
unused
)))
/* in: error string length */
{
/* Does nothing */
...
...
libmysql/errmsg.c
View file @
042af556
...
...
@@ -52,6 +52,7 @@ const char *client_errors[]=
"Error connecting to master:"
,
"SSL connection error"
,
"Malformed packet"
,
"This client library is licensed only for use with MySQL servers having '%s' license"
,
"Invalid use of null pointer"
,
"Statement not prepared"
,
"Parameters data was not supplied"
,
...
...
@@ -110,6 +111,7 @@ const char *client_errors[]=
"Error connecting to master:"
,
"SSL connection error"
,
"Malformed packet"
,
"This client library is licensed only for use with MySQL servers having '%s' license"
,
"Invalid use of null pointer"
,
"Statement not prepared"
,
"Parameters data was not supplied"
,
...
...
@@ -166,6 +168,7 @@ const char *client_errors[]=
"Error connecting to master:"
,
"SSL connection error"
,
"Malformed packet"
,
"This client library is licensed only for use with MySQL servers having '%s' license"
,
"Invalid use of null pointer"
,
"Statement not prepared"
,
"Not all parameters data supplied"
,
...
...
libmysql/libmysql.c
View file @
042af556
...
...
@@ -603,6 +603,57 @@ mysql_connect(MYSQL *mysql,const char *host,
#endif
#ifdef CHECK_LICENSE
/*
Check server side variable 'license'.
If the variable does not exist or does not contain 'Commercial',
we're talking to non-commercial server from commercial client.
SYNOPSIS
check_license()
RETURN VALUE
0 success
!0 network error or the server is not commercial.
Error code is saved in mysql->net.last_errno.
*/
static
int
check_license
(
MYSQL
*
mysql
)
{
MYSQL_ROW
row
;
MYSQL_RES
*
res
;
NET
*
net
=
&
mysql
->
net
;
static
const
char
query
[]
=
"SELECT @@license"
;
static
const
char
required_license
[]
=
LICENSE
;
if
(
mysql_real_query
(
mysql
,
query
,
sizeof
(
query
)
-
1
))
{
if
(
net
->
last_errno
==
ER_UNKNOWN_SYSTEM_VARIABLE
)
{
net
->
last_errno
=
CR_WRONG_LICENSE
;
sprintf
(
net
->
last_error
,
ER
(
net
->
last_errno
),
required_license
);
}
return
1
;
}
if
(
!
(
res
=
mysql_use_result
(
mysql
)))
return
1
;
row
=
mysql_fetch_row
(
res
);
/*
If no rows in result set, or column value is NULL (none of these
two is ever true for server variables now), or column value
mismatch, set wrong license error.
*/
if
(
!
net
->
last_errno
&&
(
!
row
||
!
row
[
0
]
||
strncmp
(
row
[
0
],
required_license
,
sizeof
(
required_license
))))
{
net
->
last_errno
=
CR_WRONG_LICENSE
;
sprintf
(
net
->
last_error
,
ER
(
net
->
last_errno
),
required_license
);
}
mysql_free_result
(
res
);
return
net
->
last_errno
;
}
#endif
/* CHECK_LICENSE */
/**************************************************************************
Change user and database
**************************************************************************/
...
...
mysql-test/mysql-test-run.sh
View file @
042af556
...
...
@@ -10,7 +10,7 @@
# Access Definitions
#--
DB
=
test
DBPASSWD
=
DBPASSWD
=
""
VERBOSE
=
""
USE_MANAGER
=
0
MY_TZ
=
GMT-3
...
...
@@ -18,7 +18,7 @@ TZ=$MY_TZ; export TZ # for UNIX_TIMESTAMP tests to work
LOCAL_SOCKET
=
@MYSQL_UNIX_ADDR@
# For query_cache test
case
"
$SYSTEM
"
in
case
`
uname
`
in
SCO_SV
|
UnixWare
|
OpenUNIX
)
# do nothing (Causes strange behavior)
;;
...
...
@@ -469,12 +469,13 @@ if [ x$SOURCE_DIST = x1 ] ; then
MYSQL_TEST
=
"strace -o
$MYSQL_TEST_DIR
/var/log/mysqltest.strace
$MYSQL_TEST
"
fi
MYSQLADMIN
=
"
$BASEDIR
/client/mysqladmin"
CLIENT_BINDIR
=
"
$BASEDIR
/client"
MYSQLADMIN
=
"
$CLIENT_BINDIR
/mysqladmin"
WAIT_PID
=
"
$BASEDIR
/extra/mysql_waitpid"
MYSQL_MANAGER_CLIENT
=
"
$
BASEDIR
/client
/mysqlmanagerc"
MYSQL_MANAGER_CLIENT
=
"
$
CLIENT_BINDIR
/mysqlmanagerc"
MYSQL_MANAGER
=
"
$BASEDIR
/tools/mysqlmanager"
MYSQL_MANAGER_PWGEN
=
"
$
BASEDIR
/client
/mysqlmanager-pwgen"
MYSQL
=
"
$
BASEDIR
/client
/mysql"
MYSQL_MANAGER_PWGEN
=
"
$
CLIENT_BINDIR
/mysqlmanager-pwgen"
MYSQL
=
"
$
CLIENT_BINDIR
/mysql"
LANGUAGE
=
"
$BASEDIR
/sql/share/english/"
CHARSETSDIR
=
"
$BASEDIR
/sql/share/charsets"
INSTALL_DB
=
"./install_test_db"
...
...
@@ -486,17 +487,18 @@ else
else
MYSQLD
=
"
$VALGRIND
$BASEDIR
/bin/mysqld"
fi
MYSQL_TEST
=
"
$BASEDIR
/bin/mysqltest"
MYSQL_DUMP
=
"
$BASEDIR
/bin/mysqldump"
MYSQL_BINLOG
=
"
$BASEDIR
/bin/mysqlbinlog"
MYSQLADMIN
=
"
$BASEDIR
/bin/mysqladmin"
WAIT_PID
=
"
$BASEDIR
/bin/mysql_waitpid"
MYSQL_MANAGER
=
"
$BASEDIR
/bin/mysqlmanager"
MYSQL_MANAGER_CLIENT
=
"
$BASEDIR
/bin/mysqlmanagerc"
MYSQL_MANAGER_PWGEN
=
"
$BASEDIR
/bin/mysqlmanager-pwgen"
MYSQL
=
"
$BASEDIR
/bin/mysql"
CLIENT_BINDIR
=
"
$BASEDIR
/bin"
MYSQL_TEST
=
"
$CLIENT_BINDIR
/mysqltest"
MYSQL_DUMP
=
"
$CLIENT_BINDIR
/mysqldump"
MYSQL_BINLOG
=
"
$CLIENT_BINDIR
/mysqlbinlog"
MYSQLADMIN
=
"
$CLIENT_BINDIR
/mysqladmin"
WAIT_PID
=
"
$CLIENT_BINDIR
/mysql_waitpid"
MYSQL_MANAGER
=
"
$CLIENT_BINDIR
/mysqlmanager"
MYSQL_MANAGER_CLIENT
=
"
$CLIENT_BINDIR
/mysqlmanagerc"
MYSQL_MANAGER_PWGEN
=
"
$CLIENT_BINDIR
/mysqlmanager-pwgen"
MYSQL
=
"
$CLIENT_BINDIR
/mysql"
INSTALL_DB
=
"./install_test_db --bin"
MYSQL_FIX_SYSTEM_TABLES
=
"
$
BASEDIR
/bin
/mysql_fix_privilege_tables"
MYSQL_FIX_SYSTEM_TABLES
=
"
$
CLIENT_BINDIR
/mysql_fix_privilege_tables"
if
test
-d
"
$BASEDIR
/share/mysql/english"
then
LANGUAGE
=
"
$BASEDIR
/share/mysql/english/"
...
...
@@ -507,11 +509,12 @@ else
fi
fi
MYSQL_DUMP
=
"
$MYSQL_DUMP
--no-defaults -uroot --socket=
$MASTER_MYSOCK
$EXTRA_MYSQLDUMP_OPT
"
MYSQL_DUMP
=
"
$MYSQL_DUMP
--no-defaults -uroot --socket=
$MASTER_MYSOCK
--password=
$DBPASSWD
$EXTRA_MYSQLDUMP_OPT
"
MYSQL_BINLOG
=
"
$MYSQL_BINLOG
--no-defaults --local-load=
$MYSQL_TMP_DIR
$EXTRA_MYSQLBINLOG_OPT
"
MYSQL_FIX_SYSTEM_TABLES
=
"
$MYSQL_FIX_SYSTEM_TABLES
--host=localhost --port=
$MASTER_MYPORT
--socket=
$MASTER_MYSOCK
--user=root --password="
MYSQL
=
"
$MYSQL
--host=localhost --port=
$MASTER_MYPORT
--socket=
$MASTER_MYSOCK
--user=root --password="
export
MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
MYSQL_FIX_SYSTEM_TABLES
=
"
$MYSQL_FIX_SYSTEM_TABLES
--host=localhost --port=
$MASTER_MYPORT
--socket=
$MASTER_MYSOCK
--user=root --password=
$DBPASSWD
--basedir=
$BASEDIR
--bindir=
$CLIENT_BINDIR
--verbose=1"
MYSQL
=
"
$MYSQL
--host=localhost --port=
$MASTER_MYPORT
--socket=
$MASTER_MYSOCK
--user=root --password=
$DBPASSWD
"
export
MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR
if
[
-z
"
$MASTER_MYSQLD
"
]
then
...
...
mysql-test/r/derived.result
View file @
042af556
...
...
@@ -271,8 +271,8 @@ delete P1.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Cou
select * from t1;
N M
3 0
delete P1.*,
P2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P
2.N;
ERROR HY000: The target table
P
2 of the DELETE is not updatable
delete P1.*,
p2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS p2 ON P1.N = p
2.N;
ERROR HY000: The target table
p
2 of the DELETE is not updatable
delete P1.* from `t1` AS P1 INNER JOIN (SELECT aaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
ERROR 42S22: Unknown column 'aaa' in 'field list'
drop table t1;
...
...
mysql-test/r/func_math.result
View file @
042af556
...
...
@@ -119,15 +119,6 @@ ASIN(0.8+0.2)
SELECT ASIN(1.2-0.2);
ASIN(1.2-0.2)
1.570796
select floor(log(4)/log(2));
floor(log(4)/log(2))
2
select floor(log(8)/log(2));
floor(log(8)/log(2))
3
select floor(log(16)/log(2));
floor(log(16)/log(2))
4
explain extended select degrees(pi()),radians(360);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
...
...
mysql-test/r/rpl000009.result
View file @
042af556
...
...
@@ -112,6 +112,18 @@ n s
2 two test
3 three test
4 four test
stop slave;
reset slave;
load data from master;
start slave;
insert into mysqltest.t1 values (5, 'five bar');
select * from mysqltest.t1;
n s
1 one test
2 two test
3 three test
4 four test
5 five bar
load table mysqltest.t1 from master;
ERROR 42S01: Table 't1' already exists
drop table mysqltest.t1;
...
...
mysql-test/r/rpl_error_ignored_table.result
View file @
042af556
...
...
@@ -26,7 +26,7 @@ select (@id := id) - id from t3;
0
kill @id;
drop table t2,t3;
ERROR 08S01: Server shutdown in progres
s
Got one of the listed error
s
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 79 Query 1 79 use `test`; create table t1 (a int primary key)
...
...
mysql-test/r/system_mysql_db.result
View file @
042af556
...
...
@@ -3,6 +3,10 @@ Tables_in_db
columns_priv
db
func
help_category
help_keyword
help_relation
help_topic
host
tables_priv
user
...
...
@@ -26,7 +30,7 @@ db CREATE TABLE `db` (
`Lock_tables_priv` enum('N','Y') NOT NULL default 'N',
PRIMARY KEY (`Host`,`Db`,`User`),
KEY `User` (`User`)
)
TYPE=MyISAM
COMMENT='Database privileges'
)
ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='Database privileges'
show create table host;
Table Create Table
host CREATE TABLE `host` (
...
...
@@ -45,13 +49,13 @@ host CREATE TABLE `host` (
`Create_tmp_table_priv` enum('N','Y') NOT NULL default 'N',
`Lock_tables_priv` enum('N','Y') NOT NULL default 'N',
PRIMARY KEY (`Host`,`Db`)
)
TYPE=MyISAM
COMMENT='Host privileges; Merged with database privileges'
)
ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='Host privileges; Merged with database privileges'
show create table user;
Table Create Table
user CREATE TABLE `user` (
`Host` varchar(60) binary NOT NULL default '',
`User` varchar(16) binary NOT NULL default '',
`Password` varchar(
16
) binary NOT NULL default '',
`Password` varchar(
41
) binary NOT NULL default '',
`Select_priv` enum('N','Y') NOT NULL default 'N',
`Insert_priv` enum('N','Y') NOT NULL default 'N',
`Update_priv` enum('N','Y') NOT NULL default 'N',
...
...
@@ -81,16 +85,16 @@ user CREATE TABLE `user` (
`max_updates` int(11) unsigned NOT NULL default '0',
`max_connections` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`Host`,`User`)
)
TYPE=MyISAM
COMMENT='Users and global privileges'
)
ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='Users and global privileges'
show create table func;
Table Create Table
func CREATE TABLE `func` (
`name` char(64) NOT NULL default '',
`name` char(64)
binary
NOT NULL default '',
`ret` tinyint(1) NOT NULL default '0',
`dl` char(128) NOT NULL default '',
`type` enum('function','aggregate') NOT NULL default 'function',
PRIMARY KEY (`name`)
)
TYPE=MyISAM
COMMENT='User defined functions'
)
ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='User defined functions'
show create table tables_priv;
Table Create Table
tables_priv CREATE TABLE `tables_priv` (
...
...
@@ -99,12 +103,12 @@ tables_priv CREATE TABLE `tables_priv` (
`User` char(16) binary NOT NULL default '',
`Table_name` char(64) binary NOT NULL default '',
`Grantor` char(77) NOT NULL default '',
`Timestamp` timestamp
(14)
NOT NULL,
`Timestamp` timestamp NOT NULL,
`Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') NOT NULL default '',
`Column_priv` set('Select','Insert','Update','References') NOT NULL default '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
KEY `Grantor` (`Grantor`)
)
TYPE=MyISAM
COMMENT='Table privileges'
)
ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='Table privileges'
show create table columns_priv;
Table Create Table
columns_priv CREATE TABLE `columns_priv` (
...
...
@@ -113,7 +117,7 @@ columns_priv CREATE TABLE `columns_priv` (
`User` char(16) binary NOT NULL default '',
`Table_name` char(64) binary NOT NULL default '',
`Column_name` char(64) binary NOT NULL default '',
`Timestamp` timestamp
(14)
NOT NULL,
`Timestamp` timestamp NOT NULL,
`Column_priv` set('Select','Insert','Update','References') NOT NULL default '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
)
TYPE=MyISAM
COMMENT='Column privileges'
)
ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='Column privileges'
mysql-test/r/system_mysql_db_refs.result
View file @
042af556
mysql-test/r/union.result
View file @
042af556
...
...
@@ -907,3 +907,18 @@ n
9
10
drop table t1;
create table t1 (i int);
insert into t1 values (1);
select * from t1 UNION select * from t1;
i
1
select * from t1 UNION ALL select * from t1;
i
1
1
select * from t1 UNION select * from t1 UNION ALL select * from t1;
i
1
1
1
drop table t1;
mysql-test/t/derived.test
View file @
042af556
...
...
@@ -157,7 +157,8 @@ UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1)
UPDATE
`t1`
AS
P1
INNER
JOIN
(
SELECT
aaaa
FROM
`t1`
GROUP
BY
N
HAVING
Count
(
M
)
>
1
)
AS
P2
ON
P1
.
N
=
P2
.
N
SET
P1
.
M
=
2
;
delete
P1
.*
from
`t1`
AS
P1
INNER
JOIN
(
SELECT
N
FROM
`t1`
GROUP
BY
N
HAVING
Count
(
M
)
>
1
)
AS
P2
ON
P1
.
N
=
P2
.
N
;
select
*
from
t1
;
--
error
1288
--
replace_result
P2
p2
--
error
1288
delete
P1
.*
,
P2
.*
from
`t1`
AS
P1
INNER
JOIN
(
SELECT
N
FROM
`t1`
GROUP
BY
N
HAVING
Count
(
M
)
>
1
)
AS
P2
ON
P1
.
N
=
P2
.
N
;
--
error
1054
delete
P1
.*
from
`t1`
AS
P1
INNER
JOIN
(
SELECT
aaa
FROM
`t1`
GROUP
BY
N
HAVING
Count
(
M
)
>
1
)
AS
P2
ON
P1
.
N
=
P2
.
N
;
...
...
mysql-test/t/func_math.test
View file @
042af556
...
...
@@ -45,7 +45,9 @@ SELECT ASIN(1.2-0.2);
# Bug #3051 FLOOR returns invalid
#
select
floor
(
log
(
4
)
/
log
(
2
));
select
floor
(
log
(
8
)
/
log
(
2
));
select
floor
(
log
(
16
)
/
log
(
2
));
# This can't be tested as it's not portable
#select floor(log(4)/log(2));
#select floor(log(8)/log(2));
#select floor(log(16)/log(2));
explain
extended
select
degrees
(
pi
()),
radians
(
360
);
mysql-test/t/reserv/system_mysql_db_fix.test
deleted
100644 → 0
View file @
ce3a82f4
#
# This is the test for mysql_fix_privilege_tables
#
--
disable_query_log
--
source
include
/
create_old_system_tables
.
inc
--
exec
$MYSQL_FIX_SYSTEM_TABLES
--
database
=
test
>
nil
2
>
nil
--
enable_query_log
--
source
include
/
system_db_struct
.
inc
--
disable_query_log
--
source
include
/
drop_system_tables
.
inc
--
enable_query_log
mysql-test/t/rpl000009.test
View file @
042af556
...
...
@@ -118,6 +118,21 @@ connection slave;
sync_with_master
;
select
*
from
mysqltest
.
t1
;
# Check that LOAD DATA FROM MASTER is able to create master.info
# if needed (if RESET SLAVE was used before), before writing to it (BUG#2922).
stop
slave
;
reset
slave
;
load
data
from
master
;
start
slave
;
# see if replication coordinates were restored fine
connection
master
;
insert
into
mysqltest
.
t1
values
(
5
,
'five bar'
);
save_master_pos
;
connection
slave
;
sync_with_master
;
select
*
from
mysqltest
.
t1
;
# Check that LOAD DATA FROM MASTER reports the error if it can't drop a
# table to be overwritten.
# DISABLED FOR NOW AS chmod IS NOT PORTABLE ON NON-UNIX
...
...
mysql-test/t/rpl_error_ignored_table.test
View file @
042af556
...
...
@@ -45,7 +45,7 @@ select (@id := id) - id from t3;
kill
@
id
;
drop
table
t2
,
t3
;
connection
master
;
--
error
1053
;
--
error
1053
,
0
;
reap
;
connection
master1
;
show
binlog
events
from
79
;
...
...
mysql-test/t/
reserv/
system_mysql_db.test
→
mysql-test/t/system_mysql_db.test
View file @
042af556
mysql-test/t/
reserv/
system_mysql_db_fix-master.opt
→
mysql-test/t/system_mysql_db_fix-master.opt
View file @
042af556
File moved
mysql-test/t/system_mysql_db_fix.test
0 → 100644
View file @
042af556
#
# This is the test for mysql_fix_privilege_tables
#
--
disable_result_log
--
disable_query_log
use
test
;
# create system tables as in mysql-3.20
CREATE
TABLE
db
(
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
Db
char
(
32
)
binary
DEFAULT
''
NOT
NULL
,
User
char
(
16
)
binary
DEFAULT
''
NOT
NULL
,
Select_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Insert_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Update_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Delete_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Create_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Drop_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
PRIMARY
KEY
Host
(
Host
,
Db
,
User
),
KEY
User
(
User
)
)
type
=
ISAM
;
INSERT
INTO
db
VALUES
(
'%'
,
'test'
,
''
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
);
INSERT
INTO
db
VALUES
(
'%'
,
'test\_%'
,
''
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
);
CREATE
TABLE
host
(
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
Db
char
(
32
)
binary
DEFAULT
''
NOT
NULL
,
Select_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Insert_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Update_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Delete_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Create_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Drop_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
PRIMARY
KEY
Host
(
Host
,
Db
)
)
type
=
ISAM
;
CREATE
TABLE
user
(
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
User
char
(
16
)
binary
DEFAULT
''
NOT
NULL
,
Password
char
(
16
),
Select_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Insert_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Update_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Delete_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Create_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Drop_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Reload_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Shutdown_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
Process_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
PRIMARY
KEY
Host
(
Host
,
User
)
)
type
=
ISAM
;
INSERT
INTO
user
VALUES
(
'localhost'
,
'root'
,
''
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
,
'Y'
);
INSERT
INTO
user
VALUES
(
'localhost'
,
''
,
''
,
'N'
,
'N'
,
'N'
,
'N'
,
'N'
,
'N'
,
'N'
,
'N'
,
'N'
);
--
exec
$MYSQL_FIX_SYSTEM_TABLES
--
database
=
test
--
enable_query_log
--
enable_result_log
--
source
include
/
system_db_struct
.
inc
--
disable_query_log
DROP
TABLE
db
;
DROP
TABLE
host
;
DROP
TABLE
user
;
DROP
TABLE
func
;
DROP
TABLE
tables_priv
;
DROP
TABLE
columns_priv
;
--
enable_query_log
mysql-test/t/
reserv/
system_mysql_db_refs.test
→
mysql-test/t/system_mysql_db_refs.test
View file @
042af556
...
...
@@ -10,27 +10,39 @@ set @name="This is a very long string, that mustn't find room in a system field
create
table
test_db
select
*
from
mysql
.
db
;
delete
from
test_db
;
--
disable_warnings
insert
into
test_db
(
Host
,
Db
,
User
)
values
(
@
name
,
@
name
,
@
name
);
--
enable_warnings
create
table
test_host
select
*
from
mysql
.
host
;
delete
from
test_host
;
--
disable_warnings
insert
into
test_host
(
Host
,
Db
)
values
(
@
name
,
@
name
);
--
enable_warnings
create
table
test_user
select
*
from
mysql
.
user
;
delete
from
test_user
;
--
disable_warnings
insert
into
test_user
(
Host
,
User
)
values
(
@
name
,
@
name
);
--
enable_warnings
create
table
test_func
select
*
from
mysql
.
func
;
delete
from
test_func
;
--
disable_warnings
insert
into
test_func
(
name
)
values
(
@
name
);
--
enable_warnings
create
table
test_tables_priv
select
*
from
mysql
.
tables_priv
;
delete
from
test_tables_priv
;
--
disable_warnings
insert
into
test_tables_priv
(
Host
,
Db
,
User
,
Table_name
)
values
(
@
name
,
@
name
,
@
name
,
@
name
);
--
enable_warnings
create
table
test_columns_priv
select
*
from
mysql
.
columns_priv
;
delete
from
test_columns_priv
;
--
disable_warnings
insert
into
test_columns_priv
(
Host
,
Db
,
User
,
Table_name
,
Column_name
)
values
(
@
name
,
@
name
,
@
name
,
@
name
,
@
name
);
--
enable_warnings
# 'Host' field must be the same for all the tables:
...
...
mysql-test/t/union.test
View file @
042af556
...
...
@@ -483,3 +483,16 @@ select col1 n from t1 union select col2 n from t1 order by n;
alter
table
t1
add
index
myindex
(
col2
);
select
col1
n
from
t1
union
select
col2
n
from
t1
order
by
n
;
drop
table
t1
;
#
# Bug #1428, incorrect handling of UNION ALL
# NOTE: The current result is wrong, needs to be fixed!
#
create
table
t1
(
i
int
);
insert
into
t1
values
(
1
);
select
*
from
t1
UNION
select
*
from
t1
;
select
*
from
t1
UNION
ALL
select
*
from
t1
;
# The following should return 2 lines
select
*
from
t1
UNION
select
*
from
t1
UNION
ALL
select
*
from
t1
;
drop
table
t1
;
mysys/mf_soundex.c
View file @
042af556
...
...
@@ -28,6 +28,10 @@
* *
* As an extension if remove_garbage is set then all non- *
* alpha characters are skipped *
* *
* Note, that this implementation corresponds to the *
* original version of the algorithm, not to the more *
* popular "enhanced" version, described by Knuth. *
****************************************************************/
#include "mysys_priv.h"
...
...
scripts/mysql_create_system_tables.sh
View file @
042af556
...
...
@@ -188,7 +188,7 @@ then
c_t
=
"
$c_t
Host char(60) binary DEFAULT '' NOT NULL,"
c_t
=
"
$c_t
Db char(64) binary DEFAULT '' NOT NULL,"
c_t
=
"
$c_t
User char(16) binary DEFAULT '' NOT NULL,"
c_t
=
"
$c_t
Table_name char(6
0
) binary DEFAULT '' NOT NULL,"
c_t
=
"
$c_t
Table_name char(6
4
) binary DEFAULT '' NOT NULL,"
c_t
=
"
$c_t
Grantor char(77) DEFAULT '' NOT NULL,"
c_t
=
"
$c_t
Timestamp timestamp(14),"
c_t
=
"
$c_t
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
...
...
scripts/mysql_fix_privilege_tables.sh
View file @
042af556
...
...
@@ -13,6 +13,7 @@ args=""
port
=
""
socket
=
""
database
=
"mysql"
bindir
=
""
file
=
mysql_fix_privilege_tables.sql
...
...
@@ -40,6 +41,7 @@ parse_arguments() {
--port
=
*
)
port
=
`
echo
"
$arg
"
|
sed
-e
"s;--port=;;"
`
;;
--socket
=
*
)
socket
=
`
echo
"
$arg
"
|
sed
-e
"s;--socket=;;"
`
;;
--database
=
*
)
database
=
`
echo
"
$arg
"
|
sed
-e
"s;--database=;;"
`
;;
--bindir
=
*
)
bindir
=
`
echo
"
$arg
"
|
sed
-e
"s;--bindir=;;"
`
;;
*
)
if
test
-n
"
$pick_args
"
then
...
...
@@ -54,21 +56,15 @@ parse_arguments() {
# Get first arguments from the my.cfg file, groups [mysqld] and
# [mysql_install_db], and then merge with the command line arguments
if
test
-x
./bin/my_print_defaults
then
print_defaults
=
"./bin/my_print_defaults"
elif
test
-x
@bindr@/my_print_defaults
then
print_defaults
=
"@bindir@/my_print_defaults"
elif
test
-x
@bindir@/mysql_print_defaults
then
print_defaults
=
"@bindir@/mysql_print_defaults"
elif
test
-x
extra/my_print_defaults
then
print_defaults
=
"extra/my_print_defaults"
else
print_defaults
=
"my_print_defaults"
fi
for
dir
in
./bin @bindir@ @bindir@ extra
$bindir
/../bin
$bindir
/../extra
do
if
test
-x
$dir
/my_print_defaults
then
print_defaults
=
"
$dir
/my_print_defaults"
break
fi
done
parse_arguments
`
$print_defaults
$defaults
mysql_install_db mysql_fix_privilege_tables
`
parse_arguments PICK-ARGS-FROM-ARGV
"
$@
"
...
...
@@ -76,11 +72,17 @@ parse_arguments PICK-ARGS-FROM-ARGV "$@"
if
test
-z
"
$basedir
"
then
basedir
=
@prefix@
if
test
-z
"
$bindir
"
then
bindir
=
@bindir@
fi
execdir
=
@libexecdir@
pkgdatadir
=
@pkgdatadir@
else
if
test
-z
"
$bindir
"
then
bindir
=
"
$basedir
/bin"
fi
if
test
-x
"
$basedir
/libexec/mysqld"
then
execdir
=
"
$basedir
/libexec"
...
...
@@ -101,7 +103,6 @@ fi
cmd
=
"
$bindir
/mysql -f --user=
$user
--host=
$host
"
if
test
-z
"
$password
"
;
then
else
cmd
=
"
$cmd
--password=
$password
"
fi
if
test
!
-z
"
$port
"
;
then
...
...
scripts/mysql_fix_privilege_tables.sql
View file @
042af556
...
...
@@ -7,19 +7,18 @@
-- On unix, you should use the mysql_fix_privilege_tables script to execute
-- this sql script.
-- On windows you should do 'mysql --force < mysql_fix_privilege_tables.sql'
-- On windows you should do 'mysql --force
mysql
< mysql_fix_privilege_tables.sql'
USE
mysql
;
ALTER
TABLE
user
type
=
MyISAM
;
ALTER
TABLE
db
type
=
MyISAM
;
ALTER
TABLE
host
type
=
MyISAM
;
ALTER
TABLE
func
type
=
MyISAM
;
ALTER
TABLE
columns_priv
type
=
MyISAM
;
ALTER
TABLE
tables_priv
type
=
MyISAM
;
ALTER
TABLE
user
change
Password
Password
char
(
41
)
not
null
;
ALTER
TABLE
user
change
Password
Password
char
(
41
)
binary
not
null
;
ALTER
TABLE
user
add
File_priv
enum
(
'N'
,
'Y'
)
NOT
NULL
;
CREATE
TABLE
IF
NOT
EXISTS
func
(
name
char
(
64
)
DEFAULT
''
NOT
NULL
,
name
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
ret
tinyint
(
1
)
DEFAULT
'0'
NOT
NULL
,
dl
char
(
128
)
DEFAULT
''
NOT
NULL
,
type
enum
(
'function'
,
'aggregate'
)
NOT
NULL
,
...
...
@@ -39,6 +38,10 @@ UPDATE user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Crea
UPDATE
db
SET
References_priv
=
Create_priv
,
Index_priv
=
Create_priv
,
Alter_priv
=
Create_priv
WHERE
@
hadGrantPriv
=
0
;
UPDATE
host
SET
References_priv
=
Create_priv
,
Index_priv
=
Create_priv
,
Alter_priv
=
Create_priv
WHERE
@
hadGrantPriv
=
0
;
--
-- The second alter changes ssl_type to new 4.0.2 format
-- Adding columns needed by GRANT .. REQUIRE (openssl)"
ALTER
TABLE
user
ADD
ssl_type
enum
(
''
,
'ANY'
,
'X509'
,
'SPECIFIED'
)
NOT
NULL
,
ADD
ssl_cipher
BLOB
NOT
NULL
,
...
...
@@ -46,11 +49,15 @@ ADD x509_issuer BLOB NOT NULL,
ADD
x509_subject
BLOB
NOT
NULL
;
ALTER
TABLE
user
MODIFY
ssl_type
enum
(
''
,
'ANY'
,
'X509'
,
'SPECIFIED'
)
NOT
NULL
;
--
-- Create tables_priv and columns_priv if they don't exists
--
CREATE
TABLE
IF
NOT
EXISTS
tables_priv
(
Host
char
(
60
)
DEFAULT
''
NOT
NULL
,
Db
char
(
6
0
)
DEFAULT
''
NOT
NULL
,
User
char
(
16
)
DEFAULT
''
NOT
NULL
,
Table_name
char
(
6
0
)
DEFAULT
''
NOT
NULL
,
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
Db
char
(
6
4
)
binary
DEFAULT
''
NOT
NULL
,
User
char
(
16
)
binary
DEFAULT
''
NOT
NULL
,
Table_name
char
(
6
4
)
binary
DEFAULT
''
NOT
NULL
,
Grantor
char
(
77
)
DEFAULT
''
NOT
NULL
,
Timestamp
timestamp
(
14
),
Table_priv
set
(
'Select'
,
'Insert'
,
'Update'
,
'Delete'
,
'Create'
,
'Drop'
,
'Grant'
,
'References'
,
'Index'
,
'Alter'
)
DEFAULT
''
NOT
NULL
,
...
...
@@ -69,16 +76,29 @@ CREATE TABLE IF NOT EXISTS columns_priv (
PRIMARY
KEY
(
Host
,
Db
,
User
,
Table_name
,
Column_name
)
);
--
-- Name change of Type -> Column_priv from MySQL 3.22.12
--
ALTER
TABLE
columns_priv
change
Type
Column_priv
set
(
'Select'
,
'Insert'
,
'Update'
,
'References'
)
DEFAULT
''
NOT
NULL
;
--
-- Add the new 'type' column to the func table.
--
ALTER
TABLE
func
add
type
enum
(
'function'
,
'aggregate'
)
NOT
NULL
;
--
-- Change the user,db and host tables to MySQL 4.0 format
--
#
Detect
whether
we
had
Show_db_priv
SET
@
hadShowDbPriv
:
=
0
;
SELECT
@
hadShowDbPriv
:
=
1
FROM
user
WHERE
Show_db_priv
LIKE
'%'
;
ALTER
TABLE
user
ADD
Show_db_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
a
lter_priv
,
ADD
Show_db_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
A
lter_priv
,
ADD
Super_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
Show_db_priv
,
ADD
Create_tmp_table_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
Super_priv
,
ADD
Lock_tables_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
Create_tmp_table_priv
,
...
...
@@ -86,13 +106,24 @@ ADD Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Lock_tables_priv,
ADD
Repl_slave_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
Execute_priv
,
ADD
Repl_client_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
AFTER
Repl_slave_priv
;
UPDATE
user
SET
show_db_priv
=
select_priv
,
super_priv
=
process_priv
,
execute_priv
=
process_priv
,
create_tmp_table_priv
=
'Y'
,
Lock_tables_priv
=
'Y'
,
Repl_slave_priv
=
file_priv
,
Repl_client_priv
=
file_priv
where
user
<>
""
AND
@
hadShowDbPriv
=
0
;
-- Convert privileges so that users have similar privileges as before
UPDATE
user
SET
Show_db_priv
=
Select_priv
,
Super_priv
=
Process_priv
,
Execute_priv
=
Process_priv
,
Create_tmp_table_priv
=
'Y'
,
Lock_tables_priv
=
'Y'
,
Repl_slave_priv
=
file_priv
,
Repl_client_priv
=
File_priv
where
user
<>
""
AND
@
hadShowDbPriv
=
0
;
-- Add fields that can be used to limit number of questions and connections
-- for some users.
ALTER
TABLE
user
ADD
max_questions
int
(
11
)
NOT
NULL
AFTER
x509_subject
,
ADD
max_updates
int
(
11
)
unsigned
NOT
NULL
AFTER
max_questions
,
ADD
max_connections
int
(
11
)
unsigned
NOT
NULL
AFTER
max_updates
;
--
-- Add Create_tmp_table_priv and Lock_tables_priv to db and host
--
ALTER
TABLE
db
ADD
Create_tmp_table_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
ADD
Lock_tables_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
;
...
...
@@ -100,6 +131,20 @@ ALTER TABLE host
ADD
Create_tmp_table_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
,
ADD
Lock_tables_priv
enum
(
'N'
,
'Y'
)
DEFAULT
'N'
NOT
NULL
;
alter
table
db
change
Db
Db
char
(
64
)
binary
DEFAULT
''
NOT
NULL
;
alter
table
host
change
Db
Db
char
(
64
)
binary
DEFAULT
''
NOT
NULL
;
alter
table
user
change
max_questions
max_questions
int
(
11
)
unsigned
DEFAULT
0
NOT
NULL
;
alter
table
tables_priv
change
Db
Db
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
change
Host
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
change
User
User
char
(
16
)
binary
DEFAULT
''
NOT
NULL
,
change
Table_name
Table_name
char
(
64
)
binary
DEFAULT
''
NOT
NULL
;
alter
table
tables_priv
add
KEY
Grantor
(
Grantor
);
alter
table
columns_priv
change
Db
Db
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
change
Host
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
change
User
User
char
(
16
)
binary
DEFAULT
''
NOT
NULL
,
change
Table_name
Table_name
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
change
Column_name
Column_name
char
(
64
)
binary
DEFAULT
''
NOT
NULL
;
alter
table
db
comment
=
'Database privileges'
;
alter
table
host
comment
=
'Host privileges; Merged with database privileges'
;
alter
table
user
comment
=
'Users and global privileges'
;
alter
table
func
comment
=
'User defined functions'
;
alter
table
tables_priv
comment
=
'Table privileges'
;
alter
table
columns_priv
comment
=
'Column privileges'
;
#
#
Create
some
possible
missing
tables
#
...
...
scripts/mysql_install_db.sh
View file @
042af556
...
...
@@ -151,7 +151,7 @@ then
if
[
$?
-ne
0
]
then
resolved
=
`
$bindir
/resolveip localhost 2>&1
`
if
[
$?
-
eq
0
]
if
[
$?
-
ne
0
]
then
echo
"Neither host '
$hostname
' and 'localhost' could not be looked up with"
echo
"
$bindir
/resolveip"
...
...
sql/repl_failsafe.cc
View file @
042af556
...
...
@@ -895,7 +895,7 @@ int load_master_data(THD* thd)
cleanup_mysql_results
(
db_res
,
cur_table_res
-
1
,
table_res
);
// adjust
position in
the master
// adjust
replication coordinates from
the master
if
(
master_status_res
)
{
MYSQL_ROW
row
=
mysql_fetch_row
(
master_status_res
);
...
...
@@ -908,10 +908,19 @@ int load_master_data(THD* thd)
*/
if
(
row
&&
row
[
0
]
&&
row
[
1
])
{
/*
If the slave's master info is not inited, we init it, then we write
the new coordinates to it. Must call init_master_info() *before*
setting active_mi, because init_master_info() sets active_mi with
defaults.
*/
if
(
init_master_info
(
active_mi
,
master_info_file
,
relay_log_info_file
,
0
))
send_error
(
thd
,
ER_MASTER_INFO
);
strmake
(
active_mi
->
master_log_name
,
row
[
0
],
sizeof
(
active_mi
->
master_log_name
));
active_mi
->
master_log_pos
=
strtoull
(
row
[
1
],
(
char
**
)
0
,
10
);
/* don't hit the magic number
*/
/* at least in recent versions, the condition below should be false
*/
if
(
active_mi
->
master_log_pos
<
BIN_LOG_HEADER_SIZE
)
active_mi
->
master_log_pos
=
BIN_LOG_HEADER_SIZE
;
/*
...
...
sql/set_var.cc
View file @
042af556
...
...
@@ -424,14 +424,12 @@ static sys_var_thd_ulong sys_default_week_format("default_week_format",
sys_var_thd_ulong
sys_group_concat_max_len
(
"group_concat_max_len"
,
&
SV
::
group_concat_max_len
);
static
const
char
license
[]
=
"GPL"
;
/* Read only variables */
sys_var_const_str
sys_os
(
"version_compile_os"
,
SYSTEM_TYPE
);
sys_var_const_str
sys_license
(
"license"
,
license
);
/* Global read-only variable describing server license */
sys_var_const_str
sys_license
(
"license"
,
LICENSE
);
...
...
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