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
fe83735a
Commit
fe83735a
authored
May 22, 2004
by
brian@brian-akers-computer.local
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge
parent
9c84b9b6
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
132 additions
and
63 deletions
+132
-63
configure.in
configure.in
+5
-4
sql/Makefile.am
sql/Makefile.am
+5
-5
sql/handler.cc
sql/handler.cc
+112
-49
sql/mysql_priv.h
sql/mysql_priv.h
+10
-5
No files found.
configure.in
View file @
fe83735a
...
@@ -1851,7 +1851,8 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
...
@@ -1851,7 +1851,8 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
# isinf() could be a function or a macro (HPUX)
# isinf() could be a function or a macro (HPUX)
AC_MSG_CHECKING
(
for
isinf with <math.h>
)
AC_MSG_CHECKING
(
for
isinf with <math.h>
)
AC_TRY_LINK
([
#include <math.h>], [float f = 0.0; isinf(f)],
AC_TRY_LINK
([
#include <math.h>], [float f = 0.0; isinf(f)],
AC_MSG_RESULT
(
yes
)
AC_DEFINE
(
HAVE_ISINF,,[isinf
()
macro or
function
])
,
AC_MSG_RESULT
(
yes
)
AC_DEFINE
(
HAVE_ISINF,,[isinf
()
macro or
function
])
,
AC_MSG_RESULT
(
no
))
AC_MSG_RESULT
(
no
))
CFLAGS
=
"
$ORG_CFLAGS
"
CFLAGS
=
"
$ORG_CFLAGS
"
...
@@ -2228,7 +2229,6 @@ if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then
...
@@ -2228,7 +2229,6 @@ if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then
# For NetWare, do not need readline
# For NetWare, do not need readline
echo
"Skipping readline"
echo
"Skipping readline"
else
else
mkdir
include/readline
if
[
test
"
$with_libedit
"
=
"yes"
]
||
[
test
"
$with_libedit
"
=
"undefined"
]
&&
[
test
"
$with_readline
"
=
"undefined"
]
if
[
test
"
$with_libedit
"
=
"yes"
]
||
[
test
"
$with_libedit
"
=
"undefined"
]
&&
[
test
"
$with_readline
"
=
"undefined"
]
then
then
...
@@ -2236,7 +2236,7 @@ then
...
@@ -2236,7 +2236,7 @@ then
readline_basedir
=
"libedit"
readline_basedir
=
"libedit"
readline_dir
=
"
$readline_topdir
/
$readline_basedir
"
readline_dir
=
"
$readline_topdir
/
$readline_basedir
"
readline_link
=
"
\$
(top_builddir)/cmd-line-utils/libedit/liblibedit.a"
readline_link
=
"
\$
(top_builddir)/cmd-line-utils/libedit/liblibedit.a"
readline_h_ln_cmd
=
"
\$
(LN)
\$
(top_builddir)/cmd-line-utils/libedit/readline/*.h readline/
"
readline_h_ln_cmd
=
"
\$
(LN)
-s
\$
(top_builddir)/cmd-line-utils/libedit/readline readline
"
compile_libedit
=
yes
compile_libedit
=
yes
AC_DEFINE_UNQUOTED
(
USE_LIBEDIT_INTERFACE
)
AC_DEFINE_UNQUOTED
(
USE_LIBEDIT_INTERFACE
)
elif
test
"
$with_readline
"
=
"yes"
elif
test
"
$with_readline
"
=
"yes"
...
@@ -2245,7 +2245,7 @@ then
...
@@ -2245,7 +2245,7 @@ then
readline_basedir
=
"readline"
readline_basedir
=
"readline"
readline_dir
=
"
$readline_topdir
/
$readline_basedir
"
readline_dir
=
"
$readline_topdir
/
$readline_basedir
"
readline_link
=
"
\$
(top_builddir)/cmd-line-utils/readline/libreadline.a"
readline_link
=
"
\$
(top_builddir)/cmd-line-utils/readline/libreadline.a"
readline_h_ln_cmd
=
"
\$
(LN)
\$
(top_builddir)/cmd-line-utils/readline/*.h readline/
"
readline_h_ln_cmd
=
"
\$
(LN)
-s
\$
(top_builddir)/cmd-line-utils/readline readline
"
compile_readline
=
yes
compile_readline
=
yes
AC_DEFINE_UNQUOTED
(
USE_NEW_READLINE_INTERFACE
)
AC_DEFINE_UNQUOTED
(
USE_NEW_READLINE_INTERFACE
)
else
else
...
@@ -2759,6 +2759,7 @@ EOF
...
@@ -2759,6 +2759,7 @@ EOF
no
)
flag
=
"-R"
;;
no
)
flag
=
"-R"
;;
*
)
flag
=
"-D"
;;
*
)
flag
=
"-D"
;;
esac
esac
flag
=
"
$flag
--VERSION=
$VERSION
--PACKAGE=
$PACKAGE
"
(
cd
ndb
&&
./configure
$flag
)
\
(
cd
ndb
&&
./configure
$flag
)
\
||
AC_MSG_ERROR
([
could not configure NDB Cluster]
)
||
AC_MSG_ERROR
([
could not configure NDB Cluster]
)
echo
"END OF NDB CLUSTER CONFIGURATION"
echo
"END OF NDB CLUSTER CONFIGURATION"
...
...
sql/Makefile.am
View file @
fe83735a
...
@@ -16,12 +16,11 @@
...
@@ -16,12 +16,11 @@
#called from the top level Makefile
#called from the top level Makefile
MYSQLDATAdir
=
$(localstatedir)
MYSQLDATAdir
=
$(localstatedir)
MYSQLSHAREdir
=
$(pkgdatadir)
MYSQLSHAREdir
=
$(pkgdatadir)
MYSQLBASEdir
=
$(prefix)
MYSQLBASEdir
=
$(prefix)
INCLUDES
=
@MT_INCLUDES@
\
INCLUDES
=
@MT_INCLUDES@
\
@bdb_includes@ @innodb_includes@
\
@bdb_includes@ @innodb_includes@
@ndbcluster_includes@
\
-I
$(top_srcdir)
/include
-I
$(top_srcdir)
/regex
\
-I
$(top_srcdir)
/include
-I
$(top_srcdir)
/regex
\
-I
$(srcdir)
$(openssl_includes)
-I
$(srcdir)
$(openssl_includes)
WRAPLIBS
=
@WRAPLIBS@
WRAPLIBS
=
@WRAPLIBS@
...
@@ -42,6 +41,7 @@ LDADD = @isam_libs@ \
...
@@ -42,6 +41,7 @@ LDADD = @isam_libs@ \
mysqld_LDADD
=
@MYSQLD_EXTRA_LDFLAGS@
\
mysqld_LDADD
=
@MYSQLD_EXTRA_LDFLAGS@
\
@bdb_libs@ @innodb_libs@ @pstack_libs@
\
@bdb_libs@ @innodb_libs@ @pstack_libs@
\
@innodb_system_libs@
\
@innodb_system_libs@
\
@ndbcluster_libs@ @ndbcluster_system_libs@
\
$(LDADD)
$(CXXLDFLAGS)
$(WRAPLIBS)
@LIBDL@ @openssl_libs@
$(LDADD)
$(CXXLDFLAGS)
$(WRAPLIBS)
@LIBDL@ @openssl_libs@
noinst_HEADERS
=
item.h item_func.h item_sum.h item_cmpfunc.h
\
noinst_HEADERS
=
item.h item_func.h item_sum.h item_cmpfunc.h
\
item_strfunc.h item_timefunc.h item_uniq.h
\
item_strfunc.h item_timefunc.h item_uniq.h
\
...
@@ -52,7 +52,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
...
@@ -52,7 +52,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
field.h handler.h
\
field.h handler.h
\
ha_isammrg.h ha_isam.h ha_myisammrg.h
\
ha_isammrg.h ha_isam.h ha_myisammrg.h
\
ha_heap.h ha_myisam.h ha_berkeley.h ha_innodb.h
\
ha_heap.h ha_myisam.h ha_berkeley.h ha_innodb.h
\
opt_range.h protocol.h
\
ha_ndbcluster.h
opt_range.h protocol.h
\
sql_select.h structs.h table.h sql_udf.h hash_filo.h
\
sql_select.h structs.h table.h sql_udf.h hash_filo.h
\
lex.h lex_symbol.h sql_acl.h sql_crypt.h
\
lex.h lex_symbol.h sql_acl.h sql_crypt.h
\
log_event.h sql_repl.h slave.h
\
log_event.h sql_repl.h slave.h
\
...
@@ -76,11 +76,11 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
...
@@ -76,11 +76,11 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
procedure.cc item_uniq.cc sql_test.cc
\
procedure.cc item_uniq.cc sql_test.cc
\
log.cc log_event.cc init.cc derror.cc sql_acl.cc
\
log.cc log_event.cc init.cc derror.cc sql_acl.cc
\
unireg.cc des_key_file.cc
\
unireg.cc des_key_file.cc
\
time.cc opt_range.cc opt_sum.cc
\
discover.cc
time.cc opt_range.cc opt_sum.cc
\
records.cc filesort.cc handler.cc
\
records.cc filesort.cc handler.cc
\
ha_heap.cc ha_myisam.cc ha_myisammrg.cc
\
ha_heap.cc ha_myisam.cc ha_myisammrg.cc
\
ha_berkeley.cc ha_innodb.cc
\
ha_berkeley.cc ha_innodb.cc
\
ha_isam.cc ha_isammrg.cc
\
ha_isam.cc ha_isammrg.cc
ha_ndbcluster.cc
\
sql_db.cc sql_table.cc sql_rename.cc sql_crypt.cc
\
sql_db.cc sql_table.cc sql_rename.cc sql_crypt.cc
\
sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc
\
sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc
\
sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc
\
sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc
\
...
...
sql/handler.cc
View file @
fe83735a
...
@@ -43,6 +43,9 @@
...
@@ -43,6 +43,9 @@
#else
#else
#define innobase_query_caching_of_table_permitted(X,Y,Z) 1
#define innobase_query_caching_of_table_permitted(X,Y,Z) 1
#endif
#endif
#ifdef HAVE_NDBCLUSTER_DB
#include "ha_ndbcluster.h"
#endif
#include <myisampack.h>
#include <myisampack.h>
#include <errno.h>
#include <errno.h>
...
@@ -54,7 +57,7 @@ ulong ha_read_count, ha_write_count, ha_delete_count, ha_update_count,
...
@@ -54,7 +57,7 @@ ulong ha_read_count, ha_write_count, ha_delete_count, ha_update_count,
ha_read_key_count
,
ha_read_next_count
,
ha_read_prev_count
,
ha_read_key_count
,
ha_read_next_count
,
ha_read_prev_count
,
ha_read_first_count
,
ha_read_last_count
,
ha_read_first_count
,
ha_read_last_count
,
ha_commit_count
,
ha_rollback_count
,
ha_commit_count
,
ha_rollback_count
,
ha_read_rnd_count
,
ha_read_rnd_next_count
;
ha_read_rnd_count
,
ha_read_rnd_next_count
,
ha_discover_count
;
static
SHOW_COMP_OPTION
have_yes
=
SHOW_OPTION_YES
;
static
SHOW_COMP_OPTION
have_yes
=
SHOW_OPTION_YES
;
...
@@ -82,6 +85,10 @@ struct show_table_type_st sys_table_types[]=
...
@@ -82,6 +85,10 @@ struct show_table_type_st sys_table_types[]=
"Supports transactions and page-level locking"
,
DB_TYPE_BERKELEY_DB
},
"Supports transactions and page-level locking"
,
DB_TYPE_BERKELEY_DB
},
{
"BERKELEYDB"
,
&
have_berkeley_db
,
{
"BERKELEYDB"
,
&
have_berkeley_db
,
"Alias for BDB"
,
DB_TYPE_BERKELEY_DB
},
"Alias for BDB"
,
DB_TYPE_BERKELEY_DB
},
{
"NDBCLUSTER"
,
&
have_ndbcluster
,
"Clustered, fault tolerant memory based tables"
,
DB_TYPE_NDBCLUSTER
},
{
"NDB"
,
&
have_ndbcluster
,
"Alias for NDBCLUSTER"
,
DB_TYPE_NDBCLUSTER
},
{
"EXAMPLE"
,
&
have_example_db
,
{
"EXAMPLE"
,
&
have_example_db
,
"Example storage engine"
,
DB_TYPE_EXAMPLE_DB
},
"Example storage engine"
,
DB_TYPE_EXAMPLE_DB
},
{
"ARCHIVE"
,
&
have_archive_db
,
{
"ARCHIVE"
,
&
have_archive_db
,
...
@@ -101,15 +108,16 @@ TYPELIB tx_isolation_typelib= {array_elements(tx_isolation_names)-1,"",
...
@@ -101,15 +108,16 @@ TYPELIB tx_isolation_typelib= {array_elements(tx_isolation_names)-1,"",
enum
db_type
ha_resolve_by_name
(
const
char
*
name
,
uint
namelen
)
enum
db_type
ha_resolve_by_name
(
const
char
*
name
,
uint
namelen
)
{
{
if
(
!
my_strcasecmp
(
&
my_charset_latin1
,
name
,
"DEFAULT"
))
{
THD
*
thd
=
current_thd
;
return
(
enum
db_type
)
current_thd
->
variables
.
table_type
;
if
(
thd
&&
!
my_strcasecmp
(
&
my_charset_latin1
,
name
,
"DEFAULT"
))
{
return
(
enum
db_type
)
thd
->
variables
.
table_type
;
}
}
show_table_type_st
*
types
;
show_table_type_st
*
types
;
for
(
types
=
sys_table_types
;
types
->
type
;
types
++
)
for
(
types
=
sys_table_types
;
types
->
type
;
types
++
)
{
{
if
(
!
my_strcasecmp
(
&
my_charset_latin1
,
name
,
types
->
type
))
if
(
!
my_strcasecmp
(
&
my_charset_latin1
,
name
,
types
->
type
))
return
(
enum
db_type
)
types
->
db_type
;
return
(
enum
db_type
)
types
->
db_type
;
}
}
return
DB_TYPE_UNKNOWN
;
return
DB_TYPE_UNKNOWN
;
}
}
...
@@ -189,6 +197,10 @@ handler *get_new_handler(TABLE *table, enum db_type db_type)
...
@@ -189,6 +197,10 @@ handler *get_new_handler(TABLE *table, enum db_type db_type)
#ifdef HAVE_ARCHIVE_DB
#ifdef HAVE_ARCHIVE_DB
case
DB_TYPE_ARCHIVE_DB
:
case
DB_TYPE_ARCHIVE_DB
:
return
new
ha_archive
(
table
);
return
new
ha_archive
(
table
);
#endif
#ifdef HAVE_NDBCLUSTER_DB
case
DB_TYPE_NDBCLUSTER
:
return
new
ha_ndbcluster
(
table
);
#endif
#endif
case
DB_TYPE_HEAP
:
case
DB_TYPE_HEAP
:
return
new
ha_heap
(
table
);
return
new
ha_heap
(
table
);
...
@@ -233,6 +245,18 @@ int ha_init()
...
@@ -233,6 +245,18 @@ int ha_init()
else
else
opt_using_transactions
=
1
;
opt_using_transactions
=
1
;
}
}
#endif
#ifdef HAVE_NDBCLUSTER_DB
if
(
have_ndbcluster
==
SHOW_OPTION_YES
)
{
if
(
ndbcluster_init
())
{
have_ndbcluster
=
SHOW_OPTION_DISABLED
;
error
=
1
;
}
else
opt_using_transactions
=
1
;
}
#endif
#endif
return
error
;
return
error
;
}
}
...
@@ -260,6 +284,10 @@ int ha_panic(enum ha_panic_function flag)
...
@@ -260,6 +284,10 @@ int ha_panic(enum ha_panic_function flag)
#ifdef HAVE_INNOBASE_DB
#ifdef HAVE_INNOBASE_DB
if
(
have_innodb
==
SHOW_OPTION_YES
)
if
(
have_innodb
==
SHOW_OPTION_YES
)
error
|=
innobase_end
();
error
|=
innobase_end
();
#endif
#ifdef HAVE_NDBCLUSTER_DB
if
(
have_ndbcluster
==
SHOW_OPTION_YES
)
error
|=
ndbcluster_end
();
#endif
#endif
return
error
;
return
error
;
}
/* ha_panic */
}
/* ha_panic */
...
@@ -270,6 +298,10 @@ void ha_drop_database(char* path)
...
@@ -270,6 +298,10 @@ void ha_drop_database(char* path)
if
(
have_innodb
==
SHOW_OPTION_YES
)
if
(
have_innodb
==
SHOW_OPTION_YES
)
innobase_drop_database
(
path
);
innobase_drop_database
(
path
);
#endif
#endif
#ifdef HAVE_NDBCLUSTER_DB
if
(
have_ndbcluster
==
SHOW_OPTION_YES
)
ndbcluster_drop_database
(
path
);
#endif
}
}
void
ha_close_connection
(
THD
*
thd
)
void
ha_close_connection
(
THD
*
thd
)
...
@@ -278,6 +310,10 @@ void ha_close_connection(THD* thd)
...
@@ -278,6 +310,10 @@ void ha_close_connection(THD* thd)
if
(
have_innodb
==
SHOW_OPTION_YES
)
if
(
have_innodb
==
SHOW_OPTION_YES
)
innobase_close_connection
(
thd
);
innobase_close_connection
(
thd
);
#endif
#endif
#ifdef HAVE_NDBCLUSTER_DB
if
(
have_ndbcluster
==
SHOW_OPTION_YES
)
ndbcluster_close_connection
(
thd
);
#endif
}
}
/*
/*
...
@@ -437,6 +473,19 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
...
@@ -437,6 +473,19 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
WRITE_CACHE
,
(
my_off_t
)
0
,
0
,
1
);
WRITE_CACHE
,
(
my_off_t
)
0
,
0
,
1
);
thd
->
transaction
.
trans_log
.
end_of_file
=
max_binlog_cache_size
;
thd
->
transaction
.
trans_log
.
end_of_file
=
max_binlog_cache_size
;
}
}
#ifdef HAVE_NDBCLUSTER_DB
if
(
trans
->
ndb_tid
)
{
if
((
error
=
ndbcluster_commit
(
thd
,
trans
->
ndb_tid
)))
{
my_error
(
ER_ERROR_DURING_COMMIT
,
MYF
(
0
),
error
);
error
=
1
;
}
if
(
trans
==
&
thd
->
transaction
.
all
)
operation_done
=
transaction_commited
=
1
;
trans
->
ndb_tid
=
0
;
}
#endif
#ifdef HAVE_BERKELEY_DB
#ifdef HAVE_BERKELEY_DB
if
(
trans
->
bdb_tid
)
if
(
trans
->
bdb_tid
)
{
{
...
@@ -490,6 +539,18 @@ int ha_rollback_trans(THD *thd, THD_TRANS *trans)
...
@@ -490,6 +539,18 @@ int ha_rollback_trans(THD *thd, THD_TRANS *trans)
if
(
opt_using_transactions
)
if
(
opt_using_transactions
)
{
{
bool
operation_done
=
0
;
bool
operation_done
=
0
;
#ifdef HAVE_NDBCLUSTER_DB
if
(
trans
->
ndb_tid
)
{
if
((
error
=
ndbcluster_rollback
(
thd
,
trans
->
ndb_tid
)))
{
my_error
(
ER_ERROR_DURING_ROLLBACK
,
MYF
(
0
),
error
);
error
=
1
;
}
trans
->
ndb_tid
=
0
;
operation_done
=
1
;
}
#endif
#ifdef HAVE_BERKELEY_DB
#ifdef HAVE_BERKELEY_DB
if
(
trans
->
bdb_tid
)
if
(
trans
->
bdb_tid
)
{
{
...
@@ -1133,7 +1194,7 @@ int handler::index_next_same(byte *buf, const byte *key, uint keylen)
...
@@ -1133,7 +1194,7 @@ int handler::index_next_same(byte *buf, const byte *key, uint keylen)
int
error
;
int
error
;
if
(
!
(
error
=
index_next
(
buf
)))
if
(
!
(
error
=
index_next
(
buf
)))
{
{
if
(
key_cmp
(
table
,
key
,
active_index
,
keylen
))
if
(
key_cmp
_if_same
(
table
,
key
,
active_index
,
keylen
))
{
{
table
->
status
=
STATUS_NOT_FOUND
;
table
->
status
=
STATUS_NOT_FOUND
;
error
=
HA_ERR_END_OF_FILE
;
error
=
HA_ERR_END_OF_FILE
;
...
@@ -1169,8 +1230,10 @@ bool handler::caching_allowed(THD* thd, char* table_key,
...
@@ -1169,8 +1230,10 @@ bool handler::caching_allowed(THD* thd, char* table_key,
** Some general functions that isn't in the handler class
** Some general functions that isn't in the handler class
****************************************************************************/
****************************************************************************/
/* Initiates table-file and calls apropriate database-creator */
/*
/* Returns 1 if something got wrong */
Initiates table-file and calls apropriate database-creator
Returns 1 if something got wrong
*/
int
ha_create_table
(
const
char
*
name
,
HA_CREATE_INFO
*
create_info
,
int
ha_create_table
(
const
char
*
name
,
HA_CREATE_INFO
*
create_info
,
bool
update_create_info
)
bool
update_create_info
)
...
@@ -1186,7 +1249,7 @@ int ha_create_table(const char *name, HA_CREATE_INFO *create_info,
...
@@ -1186,7 +1249,7 @@ int ha_create_table(const char *name, HA_CREATE_INFO *create_info,
{
{
update_create_info_from_table
(
create_info
,
&
table
);
update_create_info_from_table
(
create_info
,
&
table
);
if
(
table
.
file
->
table_flags
()
&
HA_DROP_BEFORE_CREATE
)
if
(
table
.
file
->
table_flags
()
&
HA_DROP_BEFORE_CREATE
)
table
.
file
->
delete_table
(
name
);
// Needed for BDB tables
table
.
file
->
delete_table
(
name
);
}
}
if
(
lower_case_table_names
==
2
&&
if
(
lower_case_table_names
==
2
&&
!
(
table
.
file
->
table_flags
()
&
HA_FILE_BASED
))
!
(
table
.
file
->
table_flags
()
&
HA_FILE_BASED
))
...
@@ -1307,6 +1370,26 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
...
@@ -1307,6 +1370,26 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
}
}
/*
Try to discover one table from handler(s)
*/
int
ha_discover
(
const
char
*
dbname
,
const
char
*
name
,
const
void
**
frmblob
,
uint
*
frmlen
)
{
int
error
=
1
;
// Table does not exist in any handler
DBUG_ENTER
(
"ha_discover"
);
DBUG_PRINT
(
"enter"
,
(
"db: %s, name: %s"
,
dbname
,
name
));
#ifdef HAVE_NDBCLUSTER_DB
if
(
have_ndbcluster
==
SHOW_OPTION_YES
)
error
=
ndbcluster_discover
(
dbname
,
name
,
frmblob
,
frmlen
);
#endif
if
(
!
error
)
statistic_increment
(
ha_discover_count
,
&
LOCK_status
);
DBUG_RETURN
(
error
);
}
/*
/*
Read first row between two ranges.
Read first row between two ranges.
Store ranges for future calls to read_range_next
Store ranges for future calls to read_range_next
...
@@ -1315,6 +1398,7 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
...
@@ -1315,6 +1398,7 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
read_range_first()
read_range_first()
start_key Start key. Is 0 if no min range
start_key Start key. Is 0 if no min range
end_key End key. Is 0 if no max range
end_key End key. Is 0 if no max range
eq_range_arg Set to 1 if start_key == end_key
sorted Set to 1 if result should be sorted per key
sorted Set to 1 if result should be sorted per key
NOTES
NOTES
...
@@ -1328,11 +1412,12 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
...
@@ -1328,11 +1412,12 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
int
handler
::
read_range_first
(
const
key_range
*
start_key
,
int
handler
::
read_range_first
(
const
key_range
*
start_key
,
const
key_range
*
end_key
,
const
key_range
*
end_key
,
bool
sorted
)
bool
eq_range_arg
,
bool
sorted
)
{
{
int
result
;
int
result
;
DBUG_ENTER
(
"handler::read_range_first"
);
DBUG_ENTER
(
"handler::read_range_first"
);
eq_range
=
eq_range_arg
;
end_range
=
0
;
end_range
=
0
;
if
(
end_key
)
if
(
end_key
)
{
{
...
@@ -1343,7 +1428,6 @@ int handler::read_range_first(const key_range *start_key,
...
@@ -1343,7 +1428,6 @@ int handler::read_range_first(const key_range *start_key,
}
}
range_key_part
=
table
->
key_info
[
active_index
].
key_part
;
range_key_part
=
table
->
key_info
[
active_index
].
key_part
;
if
(
!
start_key
)
// Read first record
if
(
!
start_key
)
// Read first record
result
=
index_first
(
table
->
record
[
0
]);
result
=
index_first
(
table
->
record
[
0
]);
else
else
...
@@ -1365,7 +1449,6 @@ int handler::read_range_first(const key_range *start_key,
...
@@ -1365,7 +1449,6 @@ int handler::read_range_first(const key_range *start_key,
SYNOPSIS
SYNOPSIS
read_range_next()
read_range_next()
eq_range Set to 1 if start_key == end_key
NOTES
NOTES
Record is read into table->record[0]
Record is read into table->record[0]
...
@@ -1376,16 +1459,18 @@ int handler::read_range_first(const key_range *start_key,
...
@@ -1376,16 +1459,18 @@ int handler::read_range_first(const key_range *start_key,
# Error code
# Error code
*/
*/
int
handler
::
read_range_next
(
bool
eq_range
)
int
handler
::
read_range_next
()
{
{
int
result
;
int
result
;
DBUG_ENTER
(
"handler::read_range_next"
);
DBUG_ENTER
(
"handler::read_range_next"
);
if
(
eq_range
)
if
(
eq_range
)
result
=
index_next_same
(
table
->
record
[
0
],
{
/* We trust that index_next_same always gives a row in range */
DBUG_RETURN
(
index_next_same
(
table
->
record
[
0
],
end_range
->
key
,
end_range
->
key
,
end_range
->
length
);
end_range
->
length
)
);
else
}
result
=
index_next
(
table
->
record
[
0
]);
result
=
index_next
(
table
->
record
[
0
]);
if
(
result
)
if
(
result
)
DBUG_RETURN
(
result
);
DBUG_RETURN
(
result
);
...
@@ -1394,16 +1479,18 @@ int handler::read_range_next(bool eq_range)
...
@@ -1394,16 +1479,18 @@ int handler::read_range_next(bool eq_range)
/*
/*
Compare if found key is over max-value
Compare if found key
(in row)
is over max-value
SYNOPSIS
SYNOPSIS
compare_key
compare_key
range
key to compare to row
range
range to compare to row. May be 0 for no range
NOTES
NOTES
For this to work, the row must be stored in table->record[0]
See key.cc::key_cmp() for details
RETURN
RETURN
The return value is SIGN(key_in_row - range_key):
0 Key is equal to range or 'range' == 0 (no range)
0 Key is equal to range or 'range' == 0 (no range)
-1 Key is less than range
-1 Key is less than range
1 Key is larger than range
1 Key is larger than range
...
@@ -1411,35 +1498,11 @@ int handler::read_range_next(bool eq_range)
...
@@ -1411,35 +1498,11 @@ int handler::read_range_next(bool eq_range)
int
handler
::
compare_key
(
key_range
*
range
)
int
handler
::
compare_key
(
key_range
*
range
)
{
{
KEY_PART_INFO
*
key_part
=
range_key_part
;
int
cmp
;
uint
store_length
;
if
(
!
range
)
if
(
!
range
)
return
0
;
// No max range
return
0
;
// No max range
cmp
=
key_cmp
(
range_key_part
,
range
->
key
,
range
->
length
);
for
(
const
char
*
key
=
range
->
key
,
*
end
=
key
+
range
->
length
;
if
(
!
cmp
)
key
<
end
;
cmp
=
key_compare_result_on_equal
;
key
+=
store_length
,
key_part
++
)
return
cmp
;
{
int
cmp
;
store_length
=
key_part
->
store_length
;
if
(
key_part
->
null_bit
)
{
if
(
*
key
)
{
if
(
!
key_part
->
field
->
is_null
())
return
1
;
continue
;
}
else
if
(
key_part
->
field
->
is_null
())
return
0
;
key
++
;
// Skip null byte
store_length
--
;
}
if
((
cmp
=
key_part
->
field
->
key_cmp
((
byte
*
)
key
,
key_part
->
length
))
<
0
)
return
-
1
;
if
(
cmp
>
0
)
return
1
;
}
return
key_compare_result_on_equal
;
}
}
sql/mysql_priv.h
View file @
fe83735a
...
@@ -754,11 +754,12 @@ void mysql_print_status(THD *thd);
...
@@ -754,11 +754,12 @@ void mysql_print_status(THD *thd);
int
find_ref_key
(
TABLE
*
form
,
Field
*
field
,
uint
*
offset
);
int
find_ref_key
(
TABLE
*
form
,
Field
*
field
,
uint
*
offset
);
void
key_copy
(
byte
*
key
,
TABLE
*
form
,
uint
index
,
uint
key_length
);
void
key_copy
(
byte
*
key
,
TABLE
*
form
,
uint
index
,
uint
key_length
);
void
key_restore
(
TABLE
*
form
,
byte
*
key
,
uint
index
,
uint
key_length
);
void
key_restore
(
TABLE
*
form
,
byte
*
key
,
uint
index
,
uint
key_length
);
int
key_cmp
(
TABLE
*
form
,
const
byte
*
key
,
uint
index
,
uint
key_length
);
bool
key_cmp_if_same
(
TABLE
*
form
,
const
byte
*
key
,
uint
index
,
uint
key_length
);
void
key_unpack
(
String
*
to
,
TABLE
*
form
,
uint
index
);
void
key_unpack
(
String
*
to
,
TABLE
*
form
,
uint
index
);
bool
check_if_key_used
(
TABLE
*
table
,
uint
idx
,
List
<
Item
>
&
fields
);
bool
check_if_key_used
(
TABLE
*
table
,
uint
idx
,
List
<
Item
>
&
fields
);
bool
init_errmessage
(
void
);
int
key_cmp
(
KEY_PART_INFO
*
key_part
,
const
byte
*
key
,
uint
key_length
);
bool
init_errmessage
(
void
);
void
sql_perror
(
const
char
*
message
);
void
sql_perror
(
const
char
*
message
);
void
sql_print_error
(
const
char
*
format
,...)
void
sql_print_error
(
const
char
*
format
,...)
__attribute__
((
format
(
printf
,
1
,
2
)));
__attribute__
((
format
(
printf
,
1
,
2
)));
...
@@ -837,7 +838,7 @@ extern ulong server_id, concurrency;
...
@@ -837,7 +838,7 @@ extern ulong server_id, concurrency;
extern
ulong
ha_read_count
,
ha_write_count
,
ha_delete_count
,
ha_update_count
;
extern
ulong
ha_read_count
,
ha_write_count
,
ha_delete_count
,
ha_update_count
;
extern
ulong
ha_read_key_count
,
ha_read_next_count
,
ha_read_prev_count
;
extern
ulong
ha_read_key_count
,
ha_read_next_count
,
ha_read_prev_count
;
extern
ulong
ha_read_first_count
,
ha_read_last_count
;
extern
ulong
ha_read_first_count
,
ha_read_last_count
;
extern
ulong
ha_read_rnd_count
,
ha_read_rnd_next_count
;
extern
ulong
ha_read_rnd_count
,
ha_read_rnd_next_count
,
ha_discover_count
;
extern
ulong
ha_commit_count
,
ha_rollback_count
,
table_cache_size
;
extern
ulong
ha_commit_count
,
ha_rollback_count
,
table_cache_size
;
extern
ulong
max_connections
,
max_connect_errors
,
connect_timeout
;
extern
ulong
max_connections
,
max_connect_errors
,
connect_timeout
;
extern
ulong
slave_net_timeout
;
extern
ulong
slave_net_timeout
;
...
@@ -891,6 +892,7 @@ extern SHOW_VAR init_vars[],status_vars[], internal_vars[];
...
@@ -891,6 +892,7 @@ extern SHOW_VAR init_vars[],status_vars[], internal_vars[];
extern
SHOW_COMP_OPTION
have_isam
;
extern
SHOW_COMP_OPTION
have_isam
;
extern
SHOW_COMP_OPTION
have_innodb
;
extern
SHOW_COMP_OPTION
have_innodb
;
extern
SHOW_COMP_OPTION
have_berkeley_db
;
extern
SHOW_COMP_OPTION
have_berkeley_db
;
extern
SHOW_COMP_OPTION
have_ndbcluster
;
extern
struct
system_variables
global_system_variables
;
extern
struct
system_variables
global_system_variables
;
extern
struct
system_variables
max_system_variables
;
extern
struct
system_variables
max_system_variables
;
extern
struct
rand_struct
sql_rand
;
extern
struct
rand_struct
sql_rand
;
...
@@ -961,6 +963,10 @@ int format_number(uint inputflag,uint max_length,my_string pos,uint length,
...
@@ -961,6 +963,10 @@ int format_number(uint inputflag,uint max_length,my_string pos,uint length,
my_string
*
errpos
);
my_string
*
errpos
);
int
openfrm
(
const
char
*
name
,
const
char
*
alias
,
uint
filestat
,
uint
prgflag
,
int
openfrm
(
const
char
*
name
,
const
char
*
alias
,
uint
filestat
,
uint
prgflag
,
uint
ha_open_flags
,
TABLE
*
outparam
);
uint
ha_open_flags
,
TABLE
*
outparam
);
int
readfrm
(
const
char
*
name
,
const
void
**
data
,
uint
*
length
);
int
writefrm
(
const
char
*
name
,
const
void
*
data
,
uint
len
);
int
create_table_from_handler
(
const
char
*
db
,
const
char
*
name
,
bool
create_if_found
);
int
closefrm
(
TABLE
*
table
);
int
closefrm
(
TABLE
*
table
);
db_type
get_table_type
(
const
char
*
name
);
db_type
get_table_type
(
const
char
*
name
);
int
read_string
(
File
file
,
gptr
*
to
,
uint
length
);
int
read_string
(
File
file
,
gptr
*
to
,
uint
length
);
...
@@ -1038,8 +1044,7 @@ void reset_host_errors(struct in_addr *in);
...
@@ -1038,8 +1044,7 @@ void reset_host_errors(struct in_addr *in);
bool
hostname_cache_init
();
bool
hostname_cache_init
();
void
hostname_cache_free
();
void
hostname_cache_free
();
void
hostname_cache_refresh
(
void
);
void
hostname_cache_refresh
(
void
);
bool
get_interval_info
(
const
char
*
str
,
uint
length
,
uint
count
,
long
*
values
);
/* sql_cache.cc */
/* sql_cache.cc */
extern
bool
sql_cache_init
();
extern
bool
sql_cache_init
();
extern
void
sql_cache_free
();
extern
void
sql_cache_free
();
...
...
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