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
34c7229a
Commit
34c7229a
authored
Nov 04, 2000
by
sasha@mysql.sashanet.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge work.mysql.com:/home/bk/mysql
into mysql.sashanet.com:/home/sasha/src/bk/mysql
parents
8f162b8b
342ad607
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
329 additions
and
236 deletions
+329
-236
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+1
-5
Docs/manual.texi
Docs/manual.texi
+39
-0
client/mysqldump.c
client/mysqldump.c
+213
-131
configure.in
configure.in
+1
-1
include/ft_global.h
include/ft_global.h
+3
-2
myisam/ft_search.c
myisam/ft_search.c
+0
-4
sql/ha_myisam.cc
sql/ha_myisam.cc
+10
-23
sql/ha_myisam.h
sql/ha_myisam.h
+3
-2
sql/handler.h
sql/handler.h
+3
-3
sql/item_func.cc
sql/item_func.cc
+36
-37
sql/item_func.h
sql/item_func.h
+2
-2
sql/opt_ft.h
sql/opt_ft.h
+1
-10
sql/opt_range.h
sql/opt_range.h
+1
-1
sql/sql_select.cc
sql/sql_select.cc
+16
-15
No files found.
BitKeeper/etc/logging_ok
View file @
34c7229a
monty@donna.mysql.com
mwagner@evoq.home.mwagner.org
paul@central.snake.net
sasha@mysql.sashanet.com
serg@serg.mysql.com
tim@threads.polyesthetic.msg
sasha@work.mysql.com
Docs/manual.texi
View file @
34c7229a
...
...
@@ -3879,6 +3879,14 @@ Italy [tzone.it] @
@c @uref{http://mysql.iol.ie, WWW}
@c @uref{ftp://ftp.iol.ie/pub/mysql, FTP}
@item
@c Added 20001031
@c EMAIL: dave@esat.net (Dave Rynne)
@c @image{Flags/ireland}
Ireland [Esat Net] @
@uref{http://ftp.esat.net/mirrors/download.sourceforge.net/pub/mirrors/mysql/, WWW}
@uref{ftp://ftp.esat.net/mirrors/download.sourceforge.net/pub/mirrors/mysql/, FTP}
@item
@c EMAIL: W.Sylwestrzak@icm.edu.pl (Wojtek Sylwestrzak)
@c mirroring nightly at 05:25
...
...
@@ -3900,6 +3908,14 @@ Poland [Sunsite] @
@c @uref{http://mysql.leirianet.pt, WWW}
@c @uref{ftp://ftp.leirianet.pt/pub/mysql/,FTP}
@item
@c Added 20001031
@c bofh@netc.pt (Bruno Rodrigues)
@c @image{Flags/portugal}
Portugal [Netc] @
@uref{http://ftp.netc.pt/pub/mysql/, WWW}
@uref{ftp://ftp.netc.pt/pub/mysql/, FTP}
@item
@c EMAIL: kuzmin@dn.ru (Roma Kuzmin)
@c @image{Flags/russia}
...
...
@@ -4133,11 +4149,26 @@ USA [LinuxWired/Scottsdale, AZ] @
@uref{http://mysql.linuxwired.net/, WWW}
@uref{ftp://ftp.linuxwired.net/pub/mirrors/mysql/, FTP}
@item
@c EMAIL: dan@surfsouth.com (Dan Muntz)
@c @image{Flags/usa}
USA [Venoma.Org/Valdosta, GA] @
@uref{http://mysql.venoma.org/, WWW}
@end itemize
@strong{South America:}
@itemize @bullet
@item
@c Added 20001102
@c EMAIL: nico@bannerlandia.com (Nicolas Moldavsky)
@c @image{Flags/argentina}
Argentina [bannerlandia.com] @
@uref{http://mysql.bannerlandia.com.ar/, WWW}
@uref{ftp://mysql.bannerlandia.com.ar/mirrors/mysql/, FTP}
@c @item
@c Not ok 20000919; Non-existent (Matt)
@c EMAIL: gaiser@matrix.com.br (Roberto Gaiser)
...
...
@@ -4273,6 +4304,14 @@ Taiwan [TTN] @
@c EX: serge@oneway.net
@c @image{Flags/taiwan} Taiwan [Oneway] @
@c @uref{ftp://ftp.oneway.com.tw/pub/mysql/, FTP}
@item
@c Added 20001031
@c EMAIL: ijliao@php.nctu.edu.tw (Ying-Chieh Liao)
@c @image{Flags/taiwan}
Taiwan [nctu.edu/HsinChu] @
@uref{http://mysql.nctu.edu.tw/, WWW}
@end itemize
@strong{Australia:}
client/mysqldump.c
View file @
34c7229a
...
...
@@ -594,176 +594,258 @@ static uint getTableStructure(char *table, char* db)
if
(
verbose
)
fprintf
(
stderr
,
"# Retrieving table structure for table %s...
\n
"
,
table
);
sprintf
(
insert_pat
,
"SET OPTION SQL_QUOTE_SHOW_CREATE=%d"
,
opt_quoted
);
table_name
=
quote_name
(
table
,
table_buff
);
sprintf
(
insert_pat
,
"show fields from %s"
,
table_name
);
if
(
mysql_query
(
sock
,
insert_pat
)
||
!
(
tableRes
=
mysql_store_result
(
sock
)))
{
fprintf
(
stderr
,
"%s: Can't get info about table: '%s'
\n
error: %s
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
/* Make an sql-file, if path was given iow. option -T was given */
if
(
!
tFlag
)
if
(
mysql_query
(
sock
,
insert_pat
))
{
if
(
path
)
/* using SHOW CREATE statement */
if
(
!
tFlag
)
{
char
filename
[
FN_REFLEN
],
tmp_path
[
FN_REFLEN
];
strmov
(
tmp_path
,
path
);
convert_dirname
(
tmp_path
);
sql_file
=
my_fopen
(
fn_format
(
filename
,
table
,
tmp_path
,
".sql"
,
4
),
O_WRONLY
,
MYF
(
MY_WME
));
if
(
!
sql_file
)
/* If file couldn't be opened */
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
sprintf
(
buff
,
"show create table %s"
,
table_name
);
if
(
mysql_query
(
sock
,
buff
))
{
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
fprintf
(
stderr
,
"%s: Can't get CREATE TABLE for table '%s' (%s)
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
write_heder
(
sql_file
,
db
);
}
fprintf
(
sql_file
,
"
\n
#
\n
# Table structure for table '%s'
\n
#
\n\n
"
,
table
);
if
(
opt_drop
)
fprintf
(
sql_file
,
"DROP TABLE IF EXISTS %s;
\n
"
,
table_name
);
fprintf
(
sql_file
,
"CREATE TABLE %s (
\n
"
,
table_name
);
}
if
(
cFlag
)
sprintf
(
insert_pat
,
"INSERT %sINTO %s ("
,
delayed
,
table_name
);
else
{
sprintf
(
insert_pat
,
"INSERT %sINTO %s VALUES "
,
delayed
,
table_name
);
if
(
!
extended_insert
)
strcat
(
insert_pat
,
"("
);
}
strpos
=
strend
(
insert_pat
);
while
((
row
=
mysql_fetch_row
(
tableRes
)))
{
ulong
*
lengths
=
mysql_fetch_lengths
(
tableRes
);
if
(
init
)
if
(
path
)
{
char
filename
[
FN_REFLEN
],
tmp_path
[
FN_REFLEN
];
strmov
(
tmp_path
,
path
);
convert_dirname
(
tmp_path
);
sql_file
=
my_fopen
(
fn_format
(
filename
,
table
,
tmp_path
,
".sql"
,
4
),
O_WRONLY
,
MYF
(
MY_WME
));
if
(
!
sql_file
)
/* If file couldn't be opened */
{
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
write_heder
(
sql_file
,
db
);
}
fprintf
(
sql_file
,
"
\n
#
\n
# Table structure for table '%s'
\n
#
\n\n
"
,
table
);
if
(
opt_drop
)
fprintf
(
sql_file
,
"DROP TABLE IF EXISTS %s;
\n
"
,
table_name
);
tableRes
=
mysql_store_result
(
sock
);
row
=
mysql_fetch_row
(
tableRes
);
fprintf
(
sql_file
,
"%s;
\n
"
,
row
[
1
]);
mysql_free_result
(
tableRes
);
}
sprintf
(
insert_pat
,
"show fields from %s"
,
table_name
);
if
(
mysql_query
(
sock
,
insert_pat
)
||
!
(
tableRes
=
mysql_store_result
(
sock
)))
{
if
(
!
tFlag
)
fputs
(
",
\n
"
,
sql_file
);
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
", "
);
fprintf
(
stderr
,
"%s: Can't get info about table: '%s'
\n
error: %s
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
)
);
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
init
=
1
;
if
(
cFlag
)
s
trpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
)
);
if
(
!
tFlag
)
s
printf
(
insert_pat
,
"INSERT %sINTO %s ("
,
delayed
,
table_name
);
else
{
if
(
opt_keywords
)
fprintf
(
sql_file
,
" %s.%s %s"
,
table_name
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
),
row
[
SHOW_TYPE
]);
else
fprintf
(
sql_file
,
" %s %s"
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
),
row
[
SHOW_TYPE
]);
if
(
row
[
SHOW_DEFAULT
])
sprintf
(
insert_pat
,
"INSERT %sINTO %s VALUES "
,
delayed
,
table_name
);
if
(
!
extended_insert
)
strcat
(
insert_pat
,
"("
);
}
strpos
=
strend
(
insert_pat
);
while
((
row
=
mysql_fetch_row
(
tableRes
)))
{
ulong
*
lengths
=
mysql_fetch_lengths
(
tableRes
);
if
(
init
)
{
fputs
(
" DEFAULT "
,
sql_file
);
unescape
(
sql_file
,
row
[
SHOW_DEFAULT
],
lengths
[
SHOW_DEFAULT
]
);
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
", "
);
}
if
(
!
row
[
SHOW_NULL
][
0
])
fputs
(
" NOT NULL"
,
sql_file
);
if
(
row
[
SHOW_EXTRA
][
0
])
fprintf
(
sql_file
,
" %s"
,
row
[
SHOW_EXTRA
]);
init
=
1
;
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
));
}
numFields
=
(
uint
)
mysql_num_rows
(
tableRes
);
mysql_free_result
(
tableRes
);
}
numFields
=
(
uint
)
mysql_num_rows
(
tableRes
);
mysql_free_result
(
tableRes
);
if
(
!
tFlag
)
else
{
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
uint
keynr
,
primary_key
;
sprintf
(
buff
,
"show key
s from %s"
,
table_name
);
if
(
mysql_query
(
sock
,
buff
))
/* fprintf(stderr, "%s: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
my_progname, mysql_error(sock)); */
sprintf
(
insert_pat
,
"show field
s from %s"
,
table_name
);
if
(
mysql_query
(
sock
,
insert_pat
)
||
!
(
tableRes
=
mysql_store_result
(
sock
)
))
{
fprintf
(
stderr
,
"%s: Can't get keys for table '%s' (%s)
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
if
(
sql_file
!=
stdout
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
fprintf
(
stderr
,
"%s: Can't get info about table: '%s'
\n
error: %s
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
tableRes
=
mysql_store_result
(
sock
);
/* Find first which key is primary key */
keynr
=
0
;
primary_key
=
INT_MAX
;
while
((
row
=
mysql_fetch_row
(
tableRes
)))
/* Make an sql-file, if path was given iow. option -T was given */
if
(
!
tFlag
)
{
if
(
atoi
(
row
[
3
])
==
1
)
if
(
path
)
{
keynr
++
;
#ifdef FORCE_PRIMARY_KEY
if
(
atoi
(
row
[
1
])
==
0
&&
primary_key
==
INT_MAX
)
primary_key
=
keynr
;
#endif
if
(
!
strcmp
(
row
[
2
],
"PRIMARY"
))
{
primary_key
=
keynr
;
break
;
}
char
filename
[
FN_REFLEN
],
tmp_path
[
FN_REFLEN
];
strmov
(
tmp_path
,
path
);
convert_dirname
(
tmp_path
);
sql_file
=
my_fopen
(
fn_format
(
filename
,
table
,
tmp_path
,
".sql"
,
4
),
O_WRONLY
,
MYF
(
MY_WME
));
if
(
!
sql_file
)
/* If file couldn't be opened */
{
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
write_heder
(
sql_file
,
db
);
}
fprintf
(
sql_file
,
"
\n
#
\n
# Table structure for table '%s'
\n
#
\n\n
"
,
table
);
if
(
opt_drop
)
fprintf
(
sql_file
,
"DROP TABLE IF EXISTS %s;
\n
"
,
table_name
);
fprintf
(
sql_file
,
"CREATE TABLE %s (
\n
"
,
table_name
);
}
if
(
cFlag
)
sprintf
(
insert_pat
,
"INSERT %sINTO %s ("
,
delayed
,
table_name
);
else
{
sprintf
(
insert_pat
,
"INSERT %sINTO %s VALUES "
,
delayed
,
table_name
);
if
(
!
extended_insert
)
strcat
(
insert_pat
,
"("
);
}
mysql_data_seek
(
tableRes
,
0
);
keynr
=
0
;
strpos
=
strend
(
insert_pat
)
;
while
((
row
=
mysql_fetch_row
(
tableRes
)))
{
if
(
atoi
(
row
[
3
])
==
1
)
ulong
*
lengths
=
mysql_fetch_lengths
(
tableRes
);
if
(
init
)
{
if
(
keynr
++
)
putc
(
')'
,
sql_file
);
if
(
atoi
(
row
[
1
]))
/* Test if duplicate key */
/* Duplicate allowed */
fprintf
(
sql_file
,
",
\n
KEY %s ("
,
quote_name
(
row
[
2
],
name_buff
));
else
if
(
keynr
==
primary_key
)
fputs
(
",
\n
PRIMARY KEY ("
,
sql_file
);
/* First UNIQUE is primary */
else
fprintf
(
sql_file
,
",
\n
UNIQUE %s ("
,
quote_name
(
row
[
2
],
name_buff
));
if
(
!
tFlag
)
fputs
(
",
\n
"
,
sql_file
);
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
", "
);
}
init
=
1
;
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
));
if
(
!
tFlag
)
{
if
(
opt_keywords
)
fprintf
(
sql_file
,
" %s.%s %s"
,
table_name
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
),
row
[
SHOW_TYPE
]);
else
fprintf
(
sql_file
,
" %s %s"
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
),
row
[
SHOW_TYPE
]);
if
(
row
[
SHOW_DEFAULT
])
{
fputs
(
" DEFAULT "
,
sql_file
);
unescape
(
sql_file
,
row
[
SHOW_DEFAULT
],
lengths
[
SHOW_DEFAULT
]);
}
if
(
!
row
[
SHOW_NULL
][
0
])
fputs
(
" NOT NULL"
,
sql_file
);
if
(
row
[
SHOW_EXTRA
][
0
])
fprintf
(
sql_file
,
" %s"
,
row
[
SHOW_EXTRA
]);
}
else
putc
(
','
,
sql_file
);
fputs
(
quote_name
(
row
[
4
],
name_buff
),
sql_file
);
if
(
row
[
7
])
fprintf
(
sql_file
,
"(%s)"
,
row
[
7
]);
/* Sub key */
}
if
(
keynr
)
putc
(
')'
,
sql_file
);
fputs
(
"
\n
)"
,
sql_file
);
/* Get MySQL specific create options */
if
(
create_options
)
numFields
=
(
uint
)
mysql_num_rows
(
tableRes
);
mysql_free_result
(
tableRes
);
if
(
!
tFlag
)
{
sprintf
(
buff
,
"show table status like '%s'"
,
table
);
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
uint
keynr
,
primary_key
;
sprintf
(
buff
,
"show keys from %s"
,
table_name
);
if
(
mysql_query
(
sock
,
buff
))
{
if
(
mysql_errno
(
sock
)
!=
ER_PARSE_ERROR
)
{
/* If old MySQL version */
if
(
verbose
)
fprintf
(
stderr
,
"# Warning: Couldn't get status information for table '%s' (%s)
\n
"
,
table
,
mysql_error
(
sock
));
}
fprintf
(
stderr
,
"%s: Can't get keys for table '%s' (%s)
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
if
(
sql_file
!=
stdout
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
else
if
(
!
(
tableRes
=
mysql_store_result
(
sock
))
||
!
(
row
=
mysql_fetch_row
(
tableRes
)))
tableRes
=
mysql_store_result
(
sock
);
/* Find first which key is primary key */
keynr
=
0
;
primary_key
=
INT_MAX
;
while
((
row
=
mysql_fetch_row
(
tableRes
)))
{
fprintf
(
stderr
,
"Error: Couldn't read status information for table '%s' (%s)
\n
"
,
table
,
mysql_error
(
sock
));
if
(
atoi
(
row
[
3
])
==
1
)
{
keynr
++
;
#ifdef FORCE_PRIMARY_KEY
if
(
atoi
(
row
[
1
])
==
0
&&
primary_key
==
INT_MAX
)
primary_key
=
keynr
;
#endif
if
(
!
strcmp
(
row
[
2
],
"PRIMARY"
))
{
primary_key
=
keynr
;
break
;
}
}
}
else
mysql_data_seek
(
tableRes
,
0
);
keynr
=
0
;
while
((
row
=
mysql_fetch_row
(
tableRes
)))
{
if
(
atoi
(
row
[
3
])
==
1
)
{
if
(
keynr
++
)
putc
(
')'
,
sql_file
);
if
(
atoi
(
row
[
1
]))
/* Test if duplicate key */
/* Duplicate allowed */
fprintf
(
sql_file
,
",
\n
KEY %s ("
,
quote_name
(
row
[
2
],
name_buff
));
else
if
(
keynr
==
primary_key
)
fputs
(
",
\n
PRIMARY KEY ("
,
sql_file
);
/* First UNIQUE is primary */
else
fprintf
(
sql_file
,
",
\n
UNIQUE %s ("
,
quote_name
(
row
[
2
],
name_buff
));
}
else
putc
(
','
,
sql_file
);
fputs
(
quote_name
(
row
[
4
],
name_buff
),
sql_file
);
if
(
row
[
7
])
fprintf
(
sql_file
,
"(%s)"
,
row
[
7
]);
/* Sub key */
}
if
(
keynr
)
putc
(
')'
,
sql_file
);
fputs
(
"
\n
)"
,
sql_file
);
/* Get MySQL specific create options */
if
(
create_options
)
{
fputs
(
"/*!"
,
sql_file
);
print_value
(
sql_file
,
tableRes
,
row
,
"type="
,
"Type"
,
0
);
print_value
(
sql_file
,
tableRes
,
row
,
""
,
"Create_options"
,
0
);
print_value
(
sql_file
,
tableRes
,
row
,
"comment="
,
"Comment"
,
1
);
fputs
(
" */"
,
sql_file
);
sprintf
(
buff
,
"show table status like '%s'"
,
table
);
if
(
mysql_query
(
sock
,
buff
))
{
if
(
mysql_errno
(
sock
)
!=
ER_PARSE_ERROR
)
{
/* If old MySQL version */
if
(
verbose
)
fprintf
(
stderr
,
"# Warning: Couldn't get status information for table '%s' (%s)
\n
"
,
table
,
mysql_error
(
sock
));
}
}
else
if
(
!
(
tableRes
=
mysql_store_result
(
sock
))
||
!
(
row
=
mysql_fetch_row
(
tableRes
)))
{
fprintf
(
stderr
,
"Error: Couldn't read status information for table '%s' (%s)
\n
"
,
table
,
mysql_error
(
sock
));
}
else
{
fputs
(
"/*!"
,
sql_file
);
print_value
(
sql_file
,
tableRes
,
row
,
"type="
,
"Type"
,
0
);
print_value
(
sql_file
,
tableRes
,
row
,
""
,
"Create_options"
,
0
);
print_value
(
sql_file
,
tableRes
,
row
,
"comment="
,
"Comment"
,
1
);
fputs
(
" */"
,
sql_file
);
}
mysql_free_result
(
tableRes
);
/* Is always safe to free */
}
mysql_free_result
(
tableRes
);
/* Is always safe to free */
fputs
(
";
\n
"
,
sql_file
);
}
fputs
(
";
\n
"
,
sql_file
);
}
if
(
cFlag
)
{
...
...
configure.in
View file @
34c7229a
...
...
@@ -16,7 +16,7 @@ SHARED_LIB_VERSION=10:0:0
# Remember that regexps needs to quote [ and ] since this is run through m4
MYSQL_NO_DASH_VERSION
=
`
echo
$VERSION
|
sed
-e
"s|-.*
$|
|"
`
MYSQL_BASE_VERSION
=
`
echo
$MYSQL_NO_DASH_VERSION
|
sed
-e
"s|
\.
[[^.]]*
$|
|"
`
F_PART
=
`
echo
$MYSQL_BASE_VERSION
|
sed
-e
"s|
\.
||g"
|
sed
-e
"s|[
[a-zA-Z]]
\+
|
|"
`
F_PART
=
`
echo
$MYSQL_BASE_VERSION
|
sed
-e
"s|
\.
||g"
|
sed
-e
"s|[
a-zA-Z]
\+
||"
|sed
-e
"s|^
\(
..
\)
$|
\\
10
|"
`
L_PART
=
`
echo
$MYSQL_NO_DASH_VERSION
|
sed
-e
"s|^[[0-9]]
\.
[[0-9]]*
\.
||"
|
sed
-e
"s|^
\(
.
\)
$|
0
\\
1|"
|
sed
-e
"s|[[a-z]]||"
`
MYSQL_VERSION_ID
=
${
F_PART
}${
L_PART
}
...
...
include/ft_global.h
View file @
34c7229a
...
...
@@ -47,8 +47,9 @@ void ft_free_stopwords(void);
FT_DOCLIST
*
ft_init_search
(
void
*
,
uint
,
byte
*
,
uint
,
my_bool
);
int
ft_read_next
(
FT_DOCLIST
*
,
char
*
);
#define ft_close_search(handler) my_free(((gptr)(handler)),MYF(0))
#define ft_get_relevance(handler) ((handler)->doc[(handler)->curdoc].weight)
#define ft_close_search(handler) my_free(((gptr)(handler)),MYF(0))
#define ft_get_relevance(handler) ((handler)->doc[(handler)->curdoc].weight)
#define ft_reinit_search(handler) (((FT_DOCLIST *)(handler))->curdoc=-1)
#ifdef __cplusplus
}
...
...
myisam/ft_search.c
View file @
34c7229a
...
...
@@ -158,7 +158,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
ALL_IN_ONE
aio
;
FT_DOCLIST
*
dlist
;
FT_DOC
*
dptr
;
my_off_t
saved_lastpos
;
/* black magic ON */
if
((
int
)
(
keynr
=
_mi_check_index
((
MI_INFO
*
)
info
,
keynr
))
<
0
)
...
...
@@ -174,8 +173,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
aio
.
keyinfo
=
aio
.
info
->
s
->
keyinfo
+
keynr
;
aio
.
key_root
=
aio
.
info
->
s
->
state
.
key_root
[
keynr
];
saved_lastpos
=
aio
.
info
->
lastpos
;
if
(
!
(
wtree
=
ft_parse
(
NULL
,
key
,
key_len
)))
return
NULL
;
init_tree
(
&
aio
.
dtree
,
0
,
sizeof
(
FT_SUPERDOC
),(
qsort_cmp
)
&
FT_SUPERDOC_cmp
,
0
,
...
...
@@ -204,7 +201,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
}
err:
aio
.
info
->
lastpos
=
saved_lastpos
;
delete_tree
(
&
aio
.
dtree
);
delete_tree
(
wtree
);
my_free
((
char
*
)
wtree
,
MYF
(
0
));
...
...
sql/ha_myisam.cc
View file @
34c7229a
...
...
@@ -353,7 +353,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
int
error
=
0
;
const
char
*
errmsg
=
""
;
if
(
my_copy
(
src_path
,
fn_format
(
dst_path
,
table
->
path
,
""
,
MI_NAME_DEXT
,
4
),
MYF
(
MY_WME
)))
{
...
...
@@ -361,11 +361,11 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
errmsg
=
"failed in my_copy( Error %d)"
;
goto
err
;
}
tmp_check_opt
.
init
();
tmp_check_opt
.
quick
=
1
;
return
repair
(
thd
,
&
tmp_check_opt
);
err:
{
MI_CHECK
param
;
...
...
@@ -375,7 +375,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
param
.
table_name
=
table
->
table_name
;
param
.
testflag
=
0
;
mi_check_print_error
(
&
param
,
errmsg
,
errno
);
return
error
;
return
error
;
}
}
...
...
@@ -450,7 +450,7 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
llstr
(
file
->
state
->
records
,
llbuff
),
llstr
(
start_records
,
llbuff2
),
table
->
path
);
}
}
return
error
;
}
...
...
@@ -496,7 +496,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
DBUG_RETURN
(
HA_ADMIN_FAILED
);
}
if
(
!
optimize
||
if
(
!
optimize
||
((
file
->
state
->
del
||
share
->
state
.
split
!=
file
->
state
->
records
)
&&
(
!
param
.
opt_rep_quick
||
!
(
share
->
state
.
changed
&
STATE_NOT_OPTIMIZED_KEYS
))))
...
...
@@ -621,9 +621,9 @@ bool ha_myisam::check_and_repair(THD *thd)
{
sql_print_error
(
"Warning: Recovering table: '%s'"
,
table
->
path
);
check_opt
.
quick
=
!
check_opt
.
retry_without_quick
&&
!
marked_crashed
;
check_opt
.
flags
=
(((
myisam_recover_options
&
HA_RECOVER_BACKUP
)
?
check_opt
.
flags
=
(((
myisam_recover_options
&
HA_RECOVER_BACKUP
)
?
T_BACKUP_DATA
:
0
)
|
(
!
(
myisam_recover_options
&
HA_RECOVER_FORCE
)
?
(
!
(
myisam_recover_options
&
HA_RECOVER_FORCE
)
?
T_SAFE_REPAIR
:
0
))
|
T_AUTO_REPAIR
;
if
(
repair
(
thd
,
&
check_opt
))
error
=
1
;
...
...
@@ -1079,20 +1079,6 @@ ha_rows ha_myisam::records_in_range(int inx,
end_search_flag
);
}
int
ha_myisam
::
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
)
{
if
(
ft_handler
)
return
-
1
;
// Do the search!
ft_handler
=
ft_init_search
(
file
,
inx
,(
byte
*
)
key
,
keylen
,
presort
);
if
(
!
ft_handler
)
return
(
my_errno
?
my_errno
:
-
1
);
return
0
;
}
int
ha_myisam
::
ft_read
(
byte
*
buf
)
{
int
error
;
...
...
@@ -1102,7 +1088,8 @@ int ha_myisam::ft_read(byte * buf)
thread_safe_increment
(
ha_read_next_count
,
&
LOCK_status
);
// why ?
error
=
ft_read_next
((
FT_DOCLIST
*
)
ft_handler
,(
char
*
)
buf
);
if
(
error
=
ft_read_next
((
FT_DOCLIST
*
)
ft_handler
,(
char
*
)
buf
))
ft_handler
=
NULL
;
// Magic here ! See Item_func_match::val()
table
->
status
=
error
?
STATUS_NOT_FOUND
:
0
;
return
error
;
...
...
sql/ha_myisam.h
View file @
34c7229a
...
...
@@ -71,8 +71,9 @@ class ha_myisam: public handler
int
index_first
(
byte
*
buf
);
int
index_last
(
byte
*
buf
);
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
int
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
1
);
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
0
)
int
ft_init
()
{
if
(
!
ft_handler
)
return
1
;
ft_reinit_search
(
ft_handler
);
return
0
;
}
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
)
{
return
ft_init_search
(
file
,
inx
,(
byte
*
)
key
,
keylen
,
presort
);
}
int
ft_read
(
byte
*
buf
);
int
rnd_init
(
bool
scan
=
1
);
...
...
sql/handler.h
View file @
34c7229a
...
...
@@ -222,9 +222,9 @@ public:
virtual
int
index_first
(
byte
*
buf
)
=
0
;
virtual
int
index_last
(
byte
*
buf
)
=
0
;
virtual
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
virtual
int
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
1
)
virtual
int
ft_init
()
{
return
-
1
;
}
virtual
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
0
)
virtual
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
)
{
return
(
void
*
)
NULL
;
}
virtual
int
ft_read
(
byte
*
buf
)
{
return
-
1
;
}
virtual
int
rnd_init
(
bool
scan
=
1
)
=
0
;
...
...
@@ -257,7 +257,7 @@ public:
virtual
int
restore
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
);
// assumes .frm file must exist, and you must have already called
// generate_table() - it will just copy the data file and run repair
virtual
int
dump
(
THD
*
thd
,
int
fd
=
-
1
)
{
return
ER_DUMP_NOT_IMPLEMENTED
;
}
virtual
void
deactivate_non_unique_index
(
ha_rows
rows
)
{}
virtual
bool
activate_all_index
(
THD
*
thd
)
{
return
0
;}
...
...
sql/item_func.cc
View file @
34c7229a
...
...
@@ -1840,73 +1840,71 @@ err:
double
Item_func_match
::
val
()
{
if
(
first_call
)
init_search
();
// Don't know how to return an error from val(), so NULL will be returned
if
((
null_value
=
(
ft_handler
==
NULL
)))
return
0.0
;
if
(
join_key
)
{
return
ft_get_relevance
(
ft_handler
);
if
(
table
->
file
->
ft_handler
)
return
ft_get_relevance
(
ft_handler
);
join_key
=
0
;
// Magic here ! See ha_myisam::ft_read()
}
else
{
/* implicit initialization was done, so we'll have to find
ft_relevance manually in ft_handler array */
int
a
,
b
,
c
;
FT_DOC
*
docs
=
ft_handler
->
doc
;
my_off_t
docid
=
table
->
file
->
row_position
();
/* we'll have to find ft_relevance manually in ft_handler array */
if
((
null_value
=
(
docid
==
HA_OFFSET_ERROR
)))
return
0.0
;
int
a
,
b
,
c
;
FT_DOC
*
docs
=
ft_handler
->
doc
;
my_off_t
docid
=
table
->
file
->
row_position
();
// Assuming docs[] is sorted by dpos...
if
((
null_value
=
(
docid
==
HA_OFFSET_ERROR
)))
return
0.0
;
for
(
a
=
0
,
b
=
ft_handler
->
ndocs
,
c
=
(
a
+
b
)
/
2
;
b
-
a
>
1
;
c
=
(
a
+
b
)
/
2
)
{
if
(
docs
[
c
].
dpos
>
docid
)
b
=
c
;
else
a
=
c
;
}
if
(
docs
[
a
].
dpos
==
docid
)
return
docs
[
a
].
weight
;
// Assuming docs[] is sorted by dpos...
for
(
a
=
0
,
b
=
ft_handler
->
ndocs
,
c
=
(
a
+
b
)
/
2
;
b
-
a
>
1
;
c
=
(
a
+
b
)
/
2
)
{
if
(
docs
[
c
].
dpos
>
docid
)
b
=
c
;
else
return
0.0
;
a
=
c
;
}
if
(
docs
[
a
].
dpos
==
docid
)
return
docs
[
a
].
weight
;
else
return
0.0
;
}
void
Item_func_match
::
init_search
()
void
Item_func_match
::
init_search
(
bool
no_order
)
{
if
(
!
first_call
)
if
(
ft_handler
)
return
;
first_call
=
false
;
if
(
master
)
{
master
->
init_search
();
join_key
=
master
->
join_key
=
join_key
|
master
->
join_key
;
master
->
init_search
(
no_order
);
ft_handler
=
master
->
ft_handler
;
join_key
=
master
->
join_key
;
return
;
}
if
(
join_key
)
{
ft_handler
=
((
FT_DOCLIST
*
)
table
->
file
->
ft_handler
);
return
;
}
/* join won't use this ft-key, but we must to init it anyway */
String
*
ft_tmp
=
0
;
char
tmp1
[
FT_QUERY_MAXLEN
];
String
tmp2
(
tmp1
,
sizeof
(
tmp1
));
ft_tmp
=
key_item
()
->
val_str
(
&
tmp2
);
ft_handler
=
(
FT_DOCLIST
*
)
table
->
file
->
ft_init_ext
(
key
,
(
byte
*
)
ft_tmp
->
ptr
(),
ft_tmp
->
length
());
table
->
file
->
ft_init_ext
(
key
,
(
byte
*
)
ft_tmp
->
ptr
(),
ft_tmp
->
length
(),
join_key
&&
!
no_order
);
if
(
join_key
)
{
table
->
file
->
ft_handler
=
ft_handler
;
return
;
}
}
bool
Item_func_match
::
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tlist
)
...
...
@@ -1917,6 +1915,8 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist)
/* Why testing for const_item ? Monty */
/* I'll remove it later, but this should include modifications to
find_best and auto_close as complement to auto_init code above. SerG */
/* I'd rather say now that const_item is assumed in quite a bit of
places, so it would be difficult to remove. SerG */
if
(
Item_func
::
fix_fields
(
thd
,
tlist
)
||
!
const_item
())
return
1
;
...
...
@@ -1996,7 +1996,6 @@ bool Item_func_match::fix_index()
}
this
->
key
=
max_key
;
first_call
=
1
;
maybe_null
=
1
;
join_key
=
0
;
...
...
sql/item_func.h
View file @
34c7229a
...
...
@@ -838,7 +838,7 @@ public:
List
<
Item
>
fields
;
TABLE
*
table
;
uint
key
;
bool
first_call
,
join_key
;
bool
join_key
;
Item_func_match
*
master
;
FT_DOCLIST
*
ft_handler
;
...
...
@@ -863,5 +863,5 @@ public:
longlong
val_int
()
{
return
val
()
!=
0.0
;
}
bool
fix_index
();
void
init_search
();
void
init_search
(
bool
no_order
);
};
sql/opt_ft.h
View file @
34c7229a
...
...
@@ -31,16 +31,7 @@ public:
FT_SELECT
(
TABLE
*
table
,
TABLE_REF
*
tref
)
:
QUICK_SELECT
(
table
,
tref
->
key
,
1
),
ref
(
tref
)
{}
int
init
()
{
#if 0
if (cp_buffer_from_ref(ref)) // as ft-key doesn't use store_key's
return -1;
#endif
return
error
=
file
->
ft_init
(
ref
->
key
,
ref
->
key_buff
,
ref
->
key_length
);
}
int
init
()
{
return
error
=
file
->
ft_init
();
}
int
get_next
()
{
return
error
=
file
->
ft_read
(
record
);
}
};
...
...
sql/opt_range.h
View file @
34c7229a
...
...
@@ -71,7 +71,7 @@ public:
double
read_time
;
QUICK_SELECT
(
TABLE
*
table
,
uint
index_arg
,
bool
no_alloc
=
0
);
virtual
~
QUICK_SELECT
();
// fixed by Sasha needs to be virtual
virtual
~
QUICK_SELECT
();
void
reset
(
void
)
{
next
=
0
;
it
.
rewind
();
}
virtual
int
init
()
{
return
0
;
}
virtual
int
get_next
();
...
...
sql/sql_select.cc
View file @
34c7229a
...
...
@@ -486,7 +486,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
as in other cases the join is done before the sort.
*/
if
((
order
||
group
)
&&
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_ALL
&&
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_FT
&&
/* Beware! SerG */
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_FT
&&
(
order
&&
simple_order
||
group
&&
simple_group
))
{
if
(
add_ref_to_table_cond
(
thd
,
&
join
.
join_tab
[
join
.
const_tables
]))
...
...
@@ -522,6 +522,19 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
goto
err
;
}
/* Perform FULLTEXT search before all regular searches */
if
(
ftfuncs
.
elements
)
{
List_iterator
<
Item_func_match
>
li
(
ftfuncs
);
Item_func_match
*
ifm
;
DBUG_PRINT
(
"info"
,(
"Performing FULLTEXT search"
));
thd
->
proc_info
=
"FULLTEXT searching"
;
while
((
ifm
=
li
++
))
{
ifm
->
init_search
(
test
(
order
));
}
}
/* Create a tmp table if distinct or if the sort is too complicated */
if
(
need_tmp
)
{
...
...
@@ -4438,26 +4451,14 @@ join_ft_read_first(JOIN_TAB *tab)
if (cp_buffer_from_ref(&tab->ref)) // as ft-key doesn't use store_key's
return -1; // see also FT_SELECT::init()
#endif
if
((
error
=
table
->
file
->
ft_init
(
tab
->
ref
.
key
,
tab
->
ref
.
key_buff
,
tab
->
ref
.
key_length
)))
{
if
(
error
!=
HA_ERR_KEY_NOT_FOUND
)
{
sql_print_error
(
"ft_read_first/init: Got error %d when reading table %s"
,
error
,
table
->
path
);
table
->
file
->
print_error
(
error
,
MYF
(
0
));
return
1
;
}
return
-
1
;
}
table
->
file
->
ft_init
();
error
=
table
->
file
->
ft_read
(
table
->
record
[
0
]);
if
(
error
)
{
if
(
error
!=
HA_ERR_END_OF_FILE
)
{
sql_print_error
(
"ft_read_first
/read
: Got error %d when reading table %s"
,
sql_print_error
(
"ft_read_first: Got error %d when reading table %s"
,
error
,
table
->
path
);
table
->
file
->
print_error
(
error
,
MYF
(
0
));
return
1
;
...
...
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