mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge mysql.com:/home/psergey/mysql-5.0-latest-pull
into mysql.com:/home/psergey/mysql-5.0-imerge-unique BitKeeper/etc/logging_ok: auto-union mysql-test/r/index_merge.result: Auto merged sql/ha_innodb.cc: Auto merged sql/handler.h: Auto merged sql/opt_range.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_list.h: Auto merged sql/sql_select.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_test.cc: Auto merged sql/sql_union.cc: Auto merged sql/sql_update.cc: Auto merged
This commit is contained in:
@@ -74,6 +74,7 @@ Docs/safe-mysql.xml
|
||||
Docs/tex.fmt
|
||||
Docs/texi2dvi.out
|
||||
INSTALL-SOURCE
|
||||
INSTALL-WIN-SOURCE
|
||||
Logs/*
|
||||
MIRRORS
|
||||
Makefile
|
||||
@@ -380,6 +381,7 @@ libmysqld/pack.c
|
||||
libmysqld/password.c
|
||||
libmysqld/procedure.cc
|
||||
libmysqld/protocol.cc
|
||||
libmysqld/protocol_cursor.cc
|
||||
libmysqld/records.cc
|
||||
libmysqld/repl_failsafe.cc
|
||||
libmysqld/set_var.cc
|
||||
@@ -389,6 +391,7 @@ libmysqld/sp.cc
|
||||
libmysqld/sp_cache.cc
|
||||
libmysqld/sp_head.cc
|
||||
libmysqld/sp_pcontext.cc
|
||||
libmysqld/sp_rcontext.cc
|
||||
libmysqld/spatial.cc
|
||||
libmysqld/sql_acl.cc
|
||||
libmysqld/sql_analyse.cc
|
||||
|
@@ -8,6 +8,6 @@ c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$pentium_configs $debug_configs"
|
||||
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-embedded-server --with-openssl"
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-embedded-server --with-openssl --with-raid"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
@@ -9,6 +9,7 @@ acurtis@pcgem.rdg.cyberkinetica.com
|
||||
administrador@light.hegel.local
|
||||
ahlentz@co3064164-a.rochd1.qld.optusnet.com.au
|
||||
akishkin@work.mysql.com
|
||||
antony@ltantony.rdg.cyberkinetica.homeunix.net
|
||||
arjen@co3064164-a.bitbike.com
|
||||
arjen@fred.bitbike.com
|
||||
arjen@george.bitbike.com
|
||||
@@ -51,6 +52,7 @@ jani@janikt.pp.saunalahti.fi
|
||||
jani@rhols221.adsl.netsonic.fi
|
||||
jani@rhols221.arenanet.fi
|
||||
jani@ua126d19.elisa.omakaista.fi
|
||||
jani@ua167d18.elisa.omakaista.fi
|
||||
jcole@abel.spaceapes.com
|
||||
jcole@main.burghcom.com
|
||||
jcole@mugatu.spaceapes.com
|
||||
|
@@ -26,7 +26,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) $(BUILT_SOURCES) mysqld_error.txt \
|
||||
|
||||
all: $(targets) txt_files
|
||||
|
||||
txt_files: ../INSTALL-SOURCE ../COPYING ../COPYING.LIB \
|
||||
txt_files: ../INSTALL-SOURCE ../COPYING ../INSTALL-WIN-SOURCE \
|
||||
INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
|
||||
|
||||
CLEAN_FILES: $(BUILD_SOURCES)
|
||||
@@ -194,6 +194,9 @@ GT = $(srcdir)/Support/generate-text-files.pl
|
||||
../INSTALL-SOURCE: mysql.info $(GT)
|
||||
perl -w $(GT) mysql.info "Installing" "Tutorial" > $@
|
||||
|
||||
../INSTALL-WIN-SOURCE: mysql.info $(GT)
|
||||
perl -w $(GT) mysql.info "Windows source build" "Post-installation" > $@
|
||||
|
||||
# We put the description for the binary installation here so that
|
||||
# people who download source wont have to see it. It is moved up to
|
||||
# the toplevel by the script that makes the binary tar files.
|
||||
@@ -201,10 +204,7 @@ INSTALL-BINARY: mysql.info $(GT)
|
||||
perl -w $(GT) mysql.info "Installing binary" "Installing source" > $@
|
||||
|
||||
../COPYING: mysql.info $(GT)
|
||||
perl -w $(GT) mysql.info "GPL license" "LGPL license" > $@
|
||||
|
||||
../COPYING.LIB: mysql.info $(GT)
|
||||
perl -w $(GT) mysql.info "LGPL license" "Function Index" > $@
|
||||
perl -w $(GT) mysql.info "GPL license" "Function Index" > $@
|
||||
|
||||
../support-files/MacOSX/ReadMe.txt: mysql.info $(GT)
|
||||
perl -w $(GT) mysql.info "Mac OS X installation" "NetWare installation" > $@
|
||||
|
@@ -1,6 +1,8 @@
|
||||
/* Copyright Abandoned 1997 TCX DataKonsult AB & Monty Program KB & Detron HB
|
||||
This file is public domain and comes with NO WARRANTY of any kind */
|
||||
|
||||
character-set=latin1
|
||||
|
||||
#define ER_HASHCHK 1000
|
||||
"hashchk",
|
||||
#define ER_NISAMCHK 1001
|
||||
@@ -14,11 +16,11 @@
|
||||
#define ER_CANT_CREATE_TABLE 1005
|
||||
"Can't create table '%-.64s' (errno: %d)",
|
||||
#define ER_CANT_CREATE_DB 1006
|
||||
"Can't create database '%-.64s'. (errno: %d)",
|
||||
"Can't create database '%-.64s' (errno: %d)",
|
||||
#define ER_DB_CREATE_EXISTS 1007
|
||||
"Can't create database '%-.64s'. Database exists",
|
||||
"Can't create database '%-.64s'; database exists",
|
||||
#define ER_DB_DROP_EXISTS 1008
|
||||
"Can't drop database '%-.64s'. Database doesn't exist",
|
||||
"Can't drop database '%-.64s'; database doesn't exist",
|
||||
#define ER_DB_DROP_DELETE 1009
|
||||
"Error dropping database (can't delete '%-.64s', errno: %d)",
|
||||
#define ER_DB_DROP_RMDIR 1010
|
||||
@@ -34,7 +36,7 @@
|
||||
#define ER_CANT_LOCK 1015
|
||||
"Can't lock file (errno: %d)",
|
||||
#define ER_CANT_OPEN_FILE 1016
|
||||
"Can't open file: '%-.64s'. (errno: %d)",
|
||||
"Can't open file: '%-.64s' (errno: %d)",
|
||||
#define ER_FILE_NOT_FOUND 1017
|
||||
"Can't find file: '%-.64s' (errno: %d)",
|
||||
#define ER_CANT_READ_DIR 1018
|
||||
@@ -44,7 +46,7 @@
|
||||
#define ER_CHECKREAD 1020
|
||||
"Record has changed since last read in table '%-.64s'",
|
||||
#define ER_DISK_FULL 1021
|
||||
"Disk full (%s). Waiting for someone to free some space....",
|
||||
"Disk full (%s). Waiting for someone to free some space...",
|
||||
#define ER_DUP_KEY 1022
|
||||
"Can't write, duplicate key in table '%-.64s'",
|
||||
#define ER_ERROR_ON_CLOSE 1023
|
||||
@@ -62,17 +64,17 @@
|
||||
#define ER_FORM_NOT_FOUND 1029
|
||||
"View '%-.64s' doesn't exist for '%-.64s'",
|
||||
#define ER_GET_ERRNO 1030
|
||||
"Got error %d from table handler",
|
||||
"Got error %d from storage engine",
|
||||
#define ER_ILLEGAL_HA 1031
|
||||
"Table handler for '%-.64s' doesn't have this option",
|
||||
"Table storage engine for '%-.64s' doesn't have this option",
|
||||
#define ER_KEY_NOT_FOUND 1032
|
||||
"Can't find record in '%-.64s'",
|
||||
#define ER_NOT_FORM_FILE 1033
|
||||
"Incorrect information in file: '%-.64s'",
|
||||
#define ER_NOT_KEYFILE 1034
|
||||
"Incorrect key file for table: '%-.64s'. Try to repair it",
|
||||
"Incorrect key file for table: '%-.64s'; try to repair it",
|
||||
#define ER_OLD_KEYFILE 1035
|
||||
"Old key file for table '%-.64s'; Repair it!",
|
||||
"Old key file for table '%-.64s'; repair it!",
|
||||
#define ER_OPEN_AS_READONLY 1036
|
||||
"Table '%-.64s' is read only",
|
||||
#define ER_OUTOFMEMORY 1037
|
||||
@@ -90,9 +92,9 @@
|
||||
#define ER_HANDSHAKE_ERROR 1043
|
||||
"Bad handshake",
|
||||
#define ER_DBACCESS_DENIED_ERROR 1044
|
||||
"Access denied for user: '%-.32s@%-.64s' to database '%-.64s'",
|
||||
"Access denied for user: '%-.32s'@'%-.64s' to database '%-.64s'",
|
||||
#define ER_ACCESS_DENIED_ERROR 1045
|
||||
"Access denied for user: '%-.32s@%-.64s' (Using password: %s)",
|
||||
"Access denied for user: '%-.32s'@'%-.64s' (Using password: %s)",
|
||||
#define ER_NO_DB_ERROR 1046
|
||||
"No Database Selected",
|
||||
#define ER_UNKNOWN_COM_ERROR 1047
|
||||
@@ -154,7 +156,7 @@
|
||||
#define ER_WRONG_AUTO_KEY 1075
|
||||
"Incorrect table definition; There can only be one auto column and it must be defined as a key",
|
||||
#define ER_READY 1076
|
||||
"%s: ready for connections\n",
|
||||
"%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d\n",
|
||||
#define ER_NORMAL_SHUTDOWN 1077
|
||||
"%s: Normal shutdown\n",
|
||||
#define ER_GOT_SIGNAL 1078
|
||||
@@ -170,7 +172,7 @@
|
||||
#define ER_WRONG_FIELD_TERMINATORS 1083
|
||||
"Field separator argument is not what is expected. Check the manual",
|
||||
#define ER_BLOBS_AND_NO_TERMINATED 1084
|
||||
"You can't use fixed rowlength with BLOBs. Please use 'fields terminated by'.",
|
||||
"You can't use fixed rowlength with BLOBs. Please use 'fields terminated by'",
|
||||
#define ER_TEXTFILE_NOT_READABLE 1085
|
||||
"The file '%-.64s' must be in the database directory or be readable by all",
|
||||
#define ER_FILE_EXISTS_ERROR 1086
|
||||
@@ -180,15 +182,15 @@
|
||||
#define ER_ALTER_INFO 1088
|
||||
"Records: %ld Duplicates: %ld",
|
||||
#define ER_WRONG_SUB_KEY 1089
|
||||
"Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the table handler doesn't support unique sub keys",
|
||||
"Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the storage engine doesn't support unique sub keys",
|
||||
#define ER_CANT_REMOVE_ALL_FIELDS 1090
|
||||
"You can't delete all columns with ALTER TABLE. Use DROP TABLE instead",
|
||||
#define ER_CANT_DROP_FIELD_OR_KEY 1091
|
||||
"Can't DROP '%-.64s'. Check that column/key exists",
|
||||
#define ER_INSERT_INFO 1092
|
||||
"Records: %ld Duplicates: %ld Warnings: %ld",
|
||||
#define ER_INSERT_TABLE_USED 1093
|
||||
"INSERT TABLE '%-.64s' isn't allowed in FROM table list",
|
||||
#define ER_UPDATE_TABLE_USED 1093
|
||||
"You can't specify target table '%-.64s' for update in FROM clause",
|
||||
#define ER_NO_SUCH_THREAD 1094
|
||||
"Unknown thread id: %lu",
|
||||
#define ER_KILL_DENIED_ERROR 1095
|
||||
@@ -204,13 +206,13 @@
|
||||
#define ER_TABLE_NOT_LOCKED 1100
|
||||
"Table '%-.64s' was not locked with LOCK TABLES",
|
||||
#define ER_BLOB_CANT_HAVE_DEFAULT 1101
|
||||
"BLOB column '%-.64s' can't have a default value",
|
||||
"BLOB/TEXT column '%-.64s' can't have a default value",
|
||||
#define ER_WRONG_DB_NAME 1102
|
||||
"Incorrect database name '%-.100s'",
|
||||
#define ER_WRONG_TABLE_NAME 1103
|
||||
"Incorrect table name '%-.100s'",
|
||||
#define ER_TOO_BIG_SELECT 1104
|
||||
"The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok",
|
||||
"The SELECT would examine more rows than MAX_JOIN_SIZE. Check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is ok",
|
||||
#define ER_UNKNOWN_ERROR 1105
|
||||
"Unknown error",
|
||||
#define ER_UNKNOWN_PROCEDURE 1106
|
||||
@@ -238,7 +240,7 @@
|
||||
#define ER_TOO_MANY_FIELDS 1117
|
||||
"Too many columns",
|
||||
#define ER_TOO_BIG_ROWSIZE 1118
|
||||
"Too big row size. The maximum row size, not counting BLOBs, is %d. You have to change some fields to BLOBs",
|
||||
"Too big row size. The maximum row size for the used table type, not counting BLOBs, is %ld. You have to change some fields to TEXT or BLOBs",
|
||||
#define ER_STACK_OVERRUN 1119
|
||||
"Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld -O thread_stack=#' to specify a bigger stack if needed",
|
||||
#define ER_WRONG_OUTER_JOIN 1120
|
||||
@@ -286,11 +288,11 @@
|
||||
#define ER_NONEXISTING_GRANT 1141
|
||||
"There is no such grant defined for user '%-.32s' on host '%-.64s'",
|
||||
#define ER_TABLEACCESS_DENIED_ERROR 1142
|
||||
"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'",
|
||||
"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'",
|
||||
#define ER_COLUMNACCESS_DENIED_ERROR 1143
|
||||
"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'",
|
||||
"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'",
|
||||
#define ER_ILLEGAL_GRANT_FOR_TABLE 1144
|
||||
"Illegal GRANT/REVOKE command. Please consult the manual which privileges can be used.",
|
||||
"Illegal GRANT/REVOKE command. Please consult the manual which privileges can be used",
|
||||
#define ER_GRANT_WRONG_HOST_OR_USER 1145
|
||||
"The host or user argument to GRANT is too long",
|
||||
#define ER_NO_SUCH_TABLE 1146
|
||||
@@ -332,17 +334,17 @@
|
||||
#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164
|
||||
"The used table type doesn't support AUTO_INCREMENT columns",
|
||||
#define ER_DELAYED_INSERT_TABLE_LOCKED 1165
|
||||
"INSERT DELAYED can't be used with table '%-.64s', because it is locked with LOCK TABLES",
|
||||
"INSERT DELAYED can't be used with table '%-.64s' because it is locked with LOCK TABLES",
|
||||
#define ER_WRONG_COLUMN_NAME 1166
|
||||
"Incorrect column name '%-.100s'",
|
||||
#define ER_WRONG_KEY_COLUMN 1167
|
||||
"The used table handler can't index column '%-.64s'",
|
||||
"The used storage engine can't index column '%-.64s'",
|
||||
#define ER_WRONG_MRG_TABLE 1168
|
||||
"All tables in the MERGE table are not identically defined",
|
||||
#define ER_DUP_UNIQUE 1169
|
||||
"Can't write, because of unique constraint, to table '%-.64s'",
|
||||
#define ER_BLOB_KEY_WITHOUT_LENGTH 1170
|
||||
"BLOB column '%-.64s' used in key specification without a key length",
|
||||
"BLOB/TEXT column '%-.64s' used in key specification without a key length",
|
||||
#define ER_PRIMARY_CANT_HAVE_NULL 1171
|
||||
"All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead",
|
||||
#define ER_TOO_MANY_ROWS 1172
|
||||
@@ -358,7 +360,7 @@
|
||||
#define ER_CHECK_NO_SUCH_TABLE 1177
|
||||
"Can't open table",
|
||||
#define ER_CHECK_NOT_IMPLEMENTED 1178
|
||||
"The handler for the table doesn't support %s",
|
||||
"The storage engine for the table doesn't support %s",
|
||||
#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179
|
||||
"You are not allowed to execute this command in a transaction",
|
||||
#define ER_ERROR_DURING_COMMIT 1180
|
||||
@@ -372,7 +374,7 @@
|
||||
#define ER_NEW_ABORTING_CONNECTION 1184
|
||||
"Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)",
|
||||
#define ER_DUMP_NOT_IMPLEMENTED 1185
|
||||
"The handler for the table does not support binary table dump",
|
||||
"The storage engine for the table does not support binary table dump",
|
||||
#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186
|
||||
"Binlog closed, cannot RESET MASTER",
|
||||
#define ER_INDEX_REBUILD 1187
|
||||
@@ -394,13 +396,13 @@
|
||||
#define ER_CRASHED_ON_REPAIR 1195
|
||||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Some non-transactional changed tables couldn't be rolled back",
|
||||
#define ER_TRANS_CACHE_FULL 1197
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
|
||||
#define ER_SLAVE_MUST_STOP 1198
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation cannot be performed with a running slave, run STOP SLAVE first",
|
||||
#define ER_SLAVE_NOT_RUNNING 1199
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"This operation requires a running slave, configure slave and do START SLAVE",
|
||||
#define ER_BAD_SLAVE 1200
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
#define ER_MASTER_INFO 1201
|
||||
@@ -424,19 +426,19 @@
|
||||
#define ER_WRONG_ARGUMENTS 1210
|
||||
"Wrong arguments to %s",
|
||||
#define ER_NO_PERMISSION_TO_CREATE_USER 1211
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
"'%-.32s'@'%-.64s' is not allowed to create new users",
|
||||
#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
|
||||
"Incorrect table definition; All MERGE tables must be in the same database",
|
||||
"Incorrect table definition; all MERGE tables must be in the same database",
|
||||
#define ER_LOCK_DEADLOCK 1213
|
||||
"Deadlock found when trying to get lock; Try restarting transaction",
|
||||
#define ER_TABLE_CANT_HANDLE_FULLTEXT 1214
|
||||
#define ER_TABLE_CANT_HANDLE_FT 1214
|
||||
"The used table type doesn't support FULLTEXT indexes",
|
||||
#define ER_CANNOT_ADD_FOREIGN 1215
|
||||
"Cannot add foreign key constraint",
|
||||
#define ER_NO_REFERENCED_ROW 1216
|
||||
"Cannot add a child row: a foreign key constraint fails",
|
||||
"Cannot add or update a child row: a foreign key constraint fails",
|
||||
#define ER_ROW_IS_REFERENCED 1217
|
||||
"Cannot delete a parent row: a foreign key constraint fails",
|
||||
"Cannot delete or update a parent row: a foreign key constraint fails",
|
||||
#define ER_CONNECT_TO_MASTER 1218
|
||||
"Error connecting to master: %-.128s",
|
||||
#define ER_QUERY_ON_MASTER 1219
|
||||
@@ -475,3 +477,97 @@
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236
|
||||
"Got fatal error %d: '%-.128s' from master when reading data from binary log",
|
||||
#define ER_SLAVE_IGNORED_TABLE 1237
|
||||
"Slave SQL thread ignored the query because of replicate-*-table rules",
|
||||
#define ER_WRONG_FK_DEF 1238
|
||||
"Wrong foreign key definition for '%-.64s': %s",
|
||||
#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1239
|
||||
"Key reference and table reference doesn't match",
|
||||
#define ER_OPERAND_COLUMNS 1240
|
||||
"Operand should contain %d column(s)",
|
||||
#define ER_SUBQUERY_NO_1_ROW 1241
|
||||
"Subquery returns more than 1 row",
|
||||
#define ER_UNKNOWN_STMT_HANDLER 1242
|
||||
"Unknown prepared statement handler (%ld) given to %s",
|
||||
#define ER_CORRUPT_HELP_DB 1243
|
||||
"Help database is corrupt or does not exist",
|
||||
#define ER_CYCLIC_REFERENCE 1244
|
||||
"Cyclic reference on subqueries",
|
||||
#define ER_AUTO_CONVERT 1245
|
||||
"Converting column '%s' from %s to %s",
|
||||
#define ER_ILLEGAL_REFERENCE 1246
|
||||
"Reference '%-.64s' not supported (%s)",
|
||||
#define ER_DERIVED_MUST_HAVE_ALIAS 1247
|
||||
"Every derived table must have it's own alias",
|
||||
#define ER_SELECT_REDUCED 1248
|
||||
"Select %u was reduced during optimisation",
|
||||
#define ER_TABLENAME_NOT_ALLOWED_HERE 1249
|
||||
"Table '%-.64s' from one of SELECT's can not be used in %-.32s",
|
||||
#define ER_NOT_SUPPORTED_AUTH_MODE 1250
|
||||
"Client does not support authentication protocol requested by server; consider upgrading MySQL client",
|
||||
#define ER_SPATIAL_CANT_HAVE_NULL 1251
|
||||
"All parts of a SPATIAL KEY must be NOT NULL",
|
||||
#define ER_COLLATION_CHARSET_MISMATCH 1252
|
||||
"COLLATION '%s' is not valid for CHARACTER SET '%s'",
|
||||
#define ER_SLAVE_WAS_RUNNING 1253
|
||||
"Slave is already running",
|
||||
#define ER_SLAVE_WAS_NOT_RUNNING 1254
|
||||
"Slave has already been stopped",
|
||||
#define ER_TOO_BIG_FOR_UNCOMPRESS 1255
|
||||
"Too big size of uncompressed data. The maximum size is %d. (probably, length of uncompressed data was corrupted)",
|
||||
#define ER_ZLIB_Z_MEM_ERROR 1256
|
||||
"ZLIB: Not enough memory available for zlib",
|
||||
#define ER_ZLIB_Z_BUF_ERROR 1257
|
||||
"ZLIB: Not enough room in the output buffer for zlib (probably, length of uncompressed data was corrupted)",
|
||||
#define ER_ZLIB_Z_DATA_ERROR 1258
|
||||
"ZLIB: Input data was corrupted for zlib",
|
||||
#define ER_CUT_VALUE_GROUP_CONCAT 1259
|
||||
"%d line(s) was(were) cut by group_concat()",
|
||||
#define ER_WARN_TOO_FEW_RECORDS 1260
|
||||
"Record count is fewer than the column count at row %ld";
|
||||
#define ER_WARN_TOO_MANY_RECORDS 1261
|
||||
"Record count is more than the column count at row %ld";
|
||||
#define ER_WARN_NULL_TO_NOTNULL 1262
|
||||
"Data truncated, NULL supplied to NOT NULL column '%s' at row %ld";
|
||||
#define ER_WARN_DATA_OUT_OF_RANGE 1263
|
||||
"Data truncated, out of range for column '%s' at row %ld";
|
||||
#define ER_WARN_DATA_TRUNCATED 1264
|
||||
"Data truncated for column '%s' at row %ld",
|
||||
#define ER_WARN_USING_OTHER_HANDLER 1265
|
||||
"Using storage engine %s for table '%s'",
|
||||
#define ER_CANT_AGGREGATE_2COLLATIONS 1266
|
||||
"Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'",
|
||||
#define ER_DROP_USER 1267
|
||||
"Can't drop one or more of the requested users",
|
||||
#define ER_REVOKE_GRANTS 1268
|
||||
"Can't revoke all privileges, grant for one or more of the requested users",
|
||||
#define ER_CANT_AGGREGATE_3COLLATIONS 1269
|
||||
"Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'",
|
||||
#define ER_CANT_AGGREGATE_NCOLLATIONS 1270
|
||||
"Illegal mix of collations for operation '%s'",
|
||||
#define ER_VARIABLE_IS_NOT_STRUCT 1271
|
||||
"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
|
||||
#define ER_UNKNOWN_COLLATION 1272
|
||||
"Unknown collation: '%-.64s'",
|
||||
#define ER_SLAVE_IGNORED_SSL_PARAMS 1273
|
||||
"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support. They can be used later when MySQL slave with SSL will be started.",
|
||||
#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1274
|
||||
"Server is running in --secure-auth mode, but '%s@%s' has a password in the old format; please change the password to the new format",
|
||||
#define ER_WARN_FIELD_RESOLVED 1275
|
||||
"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
|
||||
#define ER_BAD_SLAVE_UNTIL_COND 1276
|
||||
"Wrong parameter or combination of parameters for START SLAVE UNTIL",
|
||||
#define ER_MISSING_SKIP_SLAVE 1277
|
||||
"It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL. Otherwise you will get problems if you get an unexpected slave's mysqld restart",
|
||||
#define ER_UNTIL_COND_IGNORED 1278
|
||||
"SQL thread is not to be started so UNTIL options are ignored",
|
||||
#define ER_WRONG_NAME_FOR_INDEX 1279
|
||||
"Incorrect index name '%-.100s'",
|
||||
#define ER_WRONG_NAME_FOR_CATALOG 1280
|
||||
"Incorrect catalog name '%-.100s'",
|
||||
#define ER_WARN_QC_RESIZE 1281
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
#define ER_BAD_FT_COLUMN 1282
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
#define ER_UNKNOWN_KEY_CACHE 1283
|
||||
"Unknown key cache '%-.100s'",
|
||||
|
@@ -1,221 +0,0 @@
|
||||
#########################################################
|
||||
# #
|
||||
# HOWTO : INSTALL MySQL FROM SOURCE #
|
||||
# WINDOWS PORT #
|
||||
# #
|
||||
# Copyright (C) MySQL AB 1995-2003 #
|
||||
#########################################################
|
||||
|
||||
This is a simple 'HOWTO' document describing how to
|
||||
build MySQL binaries for versions 4.1 and above on
|
||||
Windows. Instructions are provided for building binaries
|
||||
from a standard source distribution or from the BitKeeper
|
||||
tree that contains the latest development source.
|
||||
|
||||
---------------------------------------------------------
|
||||
NOTE
|
||||
---------------------------------------------------------
|
||||
|
||||
Normally, it is best to use precompiled binary distributions
|
||||
of MySQL that are built specifically for optimal performance
|
||||
on Windows by MySQL AB. Binary distributions are available
|
||||
from:
|
||||
|
||||
http://www.mysql.com/downloads/
|
||||
|
||||
The instructions in this document are strictly for users
|
||||
who want to test MySQL on Windows from the latest source or
|
||||
from the BitKeeper tree, and for internal MySQL developers.
|
||||
|
||||
--------------------------------------------------------
|
||||
TABLE OF CONTENTS
|
||||
--------------------------------------------------------
|
||||
1. REQUIREMENTS
|
||||
2. OBTAINING A WINDOWS SOURCE DISTRIBUTION
|
||||
3. CREATING A SOURCE PACKAGE FROM THE 'BitKeeper' TREE
|
||||
4. BUILDING 'mysql server and clients' FROM VC++ WORKSPACE
|
||||
5. BUILDING FROM 'nmake' MAKEFILES
|
||||
6. STARTING THE MYSQL SERVER FOR THE FIRST TIME
|
||||
7. TESTING THE CONNECTION
|
||||
8. SPECIAL NOTES AND CONSIDERATIONS
|
||||
|
||||
-------------------------------------------------------
|
||||
1. REQUIREMENTS
|
||||
-------------------------------------------------------
|
||||
|
||||
To build MySQL on Windows from source, you need the
|
||||
following compiler and resources available on your Windows
|
||||
system:
|
||||
|
||||
- Microsoft Visual C++ 6.0 and above
|
||||
- ~45 MB disk space
|
||||
- 64 MB RAM
|
||||
|
||||
You'll also need a MySQL source distribution, which you
|
||||
can obtain as described in section 2.
|
||||
|
||||
-------------------------------------------------------
|
||||
2. OBTAINING A WINDOWS SOURCE DISTRIBUTION
|
||||
-------------------------------------------------------
|
||||
|
||||
There are two ways you can get a Windows source distribution
|
||||
for MySQL version 4.1 and above:
|
||||
|
||||
I. Obtain a MySQL AB-distributed source distribution for the
|
||||
particular version of MySQL in which you are interested.
|
||||
Prepackaged source distributions are available for released
|
||||
versions of MySQL and can be obtained from:
|
||||
|
||||
http://www.mysql.com/downloads/
|
||||
|
||||
II. Alternatively, you can package a source distribution
|
||||
yourself from the latest BitKeeper developer source
|
||||
tree. If you plan to do this, you must create the
|
||||
package on a Unix system and then transfer it to your
|
||||
Windows system. (The reason for this is that some of the
|
||||
configuration and build steps require tools that work only
|
||||
on Unix.) The BitKeeper approach thus requires:
|
||||
|
||||
- A system running Unix, or a Unix-like system such as Linux
|
||||
- BitKeeper 3.0 installed on that system (you can obtain
|
||||
BitKeeper from http://www.bitkeeper.com)
|
||||
|
||||
If you are using the first option, you can skip the next
|
||||
section and go directly to "BUILDING 'mysql server & clients'
|
||||
FROM VC++ WORKSPACE"
|
||||
|
||||
-------------------------------------------------------
|
||||
3. CREATING A SOURCE PACKAGE FROM THE 'BitKeeper' TREE
|
||||
-------------------------------------------------------
|
||||
|
||||
To build the latest Windows source package from the current
|
||||
BitKeeper source tree, use the following instructions. Please
|
||||
note that this procedure must be performed on a system
|
||||
running a Unix or Unix-like operating system. (The procedure
|
||||
is known to work well on Linux, for example.)
|
||||
|
||||
- Clone the BitKeeper source tree for MySQL (version 4.1
|
||||
or above, as desired). For more information how to clone
|
||||
the source tree, see the instructions at:
|
||||
|
||||
http://www.mysql.com/doc/en/Installing_source_tree.html
|
||||
|
||||
- Configure and build the distribution so that you have a
|
||||
server binary to work with. One way to do this is to run
|
||||
the following command in the top-level directory of your
|
||||
source tree:
|
||||
|
||||
./BUILD/compile-pentium-max
|
||||
|
||||
- After making sure that the build process completed successfully,
|
||||
run the following utility script from top-level directory
|
||||
of your source tree:
|
||||
|
||||
./scripts/make_win_src_distribution
|
||||
|
||||
This script creates a Windows source package, to be used on
|
||||
your Windows system. You can supply different options to the
|
||||
script based on your needs. It accepts the following options:
|
||||
|
||||
--debug Debug, without creating the package
|
||||
--tmp Specify the temporary location
|
||||
--suffix Suffix name for the package
|
||||
--dirname Directory name to copy files (intermediate)
|
||||
--silent Do not list verbosely files processed
|
||||
--tar Create tar.gz package instead of .zip
|
||||
--help Show this help message
|
||||
|
||||
By default, make_win_src_distribution creates a zipped
|
||||
archive with the name mysql-$version-win-src.zip, where
|
||||
$version represents the version of your MySQL source tree.
|
||||
|
||||
- Copy or upload to your Windows machine the Windows source
|
||||
package that you have just created. To compile it, use
|
||||
the instructions in the next section.
|
||||
|
||||
---------------------------------------------------------
|
||||
4. BUILDING 'mysql server & clients' FROM VC++ WORKSPACE
|
||||
---------------------------------------------------------
|
||||
|
||||
NOTE: MySQL 4.1 and above VC++ workspace files are compatible
|
||||
with Microsoft Visual Studio 6.0 and above(7.0/.NET)
|
||||
editions and tested by MySQL folks before each
|
||||
release.
|
||||
|
||||
Unpack the Windows source zipped archive to a folder and open
|
||||
mysql.dsw from your top-level directory.
|
||||
|
||||
If you want to build both release and debug versions, then
|
||||
select 'build' -> 'buildall' option. To build only release
|
||||
or debug versions, select all appropriate workspaces from
|
||||
the 'build' -> 'batch build' option.
|
||||
|
||||
The simplest solution to building the basic clients and core
|
||||
server is to set your current active workspace as 'mysqld'
|
||||
release or debug version, and just hit 'build' or 'F7', which
|
||||
creates the necessary client binaries in the 'client_release'
|
||||
or 'client_debug' directories. The libraries are placed in the
|
||||
'lib_release' and 'lib_debug' directories for release and
|
||||
debug versions, respectively.
|
||||
|
||||
Now you have built the distribution. If you get any compiler
|
||||
errors, please cross check and email the compiler output to
|
||||
win32@lists.mysql.com for further assistance.
|
||||
|
||||
---------------------------------------------------------
|
||||
5. BUILDING FROM 'nmake' MAKEFILES
|
||||
---------------------------------------------------------
|
||||
TODO from MySQL PIEFU team.
|
||||
|
||||
---------------------------------------------------------
|
||||
6. STARTING THE MYSQL SERVER FOR THE FIRST TIME
|
||||
---------------------------------------------------------
|
||||
|
||||
The server built using the preceding instructions will
|
||||
expect that the MySQL base directory and data directory
|
||||
are C:\mysql and C:\mysql\data by default. If you want to
|
||||
test your server using the source root directory and its
|
||||
data directory as the base directory and data directory,
|
||||
you will need to tell the server their pathnames. You can
|
||||
either do this on the command line with the --basedir
|
||||
and --data-dir options, or place appropriate options in
|
||||
an option file (C:\my.cnf or the my.ini file in your
|
||||
Windows directory). If you have an existing data directory
|
||||
elsewhere that you want to use, you can specify its pathname
|
||||
instead.
|
||||
|
||||
Start your server from the 'client_release' or 'client_debug'
|
||||
directory (depending on which server you want to use). The
|
||||
general instructions are given here:
|
||||
|
||||
http://www.mysql.com/doc/en/Windows_installation.html
|
||||
|
||||
You'll have to adapt the instructions appropriately if you
|
||||
want to use a different base directory and/or data directory.
|
||||
|
||||
That's all!!! See, it's as simple to build MySQL on Windows
|
||||
as on any other platform!!!
|
||||
|
||||
---------------------------------------------------------
|
||||
7. TESTING THE CONNECTION
|
||||
---------------------------------------------------------
|
||||
|
||||
Once the server is running in standalone fashion or as a
|
||||
service based on your configuration, try to connect to it
|
||||
from the 'mysql' command line SQL interactive utility that
|
||||
exists in your 'client_release' or 'client_debug' directory.
|
||||
|
||||
---------------------------------------------------------
|
||||
8. SPECIAL NOTES AND CONSIDERATIONS
|
||||
---------------------------------------------------------
|
||||
|
||||
- For production use, MySQL AB does not advise using a MySQL
|
||||
server built by yourself from source. It is preferable to
|
||||
stick to using binaries shipped by MySQL AB.
|
||||
|
||||
- If you find something not working as expected, or you have
|
||||
suggestions about ways to improve the current build process
|
||||
on Windows, please email to win32@lists.mysql.com.
|
||||
|
||||
Thanks
|
||||
MySQL Team
|
@@ -19,16 +19,14 @@
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
# These are built from source in the Docs directory
|
||||
EXTRA_DIST = INSTALL-SOURCE README \
|
||||
COPYING COPYING.LIB zlib
|
||||
EXTRA_DIST = INSTALL-SOURCE README COPYING zlib
|
||||
SUBDIRS = . include @docs_dirs@ \
|
||||
@readline_topdir@ sql-common \
|
||||
@thread_dirs@ pstack @sql_client_dirs@ \
|
||||
@sql_server_dirs@ scripts man tests \
|
||||
@sql_server_dirs@ scripts man tests SSL\
|
||||
BUILD @netware_dir@ os2 @libmysqld_dirs@ \
|
||||
@bench_dirs@ support-files @fs_dirs@ @tools_dirs@
|
||||
|
||||
|
||||
# Relink after clean
|
||||
linked_sources = linked_client_sources linked_server_sources \
|
||||
linked_libmysql_sources linked_libmysql_r_sources \
|
||||
|
24
SSL/Makefile.am
Normal file
24
SSL/Makefile.am
Normal file
@@ -0,0 +1,24 @@
|
||||
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
## Process this file with automake to create Makefile.in
|
||||
|
||||
EXTRA_DIST= NOTES cacert.pem client-cert.pem client-key.pem \
|
||||
client-req.pem run-client run-server server-cert.pem \
|
||||
server-key.pem server-req.pem
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
@@ -42,8 +42,8 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /WX /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
@@ -69,7 +69,7 @@ LINK32=xilink6.exe
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MTd /W3 /Z7 /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# SUBTRACT CPP /Fr /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@@ -100,6 +100,10 @@ SOURCE=..\strings\bmove_upp.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\mysys\charset-def.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\mysys\charset.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@@ -38,7 +38,8 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /W3 /GX /O2 /I "..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCSN" /D "DBUG_OFF" /D "_WINDOWS" /D "__WIN__" /D "_MT" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /W3 /GX /O2 /I "..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCSN" /D "DBUG_OFF" /D "_WINDOWS" /D "__WIN__" /D "_MT" /YX /FD /c
|
||||
# SUBTRACT CPP /WX /Fr
|
||||
# ADD BASE RSC /l 0x416 /d "NDEBUG"
|
||||
# ADD RSC /l 0x416 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@@ -43,8 +43,8 @@ RSC=rc.exe
|
||||
# PROP Intermediate_Dir "debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /GX /O2 /I "../innobase/include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "__NT__" /D "WIN32" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MTd /W3 /GX /Z7 /O2 /I "../innobase/include" /I "../include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "WIN32" /D "_MBCS" /D "MYSQL_SERVER" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD CPP /nologo /G6 /MTd /W3 /GX /Z7 /Od /I "../innobase/include" /I "../include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "WIN32" /D "_MBCS" /D "MYSQL_SERVER" /FD /c
|
||||
# SUBTRACT CPP /Fr /YX
|
||||
# ADD BASE RSC /l 0x416 /d "NDEBUG"
|
||||
# ADD RSC /l 0x416 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
@@ -68,7 +68,7 @@ LIB32=xilink6.exe -lib
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /GX /O2 /I "../innobase/include" /I "../include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "WIN32" /D "_MBCS" /D "MYSQL_SERVER" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /GX /O2 /I "../innobase/include" /I "../include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "WIN32" /D "_MBCS" /D "MYSQL_SERVER" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE RSC /l 0x416 /d "NDEBUG"
|
||||
# ADD RSC /l 0x416 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@@ -119,6 +119,10 @@ SOURCE=..\strings\bmove_upp.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\mysys\charset-def.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\mysys\charset.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@@ -24,7 +24,7 @@ CFG=test_libmysqld - Win32 Release
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
CPP=xicl6.exe
|
||||
RSC=rc.exe
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
@@ -38,13 +38,14 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\include" /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "DBUG_OFF" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\include" /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "DBUG_OFF" /YX /FD /c
|
||||
# SUBTRACT CPP /WX /Fr
|
||||
# ADD BASE RSC /l 0x416 /d "NDEBUG"
|
||||
# ADD RSC /l 0x416 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"LIBCMTD" /out:"Release/mysql-server.exe"
|
||||
# Begin Target
|
||||
|
@@ -43,7 +43,8 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /D "__WIN__" /FR /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /D "__WIN__" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x416 /d "NDEBUG"
|
||||
@@ -70,6 +71,7 @@ LINK32=xilink6.exe
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c
|
||||
# SUBTRACT CPP /Fr
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x416 /d "_DEBUG"
|
||||
@@ -186,7 +188,6 @@ SOURCE=..\sql\item_create.cpp
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\sql\item_func.cpp
|
||||
# ADD CPP /I "../zlib"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
|
@@ -40,7 +40,7 @@ main( int argc, char * argv[] )
|
||||
MYSQL_ROW row ;
|
||||
|
||||
//....just curious....
|
||||
printf( "sizeof( MYSQL ) == %d\n", sizeof( MYSQL ) ) ;
|
||||
printf( "sizeof( MYSQL ) == %d\n", (int) sizeof( MYSQL ) ) ;
|
||||
if ( argc == 2 )
|
||||
{
|
||||
strcpy( szDB, argv[ 1 ] ) ;
|
||||
@@ -49,27 +49,31 @@ main( int argc, char * argv[] )
|
||||
{
|
||||
strcpy( szDB, "mysql" ) ;
|
||||
printf("Some mysql struct information (size and offset):\n");
|
||||
printf("net:\t%3d %3d\n",sizeof(myData->net),offsetof(MYSQL,net));
|
||||
printf("host:\t%3d %3d\n",sizeof(myData->host),offsetof(MYSQL,host));
|
||||
printf("port:\t%3d %3d\n",sizeof(myData->port),offsetof(MYSQL,port));
|
||||
printf("protocol_version:\t%3d %3d\n",sizeof(myData->protocol_version),
|
||||
offsetof(MYSQL,protocol_version));
|
||||
printf("thread_id:\t%3d %3d\n",sizeof(myData->thread_id),
|
||||
offsetof(MYSQL,thread_id));
|
||||
printf("affected_rows:\t%3d %3d\n",sizeof(myData->affected_rows),
|
||||
offsetof(MYSQL,affected_rows));
|
||||
printf("packet_length:\t%3d %3d\n",sizeof(myData->packet_length),
|
||||
offsetof(MYSQL,packet_length));
|
||||
printf("status:\t%3d %3d\n",sizeof(myData->status),
|
||||
offsetof(MYSQL,status));
|
||||
printf("fields:\t%3d %3d\n",sizeof(myData->fields),
|
||||
offsetof(MYSQL,fields));
|
||||
printf("field_alloc:\t%3d %3d\n",sizeof(myData->field_alloc),
|
||||
offsetof(MYSQL,field_alloc));
|
||||
printf("free_me:\t%3d %3d\n",sizeof(myData->free_me),
|
||||
offsetof(MYSQL,free_me));
|
||||
printf("options:\t%3d %3d\n",sizeof(myData->options),
|
||||
offsetof(MYSQL,options));
|
||||
printf("net:\t%3d %3d\n",(int) sizeof(myData->net),
|
||||
(int) offsetof(MYSQL,net));
|
||||
printf("host:\t%3d %3d\n",(int) sizeof(myData->host),
|
||||
(int) offsetof(MYSQL,host));
|
||||
printf("port:\t%3d %3d\n", (int) sizeof(myData->port),
|
||||
(int) offsetof(MYSQL,port));
|
||||
printf("protocol_version:\t%3d %3d\n",
|
||||
(int) sizeof(myData->protocol_version),
|
||||
(int) offsetof(MYSQL,protocol_version));
|
||||
printf("thread_id:\t%3d %3d\n",(int) sizeof(myData->thread_id),
|
||||
(int) offsetof(MYSQL,thread_id));
|
||||
printf("affected_rows:\t%3d %3d\n",(int) sizeof(myData->affected_rows),
|
||||
(int) offsetof(MYSQL,affected_rows));
|
||||
printf("packet_length:\t%3d %3d\n",(int) sizeof(myData->packet_length),
|
||||
(int) offsetof(MYSQL,packet_length));
|
||||
printf("status:\t%3d %3d\n",(int) sizeof(myData->status),
|
||||
(int) offsetof(MYSQL,status));
|
||||
printf("fields:\t%3d %3d\n",(int) sizeof(myData->fields),
|
||||
(int) offsetof(MYSQL,fields));
|
||||
printf("field_alloc:\t%3d %3d\n",(int) sizeof(myData->field_alloc),
|
||||
(int) offsetof(MYSQL,field_alloc));
|
||||
printf("free_me:\t%3d %3d\n",(int) sizeof(myData->free_me),
|
||||
(int) offsetof(MYSQL,free_me));
|
||||
printf("options:\t%3d %3d\n",(int) sizeof(myData->options),
|
||||
(int) offsetof(MYSQL,options));
|
||||
puts("");
|
||||
}
|
||||
}
|
||||
|
@@ -25,7 +25,7 @@ CFG=myisam - Win32 Debug
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
CPP=xicl6.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "myisam - Win32 Release"
|
||||
@@ -47,7 +47,7 @@ RSC=rc.exe
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
LIB32=xilink6.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo /out:"..\lib_release\myisam.lib"
|
||||
|
||||
@@ -70,7 +70,7 @@ LIB32=link.exe -lib
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
LIB32=xilink6.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo /out:"..\lib_Debug\myisam.lib"
|
||||
|
||||
@@ -169,6 +169,10 @@ SOURCE=.\mi_key.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mi_keycache.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mi_locking.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@@ -25,7 +25,7 @@ CFG=myisamchk - Win32 Debug
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
CPP=xicl6.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "myisamchk - Win32 Release"
|
||||
@@ -42,14 +42,14 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../myisam" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FR /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../myisam" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib setargv.obj /nologo /subsystem:console /machine:I386 /out:"../client_release/myisamchk.exe"
|
||||
|
||||
@@ -74,7 +74,7 @@ LINK32=link.exe
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/myisamchk.exe" /pdbtype:sept
|
||||
|
||||
|
@@ -42,7 +42,8 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../myisam" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FR /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../myisam" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@@ -25,7 +25,7 @@ CFG=myisampack - Win32 Debug
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
CPP=xicl6.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "myisampack - Win32 Release"
|
||||
@@ -42,13 +42,14 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../myisam" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FR /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../myisam" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib setargv.obj /nologo /subsystem:console /machine:I386
|
||||
|
||||
@@ -73,7 +74,7 @@ LINK32=link.exe
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
|
@@ -251,6 +251,9 @@ Package=<4>
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name strings
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name zlib
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
@@ -275,6 +278,9 @@ Package=<4>
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name strings
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name zlib
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
@@ -311,6 +317,9 @@ Package=<4>
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name strings
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name zlib
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
@@ -43,8 +43,8 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /GX /O1 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /YX /Yc /Yu
|
||||
# ADD CPP /nologo /G6 /MT /W3 /GX /O2 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr /YX /Yc /Yu
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
|
||||
|
@@ -44,7 +44,7 @@ RSC=rc.exe
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /W3 /O2 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
@@ -72,8 +72,8 @@ LINK32=xilink6.exe
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /W3 /Z7 /O2 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD CPP /nologo /G6 /W3 /Z7 /Od /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT CPP /Fr /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
|
@@ -43,7 +43,7 @@ RSC=rc.exe
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../zlib" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
@@ -117,7 +117,7 @@ SOURCE=.\array.c
|
||||
|
||||
!ELSEIF "$(CFG)" == "mysys - Win32 Debug"
|
||||
|
||||
# ADD CPP /FR
|
||||
# SUBTRACT CPP /Fr
|
||||
|
||||
!ELSEIF "$(CFG)" == "mysys - Win32 Max"
|
||||
|
||||
@@ -126,6 +126,10 @@ SOURCE=.\array.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\charset-def.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\charset.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -190,6 +194,10 @@ SOURCE=.\mf_keycache.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mf_keycaches.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mf_loadpath.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -290,6 +298,10 @@ SOURCE=.\my_copy.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\my_crc32.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\my_create.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@@ -40,4 +40,4 @@ enum options_client { OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET,
|
||||
OPT_DELETE_MASTER_LOGS,
|
||||
OPT_PROMPT, OPT_IGN_LINES,OPT_TRANSACTION,OPT_MYSQL_PROTOCOL,
|
||||
OPT_SHARED_MEMORY_BASE_NAME, OPT_FRM, OPT_SKIP_OPTIMIZATION,
|
||||
OPT_COMPATIBLE, OPT_RECONNECT, OPT_DELIMITER };
|
||||
OPT_COMPATIBLE, OPT_RECONNECT, OPT_DELIMITER, OPT_SECURE_AUTH };
|
||||
|
@@ -44,7 +44,7 @@
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
const char *VER= "14.2";
|
||||
const char *VER= "14.3";
|
||||
|
||||
/* Don't try to make a nice table if the data is too big */
|
||||
#define MAX_COLUMN_LENGTH 1024
|
||||
@@ -134,7 +134,7 @@ static my_bool info_flag=0,ignore_errors=0,wait_flag=0,quick=0,
|
||||
vertical=0, line_numbers=1, column_names=1,opt_html=0,
|
||||
opt_xml=0,opt_nopager=1, opt_outfile=0, named_cmds= 0,
|
||||
tty_password= 0, opt_nobeep=0, opt_reconnect=1,
|
||||
default_charset_used= 0;
|
||||
default_charset_used= 0, opt_secure_auth= 0;
|
||||
static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0;
|
||||
static my_string opt_mysql_unix_port=0;
|
||||
static int connect_flag=CLIENT_INTERACTIVE;
|
||||
@@ -623,6 +623,9 @@ static struct my_option my_long_options[] =
|
||||
{"max_join_size", OPT_MAX_JOIN_SIZE, "", (gptr*) &max_join_size,
|
||||
(gptr*) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ~0L, 0, 1,
|
||||
0},
|
||||
{"secure-auth", OPT_SECURE_AUTH, "Refuse client connecting to server if it"
|
||||
" uses old (pre-4.1.1) protocol", (gptr*) &opt_secure_auth,
|
||||
(gptr*) &opt_secure_auth, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
@@ -1622,6 +1625,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
MYSQL_RES *result;
|
||||
ulong timer, warnings;
|
||||
uint error= 0;
|
||||
int err= 0;
|
||||
|
||||
if (!status.batch)
|
||||
{
|
||||
@@ -1665,10 +1669,11 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
buffer->length(0); // Remove query on error
|
||||
return error;
|
||||
}
|
||||
|
||||
error=0;
|
||||
buffer->length(0);
|
||||
|
||||
do
|
||||
{
|
||||
if (quick)
|
||||
{
|
||||
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
|
||||
@@ -1738,6 +1743,10 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
else if (unbuffered)
|
||||
fflush(stdout);
|
||||
mysql_free_result(result);
|
||||
} while (!(err= mysql_next_result(&mysql)));
|
||||
if (err >= 1)
|
||||
error= put_error(&mysql);
|
||||
|
||||
return error; /* New command follows */
|
||||
}
|
||||
|
||||
@@ -2416,6 +2425,7 @@ com_delimiter(String *buffer __attribute__((unused)), char *line)
|
||||
}
|
||||
strmake(delimiter, tmp, sizeof(delimiter) - 1);
|
||||
delimiter_length= strlen(delimiter);
|
||||
delimiter_str= delimiter;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2546,6 +2556,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
|
||||
}
|
||||
if (opt_compress)
|
||||
mysql_options(&mysql,MYSQL_OPT_COMPRESS,NullS);
|
||||
if (opt_secure_auth)
|
||||
mysql_options(&mysql, MYSQL_SECURE_AUTH, (char *) &opt_secure_auth);
|
||||
if (using_opt_local_infile)
|
||||
mysql_options(&mysql,MYSQL_OPT_LOCAL_INFILE, (char*) &opt_local_infile);
|
||||
#ifdef HAVE_OPENSSL
|
||||
|
@@ -34,6 +34,7 @@ ulong server_id = 0;
|
||||
ulong bytes_sent = 0L, bytes_received = 0L;
|
||||
ulong mysqld_net_retry_count = 10L;
|
||||
uint test_flags = 0;
|
||||
static uint opt_protocol= 0;
|
||||
|
||||
static FILE *result_file;
|
||||
|
||||
@@ -233,6 +234,10 @@ static struct my_option my_long_options[] =
|
||||
{"position", 'j', "Start reading the binlog at position N.",
|
||||
(gptr*) &position, (gptr*) &position, 0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0,
|
||||
0, 0},
|
||||
{"protocol", OPT_MYSQL_PROTOCOL,
|
||||
"The protocol of connection (tcp,socket,pipe,memory).",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
||||
{"result-file", 'r', "Direct output to a given file.", 0, 0, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"read-from-remote-server", 'R', "Read binary logs from a MySQL server",
|
||||
@@ -285,7 +290,7 @@ static void die(const char* fmt, ...)
|
||||
|
||||
static void print_version()
|
||||
{
|
||||
printf("%s Ver 2.4 for %s at %s\n", my_progname, SYSTEM_TYPE, MACHINE_TYPE);
|
||||
printf("%s Ver 2.5 for %s at %s\n", my_progname, SYSTEM_TYPE, MACHINE_TYPE);
|
||||
}
|
||||
|
||||
|
||||
@@ -369,6 +374,17 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
case 'R':
|
||||
remote_opt= 1;
|
||||
break;
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) ==
|
||||
~(ulong) 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'V':
|
||||
print_version();
|
||||
exit(0);
|
||||
@@ -401,6 +417,8 @@ static MYSQL* safe_connect()
|
||||
if (!local_mysql)
|
||||
die("Failed on mysql_init");
|
||||
|
||||
if (opt_protocol)
|
||||
mysql_options(local_mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
|
||||
if (!mysql_real_connect(local_mysql, host, user, pass, 0, port, sock, 0))
|
||||
die("failed on connect: %s", mysql_error(local_mysql));
|
||||
|
||||
|
@@ -309,6 +309,8 @@ static int get_options(int *argc, char ***argv)
|
||||
else
|
||||
what_to_do = DO_CHECK;
|
||||
}
|
||||
|
||||
/* TODO: This variable is not yet used */
|
||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||
exit(1);
|
||||
|
@@ -119,7 +119,6 @@ static FILE** cur_file;
|
||||
static FILE** file_stack_end;
|
||||
static uint lineno_stack[MAX_INCLUDE_DEPTH];
|
||||
static char TMPDIR[FN_REFLEN];
|
||||
static int *block_ok_stack_end;
|
||||
|
||||
static int *cur_block, *block_stack_end;
|
||||
static int block_stack[BLOCK_STACK_DEPTH];
|
||||
@@ -1500,7 +1499,6 @@ int do_connect(struct st_query* q)
|
||||
char* p=q->first_argument;
|
||||
char buff[FN_REFLEN];
|
||||
int con_port;
|
||||
int con_error;
|
||||
int free_con_sock = 0;
|
||||
|
||||
DBUG_ENTER("do_connect");
|
||||
@@ -1565,7 +1563,7 @@ int do_connect(struct st_query* q)
|
||||
/* Special database to allow one to connect without a database name */
|
||||
if (con_db && !strcmp(con_db,"*NO-ONE*"))
|
||||
con_db=0;
|
||||
if ((con_error = safe_connect(&next_con->mysql, con_host,
|
||||
if ((safe_connect(&next_con->mysql, con_host,
|
||||
con_user, con_pass,
|
||||
con_db, con_port, con_sock ? con_sock: 0)))
|
||||
die("Could not open connection '%s': %s", con_name,
|
||||
@@ -2034,12 +2032,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
|
||||
int parse_args(int argc, char **argv)
|
||||
{
|
||||
int ho_error;
|
||||
|
||||
load_defaults("my",load_default_groups,&argc,&argv);
|
||||
default_argv= argv;
|
||||
|
||||
if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
|
||||
if ((handle_options(&argc, &argv, my_long_options, get_one_option)))
|
||||
exit(1);
|
||||
|
||||
if (argc > 1)
|
||||
@@ -2470,7 +2466,6 @@ int main(int argc, char **argv)
|
||||
memset(block_stack, 0, sizeof(block_stack));
|
||||
block_stack_end = block_stack + BLOCK_STACK_DEPTH;
|
||||
memset(block_ok_stack, 0, sizeof(block_stack));
|
||||
block_ok_stack_end = block_ok_stack + BLOCK_STACK_DEPTH;
|
||||
cur_block = block_stack;
|
||||
block_ok = block_ok_stack;
|
||||
*block_ok = 1;
|
||||
|
@@ -2820,7 +2820,7 @@ AC_OUTPUT(Makefile extra/Makefile mysys/Makefile isam/Makefile dnl
|
||||
libmysql_r/Makefile libmysqld/Makefile libmysqld/examples/Makefile dnl
|
||||
libmysql/Makefile client/Makefile dnl
|
||||
pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile dnl
|
||||
sql-common/Makefile dnl
|
||||
sql-common/Makefile SSL/Makefile dnl
|
||||
merge/Makefile dbug/Makefile scripts/Makefile dnl
|
||||
include/Makefile sql-bench/Makefile tools/Makefile dnl
|
||||
tests/Makefile Docs/Makefile support-files/Makefile dnl
|
||||
|
@@ -91,7 +91,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
if (i == remove_ant) { VOID(heap_close(file)) ; return (0) ; }
|
||||
sprintf(key,"%6d",(j=(int) ((rand() & 32767)/32767.*25)));
|
||||
if ((error = heap_rkey(file,record,0,key,0,6)))
|
||||
if ((error = heap_rkey(file,record,0,key,6,HA_READ_KEY_EXACT)))
|
||||
{
|
||||
if (verbose || (flags[j] == 1 ||
|
||||
(error && my_errno != HA_ERR_KEY_NOT_FOUND)))
|
||||
@@ -119,7 +119,7 @@ int main(int argc, char **argv)
|
||||
sprintf(key,"%6d",i);
|
||||
bmove(record+1,key,6);
|
||||
my_errno=0;
|
||||
error=heap_rkey(file,record,0,key,0,6);
|
||||
error=heap_rkey(file,record,0,key,6,HA_READ_KEY_EXACT);
|
||||
if (verbose ||
|
||||
(error == 0 && flags[i] != 1) ||
|
||||
(error && (flags[i] != 0 || my_errno != HA_ERR_KEY_NOT_FOUND)))
|
||||
|
@@ -179,7 +179,7 @@ int main(int argc, char *argv[])
|
||||
if (j != 0)
|
||||
{
|
||||
sprintf(key,"%6d",j);
|
||||
if (heap_rkey(file,record,0,key,6,0))
|
||||
if (heap_rkey(file,record,0,key,6, HA_READ_KEY_EXACT))
|
||||
{
|
||||
printf("can't find key1: \"%s\"\n",key);
|
||||
goto err;
|
||||
@@ -239,7 +239,7 @@ int main(int argc, char *argv[])
|
||||
if (!key1[j])
|
||||
continue;
|
||||
sprintf(key,"%6d",j);
|
||||
if (heap_rkey(file,record,0,key,6,0))
|
||||
if (heap_rkey(file,record,0,key,6, HA_READ_KEY_EXACT))
|
||||
{
|
||||
printf("can't find key1: \"%s\"\n",key);
|
||||
goto err;
|
||||
@@ -289,7 +289,7 @@ int main(int argc, char *argv[])
|
||||
printf("- Read first key - next - delete - next -> last\n");
|
||||
DBUG_PRINT("progpos",("first - next - delete - next -> last"));
|
||||
|
||||
if (heap_rkey(file,record,0,key,6,0))
|
||||
if (heap_rkey(file,record,0,key,6, HA_READ_KEY_EXACT))
|
||||
goto err;
|
||||
if (heap_rnext(file,record3)) goto err;
|
||||
if (heap_delete(file,record3)) goto err;
|
||||
@@ -513,7 +513,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
printf("- Read through all keys with first-next-last-prev\n");
|
||||
ant=0;
|
||||
for (error=heap_rkey(file,record,0,key,6,0);
|
||||
for (error=heap_rkey(file,record,0,key,6, HA_READ_KEY_EXACT);
|
||||
! error ;
|
||||
error=heap_rnext(file,record))
|
||||
ant++;
|
||||
@@ -550,7 +550,8 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
if (error == 0)
|
||||
{
|
||||
if (heap_rkey(file2,record2,2,record+keyinfo[2].seg[0].start,8,0))
|
||||
if (heap_rkey(file2,record2,2,record+keyinfo[2].seg[0].start,8,
|
||||
HA_READ_KEY_EXACT))
|
||||
{
|
||||
printf("can't find key3: \"%.8s\"\n",
|
||||
record+keyinfo[2].seg[0].start);
|
||||
|
@@ -21,7 +21,7 @@ pkginclude_HEADERS = my_dbug.h m_string.h my_sys.h my_list.h my_xml.h \
|
||||
my_semaphore.h my_pthread.h my_no_pthread.h raid.h \
|
||||
errmsg.h my_global.h my_net.h my_alloc.h \
|
||||
my_getopt.h sslopt-longopts.h my_dir.h typelib.h \
|
||||
sslopt-vars.h sslopt-case.h sql_common.h \
|
||||
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
|
||||
sql_state.h $(BUILT_SOURCES)
|
||||
noinst_HEADERS = config-win.h config-os2.h config-netware.h \
|
||||
nisam.h heap.h merge.h my_bitmap.h\
|
||||
|
@@ -340,3 +340,38 @@ inline double ulonglong2double(ulonglong value)
|
||||
#define default_shared_memory_base_name "MYSQL"
|
||||
#define MYSQL_DEFAULT_CHARSET_NAME "latin1"
|
||||
#define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci"
|
||||
|
||||
/* Define charsets you want */
|
||||
/* #undef HAVE_CHARSET_armscii8 */
|
||||
/* #undef HAVE_CHARSET_ascii */
|
||||
#define HAVE_CHARSET_big5 1
|
||||
#define HAVE_CHARSET_cp1250 1
|
||||
/* #undef HAVE_CHARSET_cp1251 */
|
||||
/* #undef HAVE_CHARSET_cp1256 */
|
||||
/* #undef HAVE_CHARSET_cp1257 */
|
||||
/* #undef HAVE_CHARSET_cp850 */
|
||||
/* #undef HAVE_CHARSET_cp852 */
|
||||
/* #undef HAVE_CHARSET_cp866 */
|
||||
/* #undef HAVE_CHARSET_dec8 */
|
||||
#define HAVE_CHARSET_euckr 1
|
||||
#define HAVE_CHARSET_gb2312 1
|
||||
#define HAVE_CHARSET_gbk 1
|
||||
/* #undef HAVE_CHARSET_greek */
|
||||
/* #undef HAVE_CHARSET_hebrew */
|
||||
/* #undef HAVE_CHARSET_hp8 */
|
||||
/* #undef HAVE_CHARSET_keybcs2 */
|
||||
/* #undef HAVE_CHARSET_koi8r */
|
||||
/* #undef HAVE_CHARSET_koi8u */
|
||||
#define HAVE_CHARSET_latin1 1
|
||||
#define HAVE_CHARSET_latin2 1
|
||||
/* #undef HAVE_CHARSET_latin5 */
|
||||
/* #undef HAVE_CHARSET_latin7 */
|
||||
/* #undef HAVE_CHARSET_macce */
|
||||
/* #undef HAVE_CHARSET_macroman */
|
||||
#define HAVE_CHARSET_sjis 1
|
||||
/* #undef HAVE_CHARSET_swe7 */
|
||||
#define HAVE_CHARSET_tis620 1
|
||||
#define HAVE_CHARSET_ucs2 1
|
||||
#define HAVE_CHARSET_ujis 1
|
||||
#define HAVE_CHARSET_utf8 1
|
||||
|
||||
|
@@ -87,3 +87,4 @@ extern const char *client_errors[]; /* Error messages */
|
||||
#define CR_CONN_UNKNOW_PROTOCOL 2046
|
||||
#define CR_INVALID_CONN_HANDLE 2047
|
||||
#define CR_MYSQL_SERVER_INIT_MISSED 2048
|
||||
#define CR_SECURE_AUTH 2049
|
||||
|
@@ -26,8 +26,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define FT_QUERY_MAXLEN 1024
|
||||
#define HA_FT_MAXLEN 254
|
||||
#define HA_FT_MAXBYTELEN 254
|
||||
#define HA_FT_MAXCHARLEN (HA_FT_MAXBYTELEN/3)
|
||||
|
||||
typedef struct st_ft_info FT_INFO;
|
||||
struct _ft_vft
|
||||
|
@@ -22,14 +22,15 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
Overhead to store an element in hash
|
||||
Can be used to approximate memory consumption for a hash
|
||||
*/
|
||||
#define HASH_OVERHEAD (sizeof(char*)*2)
|
||||
|
||||
typedef byte *(*hash_get_key)(const byte *,uint*,my_bool);
|
||||
typedef void (*hash_free_key)(void *);
|
||||
|
||||
typedef struct st_hash_info {
|
||||
uint next; /* index to next key */
|
||||
byte *data; /* data for current entry */
|
||||
} HASH_LINK;
|
||||
|
||||
typedef struct st_hash {
|
||||
uint key_offset,key_length; /* Length of key if const length */
|
||||
uint records,blength,current_record;
|
||||
|
135
include/keycache.h
Normal file
135
include/keycache.h
Normal file
@@ -0,0 +1,135 @@
|
||||
/* Copyright (C) 2003 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/* Key cache variable structures */
|
||||
|
||||
#ifndef _keycache_h
|
||||
#define _keycache_h
|
||||
C_MODE_START
|
||||
|
||||
/* declare structures that is used by st_key_cache */
|
||||
|
||||
struct st_block_link;
|
||||
typedef struct st_block_link BLOCK_LINK;
|
||||
struct st_keycache_page;
|
||||
typedef struct st_keycache_page KEYCACHE_PAGE;
|
||||
struct st_hash_link;
|
||||
typedef struct st_hash_link HASH_LINK;
|
||||
|
||||
/* info about requests in a waiting queue */
|
||||
typedef struct st_keycache_wqueue
|
||||
{
|
||||
struct st_my_thread_var *last_thread; /* circular list of waiting threads */
|
||||
} KEYCACHE_WQUEUE;
|
||||
|
||||
#define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */
|
||||
|
||||
/*
|
||||
The key cache structure
|
||||
It also contains read-only statistics parameters.
|
||||
*/
|
||||
|
||||
typedef struct st_key_cache
|
||||
{
|
||||
my_bool key_cache_inited;
|
||||
my_bool resize_in_flush; /* true during flush of resize operation */
|
||||
my_bool can_be_used; /* usage of cache for read/write is allowed */
|
||||
uint key_cache_shift;
|
||||
ulong key_cache_mem_size; /* specified size of the cache memory */
|
||||
uint key_cache_block_size; /* size of the page buffer of a cache block */
|
||||
ulong min_warm_blocks; /* min number of warm blocks; */
|
||||
ulong age_threshold; /* age threshold for hot blocks */
|
||||
ulonglong keycache_time; /* total number of block link operations */
|
||||
uint hash_entries; /* max number of entries in the hash table */
|
||||
int hash_links; /* max number of hash links */
|
||||
int hash_links_used; /* number of hash links currently used */
|
||||
int disk_blocks; /* max number of blocks in the cache */
|
||||
ulong blocks_used; /* number of currently used blocks */
|
||||
ulong blocks_changed; /* number of currently dirty blocks */
|
||||
ulong warm_blocks; /* number of blocks in warm sub-chain */
|
||||
ulong cnt_for_resize_op; /* counter to block resize operation */
|
||||
long blocks_available; /* number of blocks available in the LRU chain */
|
||||
HASH_LINK **hash_root; /* arr. of entries into hash table buckets */
|
||||
HASH_LINK *hash_link_root; /* memory for hash table links */
|
||||
HASH_LINK *free_hash_list; /* list of free hash links */
|
||||
BLOCK_LINK *block_root; /* memory for block links */
|
||||
byte HUGE_PTR *block_mem; /* memory for block buffers */
|
||||
BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */
|
||||
BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */
|
||||
pthread_mutex_t cache_lock; /* to lock access to the cache structure */
|
||||
KEYCACHE_WQUEUE resize_queue; /* threads waiting during resize operation */
|
||||
KEYCACHE_WQUEUE waiting_for_hash_link; /* waiting for a free hash link */
|
||||
KEYCACHE_WQUEUE waiting_for_block; /* requests waiting for a free block */
|
||||
BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash for dirty file bl.*/
|
||||
BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash for other file bl.*/
|
||||
|
||||
/*
|
||||
The following variables are and variables used to hold parameters for
|
||||
initializing the key cache.
|
||||
*/
|
||||
|
||||
ulonglong param_buff_size; /* size the memory allocated for the cache */
|
||||
ulong param_block_size; /* size of the blocks in the key cache */
|
||||
ulong param_division_limit; /* min. percentage of warm blocks */
|
||||
ulong param_age_threshold; /* determines when hot block is downgraded */
|
||||
|
||||
/* Statistics variables */
|
||||
ulong global_blocks_used; /* number of currently used blocks */
|
||||
ulong global_blocks_changed; /* number of currently dirty blocks */
|
||||
ulong global_cache_w_requests;/* number of write requests (write hits) */
|
||||
ulong global_cache_write; /* number of writes from the cache to files */
|
||||
ulong global_cache_r_requests;/* number of read requests (read hits) */
|
||||
ulong global_cache_read; /* number of reads from files to the cache */
|
||||
int blocks; /* max number of blocks in the cache */
|
||||
my_bool in_init; /* Set to 1 in MySQL during init/resize */
|
||||
} KEY_CACHE;
|
||||
|
||||
/* The default key cache */
|
||||
extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache;
|
||||
|
||||
extern int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
||||
ulong use_mem, uint division_limit,
|
||||
uint age_threshold);
|
||||
extern int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
||||
ulong use_mem, uint division_limit,
|
||||
uint age_threshold);
|
||||
extern void change_key_cache_param(KEY_CACHE *keycache, uint division_limit,
|
||||
uint age_threshold);
|
||||
extern byte *key_cache_read(KEY_CACHE *keycache,
|
||||
File file, my_off_t filepos, int level,
|
||||
byte *buff, uint length,
|
||||
uint block_length,int return_buffer);
|
||||
extern int key_cache_insert(KEY_CACHE *keycache,
|
||||
File file, my_off_t filepos, int level,
|
||||
byte *buff, uint length);
|
||||
extern int key_cache_write(KEY_CACHE *keycache,
|
||||
File file, my_off_t filepos, int level,
|
||||
byte *buff, uint length,
|
||||
uint block_length,int force_write);
|
||||
extern int flush_key_blocks(KEY_CACHE *keycache,
|
||||
int file, enum flush_type type);
|
||||
extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup);
|
||||
|
||||
/* Functions to handle multiple key caches */
|
||||
extern my_bool multi_keycache_init(void);
|
||||
extern void multi_keycache_free(void);
|
||||
extern KEY_CACHE *multi_key_cache_search(byte *key, uint length);
|
||||
extern my_bool multi_key_cache_set(const byte *key, uint length,
|
||||
KEY_CACHE *key_cache);
|
||||
extern void multi_key_cache_change(KEY_CACHE *old_data,
|
||||
KEY_CACHE *new_data);
|
||||
C_MODE_END
|
||||
#endif /* _keycache_h */
|
@@ -335,6 +335,14 @@ uint my_instr_mb(struct charset_info_st *,
|
||||
extern my_bool my_parse_charset_xml(const char *bug, uint len,
|
||||
int (*add)(CHARSET_INFO *cs));
|
||||
|
||||
#undef _U
|
||||
#undef _L
|
||||
#undef _NMR
|
||||
#undef _SPC
|
||||
#undef _PNT
|
||||
#undef _CTR
|
||||
#undef _B
|
||||
#undef _X
|
||||
|
||||
#define _U 01 /* Upper case */
|
||||
#define _L 02 /* Lower case */
|
||||
|
@@ -46,7 +46,6 @@
|
||||
#define HA_OPEN_DELAY_KEY_WRITE 8 /* Don't update index */
|
||||
#define HA_OPEN_ABORT_IF_CRASHED 16
|
||||
#define HA_OPEN_FOR_REPAIR 32 /* open even if crashed */
|
||||
#define HA_OPEN_TO_ASSIGN 64 /* Open for key cache assignment */
|
||||
|
||||
/* The following is parameter to ha_rkey() how to use key */
|
||||
|
||||
@@ -133,7 +132,7 @@ enum ha_extra_function {
|
||||
HA_EXTRA_RETRIEVE_ALL_COLS,
|
||||
HA_EXTRA_PREPARE_FOR_DELETE,
|
||||
HA_EXTRA_PREPARE_FOR_UPDATE, /* Remove read cache if problems */
|
||||
HA_EXTRA_PRELOAD_BUFFER_SIZE, /* Set buffer size for preloading */
|
||||
HA_EXTRA_PRELOAD_BUFFER_SIZE /* Set buffer size for preloading */
|
||||
};
|
||||
|
||||
/* The following is parameter to ha_panic() */
|
||||
|
@@ -695,7 +695,8 @@ typedef long long my_ptrdiff_t;
|
||||
#endif
|
||||
#endif
|
||||
#if defined(__IBMC__) || defined(__IBMCPP__)
|
||||
#define STDCALL _System _Export
|
||||
/* This was _System _Export but caused a lot of warnings on _AIX43 */
|
||||
#define STDCALL
|
||||
#elif !defined( STDCALL)
|
||||
#define STDCALL
|
||||
#endif
|
||||
|
@@ -468,7 +468,7 @@ int my_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
||||
typedef struct st_safe_mutex_t
|
||||
{
|
||||
pthread_mutex_t global,mutex;
|
||||
char *file;
|
||||
const char *file;
|
||||
uint line,count;
|
||||
pthread_t thread;
|
||||
#ifdef SAFE_MUTEX_DETECT_DESTROY
|
||||
@@ -487,7 +487,7 @@ typedef struct st_safe_mutex_info_t
|
||||
{
|
||||
struct st_safe_mutex_info_t *next;
|
||||
struct st_safe_mutex_info_t *prev;
|
||||
char *init_file;
|
||||
const char *init_file;
|
||||
uint32 init_line;
|
||||
} safe_mutex_info_t;
|
||||
#endif /* SAFE_MUTEX_DETECT_DESTROY */
|
||||
|
@@ -160,7 +160,7 @@ extern char *my_strdup_with_length(const byte *from, uint length,
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ALLOCA
|
||||
#if defined(_AIX) && !defined(__GNUC__)
|
||||
#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43)
|
||||
#pragma alloca
|
||||
#endif /* _AIX */
|
||||
#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H)
|
||||
@@ -226,9 +226,8 @@ extern void add_compiled_collation(CHARSET_INFO *cs);
|
||||
extern ulong my_cache_w_requests, my_cache_write, my_cache_r_requests,
|
||||
my_cache_read;
|
||||
extern ulong my_blocks_used, my_blocks_changed;
|
||||
extern uint key_cache_block_size;
|
||||
extern ulong my_file_opened,my_stream_opened, my_tmp_file_created;
|
||||
extern my_bool key_cache_inited, my_init_done;
|
||||
extern my_bool my_init_done;
|
||||
|
||||
/* Point to current my_message() */
|
||||
extern void (*my_sigtstp_cleanup)(void),
|
||||
@@ -266,8 +265,7 @@ enum cache_type
|
||||
|
||||
enum flush_type
|
||||
{
|
||||
FLUSH_KEEP, FLUSH_RELEASE, FLUSH_IGNORE_CHANGED, FLUSH_FORCE_WRITE,
|
||||
FLUSH_REMOVE
|
||||
FLUSH_KEEP, FLUSH_RELEASE, FLUSH_IGNORE_CHANGED, FLUSH_FORCE_WRITE
|
||||
};
|
||||
|
||||
typedef struct st_record_cache /* Used when cacheing records */
|
||||
@@ -506,44 +504,6 @@ my_off_t my_b_append_tell(IO_CACHE* info);
|
||||
|
||||
typedef uint32 ha_checksum;
|
||||
|
||||
/* Pointer to a key cache data structure (see the key cache module) */
|
||||
typedef struct st_key_cache* KEY_CACHE_HANDLE;
|
||||
|
||||
/* Key cache variable structure */
|
||||
/*
|
||||
The structure contains the parameters of a key cache that can
|
||||
be set and undated by regular set global statements.
|
||||
It also contains read-only statistics parameters.
|
||||
If the corresponding key cache data structure has been already
|
||||
created the variable contains the key cache handle.
|
||||
The variables are put into a named list called key_caches.
|
||||
At present the variables are only added to this list.
|
||||
*/
|
||||
typedef struct st_key_cache_var
|
||||
{
|
||||
ulonglong buff_size; /* size the memory allocated for the cache */
|
||||
ulong block_size; /* size of the blocks in the key cache */
|
||||
ulong division_limit; /* min. percentage of warm blocks */
|
||||
ulong age_threshold; /* determines when hot block is downgraded */
|
||||
KEY_CACHE_HANDLE cache; /* handles for the current and registered */
|
||||
ulong blocks_used; /* number of currently used blocks */
|
||||
ulong blocks_changed; /* number of currently dirty blocks */
|
||||
ulong cache_w_requests; /* number of write requests (write hits) */
|
||||
ulong cache_write; /* number of writes from the cache to files */
|
||||
ulong cache_r_requests; /* number of read requests (read hits) */
|
||||
ulong cache_read; /* number of reads from files to the cache */
|
||||
int blocks; /* max number of blocks in the cache */
|
||||
my_bool in_init; /* Set to 1 in MySQL during init/resize */
|
||||
struct st_key_cache_asmt *assign_list; /* list of assignments to the cache */
|
||||
int assignments; /* number of not completed assignments */
|
||||
void (*action)(void *); /* optional call back function */
|
||||
void *extra_info; /* ptr to extra info */
|
||||
} KEY_CACHE_VAR;
|
||||
|
||||
|
||||
extern KEY_CACHE_HANDLE *dflt_keycache;
|
||||
extern KEY_CACHE_VAR dflt_key_cache_var;
|
||||
|
||||
#include <my_alloc.h>
|
||||
|
||||
/* Prototypes for mysys and my_func functions */
|
||||
@@ -683,33 +643,6 @@ extern int flush_write_cache(RECORD_CACHE *info);
|
||||
extern long my_clock(void);
|
||||
extern sig_handler sigtstp_handler(int signal_number);
|
||||
extern void handle_recived_signals(void);
|
||||
extern int init_key_cache(KEY_CACHE_HANDLE *pkeycache,
|
||||
uint key_cache_block_size,
|
||||
ulong use_mem, KEY_CACHE_VAR* env);
|
||||
extern int resize_key_cache(KEY_CACHE_HANDLE *pkeycache,
|
||||
uint key_cache_block_size, ulong use_mem);
|
||||
extern void change_key_cache_param(KEY_CACHE_HANDLE keycache);
|
||||
extern byte *key_cache_read(KEY_CACHE_HANDLE keycache,
|
||||
File file, my_off_t filepos, int level,
|
||||
byte* buff, uint length,
|
||||
uint block_length,int return_buffer);
|
||||
extern int key_cache_insert(KEY_CACHE_HANDLE keycache,
|
||||
File file, my_off_t filepos, int level,
|
||||
byte *buff, uint length);
|
||||
extern int key_cache_write(KEY_CACHE_HANDLE keycache,
|
||||
File file, my_off_t filepos, int level,
|
||||
byte* buff, uint length,
|
||||
uint block_length,int force_write);
|
||||
extern int flush_key_blocks(KEY_CACHE_HANDLE keycache,
|
||||
int file, enum flush_type type);
|
||||
extern void end_key_cache(KEY_CACHE_HANDLE keycache, my_bool cleanup);
|
||||
extern my_bool multi_keycache_init(void);
|
||||
extern void multi_keycache_free(void);
|
||||
extern KEY_CACHE_HANDLE *multi_key_cache_search(byte *key, uint length);
|
||||
extern my_bool multi_key_cache_set(const byte *key, uint length,
|
||||
KEY_CACHE_HANDLE *key_cache);
|
||||
extern void multi_key_cache_change(KEY_CACHE_HANDLE *old_data,
|
||||
KEY_CACHE_HANDLE *new_data);
|
||||
|
||||
extern sig_handler my_set_alarm_variable(int signo);
|
||||
extern void my_string_ptr_sort(void *base,uint items,size_s size);
|
||||
|
@@ -28,6 +28,9 @@ extern "C" {
|
||||
#ifndef _m_ctype_h
|
||||
#include <m_ctype.h>
|
||||
#endif
|
||||
#ifndef _keycache_h
|
||||
#include "keycache.h"
|
||||
#endif
|
||||
#include "my_handler.h"
|
||||
|
||||
/* defines used by myisam-funktions */
|
||||
@@ -315,6 +318,7 @@ typedef struct st_mi_check_param
|
||||
ulonglong auto_increment_value;
|
||||
ulonglong max_data_file_length;
|
||||
ulonglong keys_in_use;
|
||||
ulonglong max_record_length;
|
||||
my_off_t search_after_block;
|
||||
my_off_t new_file_pos,key_file_blocks;
|
||||
my_off_t keydata,totaldata,key_blocks,start_check_pos;
|
||||
@@ -408,9 +412,9 @@ int mi_init_bulk_insert(MI_INFO *info, ulong cache_size, ha_rows rows);
|
||||
void mi_flush_bulk_insert(MI_INFO *info, uint inx);
|
||||
void mi_end_bulk_insert(MI_INFO *info);
|
||||
int mi_assign_to_key_cache(MI_INFO *info, ulonglong key_map,
|
||||
KEY_CACHE_VAR *key_cache);
|
||||
void mi_change_key_cache(KEY_CACHE_VAR *old_key_cache,
|
||||
KEY_CACHE_VAR *new_key_cache);
|
||||
KEY_CACHE *key_cache);
|
||||
void mi_change_key_cache(KEY_CACHE *old_key_cache,
|
||||
KEY_CACHE *new_key_cache);
|
||||
int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -145,7 +145,7 @@ enum mysql_option
|
||||
MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT,
|
||||
MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT,
|
||||
MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
|
||||
MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP
|
||||
MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH
|
||||
};
|
||||
|
||||
struct st_mysql_options {
|
||||
@@ -184,6 +184,8 @@ struct st_mysql_options {
|
||||
#endif
|
||||
enum mysql_option methods_to_use;
|
||||
char *client_ip;
|
||||
/* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */
|
||||
my_bool secure_auth;
|
||||
};
|
||||
|
||||
enum mysql_status
|
||||
@@ -535,10 +537,10 @@ typedef struct st_mysql_stmt
|
||||
char *query; /* query buffer */
|
||||
MEM_ROOT mem_root; /* root allocations */
|
||||
my_ulonglong last_fetched_column; /* last fetched column */
|
||||
unsigned long param_count; /* parameters count */
|
||||
unsigned long field_count; /* fields count */
|
||||
unsigned long stmt_id; /* Id for prepared statement */
|
||||
unsigned int last_errno; /* error code */
|
||||
unsigned int param_count; /* parameters count */
|
||||
unsigned int field_count; /* fields count */
|
||||
enum PREP_STMT_STATE state; /* statement state */
|
||||
char last_error[MYSQL_ERRMSG_SIZE]; /* error message */
|
||||
char sqlstate[SQLSTATE_LENGTH+1];
|
||||
@@ -552,27 +554,27 @@ typedef struct st_mysql_stmt
|
||||
|
||||
typedef struct st_mysql_methods
|
||||
{
|
||||
my_bool (STDCALL *read_query_result)(MYSQL *mysql);
|
||||
my_bool (STDCALL *advanced_command)(MYSQL *mysql,
|
||||
my_bool (*read_query_result)(MYSQL *mysql);
|
||||
my_bool (*advanced_command)(MYSQL *mysql,
|
||||
enum enum_server_command command,
|
||||
const char *header,
|
||||
unsigned long header_length,
|
||||
const char *arg,
|
||||
unsigned long arg_length,
|
||||
my_bool skip_check);
|
||||
MYSQL_DATA *(STDCALL *read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
|
||||
MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
|
||||
unsigned int fields);
|
||||
MYSQL_RES * (STDCALL *use_result)(MYSQL *mysql);
|
||||
void (STDCALL *fetch_lengths)(unsigned long *to,
|
||||
MYSQL_RES * (*use_result)(MYSQL *mysql);
|
||||
void (*fetch_lengths)(unsigned long *to,
|
||||
MYSQL_ROW column, unsigned int field_count);
|
||||
#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY)
|
||||
MYSQL_FIELD * (STDCALL *list_fields)(MYSQL *mysql);
|
||||
my_bool (STDCALL *read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
|
||||
int (STDCALL *stmt_execute)(MYSQL_STMT *stmt);
|
||||
MYSQL_DATA *(STDCALL *read_binary_rows)(MYSQL_STMT *stmt);
|
||||
int (STDCALL *unbuffered_fetch)(MYSQL *mysql, char **row);
|
||||
void (STDCALL *free_embedded_thd)(MYSQL *mysql);
|
||||
const char *(STDCALL *read_statistic)(MYSQL *mysql);
|
||||
MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
|
||||
my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
|
||||
int (*stmt_execute)(MYSQL_STMT *stmt);
|
||||
MYSQL_DATA *(*read_binary_rows)(MYSQL_STMT *stmt);
|
||||
int (*unbuffered_fetch)(MYSQL *mysql, char **row);
|
||||
void (*free_embedded_thd)(MYSQL *mysql);
|
||||
const char *(*read_statistic)(MYSQL *mysql);
|
||||
#endif
|
||||
} MYSQL_METHODS;
|
||||
|
||||
@@ -604,7 +606,7 @@ MYSQL_RES *STDCALL mysql_param_result(MYSQL_STMT *stmt);
|
||||
my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt);
|
||||
int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt);
|
||||
my_bool STDCALL mysql_more_results(MYSQL *mysql);
|
||||
my_bool STDCALL mysql_next_result(MYSQL *mysql);
|
||||
int STDCALL mysql_next_result(MYSQL *mysql);
|
||||
MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt,
|
||||
MYSQL_ROW_OFFSET offset);
|
||||
MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt);
|
||||
|
@@ -118,7 +118,7 @@ enum enum_server_command
|
||||
#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */
|
||||
#define CLIENT_MULTI_STATEMENTS 65536 /* Enable/disable multi-stmt support */
|
||||
#define CLIENT_MULTI_RESULTS 131072 /* Enable/disable multi-results */
|
||||
#define CLIENT_REMEMBER_OPTIONS (1L << 31)
|
||||
#define CLIENT_REMEMBER_OPTIONS ((ulong) (1L << 31))
|
||||
|
||||
#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
|
||||
#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
|
||||
@@ -157,7 +157,8 @@ typedef struct st_net {
|
||||
unsigned int *return_status;
|
||||
unsigned char reading_or_writing;
|
||||
char save_char;
|
||||
my_bool no_send_ok;
|
||||
my_bool no_send_ok; /* For SPs and other things that do multiple stmts */
|
||||
my_bool no_send_eof; /* For SPs' first version read-only cursors */
|
||||
/*
|
||||
Pointer to query object in query cache, do not equal NULL (0) for
|
||||
queries in cache that have not stored its results yet
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#define MYSQL_PORT @MYSQL_TCP_PORT@
|
||||
#define MYSQL_UNIX_ADDR "@MYSQL_UNIX_ADDR@"
|
||||
#define MYSQL_CONFIG_NAME "my"
|
||||
#define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@"
|
||||
|
||||
/* mysqld compile time options */
|
||||
#endif /* _CUSTOMCONFIG_ */
|
||||
|
@@ -300,37 +300,39 @@
|
||||
#define ER_WARN_QC_RESIZE 1281
|
||||
#define ER_BAD_FT_COLUMN 1282
|
||||
#define ER_UNKNOWN_KEY_CACHE 1283
|
||||
/* 5.0 */
|
||||
#define ER_SP_NO_RECURSIVE_CREATE 1284
|
||||
#define ER_SP_ALREADY_EXISTS 1285
|
||||
#define ER_SP_DOES_NOT_EXIST 1286
|
||||
#define ER_SP_DROP_FAILED 1287
|
||||
#define ER_SP_STORE_FAILED 1288
|
||||
#define ER_SP_LILABEL_MISMATCH 1289
|
||||
#define ER_SP_LABEL_REDEFINE 1290
|
||||
#define ER_SP_LABEL_MISMATCH 1291
|
||||
#define ER_SP_UNINIT_VAR 1292
|
||||
#define ER_SP_BADSELECT 1293
|
||||
#define ER_SP_BADRETURN 1294
|
||||
#define ER_SP_BADQUERY 1295
|
||||
#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1296
|
||||
#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1297
|
||||
#define ER_QUERY_INTERRUPTED 1298
|
||||
#define ER_SP_WRONG_NO_OF_ARGS 1299
|
||||
#define ER_SP_COND_MISMATCH 1300
|
||||
#define ER_SP_NORETURN 1301
|
||||
#define ER_SP_NORETURNEND 1302
|
||||
#define ER_SP_BAD_CURSOR_QUERY 1303
|
||||
#define ER_SP_BAD_CURSOR_SELECT 1304
|
||||
#define ER_SP_CURSOR_MISMATCH 1305
|
||||
#define ER_SP_CURSOR_ALREADY_OPEN 1306
|
||||
#define ER_SP_CURSOR_NOT_OPEN 1307
|
||||
#define ER_SP_UNDECLARED_VAR 1308
|
||||
#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1309
|
||||
#define ER_SP_FETCH_NO_DATA 1310
|
||||
#define ER_SP_DUP_PARAM 1311
|
||||
#define ER_SP_DUP_VAR 1312
|
||||
#define ER_SP_DUP_COND 1313
|
||||
#define ER_SP_DUP_CURS 1314
|
||||
#define ER_SP_CANT_ALTER 1315
|
||||
#define ER_ERROR_MESSAGES 316
|
||||
#define ER_WARN_HOSTNAME_WONT_WORK 1284
|
||||
#define ER_UNKNOWN_TABLE_ENGINE 1285
|
||||
#define ER_SP_NO_RECURSIVE_CREATE 1286
|
||||
#define ER_SP_ALREADY_EXISTS 1287
|
||||
#define ER_SP_DOES_NOT_EXIST 1288
|
||||
#define ER_SP_DROP_FAILED 1289
|
||||
#define ER_SP_STORE_FAILED 1290
|
||||
#define ER_SP_LILABEL_MISMATCH 1291
|
||||
#define ER_SP_LABEL_REDEFINE 1292
|
||||
#define ER_SP_LABEL_MISMATCH 1293
|
||||
#define ER_SP_UNINIT_VAR 1294
|
||||
#define ER_SP_BADSELECT 1295
|
||||
#define ER_SP_BADRETURN 1296
|
||||
#define ER_SP_BADSTATEMENT 1297
|
||||
#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1298
|
||||
#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1299
|
||||
#define ER_QUERY_INTERRUPTED 1300
|
||||
#define ER_SP_WRONG_NO_OF_ARGS 1301
|
||||
#define ER_SP_COND_MISMATCH 1302
|
||||
#define ER_SP_NORETURN 1303
|
||||
#define ER_SP_NORETURNEND 1304
|
||||
#define ER_SP_BAD_CURSOR_QUERY 1305
|
||||
#define ER_SP_BAD_CURSOR_SELECT 1306
|
||||
#define ER_SP_CURSOR_MISMATCH 1307
|
||||
#define ER_SP_CURSOR_ALREADY_OPEN 1308
|
||||
#define ER_SP_CURSOR_NOT_OPEN 1309
|
||||
#define ER_SP_UNDECLARED_VAR 1310
|
||||
#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1311
|
||||
#define ER_SP_FETCH_NO_DATA 1312
|
||||
#define ER_SP_DUP_PARAM 1313
|
||||
#define ER_SP_DUP_VAR 1314
|
||||
#define ER_SP_DUP_COND 1315
|
||||
#define ER_SP_DUP_CURS 1316
|
||||
#define ER_SP_CANT_ALTER 1317
|
||||
#define ER_SP_SUBSELECT_NYI 1318
|
||||
#define ER_ERROR_MESSAGES 319
|
||||
|
@@ -22,9 +22,6 @@ extern const char *not_error_sqlstate;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
ulong STDCALL net_field_length(uchar **packet);
|
||||
my_ulonglong net_field_length_ll(uchar **packet);
|
||||
|
||||
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
||||
my_bool default_value, uint server_capabilities);
|
||||
void free_rows(MYSQL_DATA *cur);
|
||||
@@ -34,7 +31,7 @@ void end_server(MYSQL *mysql);
|
||||
my_bool mysql_reconnect(MYSQL *mysql);
|
||||
void mysql_read_default_options(struct st_mysql_options *options,
|
||||
const char *filename,const char *group);
|
||||
my_bool STDCALL
|
||||
my_bool
|
||||
cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
||||
const char *header, ulong header_length,
|
||||
const char *arg, ulong arg_length, my_bool skip_check);
|
||||
|
@@ -161,6 +161,7 @@ ER_WARN_DATA_OUT_OF_RANGE, "01000", "",
|
||||
ER_WARN_DATA_TRUNCATED, "01000", "",
|
||||
ER_WRONG_NAME_FOR_INDEX, "42000", "",
|
||||
ER_WRONG_NAME_FOR_CATALOG, "42000", "",
|
||||
ER_UNKNOWN_TABLE_ENGINE, "42000", "",
|
||||
/* 5.0 */
|
||||
ER_SP_NO_RECURSIVE_CREATE, "2F003", "",
|
||||
ER_SP_ALREADY_EXISTS, "42000", "",
|
||||
@@ -171,9 +172,9 @@ ER_SP_LILABEL_MISMATCH, "42000", "",
|
||||
ER_SP_LABEL_REDEFINE, "42000", "",
|
||||
ER_SP_LABEL_MISMATCH, "42000", "",
|
||||
ER_SP_UNINIT_VAR, "01000", "",
|
||||
ER_SP_BADSELECT, "04000", "",
|
||||
ER_SP_BADSELECT, "0A000", "",
|
||||
ER_SP_BADRETURN, "42000", "",
|
||||
ER_SP_BADQUERY, "04000", "",
|
||||
ER_SP_BADSTATEMENT, "0A000", "",
|
||||
ER_UPDATE_LOG_DEPRECATED_IGNORED, "42000", "",
|
||||
ER_UPDATE_LOG_DEPRECATED_TRANSLATED, "42000", "",
|
||||
ER_QUERY_INTERRUPTED, "70100", "",
|
||||
@@ -194,3 +195,4 @@ ER_SP_DUP_VAR, "42000", "",
|
||||
ER_SP_DUP_COND, "42000", "",
|
||||
ER_SP_DUP_CURS, "42000", "",
|
||||
/*ER_SP_CANT_ALTER*/
|
||||
ER_SP_SUBSELECT_NYI, "0A000", "",
|
||||
|
@@ -177,7 +177,7 @@ struct st_vio
|
||||
void (*viodelete)(Vio*);
|
||||
int (*vioerrno)(Vio*);
|
||||
int (*read)(Vio*, gptr, int);
|
||||
int (*write)(Vio*, gptr, int);
|
||||
int (*write)(Vio*, const gptr, int);
|
||||
int (*vioblocking)(Vio*, my_bool, my_bool *);
|
||||
my_bool (*is_blocking)(Vio*);
|
||||
int (*viokeepalive)(Vio*, my_bool);
|
||||
|
@@ -600,8 +600,8 @@ btr_page_get_father_for_rec(
|
||||
"InnoDB: father ptr page no %lu, child page no %lu\n",
|
||||
(UT_LIST_GET_FIRST(tree->tree_indexes))->table_name,
|
||||
(UT_LIST_GET_FIRST(tree->tree_indexes))->name,
|
||||
btr_node_ptr_get_child_page_no(node_ptr),
|
||||
buf_frame_get_page_no(page));
|
||||
(unsigned long) btr_node_ptr_get_child_page_no(node_ptr),
|
||||
(unsigned long) buf_frame_get_page_no(page));
|
||||
page_rec_print(page_rec_get_next(page_get_infimum_rec(page)));
|
||||
page_rec_print(node_ptr);
|
||||
|
||||
@@ -877,7 +877,9 @@ btr_page_reorganize_low(
|
||||
"InnoDB: Error: page old data size %lu new data size %lu\n"
|
||||
"InnoDB: Error: page old max ins size %lu new max ins size %lu\n"
|
||||
"InnoDB: Make a detailed bug report and send it to mysql@lists.mysql.com\n",
|
||||
data_size1, data_size2, max_ins_size1, max_ins_size2);
|
||||
(unsigned long) data_size1, (unsigned long) data_size2,
|
||||
(unsigned long) max_ins_size1,
|
||||
(unsigned long) max_ins_size2);
|
||||
}
|
||||
|
||||
buf_frame_free(new_page);
|
||||
@@ -2356,8 +2358,10 @@ btr_index_rec_validate(
|
||||
"InnoDB: Record in index %s in table %s, page %lu, at offset %lu\n"
|
||||
"InnoDB: has %lu fields, should have %lu\n",
|
||||
index->name, index->table_name,
|
||||
buf_frame_get_page_no(page), (ulint)(rec - page),
|
||||
rec_get_n_fields(rec), n);
|
||||
(unsigned long) buf_frame_get_page_no(page),
|
||||
(unsigned long) (rec - page),
|
||||
(unsigned long) rec_get_n_fields(rec),
|
||||
(unsigned long) n);
|
||||
|
||||
if (!dump_on_error) {
|
||||
|
||||
@@ -2390,9 +2394,11 @@ btr_index_rec_validate(
|
||||
"InnoDB: Record in index %s in table %s, page %lu, at offset %lu\n"
|
||||
"InnoDB: field %lu len is %lu, should be %lu\n",
|
||||
index->name, index->table_name,
|
||||
buf_frame_get_page_no(page),
|
||||
(ulint)(rec - page),
|
||||
i, len, dtype_get_fixed_size(type));
|
||||
(unsigned long) buf_frame_get_page_no(page),
|
||||
(unsigned long) (rec - page),
|
||||
(unsigned long) i,
|
||||
(unsigned long) len,
|
||||
(unsigned long) dtype_get_fixed_size(type));
|
||||
|
||||
if (!dump_on_error) {
|
||||
|
||||
@@ -2541,7 +2547,7 @@ loop:
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error on pages %lu and %lu in index %s table %s\n",
|
||||
buf_frame_get_page_no(page),
|
||||
right_page_no,
|
||||
(unsigned long) right_page_no,
|
||||
index->name, index->table_name);
|
||||
|
||||
fprintf(stderr,
|
||||
@@ -2581,7 +2587,7 @@ loop:
|
||||
&mtr)) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error on page %lu in index %s table %s\n",
|
||||
buf_frame_get_page_no(page),
|
||||
(unsigned long) buf_frame_get_page_no(page),
|
||||
index->name, index->table_name);
|
||||
|
||||
fprintf(stderr,
|
||||
@@ -2596,7 +2602,7 @@ loop:
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: node ptr child page n:o %lu\n",
|
||||
btr_node_ptr_get_child_page_no(node_ptr));
|
||||
(unsigned long) btr_node_ptr_get_child_page_no(node_ptr));
|
||||
|
||||
rec_sprintf(err_buf, 900,
|
||||
btr_page_get_father_for_rec(tree, page,
|
||||
@@ -2679,7 +2685,7 @@ loop:
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error on page %lu in index %s table %s\n",
|
||||
buf_frame_get_page_no(page),
|
||||
(unsigned long) buf_frame_get_page_no(page),
|
||||
index->name, index->table_name);
|
||||
|
||||
buf_page_print(father_page);
|
||||
@@ -2699,7 +2705,7 @@ loop:
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error on page %lu in index %s table %s\n",
|
||||
buf_frame_get_page_no(page),
|
||||
(unsigned long) buf_frame_get_page_no(page),
|
||||
index->name, index->table_name);
|
||||
|
||||
buf_page_print(father_page);
|
||||
@@ -2717,7 +2723,7 @@ loop:
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error on page %lu in index %s table %s\n",
|
||||
buf_frame_get_page_no(page),
|
||||
(unsigned long) buf_frame_get_page_no(page),
|
||||
index->name, index->table_name);
|
||||
|
||||
buf_page_print(father_page);
|
||||
|
@@ -874,8 +874,8 @@ btr_cur_optimistic_insert(
|
||||
if (btr_cur_print_record_ops && thr) {
|
||||
printf(
|
||||
"Trx with id %lu %lu going to insert to table %s index %s\n",
|
||||
ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
index->table_name, index->name);
|
||||
dtuple_print(entry);
|
||||
}
|
||||
@@ -978,7 +978,8 @@ calculate_sizes_again:
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: cannot insert tuple %s to index %s of table %s\n"
|
||||
"InnoDB: max insert size %lu\n",
|
||||
err_buf, index->name, index->table->name, max_size);
|
||||
err_buf, index->name, index->table->name,
|
||||
(unsigned long) max_size);
|
||||
|
||||
mem_free(err_buf);
|
||||
}
|
||||
@@ -1343,8 +1344,8 @@ btr_cur_update_sec_rec_in_place(
|
||||
if (btr_cur_print_record_ops && thr) {
|
||||
printf(
|
||||
"Trx with id %lu %lu going to update table %s index %s\n",
|
||||
ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
index->table_name, index->name);
|
||||
rec_print(rec);
|
||||
}
|
||||
@@ -1407,8 +1408,8 @@ btr_cur_update_in_place(
|
||||
if (btr_cur_print_record_ops && thr) {
|
||||
printf(
|
||||
"Trx with id %lu %lu going to update table %s index %s\n",
|
||||
ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
index->table_name, index->name);
|
||||
rec_print(rec);
|
||||
}
|
||||
@@ -1509,8 +1510,8 @@ btr_cur_optimistic_update(
|
||||
if (btr_cur_print_record_ops && thr) {
|
||||
printf(
|
||||
"Trx with id %lu %lu going to update table %s index %s\n",
|
||||
ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
index->table_name, index->name);
|
||||
rec_print(rec);
|
||||
}
|
||||
@@ -2059,8 +2060,8 @@ btr_cur_del_mark_set_clust_rec(
|
||||
if (btr_cur_print_record_ops && thr) {
|
||||
printf(
|
||||
"Trx with id %lu %lu going to del mark table %s index %s\n",
|
||||
ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
index->table_name, index->name);
|
||||
rec_print(rec);
|
||||
}
|
||||
@@ -2199,8 +2200,8 @@ btr_cur_del_mark_set_sec_rec(
|
||||
if (btr_cur_print_record_ops && thr) {
|
||||
printf(
|
||||
"Trx with id %lu %lu going to del mark table %s index %s\n",
|
||||
ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_high(thr_get_trx(thr)->id),
|
||||
(unsigned long) ut_dulint_get_low(thr_get_trx(thr)->id),
|
||||
cursor->index->table_name, cursor->index->name);
|
||||
rec_print(rec);
|
||||
}
|
||||
|
@@ -332,8 +332,12 @@ dict_boot(void)
|
||||
dict_mem_table_add_col(table, (char *) "PAGE_NO", DATA_INT, 0, 4, 0);
|
||||
|
||||
/* The '+ 2' below comes from the 2 system fields */
|
||||
ut_ad(DICT_SYS_INDEXES_PAGE_NO_FIELD == 6 + 2);
|
||||
ut_ad(DICT_SYS_INDEXES_SPACE_NO_FIELD == 5 + 2);
|
||||
#if DICT_SYS_INDEXES_PAGE_NO_FIELD != 6 + 2
|
||||
#error "DICT_SYS_INDEXES_PAGE_NO_FIELD != 6 + 2"
|
||||
#endif
|
||||
#if DICT_SYS_INDEXES_SPACE_NO_FIELD != 5 + 2
|
||||
#error "DICT_SYS_INDEXES_SPACE_NO_FIELD != 5 + 2"
|
||||
#endif
|
||||
|
||||
table->id = DICT_INDEXES_ID;
|
||||
dict_table_add_to_cache(table);
|
||||
|
@@ -84,7 +84,8 @@ completes, we decrement the count and return the file node to the LRU-list if
|
||||
the count drops to zero. */
|
||||
|
||||
/* When mysqld is run, the default directory "." is the mysqld datadir,
|
||||
but in ibbackup we must set it explicitly */
|
||||
but in the MySQL Embedded Server Library and ibbackup it is not the default
|
||||
directory, and we must set the base file path explicitly */
|
||||
char* fil_path_to_mysql_datadir = (char*)".";
|
||||
|
||||
ulint fil_n_pending_log_flushes = 0;
|
||||
@@ -1567,7 +1568,7 @@ fil_op_write_log(
|
||||
|
||||
mlog_close(mtr, log_ptr);
|
||||
|
||||
mlog_catenate_string(mtr, name, ut_strlen(name) + 1);
|
||||
mlog_catenate_string(mtr, (byte*) name, ut_strlen(name) + 1);
|
||||
|
||||
if (type == MLOG_FILE_RENAME) {
|
||||
log_ptr = mlog_open(mtr, 30);
|
||||
@@ -1576,7 +1577,8 @@ fil_op_write_log(
|
||||
|
||||
mlog_close(mtr, log_ptr);
|
||||
|
||||
mlog_catenate_string(mtr, new_name, ut_strlen(new_name) + 1);
|
||||
mlog_catenate_string(mtr, (byte*) new_name,
|
||||
ut_strlen(new_name) + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1630,7 +1632,7 @@ fil_op_log_parse_or_replay(
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
name = ptr;
|
||||
name = (char*) ptr;
|
||||
|
||||
ptr += name_len;
|
||||
|
||||
@@ -1649,7 +1651,7 @@ fil_op_log_parse_or_replay(
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
new_name = ptr;
|
||||
new_name = (char*) ptr;
|
||||
|
||||
ptr += new_name_len;
|
||||
}
|
||||
@@ -1696,7 +1698,9 @@ fil_op_log_parse_or_replay(
|
||||
|
||||
if (fil_get_space_id_for_table(new_name)
|
||||
== ULINT_UNDEFINED) {
|
||||
ut_a(fil_rename_tablespace(name, space_id,
|
||||
/* We do not care of the old name, that is
|
||||
why we pass NULL as the first argument */
|
||||
ut_a(fil_rename_tablespace(NULL, space_id,
|
||||
new_name));
|
||||
}
|
||||
}
|
||||
@@ -1956,7 +1960,9 @@ fil_rename_tablespace(
|
||||
/*==================*/
|
||||
/* out: TRUE if success */
|
||||
char* old_name, /* in: old table name in the standard
|
||||
databasename/tablename format of InnoDB */
|
||||
databasename/tablename format of InnoDB, or
|
||||
NULL if we do the rename based on the space
|
||||
id only */
|
||||
ulint id, /* in: space id */
|
||||
char* new_name) /* in: new table name in the standard
|
||||
databasename/tablename format of InnoDB */
|
||||
@@ -1967,9 +1973,15 @@ fil_rename_tablespace(
|
||||
fil_node_t* node;
|
||||
ulint count = 0;
|
||||
char* path = NULL;
|
||||
ibool old_name_was_specified = TRUE;
|
||||
char old_path[OS_FILE_MAX_PATH];
|
||||
|
||||
ut_a(id != 0);
|
||||
|
||||
if (old_name == NULL) {
|
||||
old_name = (char*)"(name not specified)";
|
||||
old_name_was_specified = FALSE;
|
||||
}
|
||||
retry:
|
||||
count++;
|
||||
|
||||
@@ -2039,15 +2051,18 @@ retry:
|
||||
|
||||
/* Check that the old name in the space is right */
|
||||
|
||||
if (old_name_was_specified) {
|
||||
ut_a(strlen(old_name) + strlen(fil_path_to_mysql_datadir)
|
||||
< OS_FILE_MAX_PATH - 10);
|
||||
|
||||
sprintf(old_path, "%s/%s.ibd", fil_path_to_mysql_datadir, old_name);
|
||||
|
||||
sprintf(old_path, "%s/%s.ibd", fil_path_to_mysql_datadir,
|
||||
old_name);
|
||||
srv_normalize_path_for_win(old_path);
|
||||
|
||||
ut_a(strcmp(space->name, old_path) == 0);
|
||||
ut_a(strcmp(node->name, old_path) == 0);
|
||||
} else {
|
||||
sprintf(old_path, "%s", space->name);
|
||||
}
|
||||
|
||||
/* Rename the tablespace and the node in the memory cache */
|
||||
|
||||
@@ -2066,8 +2081,6 @@ retry:
|
||||
goto func_exit;
|
||||
}
|
||||
|
||||
/* printf("Renaming tablespace %s to %s id %lu\n", path, old_path, id);
|
||||
*/
|
||||
success = os_file_rename(old_path, path);
|
||||
|
||||
if (!success) {
|
||||
|
@@ -203,7 +203,7 @@ btr_node_ptr_get_child_page_no(
|
||||
if (page_no == 0) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: a nonsensical page number 0 in a node ptr record at offset %lu\n",
|
||||
(ulint)(rec - buf_frame_align(rec)));
|
||||
(unsigned long)(rec - buf_frame_align(rec)));
|
||||
buf_page_print(buf_frame_align(rec));
|
||||
}
|
||||
|
||||
|
@@ -219,8 +219,8 @@ buf_block_align(
|
||||
"InnoDB: corruption. If this happens in an InnoDB database recovery,\n"
|
||||
"InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n"
|
||||
"InnoDB: how to force recovery.\n",
|
||||
(ulint)ptr, (ulint)frame_zero,
|
||||
(ulint)(buf_pool->high_end));
|
||||
(long)ptr, (long)frame_zero,
|
||||
(long)(buf_pool->high_end));
|
||||
ut_a(0);
|
||||
}
|
||||
|
||||
@@ -255,8 +255,8 @@ buf_frame_align(
|
||||
"InnoDB: corruption. If this happens in an InnoDB database recovery,\n"
|
||||
"InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n"
|
||||
"InnoDB: how to force recovery.\n",
|
||||
(ulint)ptr, (ulint)(buf_pool->frame_zero),
|
||||
(ulint)(buf_pool->high_end));
|
||||
(long)ptr, (long)(buf_pool->frame_zero),
|
||||
(long)(buf_pool->high_end));
|
||||
ut_a(0);
|
||||
}
|
||||
|
||||
|
@@ -329,7 +329,9 @@ fil_rename_tablespace(
|
||||
/*==================*/
|
||||
/* out: TRUE if success */
|
||||
char* old_name, /* in: old table name in the standard
|
||||
databasename/tablename format of InnoDB */
|
||||
databasename/tablename format of InnoDB, or
|
||||
NULL if we do the rename based on the space
|
||||
id only */
|
||||
ulint id, /* in: space id */
|
||||
char* new_name); /* in: new table name in the standard
|
||||
databasename/tablename format of InnoDB */
|
||||
|
@@ -282,6 +282,15 @@ os_file_delete(
|
||||
/*===========*/
|
||||
/* out: TRUE if success */
|
||||
char* name); /* in: file path as a null-terminated string */
|
||||
|
||||
/***************************************************************************
|
||||
Deletes a file if it exists. The file has to be closed before calling this. */
|
||||
|
||||
ibool
|
||||
os_file_delete_if_exists(
|
||||
/*=====================*/
|
||||
/* out: TRUE if success */
|
||||
char* name); /* in: file path as a null-terminated string */
|
||||
/***************************************************************************
|
||||
Renames a file (can also move it to another directory). It is safest that the
|
||||
file is closed before calling this function. */
|
||||
@@ -379,6 +388,23 @@ os_file_read(
|
||||
offset */
|
||||
ulint n); /* in: number of bytes to read */
|
||||
/***********************************************************************
|
||||
Requests a synchronous positioned read operation. This function does not do
|
||||
any error handling. In case of error it returns FALSE. */
|
||||
|
||||
ibool
|
||||
os_file_read_no_error_handling(
|
||||
/*===========================*/
|
||||
/* out: TRUE if request was
|
||||
successful, FALSE if fail */
|
||||
os_file_t file, /* in: handle to a file */
|
||||
void* buf, /* in: buffer where to read */
|
||||
ulint offset, /* in: least significant 32 bits of file
|
||||
offset where to read */
|
||||
ulint offset_high,/* in: most significant 32 bits of
|
||||
offset */
|
||||
ulint n); /* in: number of bytes to read */
|
||||
|
||||
/***********************************************************************
|
||||
Requests a synchronous write operation. */
|
||||
|
||||
ibool
|
||||
|
@@ -77,7 +77,7 @@ open_step(
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
/* SQL error detected */
|
||||
printf("SQL error %lu\n", err);
|
||||
printf("SQL error %lu\n", (unsigned long) err);
|
||||
|
||||
ut_error;
|
||||
que_thr_handle_error(thr, err, NULL, 0);
|
||||
|
@@ -86,8 +86,8 @@ upd_field_set_field_no(
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: trying to access field %lu in table %s\n"
|
||||
"InnoDB: index %s, but index has only %lu fields\n",
|
||||
field_no, index->table_name, index->name,
|
||||
dict_index_get_n_fields(index));
|
||||
(unsigned long) field_no, index->table_name, index->name,
|
||||
(unsigned long) dict_index_get_n_fields(index));
|
||||
}
|
||||
|
||||
dtype_copy(dfield_get_type(&(upd_field->new_val)),
|
||||
|
@@ -63,7 +63,7 @@ trx_rsegf_get_nth_undo(
|
||||
{
|
||||
if (n >= TRX_RSEG_N_SLOTS) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: trying to get slot %lu of rseg\n", n);
|
||||
"InnoDB: Error: trying to get slot %lu of rseg\n", (unsigned long) n);
|
||||
ut_a(0);
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ trx_rsegf_set_nth_undo(
|
||||
{
|
||||
if (n >= TRX_RSEG_N_SLOTS) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: trying to set slot %lu of rseg\n", n);
|
||||
"InnoDB: Error: trying to set slot %lu of rseg\n", (unsigned long) n);
|
||||
ut_a(0);
|
||||
}
|
||||
|
||||
|
@@ -346,6 +346,7 @@ os_file_handle_error(
|
||||
return(FALSE);
|
||||
|
||||
} else if (err == OS_FILE_AIO_RESOURCES_RESERVED) {
|
||||
|
||||
return(TRUE);
|
||||
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS) {
|
||||
@@ -368,6 +369,68 @@ os_file_handle_error(
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Does error handling when a file operation fails. */
|
||||
static
|
||||
ibool
|
||||
os_file_handle_error_no_exit(
|
||||
/*=========================*/
|
||||
/* out: TRUE if we should retry the
|
||||
operation */
|
||||
os_file_t file, /* in: file pointer */
|
||||
char* name, /* in: name of a file or NULL */
|
||||
const char* operation)/* in: operation */
|
||||
{
|
||||
ulint err;
|
||||
|
||||
UT_NOT_USED(file);
|
||||
|
||||
err = os_file_get_last_error(FALSE);
|
||||
|
||||
if (err == OS_FILE_DISK_FULL) {
|
||||
/* We only print a warning about disk full once */
|
||||
|
||||
if (os_has_said_disk_full) {
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
if (name) {
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Encountered a problem with file %s\n", name);
|
||||
}
|
||||
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Disk is full. Try to clean the disk to free space.\n");
|
||||
|
||||
os_has_said_disk_full = TRUE;
|
||||
|
||||
fflush(stderr);
|
||||
|
||||
return(FALSE);
|
||||
|
||||
} else if (err == OS_FILE_AIO_RESOURCES_RESERVED) {
|
||||
|
||||
return(TRUE);
|
||||
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS) {
|
||||
|
||||
return(FALSE);
|
||||
} else {
|
||||
if (name) {
|
||||
fprintf(stderr, "InnoDB: File name %s\n", name);
|
||||
}
|
||||
|
||||
fprintf(stderr, "InnoDB: File operation call: '%s'.\n",
|
||||
operation);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
return(FALSE); /* not reached */
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Creates the seek mutexes used in positioned reads and writes. */
|
||||
|
||||
@@ -409,7 +472,7 @@ os_file_opendir(
|
||||
ut_a(strlen(dirname) < OS_FILE_MAX_PATH);
|
||||
|
||||
strcpy(path, dirname);
|
||||
strcpy(path + strlen(path), "\\");
|
||||
strcpy(path + strlen(path), "\\*");
|
||||
|
||||
/* Note that in Windows opening the 'directory stream' also retrieves
|
||||
the first entry in the directory. Since it is '.', that is no problem,
|
||||
@@ -457,7 +520,7 @@ os_file_closedir(
|
||||
ret = FindClose(dir);
|
||||
|
||||
if (!ret) {
|
||||
os_file_handle_error(NULL, NULL, "closedir");
|
||||
os_file_handle_error_no_exit(NULL, NULL, "closedir");
|
||||
|
||||
return(-1);
|
||||
}
|
||||
@@ -469,7 +532,7 @@ os_file_closedir(
|
||||
ret = closedir(dir);
|
||||
|
||||
if (ret) {
|
||||
os_file_handle_error(0, NULL, "closedir");
|
||||
os_file_handle_error_no_exit(0, NULL, "closedir");
|
||||
}
|
||||
|
||||
return(ret);
|
||||
@@ -538,8 +601,8 @@ http://www.mysql.com/doc/en/Windows_symbolic_links.html */
|
||||
|
||||
return(1);
|
||||
} else {
|
||||
os_file_handle_error(NULL, dirname, "readdir_next_file");
|
||||
|
||||
os_file_handle_error_no_exit(NULL, dirname,
|
||||
"readdir_next_file");
|
||||
return(-1);
|
||||
}
|
||||
#else
|
||||
@@ -570,7 +633,7 @@ next_file:
|
||||
ret = stat(full_path, &statinfo);
|
||||
|
||||
if (ret) {
|
||||
os_file_handle_error(0, full_path, "stat");
|
||||
os_file_handle_error_no_exit(0, full_path, "stat");
|
||||
|
||||
ut_free(full_path);
|
||||
|
||||
@@ -1063,6 +1126,67 @@ try_again:
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Deletes a file if it exists. The file has to be closed before calling this. */
|
||||
|
||||
ibool
|
||||
os_file_delete_if_exists(
|
||||
/*=====================*/
|
||||
/* out: TRUE if success */
|
||||
char* name) /* in: file path as a null-terminated string */
|
||||
{
|
||||
#ifdef __WIN__
|
||||
BOOL ret;
|
||||
ulint count = 0;
|
||||
loop:
|
||||
/* In Windows, deleting an .ibd file may fail if ibbackup is copying
|
||||
it */
|
||||
|
||||
ret = DeleteFile((LPCTSTR)name);
|
||||
|
||||
if (ret) {
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
if (GetLastError() == ERROR_PATH_NOT_FOUND) {
|
||||
/* the file does not exist, this not an error */
|
||||
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
count++;
|
||||
|
||||
if (count > 100 && 0 == (count % 10)) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Warning: cannot delete file %s\n"
|
||||
"InnoDB: Are you running ibbackup to back up the file?\n", name);
|
||||
|
||||
os_file_get_last_error(TRUE); /* print error information */
|
||||
}
|
||||
|
||||
os_thread_sleep(1000000); /* sleep for a second */
|
||||
|
||||
if (count > 2000) {
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
goto loop;
|
||||
#else
|
||||
int ret;
|
||||
|
||||
ret = unlink((const char*)name);
|
||||
|
||||
if (ret != 0 && errno != ENOENT) {
|
||||
os_file_handle_error(0, name, "delete");
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
return(TRUE);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Deletes a file. The file has to be closed before calling this. */
|
||||
|
||||
@@ -1746,6 +1870,92 @@ error_handling:
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
Requests a synchronous positioned read operation. This function does not do
|
||||
any error handling. In case of error it returns FALSE. */
|
||||
|
||||
ibool
|
||||
os_file_read_no_error_handling(
|
||||
/*===========================*/
|
||||
/* out: TRUE if request was
|
||||
successful, FALSE if fail */
|
||||
os_file_t file, /* in: handle to a file */
|
||||
void* buf, /* in: buffer where to read */
|
||||
ulint offset, /* in: least significant 32 bits of file
|
||||
offset where to read */
|
||||
ulint offset_high, /* in: most significant 32 bits of
|
||||
offset */
|
||||
ulint n) /* in: number of bytes to read */
|
||||
{
|
||||
#ifdef __WIN__
|
||||
BOOL ret;
|
||||
DWORD len;
|
||||
DWORD ret2;
|
||||
DWORD low;
|
||||
DWORD high;
|
||||
ibool retry;
|
||||
ulint i;
|
||||
|
||||
ut_a((offset & 0xFFFFFFFFUL) == offset);
|
||||
|
||||
os_n_file_reads++;
|
||||
os_bytes_read_since_printout += n;
|
||||
|
||||
try_again:
|
||||
ut_ad(file);
|
||||
ut_ad(buf);
|
||||
ut_ad(n > 0);
|
||||
|
||||
low = offset;
|
||||
high = offset_high;
|
||||
|
||||
/* Protect the seek / read operation with a mutex */
|
||||
i = ((ulint) file) % OS_FILE_N_SEEK_MUTEXES;
|
||||
|
||||
os_mutex_enter(os_file_seek_mutexes[i]);
|
||||
|
||||
ret2 = SetFilePointer(file, low, &high, FILE_BEGIN);
|
||||
|
||||
if (ret2 == 0xFFFFFFFF && GetLastError() != NO_ERROR) {
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
goto error_handling;
|
||||
}
|
||||
|
||||
ret = ReadFile(file, buf, n, &len, NULL);
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
if (ret && len == n) {
|
||||
return(TRUE);
|
||||
}
|
||||
#else
|
||||
ibool retry;
|
||||
ssize_t ret;
|
||||
|
||||
os_bytes_read_since_printout += n;
|
||||
|
||||
try_again:
|
||||
ret = os_file_pread(file, buf, n, offset, offset_high);
|
||||
|
||||
if ((ulint)ret == n) {
|
||||
|
||||
return(TRUE);
|
||||
}
|
||||
#endif
|
||||
#ifdef __WIN__
|
||||
error_handling:
|
||||
#endif
|
||||
retry = os_file_handle_error_no_exit(file, NULL, "read");
|
||||
|
||||
if (retry) {
|
||||
goto try_again;
|
||||
}
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
Requests a synchronous write operation. */
|
||||
|
||||
|
@@ -1235,7 +1235,8 @@ opt_print_query_plan(
|
||||
printf(
|
||||
"Table %s index %s; exact m. %lu, match %lu, end conds %lu\n",
|
||||
plan->table->name, plan->index->name,
|
||||
plan->n_exact_match, n_fields,
|
||||
UT_LIST_GET_LEN(plan->end_conds));
|
||||
(unsigned long) plan->n_exact_match,
|
||||
(unsigned long) n_fields,
|
||||
(unsigned long) UT_LIST_GET_LEN(plan->end_conds));
|
||||
}
|
||||
}
|
||||
|
@@ -513,7 +513,7 @@ que_graph_free_recursive(
|
||||
if (thr->magic_n != QUE_THR_MAGIC_N) {
|
||||
fprintf(stderr,
|
||||
"que_thr struct appears corrupt; magic n %lu\n",
|
||||
thr->magic_n);
|
||||
(unsigned long) thr->magic_n);
|
||||
mem_analyze_corruption((byte*)thr);
|
||||
ut_a(0);
|
||||
}
|
||||
@@ -625,7 +625,7 @@ que_graph_free_recursive(
|
||||
default:
|
||||
fprintf(stderr,
|
||||
"que_node struct appears corrupt; type %lu\n",
|
||||
que_node_get_type(node));
|
||||
(unsigned long) que_node_get_type(node));
|
||||
mem_analyze_corruption((byte*)node);
|
||||
ut_a(0);
|
||||
}
|
||||
@@ -1105,7 +1105,8 @@ que_thr_move_to_run_state_for_mysql(
|
||||
{
|
||||
if (thr->magic_n != QUE_THR_MAGIC_N) {
|
||||
fprintf(stderr,
|
||||
"que_thr struct appears corrupt; magic n %lu\n", thr->magic_n);
|
||||
"que_thr struct appears corrupt; magic n %lu\n",
|
||||
(unsigned long) thr->magic_n);
|
||||
|
||||
mem_analyze_corruption((byte*)thr);
|
||||
|
||||
@@ -1141,7 +1142,8 @@ que_thr_stop_for_mysql_no_error(
|
||||
|
||||
if (thr->magic_n != QUE_THR_MAGIC_N) {
|
||||
fprintf(stderr,
|
||||
"que_thr struct appears corrupt; magic n %lu\n", thr->magic_n);
|
||||
"que_thr struct appears corrupt; magic n %lu\n",
|
||||
(unsigned long) thr->magic_n);
|
||||
|
||||
mem_analyze_corruption((byte*)thr);
|
||||
|
||||
@@ -1216,7 +1218,8 @@ que_node_print_info(
|
||||
str = (char *) "UNKNOWN NODE TYPE";
|
||||
}
|
||||
|
||||
printf("Node type %lu: %s, address %lx\n", type, str, addr);
|
||||
printf("Node type %lu: %s, address %lx\n", (unsigned long) type, str,
|
||||
(unsigned long) addr);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@@ -995,7 +995,7 @@ srv_console(
|
||||
srv_dec_thread_count(SRV_CONSOLE);
|
||||
}
|
||||
|
||||
return(0);
|
||||
return(0); /* Not reached */
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -3286,7 +3286,7 @@ suspend_thread:
|
||||
os_thread_exit(NULL);
|
||||
|
||||
#ifndef __WIN__
|
||||
return(NULL);
|
||||
return(NULL); /* Not reached */
|
||||
#else
|
||||
return(0);
|
||||
#endif
|
||||
|
@@ -441,7 +441,7 @@ io_handler_thread(
|
||||
os_thread_exit(NULL);
|
||||
|
||||
#ifndef __WIN__
|
||||
return(NULL);
|
||||
return(NULL); /* Not reached */
|
||||
#else
|
||||
return(0);
|
||||
#endif
|
||||
|
@@ -589,7 +589,7 @@ trx_sys_update_mysql_binlog_offset(
|
||||
|
||||
mlog_write_string(sys_header + field
|
||||
+ TRX_SYS_MYSQL_LOG_NAME,
|
||||
file_name, 1 + ut_strlen(file_name), mtr);
|
||||
(byte*) file_name, 1 + ut_strlen(file_name), mtr);
|
||||
}
|
||||
|
||||
if (mach_read_from_4(sys_header + field
|
||||
|
@@ -50,7 +50,7 @@ int nisam_lock_database(N_INFO *info, int lock_type)
|
||||
else
|
||||
count= --share->w_locks;
|
||||
if (info->lock_type == F_WRLCK && !share->w_locks &&
|
||||
flush_key_blocks(*dflt_keycache,share->kfile,FLUSH_KEEP))
|
||||
flush_key_blocks(dflt_key_cache,share->kfile,FLUSH_KEEP))
|
||||
error=my_errno;
|
||||
if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED))
|
||||
if (end_io_cache(&info->rec_cache))
|
||||
@@ -329,7 +329,7 @@ int _nisam_test_if_changed(register N_INFO *info)
|
||||
share->state.uniq != info->last_uniq)
|
||||
{ /* Keyfile has changed */
|
||||
if (share->state.process != share->this_process)
|
||||
VOID(flush_key_blocks(*dflt_keycache,share->kfile,FLUSH_RELEASE));
|
||||
VOID(flush_key_blocks(dflt_key_cache,share->kfile,FLUSH_RELEASE));
|
||||
share->last_process=share->state.process;
|
||||
info->last_loop= share->state.loop;
|
||||
info->last_uniq= share->state.uniq;
|
||||
|
@@ -27,7 +27,7 @@ uchar *_nisam_fetch_keypage(register N_INFO *info, N_KEYDEF *keyinfo,
|
||||
my_off_t page, uchar *buff, int return_buffer)
|
||||
{
|
||||
uchar *tmp;
|
||||
tmp=(uchar*) key_cache_read(*dflt_keycache,
|
||||
tmp=(uchar*) key_cache_read(dflt_key_cache,
|
||||
info->s->kfile,page,DFLT_INIT_HITS,(byte*) buff,
|
||||
(uint) keyinfo->base.block_length,
|
||||
(uint) keyinfo->base.block_length,
|
||||
@@ -84,7 +84,7 @@ int _nisam_write_keypage(register N_INFO *info, register N_KEYDEF *keyinfo,
|
||||
length=keyinfo->base.block_length;
|
||||
}
|
||||
#endif
|
||||
return (key_cache_write(*dflt_keycache,
|
||||
return (key_cache_write(dflt_key_cache,
|
||||
info->s->kfile,page,DFLT_INIT_HITS,
|
||||
(byte*) buff,length,
|
||||
(uint) keyinfo->base.block_length,
|
||||
@@ -102,7 +102,7 @@ int _nisam_dispose(register N_INFO *info, N_KEYDEF *keyinfo, my_off_t pos)
|
||||
|
||||
old_link=info->s->state.key_del[keynr];
|
||||
info->s->state.key_del[keynr]=(ulong) pos;
|
||||
DBUG_RETURN(key_cache_write(*dflt_keycache,
|
||||
DBUG_RETURN(key_cache_write(dflt_key_cache,
|
||||
info->s->kfile,pos,DFLT_INIT_HITS,
|
||||
(byte*) &old_link,
|
||||
sizeof(long),
|
||||
@@ -131,7 +131,7 @@ ulong _nisam_new(register N_INFO *info, N_KEYDEF *keyinfo)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!key_cache_read(*dflt_keycache,
|
||||
if (!key_cache_read(dflt_key_cache,
|
||||
info->s->kfile,pos,DFLT_INIT_HITS,
|
||||
(byte*) &info->s->state.key_del[keynr],
|
||||
(uint) sizeof(long),
|
||||
|
@@ -57,7 +57,7 @@ int nisam_close(register N_INFO *info)
|
||||
if (flag)
|
||||
{
|
||||
if (share->kfile >= 0 &&
|
||||
flush_key_blocks(*dflt_keycache,share->kfile,FLUSH_RELEASE))
|
||||
flush_key_blocks(dflt_key_cache,share->kfile,FLUSH_RELEASE))
|
||||
error=my_errno;
|
||||
if (share->kfile >= 0 && my_close(share->kfile,MYF(0)))
|
||||
error = my_errno;
|
||||
|
@@ -215,7 +215,7 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function)
|
||||
info->s->last_version= 0L; /* Impossible version */
|
||||
#ifdef __WIN__
|
||||
/* Close the isam and data files as Win32 can't drop an open table */
|
||||
if (flush_key_blocks(info->s->kfile,FLUSH_RELEASE))
|
||||
if (flush_key_blocks(dflt_key_cache, info->s->kfile, FLUSH_RELEASE))
|
||||
error=my_errno;
|
||||
if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED))
|
||||
{
|
||||
|
@@ -286,8 +286,8 @@ static struct my_option my_long_options[] =
|
||||
"Change the value of a variable. Please note that this option is deprecated; you can set variables directly with --variable-name=value.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"block-search", 'b', "For debugging.", (gptr*) &search_after_block,
|
||||
(gptr*) &search_after_block, 0, GET_ULONG, REQUIRED_ARG, NI_POS_ERROR, 0,
|
||||
0, 0, 0, 0},
|
||||
(gptr*) &search_after_block, 0, GET_ULONG, REQUIRED_ARG,
|
||||
(longlong) NI_POS_ERROR, 0, 0, 0, 0, 0},
|
||||
{"silent", 's',
|
||||
"Only print errors. One can use two -s to make isamchk very silent.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@@ -516,8 +516,8 @@ static int nisamchk(my_string filename)
|
||||
if (!rep_quick)
|
||||
{
|
||||
if (testflag & T_EXTEND)
|
||||
VOID(init_key_cache(dflt_keycache,KEY_CACHE_BLOCK_SIZE,
|
||||
use_buffers,&dflt_key_cache_var));
|
||||
VOID(init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,
|
||||
use_buffers,0,0));
|
||||
VOID(init_io_cache(&read_cache,datafile,(uint) read_buffer_length,
|
||||
READ_CACHE,share->pack.header_length,1,
|
||||
MYF(MY_WME)));
|
||||
@@ -1460,8 +1460,7 @@ my_string name;
|
||||
printf("Data records: %lu\n",(ulong) share->state.records);
|
||||
}
|
||||
|
||||
VOID(init_key_cache(dflt_keycache,KEY_CACHE_BLOCK_SIZE,use_buffers,
|
||||
&dflt_key_cache_var));
|
||||
VOID(init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,use_buffers,0,0));
|
||||
if (init_io_cache(&read_cache,info->dfile,(uint) read_buffer_length,
|
||||
READ_CACHE,share->pack.header_length,1,MYF(MY_WME)))
|
||||
goto err;
|
||||
@@ -1889,12 +1888,12 @@ static void lock_memory(void)
|
||||
static int flush_blocks(file)
|
||||
File file;
|
||||
{
|
||||
if (flush_key_blocks(dflt_keycache,file,FLUSH_RELEASE))
|
||||
if (flush_key_blocks(dflt_key_cache,file,FLUSH_RELEASE))
|
||||
{
|
||||
print_error("%d when trying to write bufferts",my_errno);
|
||||
return(1);
|
||||
}
|
||||
end_key_cache(dflt_keycache,1);
|
||||
end_key_cache(dflt_key_cache,1);
|
||||
return 0;
|
||||
} /* flush_blocks */
|
||||
|
||||
@@ -1938,8 +1937,7 @@ int write_info;
|
||||
if (share->state.key_root[sort_key] == NI_POS_ERROR)
|
||||
DBUG_RETURN(0); /* Nothing to do */
|
||||
|
||||
init_key_cache(dflt_keycache,KEY_CACHE_BLOCK_SIZE,use_buffers,
|
||||
&dflt_key_cache_var);
|
||||
init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,use_buffers, 0, 0);
|
||||
if (init_io_cache(&info->rec_cache,-1,(uint) write_buffer_length,
|
||||
WRITE_CACHE,share->pack.header_length,1,
|
||||
MYF(MY_WME | MY_WAIT_IF_FULL)))
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#else
|
||||
#include <my_no_pthread.h>
|
||||
#endif
|
||||
#include <keycache.h>
|
||||
|
||||
#ifdef my_write
|
||||
#undef my_write /* We want test if disk full */
|
||||
|
@@ -329,8 +329,8 @@ static int examine_log(my_string file_name, char **table_names)
|
||||
bzero((gptr) com_count,sizeof(com_count));
|
||||
init_tree(&tree,0,0,sizeof(file_info),(qsort_cmp2) file_info_compare,1,
|
||||
(tree_element_free) file_info_free, NULL);
|
||||
VOID(init_key_cache(dflt_keycache,KEY_CACHE_BLOCK_SIZE,KEY_CACHE_SIZE,
|
||||
&dflt_key_cache_var));
|
||||
VOID(init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,KEY_CACHE_SIZE,
|
||||
0,0));
|
||||
files_open=0; access_time=0;
|
||||
while (access_time++ != number_of_commands &&
|
||||
!my_b_read(&cache,(byte*) head,9))
|
||||
@@ -622,7 +622,7 @@ static int examine_log(my_string file_name, char **table_names)
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
end_key_cache(dflt_keycache,1);
|
||||
end_key_cache(dflt_key_cache,1);
|
||||
delete_tree(&tree);
|
||||
VOID(end_io_cache(&cache));
|
||||
VOID(my_close(file,MYF(0)));
|
||||
@@ -642,7 +642,7 @@ static int examine_log(my_string file_name, char **table_names)
|
||||
llstr(isamlog_filepos,llbuff)));
|
||||
fflush(stderr);
|
||||
end:
|
||||
end_key_cache(dflt_keycache,1);
|
||||
end_key_cache(dflt_key_cache,1);
|
||||
delete_tree(&tree);
|
||||
VOID(end_io_cache(&cache));
|
||||
VOID(my_close(file,MYF(0)));
|
||||
|
@@ -48,7 +48,7 @@ int nisam_panic(enum ha_panic_function flag)
|
||||
if (info->s->base.options & HA_OPTION_READ_ONLY_DATA)
|
||||
break;
|
||||
#endif
|
||||
if (flush_key_blocks(*dflt_keycache,info->s->kfile,FLUSH_RELEASE))
|
||||
if (flush_key_blocks(dflt_key_cache,info->s->kfile,FLUSH_RELEASE))
|
||||
error=my_errno;
|
||||
if (info->opt_flag & WRITE_CACHE_USED)
|
||||
if (flush_io_cache(&info->rec_cache))
|
||||
|
@@ -156,7 +156,7 @@ int main(int argc, char *argv[])
|
||||
goto err;
|
||||
printf("- Writing key:s\n");
|
||||
if (key_cacheing)
|
||||
init_key_cache(dflt_keycache,512,IO_SIZE*16,0); /* Use a small cache */
|
||||
init_key_cache(dflt_key_cache,512,IO_SIZE*16,0,0); /* Use a small cache */
|
||||
if (locking)
|
||||
nisam_lock_database(file,F_WRLCK);
|
||||
if (write_cacheing)
|
||||
@@ -674,7 +674,7 @@ end:
|
||||
puts("Locking used");
|
||||
if (use_blob)
|
||||
puts("blobs used");
|
||||
end_key_cache(&dflt_keycache,1);
|
||||
end_key_cache(dflt_key_cache,1);
|
||||
if (blob_buffer)
|
||||
my_free(blob_buffer,MYF(0));
|
||||
my_end(MY_CHECK_ERROR | MY_GIVE_INFO);
|
||||
|
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "nisam.h"
|
||||
#include <sys/types.h>
|
||||
#include <keycache.h>
|
||||
#ifdef HAVE_SYS_WAIT_H
|
||||
# include <sys/wait.h>
|
||||
#endif
|
||||
@@ -173,7 +174,7 @@ void start_test(int id)
|
||||
exit(1);
|
||||
}
|
||||
if (key_cacheing && rnd(2) == 0)
|
||||
init_key_cache(dflt_keycache,512,65536L,0);
|
||||
init_key_cache(dflt_key_cache,512,65536L,0,0);
|
||||
printf("Process %d, pid: %d\n",id,(int) getpid()); fflush(stdout);
|
||||
|
||||
for (error=i=0 ; i < tests && !error; i++)
|
||||
|
@@ -43,18 +43,18 @@ my_bool send_file_to_server(MYSQL *mysql, const char *filename);
|
||||
|
||||
void mysql_read_default_options(struct st_mysql_options *options,
|
||||
const char *filename,const char *group);
|
||||
MYSQL * STDCALL
|
||||
MYSQL *
|
||||
cli_mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
||||
const char *passwd, const char *db,
|
||||
uint port, const char *unix_socket,ulong client_flag);
|
||||
|
||||
void STDCALL cli_mysql_close(MYSQL *mysql);
|
||||
void cli_mysql_close(MYSQL *mysql);
|
||||
|
||||
MYSQL_FIELD * STDCALL cli_list_fields(MYSQL *mysql);
|
||||
my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt);
|
||||
MYSQL_DATA * STDCALL cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
|
||||
MYSQL_FIELD * cli_list_fields(MYSQL *mysql);
|
||||
my_bool cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt);
|
||||
MYSQL_DATA * cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
|
||||
uint fields);
|
||||
int STDCALL cli_stmt_execute(MYSQL_STMT *stmt);
|
||||
MYSQL_DATA * STDCALL cli_read_binary_rows(MYSQL_STMT *stmt);
|
||||
int STDCALL cli_unbuffered_fetch(MYSQL *mysql, char **row);
|
||||
const char * STDCALL cli_read_statistic(MYSQL *mysql);
|
||||
int cli_stmt_execute(MYSQL_STMT *stmt);
|
||||
MYSQL_DATA * cli_read_binary_rows(MYSQL_STMT *stmt);
|
||||
int cli_unbuffered_fetch(MYSQL *mysql, char **row);
|
||||
const char * cli_read_statistic(MYSQL *mysql);
|
||||
|
@@ -16,9 +16,9 @@
|
||||
|
||||
/* can't use -lmysys because this prog is used to create -lstrings */
|
||||
|
||||
|
||||
#include <my_global.h>
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@@ -72,7 +72,8 @@ const char *client_errors[]=
|
||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
||||
"Wrong or unknown protocol",
|
||||
"Invalid connection handle",
|
||||
"mysql_server_init wasn't called"
|
||||
"mysql_server_init wasn't called",
|
||||
"Connection using old (pre 4.1.1) authentication protocol refused (client option 'secure_auth' enabled)"
|
||||
};
|
||||
|
||||
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
|
||||
@@ -128,7 +129,8 @@ const char *client_errors[]=
|
||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
||||
"Wrong or unknown protocol",
|
||||
"Invalid connection handle",
|
||||
"mysql_server_init wasn't called"
|
||||
"mysql_server_init wasn't called",
|
||||
"Connection using old (pre 4.1.1) authentication protocol refused (client option 'secure_auth' enabled)"
|
||||
};
|
||||
|
||||
#else /* ENGLISH */
|
||||
@@ -182,7 +184,8 @@ const char *client_errors[]=
|
||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
||||
"Wrong or unknown protocol",
|
||||
"Invalid connection handle",
|
||||
"mysql_server_init wasn't called"
|
||||
"mysql_server_init wasn't called",
|
||||
"Connection using old (pre 4.1.1) authentication protocol refused (client option 'secure_auth' enabled)"
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@@ -15,10 +15,6 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#include <my_global.h>
|
||||
#if defined(__WIN__) || defined(_WIN32) || defined(_WIN64)
|
||||
#include <winsock.h>
|
||||
#include <odbcinst.h>
|
||||
#endif
|
||||
#include <my_sys.h>
|
||||
#include <mysys_err.h>
|
||||
#include <m_string.h>
|
||||
@@ -811,8 +807,9 @@ static MYSQL* spawn_init(MYSQL* parent, const char* host,
|
||||
const char* passwd)
|
||||
{
|
||||
MYSQL* child;
|
||||
DBUG_ENTER("spawn_init");
|
||||
if (!(child= mysql_init(0)))
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
child->options.user= my_strdup((user) ? user :
|
||||
(parent->user ? parent->user :
|
||||
@@ -831,9 +828,12 @@ static MYSQL* spawn_init(MYSQL* parent, const char* host,
|
||||
else if (parent->options.db)
|
||||
child->options.db= my_strdup(parent->options.db, MYF(0));
|
||||
|
||||
child->options.rpl_parse = child->options.rpl_probe = child->rpl_pivot = 0;
|
||||
|
||||
return child;
|
||||
/*
|
||||
rpl_pivot is set to 1 in mysql_init(); Reset it as we are not doing
|
||||
replication here
|
||||
*/
|
||||
child->rpl_pivot= 0;
|
||||
DBUG_RETURN(child);
|
||||
}
|
||||
|
||||
|
||||
@@ -846,9 +846,6 @@ STDCALL mysql_set_master(MYSQL* mysql, const char* host,
|
||||
mysql_close(mysql->master);
|
||||
if (!(mysql->master = spawn_init(mysql, host, port, user, passwd)))
|
||||
return 1;
|
||||
mysql->master->rpl_pivot = 0;
|
||||
mysql->master->options.rpl_parse = 0;
|
||||
mysql->master->options.rpl_probe = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -973,16 +970,16 @@ mysql_list_tables(MYSQL *mysql, const char *wild)
|
||||
DBUG_RETURN (mysql_store_result(mysql));
|
||||
}
|
||||
|
||||
MYSQL_FIELD * STDCALL cli_list_fields(MYSQL *mysql)
|
||||
MYSQL_FIELD *cli_list_fields(MYSQL *mysql)
|
||||
{
|
||||
MYSQL_DATA *query;
|
||||
if (!(query= cli_read_rows(mysql,(MYSQL_FIELD*) 0,
|
||||
protocol_41(mysql) ? 8 : 6)))
|
||||
return NULL;
|
||||
|
||||
mysql->field_count= query->rows;
|
||||
mysql->field_count= (uint) query->rows;
|
||||
return unpack_fields(query,&mysql->field_alloc,
|
||||
query->rows, 1, mysql->server_capabilities);
|
||||
mysql->field_count, 1, mysql->server_capabilities);
|
||||
}
|
||||
|
||||
|
||||
@@ -1112,7 +1109,7 @@ mysql_dump_debug_info(MYSQL *mysql)
|
||||
DBUG_RETURN(simple_command(mysql,COM_DEBUG,0,0,0));
|
||||
}
|
||||
|
||||
const char * STDCALL cli_read_statistic(MYSQL *mysql)
|
||||
const char *cli_read_statistic(MYSQL *mysql)
|
||||
{
|
||||
mysql->net.read_pos[mysql->packet_length]=0; /* End of stat string */
|
||||
if (!mysql->net.read_pos[0])
|
||||
@@ -1589,7 +1586,7 @@ static my_bool my_realloc_str(NET *net, ulong length)
|
||||
1 error
|
||||
*/
|
||||
|
||||
my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
|
||||
my_bool cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
|
||||
{
|
||||
uchar *pos;
|
||||
uint field_count;
|
||||
@@ -2010,7 +2007,8 @@ static my_bool execute(MYSQL_STMT * stmt, char *packet, ulong length)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
int STDCALL cli_stmt_execute(MYSQL_STMT *stmt)
|
||||
|
||||
int cli_stmt_execute(MYSQL_STMT *stmt)
|
||||
{
|
||||
DBUG_ENTER("cli_stmt_execute");
|
||||
|
||||
@@ -2985,12 +2983,13 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int STDCALL cli_unbuffered_fetch(MYSQL *mysql, char **row)
|
||||
int cli_unbuffered_fetch(MYSQL *mysql, char **row)
|
||||
{
|
||||
if (packet_error == net_safe_read(mysql))
|
||||
return 1;
|
||||
|
||||
*row= (mysql->net.read_pos[0] == 254) ? NULL : (mysql->net.read_pos+1);
|
||||
*row= ((mysql->net.read_pos[0] == 254) ? NULL :
|
||||
(char*) (mysql->net.read_pos+1));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3108,7 +3107,7 @@ no_data:
|
||||
Read all rows of data from server (binary format)
|
||||
*/
|
||||
|
||||
MYSQL_DATA * STDCALL cli_read_binary_rows(MYSQL_STMT *stmt)
|
||||
MYSQL_DATA *cli_read_binary_rows(MYSQL_STMT *stmt)
|
||||
{
|
||||
ulong pkt_len;
|
||||
uchar *cp;
|
||||
@@ -3318,7 +3317,7 @@ my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt)
|
||||
my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt)
|
||||
{
|
||||
MYSQL *mysql;
|
||||
DBUG_ENTER("mysql_stmt_close");
|
||||
DBUG_ENTER("mysql_stmt_free_result");
|
||||
|
||||
DBUG_ASSERT(stmt != 0);
|
||||
|
||||
@@ -3499,10 +3498,18 @@ my_bool STDCALL mysql_more_results(MYSQL *mysql)
|
||||
Reads and returns the next query results
|
||||
*/
|
||||
|
||||
my_bool STDCALL mysql_next_result(MYSQL *mysql)
|
||||
int STDCALL mysql_next_result(MYSQL *mysql)
|
||||
{
|
||||
DBUG_ENTER("mysql_next_result");
|
||||
|
||||
if (mysql->status != MYSQL_STATUS_READY)
|
||||
{
|
||||
strmov(mysql->net.sqlstate, unknown_sqlstate);
|
||||
strmov(mysql->net.last_error,
|
||||
ER(mysql->net.last_errno=CR_COMMANDS_OUT_OF_SYNC));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
mysql->net.last_error[0]= 0;
|
||||
mysql->net.last_errno= 0;
|
||||
strmov(mysql->net.sqlstate, not_error_sqlstate);
|
||||
@@ -3511,9 +3518,10 @@ my_bool STDCALL mysql_next_result(MYSQL *mysql)
|
||||
if (mysql->last_used_con->server_status & SERVER_MORE_RESULTS_EXISTS)
|
||||
DBUG_RETURN((*mysql->methods->read_query_result)(mysql));
|
||||
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(-1); /* No more results */
|
||||
}
|
||||
|
||||
|
||||
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql)
|
||||
{
|
||||
return (*mysql->methods->use_result)(mysql);
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
target = libmysqlclient_r.la
|
||||
target_defs = -DDONT_USE_RAID @LIB_EXTRA_CCFLAGS@
|
||||
## LIBS = @LIBS@
|
||||
LIBS = @LIBS@ @openssl_libs@
|
||||
|
||||
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include $(openssl_includes)
|
||||
|
||||
|
@@ -61,10 +61,11 @@ typedef struct st_ftb_expr FTB_EXPR;
|
||||
struct st_ftb_expr
|
||||
{
|
||||
FTB_EXPR *up;
|
||||
byte *quot, *qend;
|
||||
my_off_t docid[2]; /* for index search and for scan */
|
||||
my_off_t docid[2];
|
||||
/* ^^^^^^^^^^^^^^^^^^ FTB_{EXPR,WORD} common section */
|
||||
float weight;
|
||||
float cur_weight;
|
||||
byte *quot, *qend;
|
||||
uint flags;
|
||||
uint yesses; /* number of "yes" words matched */
|
||||
uint nos; /* number of "no" words matched */
|
||||
@@ -77,6 +78,7 @@ typedef struct st_ftb_word
|
||||
FTB_EXPR *up;
|
||||
MI_KEYDEF *keyinfo;
|
||||
my_off_t docid[2]; /* for index search and for scan */
|
||||
/* ^^^^^^^^^^^^^^^^^^ FTB_{EXPR,WORD} common section */
|
||||
my_off_t key_root;
|
||||
float weight;
|
||||
uint ndepth;
|
||||
@@ -166,11 +168,7 @@ static void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
|
||||
ftbw->word[0]=w.len;
|
||||
if (param.yesno > 0) up->ythresh++;
|
||||
queue_insert(& ftb->queue, (byte *)ftbw);
|
||||
#ifdef TO_BE_REMOVED
|
||||
/* after removing the following line,
|
||||
ftb->with_scan handling can be simplified (no longer a bitmap) */
|
||||
ftb->with_scan|=(param.trunc & FTB_FLAG_TRUNC);
|
||||
#endif
|
||||
break;
|
||||
case 2: /* left bracket */
|
||||
ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR));
|
||||
@@ -251,7 +249,8 @@ static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
|
||||
}
|
||||
|
||||
/* going up to the first-level tree to continue search there */
|
||||
_mi_dpointer(info, ftbw->word+ftbw->off+HA_FT_WLEN, ftbw->key_root);
|
||||
_mi_dpointer(info, (uchar*) (ftbw->word+ftbw->off+HA_FT_WLEN),
|
||||
ftbw->key_root);
|
||||
ftbw->key_root=info->s->state.key_root[ftb->keynr];
|
||||
ftbw->keyinfo=info->s->keyinfo+ftb->keynr;
|
||||
ftbw->off=0;
|
||||
@@ -298,13 +297,15 @@ static void _ftb_init_index_search(FT_INFO *ftb)
|
||||
if (ftbw->flags & FTB_FLAG_TRUNC)
|
||||
{
|
||||
/*
|
||||
special treatment for truncation operator :((
|
||||
1. +trunc* and there're other (not +trunc*) words
|
||||
special treatment for truncation operator
|
||||
1. there are some (besides this) +words
|
||||
| no need to search in the index, it can never ADD new rows
|
||||
| to the result, and to remove half-matched rows we do scan anyway
|
||||
2. -trunc*
|
||||
| same as 1.
|
||||
3. trunc*
|
||||
3. in 1 and 2, +/- need not be on the same expr. level,
|
||||
but can be on any upper level, as in +word +(trunc1* trunc2*)
|
||||
4. otherwise
|
||||
| We have to index-search for this prefix.
|
||||
| It may cause duplicates, as in the index (sorted by <word,docid>)
|
||||
| <aaaa,row1>
|
||||
@@ -312,23 +313,32 @@ static void _ftb_init_index_search(FT_INFO *ftb)
|
||||
| <aacc,row1>
|
||||
| Searching for "aa*" will find row1 twice...
|
||||
*/
|
||||
if ( test(ftbw->flags&FTB_FLAG_NO) || /* 2 */
|
||||
(test(ftbw->flags&FTB_FLAG_YES) && /* 1 */
|
||||
ftbw->up->ythresh - ftbw->up->yweaks >1)) /* 1 */
|
||||
FTB_EXPR *ftbe;
|
||||
for (ftbe=(FTB_EXPR*)ftbw;
|
||||
ftbe->up && !(ftbe->up->flags & FTB_FLAG_TRUNC);
|
||||
ftbe->up->flags|= FTB_FLAG_TRUNC, ftbe=ftbe->up)
|
||||
{
|
||||
if (ftbe->flags & FTB_FLAG_NO || /* 2 */
|
||||
ftbe->up->ythresh - ftbe->up->yweaks >1) /* 1 */
|
||||
{
|
||||
FTB_EXPR *top_ftbe=ftbe->up->up;
|
||||
ftbw->docid[0]=HA_POS_ERROR;
|
||||
ftbw->up->yweaks++;
|
||||
continue;
|
||||
for (ftbe=ftbw->up; ftbe != top_ftbe; ftbe=ftbe->up)
|
||||
if (ftbe->flags & FTB_FLAG_YES)
|
||||
ftbe->yweaks++;
|
||||
ftbe=0;
|
||||
break;
|
||||
}
|
||||
else /* 3 */
|
||||
{
|
||||
}
|
||||
if (!ftbe)
|
||||
continue;
|
||||
/* 3 */
|
||||
if (!is_tree_inited(& ftb->no_dupes))
|
||||
init_tree(& ftb->no_dupes,0,0,sizeof(my_off_t),
|
||||
_ftb_no_dupes_cmp, 0, NULL, NULL);
|
||||
_ftb_no_dupes_cmp,0,0,0);
|
||||
else
|
||||
reset_tree(& ftb->no_dupes);
|
||||
}
|
||||
}
|
||||
|
||||
if (_ft2_search(ftb, ftbw, 1))
|
||||
return;
|
||||
|
@@ -29,7 +29,7 @@ static my_bool verbose;
|
||||
static char *query=NULL;
|
||||
static uint lengths[256];
|
||||
|
||||
#define MAX_LEN (HA_FT_MAXLEN+10)
|
||||
#define MAX_LEN (HA_FT_MAXBYTELEN+10)
|
||||
#define HOW_OFTEN_TO_WRITE 10000
|
||||
|
||||
static struct my_option my_long_options[] =
|
||||
@@ -80,7 +80,7 @@ int main(int argc,char *argv[])
|
||||
if (argc < 2)
|
||||
usage();
|
||||
|
||||
init_key_cache(dflt_keycache,MI_KEY_BLOCK_LENGTH,USE_BUFFER_INIT,0);
|
||||
init_key_cache(dflt_key_cache,MI_KEY_BLOCK_LENGTH,USE_BUFFER_INIT, 0, 0);
|
||||
|
||||
if (!(info=mi_open(argv[0],2,HA_OPEN_ABORT_IF_LOCKED)))
|
||||
goto err;
|
||||
@@ -172,9 +172,9 @@ int main(int argc,char *argv[])
|
||||
if (dump)
|
||||
{
|
||||
if (subkeys>=0)
|
||||
printf("%9qx %20.7f %s\n",info->lastpos,weight,buf);
|
||||
printf("%9lx %20.7f %s\n", (long) info->lastpos,weight,buf);
|
||||
else
|
||||
printf("%9qx => %17d %s\n",info->lastpos,-subkeys,buf);
|
||||
printf("%9lx => %17d %s\n",(long) info->lastpos,-subkeys,buf);
|
||||
}
|
||||
if (verbose && (total%HOW_OFTEN_TO_WRITE)==0)
|
||||
printf("%10ld\r",total);
|
||||
@@ -189,12 +189,12 @@ int main(int argc,char *argv[])
|
||||
if ((ulong) count >= total/2)
|
||||
break;
|
||||
}
|
||||
printf("Total rows: %qu\nTotal words: %lu\n"
|
||||
printf("Total rows: %lu\nTotal words: %lu\n"
|
||||
"Unique words: %lu\nLongest word: %lu chars (%s)\n"
|
||||
"Median length: %u\n"
|
||||
"Average global weight: %f\n"
|
||||
"Most common word: %lu times, weight: %f (%s)\n",
|
||||
(ulonglong)info->state->records, total, uniq, maxlen, buf_maxlen,
|
||||
(long) info->state->records, total, uniq, maxlen, buf_maxlen,
|
||||
inx, avg_gws/uniq, max_doc_cnt, min_gws, buf_min_gws);
|
||||
}
|
||||
if (lstats)
|
||||
|
@@ -19,7 +19,7 @@
|
||||
#include "ftdefs.h"
|
||||
|
||||
ulong ft_min_word_len=4;
|
||||
ulong ft_max_word_len=HA_FT_MAXLEN;
|
||||
ulong ft_max_word_len=HA_FT_MAXCHARLEN;
|
||||
ulong ft_query_expansion_limit=5;
|
||||
const char *ft_boolean_syntax="+ -><()~*:\"\"&|";
|
||||
|
||||
@@ -29,7 +29,7 @@ const HA_KEYSEG ft_keysegs[FT_SEGS]={
|
||||
63, /* language (will be overwritten) */
|
||||
0, 0, 0, /* null_bit, bit_start, bit_end */
|
||||
HA_VAR_LENGTH | HA_PACK_KEY, /* flag */
|
||||
HA_FT_MAXLEN, /* length */
|
||||
HA_FT_MAXBYTELEN, /* length */
|
||||
HA_FT_WLEN, /* start */
|
||||
0, /* null_pos */
|
||||
NULL /* charset */
|
||||
|
@@ -279,7 +279,7 @@ int _mi_ft_del(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
|
||||
uint _ft_make_key(MI_INFO *info, uint keynr, byte *keybuf, FT_WORD *wptr,
|
||||
my_off_t filepos)
|
||||
{
|
||||
byte buf[HA_FT_MAXLEN+16];
|
||||
byte buf[HA_FT_MAXBYTELEN+16];
|
||||
DBUG_ENTER("_ft_make_key");
|
||||
|
||||
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
|
||||
@@ -304,7 +304,7 @@ uint _mi_ft_convert_to_ft2(MI_INFO *info, uint keynr, uchar *key)
|
||||
my_off_t root;
|
||||
DYNAMIC_ARRAY *da=info->ft1_to_ft2;
|
||||
MI_KEYDEF *keyinfo=&info->s->ft2_keyinfo;
|
||||
uchar *key_ptr=dynamic_array_ptr(da, 0), *end;
|
||||
uchar *key_ptr= (uchar*) dynamic_array_ptr(da, 0), *end;
|
||||
uint length, key_length;
|
||||
DBUG_ENTER("_mi_ft_convert_to_ft2");
|
||||
|
||||
@@ -329,13 +329,13 @@ uint _mi_ft_convert_to_ft2(MI_INFO *info, uint keynr, uchar *key)
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
/* inserting the rest of key values */
|
||||
end=dynamic_array_ptr(da, da->elements);
|
||||
end= (uchar*) dynamic_array_ptr(da, da->elements);
|
||||
for (key_ptr+=length; key_ptr < end; key_ptr+=keyinfo->keylength)
|
||||
if(_mi_ck_real_write_btree(info, keyinfo, key_ptr, 0, &root, SEARCH_SAME))
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
/* now, writing the word key entry */
|
||||
ft_intXstore(key+key_length, -da->elements);
|
||||
ft_intXstore(key+key_length, - (int) da->elements);
|
||||
_mi_dpointer(info, key+key_length+HA_FT_WLEN, root);
|
||||
|
||||
DBUG_RETURN(_mi_ck_real_write_btree(info,
|
||||
|
@@ -77,6 +77,7 @@ void myisamchk_init(MI_CHECK *param)
|
||||
param->tmpfile_createflag=O_RDWR | O_TRUNC | O_EXCL;
|
||||
param->myf_rw=MYF(MY_NABP | MY_WME | MY_WAIT_IF_FULL);
|
||||
param->start_check_pos=0;
|
||||
param->max_record_length= LONGLONG_MAX;
|
||||
param->key_cache_block_size= KEY_CACHE_BLOCK_SIZE;
|
||||
}
|
||||
|
||||
@@ -242,7 +243,7 @@ static int check_k_link(MI_CHECK *param, register MI_INFO *info, uint nr)
|
||||
if (next_link > info->state->key_file_length ||
|
||||
next_link & (info->s->blocksize-1))
|
||||
DBUG_RETURN(1);
|
||||
if (!(buff=key_cache_read(*info->s->key_cache,
|
||||
if (!(buff=key_cache_read(info->s->key_cache,
|
||||
info->s->kfile, next_link, DFLT_INIT_HITS,
|
||||
(byte*) info->buff,
|
||||
myisam_block_size, block_size, 1)))
|
||||
@@ -262,7 +263,7 @@ static int check_k_link(MI_CHECK *param, register MI_INFO *info, uint nr)
|
||||
} /* check_k_link */
|
||||
|
||||
|
||||
/* Kontrollerar storleken p} filerna */
|
||||
/* Check sizes of files */
|
||||
|
||||
int chk_size(MI_CHECK *param, register MI_INFO *info)
|
||||
{
|
||||
@@ -273,8 +274,9 @@ int chk_size(MI_CHECK *param, register MI_INFO *info)
|
||||
|
||||
if (!(param->testflag & T_SILENT)) puts("- check file-size");
|
||||
|
||||
flush_key_blocks(*info->s->key_cache,
|
||||
info->s->kfile, FLUSH_FORCE_WRITE); /* If called externally */
|
||||
/* The following is needed if called externally (not from myisamchk) */
|
||||
flush_key_blocks(info->s->key_cache,
|
||||
info->s->kfile, FLUSH_FORCE_WRITE);
|
||||
|
||||
size=my_seek(info->s->kfile,0L,MY_SEEK_END,MYF(0));
|
||||
if ((skr=(my_off_t) info->state->key_file_length) != size)
|
||||
@@ -502,7 +504,7 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
|
||||
param->record_checksum=old_record_checksum-init_checksum; /* Remove delete links */
|
||||
else
|
||||
param->record_checksum=0;
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(result);
|
||||
} /* chk_key */
|
||||
|
||||
|
||||
@@ -522,7 +524,7 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
|
||||
if (!(temp_buff=(uchar*) my_alloca((uint) keyinfo->block_length)))
|
||||
{
|
||||
mi_check_print_error(param,"Not Enough memory");
|
||||
mi_check_print_error(param,"Not enough memory for keyblock");
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
@@ -711,7 +713,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
||||
|
||||
if (!(record= (byte*) my_malloc(info->s->base.pack_reclength,MYF(0))))
|
||||
{
|
||||
mi_check_print_error(param,"Not Enough memory");
|
||||
mi_check_print_error(param,"Not enough memory for record");
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
records=del_blocks=0;
|
||||
@@ -822,7 +824,8 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
||||
if (info->state->data_file_length < block_info.filepos+
|
||||
block_info.block_len)
|
||||
{
|
||||
mi_check_print_error(param,"Recordlink that points outside datafile at %s",
|
||||
mi_check_print_error(param,
|
||||
"Recordlink that points outside datafile at %s",
|
||||
llstr(pos,llbuff));
|
||||
got_error=1;
|
||||
break;
|
||||
@@ -834,8 +837,8 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
||||
pos=block_info.filepos+block_info.block_len;
|
||||
if (block_info.rec_len > (uint) info->s->base.max_pack_length)
|
||||
{
|
||||
mi_check_print_error(param,"Found too long record (%d) at %s",
|
||||
block_info.rec_len,
|
||||
mi_check_print_error(param,"Found too long record (%lu) at %s",
|
||||
(ulong) block_info.rec_len,
|
||||
llstr(start_recpos,llbuff));
|
||||
got_error=1;
|
||||
break;
|
||||
@@ -845,7 +848,9 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
||||
if (!(to= mi_alloc_rec_buff(info, block_info.rec_len,
|
||||
&info->rec_buff)))
|
||||
{
|
||||
mi_check_print_error(param,"Not enough memory for blob at %s",
|
||||
mi_check_print_error(param,
|
||||
"Not enough memory (%lu) for blob at %s",
|
||||
(ulong) block_info.rec_len,
|
||||
llstr(start_recpos,llbuff));
|
||||
got_error=1;
|
||||
break;
|
||||
@@ -857,9 +862,11 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
||||
}
|
||||
if (left_length < block_info.data_len)
|
||||
{
|
||||
mi_check_print_error(param,"Found too long record at %s",
|
||||
mi_check_print_error(param,"Found too long record (%lu) at %s",
|
||||
(ulong) block_info.data_len,
|
||||
llstr(start_recpos,llbuff));
|
||||
got_error=1; break;
|
||||
got_error=1;
|
||||
break;
|
||||
}
|
||||
if (_mi_read_cache(¶m->read_cache,(byte*) to,block_info.filepos,
|
||||
(uint) block_info.data_len,
|
||||
@@ -1142,9 +1149,12 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
|
||||
}
|
||||
param->testflag|=T_REP; /* for easy checking */
|
||||
|
||||
if (info->s->options & (HA_OPTION_CHECKSUM | HA_OPTION_COMPRESS_RECORD))
|
||||
param->testflag|=T_CALC_CHECKSUM;
|
||||
|
||||
if (!param->using_global_keycache)
|
||||
VOID(init_key_cache(dflt_keycache, param->key_cache_block_size,
|
||||
param->use_buffers, &dflt_key_cache_var));
|
||||
VOID(init_key_cache(dflt_key_cache, param->key_cache_block_size,
|
||||
param->use_buffers, 0, 0));
|
||||
|
||||
if (init_io_cache(¶m->read_cache,info->dfile,
|
||||
(uint) param->read_buffer_length,
|
||||
@@ -1355,6 +1365,7 @@ err:
|
||||
VOID(my_close(new_file,MYF(0)));
|
||||
VOID(my_raid_delete(param->temp_filename,info->s->base.raid_chunks,
|
||||
MYF(MY_WME)));
|
||||
info->rec_cache.file=-1; /* don't flush data to new_file, it's closed */
|
||||
}
|
||||
mi_mark_crashed_on_repair(info);
|
||||
}
|
||||
@@ -1365,7 +1376,7 @@ err:
|
||||
VOID(end_io_cache(¶m->read_cache));
|
||||
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
|
||||
VOID(end_io_cache(&info->rec_cache));
|
||||
got_error|=flush_blocks(param, *share->key_cache, share->kfile);
|
||||
got_error|=flush_blocks(param, share->key_cache, share->kfile);
|
||||
if (!got_error && param->testflag & T_UNPACK)
|
||||
{
|
||||
share->state.header.options[0]&= (uchar) ~HA_OPTION_COMPRESS_RECORD;
|
||||
@@ -1501,7 +1512,7 @@ void lock_memory(MI_CHECK *param __attribute__((unused)))
|
||||
|
||||
/* Flush all changed blocks to disk */
|
||||
|
||||
int flush_blocks(MI_CHECK *param, KEY_CACHE_HANDLE key_cache, File file)
|
||||
int flush_blocks(MI_CHECK *param, KEY_CACHE *key_cache, File file)
|
||||
{
|
||||
if (flush_key_blocks(key_cache, file, FLUSH_RELEASE))
|
||||
{
|
||||
@@ -1564,7 +1575,7 @@ int mi_sort_index(MI_CHECK *param, register MI_INFO *info, my_string name)
|
||||
}
|
||||
|
||||
/* Flush key cache for this file if we are calling this outside myisamchk */
|
||||
flush_key_blocks(*share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
flush_key_blocks(share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
|
||||
share->state.version=(ulong) time((time_t*) 0);
|
||||
old_state= share->state; /* save state if not stored */
|
||||
@@ -1625,7 +1636,7 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
|
||||
if (!(buff=(uchar*) my_alloca((uint) keyinfo->block_length)))
|
||||
{
|
||||
mi_check_print_error(param,"Not Enough memory");
|
||||
mi_check_print_error(param,"Not enough memory for key block");
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
if (!_mi_fetch_keypage(info,keyinfo,pagepos,DFLT_INIT_HITS,buff,0))
|
||||
@@ -1811,6 +1822,9 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
|
||||
}
|
||||
param->testflag|=T_REP; /* for easy checking */
|
||||
|
||||
if (info->s->options & (HA_OPTION_CHECKSUM | HA_OPTION_COMPRESS_RECORD))
|
||||
param->testflag|=T_CALC_CHECKSUM;
|
||||
|
||||
bzero((char*)&sort_info,sizeof(sort_info));
|
||||
bzero((char *)&sort_param, sizeof(sort_param));
|
||||
if (!(sort_info.key_block=
|
||||
@@ -1874,7 +1888,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
|
||||
Flush key cache for this file if we are calling this outside
|
||||
myisamchk
|
||||
*/
|
||||
flush_key_blocks(*share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
flush_key_blocks(share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
/* Clear the pointers to the given rows */
|
||||
for (i=0 ; i < share->base.keys ; i++)
|
||||
share->state.key_root[i]= HA_OFFSET_ERROR;
|
||||
@@ -1884,7 +1898,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
|
||||
}
|
||||
else
|
||||
{
|
||||
if (flush_key_blocks(*share->key_cache,share->kfile, FLUSH_FORCE_WRITE))
|
||||
if (flush_key_blocks(share->key_cache,share->kfile, FLUSH_FORCE_WRITE))
|
||||
goto err;
|
||||
key_map= ~key_map; /* Create the missing keys */
|
||||
}
|
||||
@@ -1965,7 +1979,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
|
||||
|
||||
sort_param.key_read=sort_ft_key_read;
|
||||
sort_param.key_write=sort_ft_key_write;
|
||||
sort_param.key_length+=FT_MAX_WORD_LEN_FOR_SORT-HA_FT_MAXLEN;
|
||||
sort_param.key_length+=FT_MAX_WORD_LEN_FOR_SORT-HA_FT_MAXBYTELEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2076,7 +2090,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
|
||||
memcpy( &share->state.state, info->state, sizeof(*info->state));
|
||||
|
||||
err:
|
||||
got_error|= flush_blocks(param, *share->key_cache, share->kfile);
|
||||
got_error|= flush_blocks(param, share->key_cache, share->kfile);
|
||||
VOID(end_io_cache(&info->rec_cache));
|
||||
if (!got_error)
|
||||
{
|
||||
@@ -2182,6 +2196,9 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
}
|
||||
param->testflag|=T_REP; /* for easy checking */
|
||||
|
||||
if (info->s->options & (HA_OPTION_CHECKSUM | HA_OPTION_COMPRESS_RECORD))
|
||||
param->testflag|=T_CALC_CHECKSUM;
|
||||
|
||||
bzero((char*)&sort_info,sizeof(sort_info));
|
||||
if (!(sort_info.key_block=
|
||||
alloc_key_blocks(param,
|
||||
@@ -2237,7 +2254,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
Flush key cache for this file if we are calling this outside
|
||||
myisamchk
|
||||
*/
|
||||
flush_key_blocks(*share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
flush_key_blocks(share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
/* Clear the pointers to the given rows */
|
||||
for (i=0 ; i < share->base.keys ; i++)
|
||||
share->state.key_root[i]= HA_OFFSET_ERROR;
|
||||
@@ -2247,7 +2264,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
}
|
||||
else
|
||||
{
|
||||
if (flush_key_blocks(*share->key_cache,share->kfile, FLUSH_FORCE_WRITE))
|
||||
if (flush_key_blocks(share->key_cache,share->kfile, FLUSH_FORCE_WRITE))
|
||||
goto err;
|
||||
key_map= ~key_map; /* Create the missing keys */
|
||||
}
|
||||
@@ -2267,8 +2284,8 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
rec_length=share->base.min_block_length;
|
||||
else
|
||||
rec_length=share->base.pack_reclength;
|
||||
sort_info.max_records=
|
||||
/* +1 below is required hack for parallel repair mode.
|
||||
/*
|
||||
+1 below is required hack for parallel repair mode.
|
||||
The info->state->records value, that is compared later
|
||||
to sort_info.max_records and cannot exceed it, is
|
||||
increased in sort_key_write. In mi_repair_by_sort, sort_key_write
|
||||
@@ -2277,7 +2294,9 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
before some other repair thread calls sort_key_read.
|
||||
Furthermore I'm not even sure +1 would be enough.
|
||||
May be sort_info.max_records shold be always set to max value in
|
||||
parallel mode. */
|
||||
parallel mode.
|
||||
*/
|
||||
sort_info.max_records=
|
||||
((param->testflag & T_CREATE_MISSING_KEYS) ? info->state->records + 1:
|
||||
(ha_rows) (sort_info.filelength/rec_length+1));
|
||||
|
||||
@@ -2291,7 +2310,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
(sizeof(MI_SORT_PARAM) + share->base.pack_reclength),
|
||||
MYF(MY_ZEROFILL))))
|
||||
{
|
||||
mi_check_print_error(param,"Not enough memory!");
|
||||
mi_check_print_error(param,"Not enough memory for key!");
|
||||
goto err;
|
||||
}
|
||||
total_key_length=0;
|
||||
@@ -2356,7 +2375,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
total_key_length+=sort_param[i].key_length;
|
||||
|
||||
if (sort_param[i].keyinfo->flag & HA_FULLTEXT)
|
||||
sort_param[i].key_length+=FT_MAX_WORD_LEN_FOR_SORT-ft_max_word_len;
|
||||
sort_param[i].key_length+=FT_MAX_WORD_LEN_FOR_SORT-HA_FT_MAXBYTELEN;
|
||||
}
|
||||
sort_info.total_keys=i;
|
||||
sort_param[0].master= 1;
|
||||
@@ -2483,7 +2502,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
|
||||
memcpy(&share->state.state, info->state, sizeof(*info->state));
|
||||
|
||||
err:
|
||||
got_error|= flush_blocks(param, *share->key_cache, share->kfile);
|
||||
got_error|= flush_blocks(param, share->key_cache, share->kfile);
|
||||
VOID(end_io_cache(&info->rec_cache));
|
||||
if (!got_error)
|
||||
{
|
||||
@@ -2847,24 +2866,37 @@ static int sort_get_next_record(MI_SORT_PARAM *sort_param)
|
||||
if (!(to=mi_alloc_rec_buff(info,block_info.rec_len,
|
||||
&(sort_param->rec_buff))))
|
||||
{
|
||||
mi_check_print_error(param,"Not enough memory for blob at %s",
|
||||
llstr(sort_param->start_recpos,llbuff));
|
||||
if (param->max_record_length >= block_info.rec_len)
|
||||
{
|
||||
mi_check_print_error(param,"Not enough memory for blob at %s (need %lu)",
|
||||
llstr(sort_param->start_recpos,llbuff),
|
||||
(ulong) block_info.rec_len);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
mi_check_print_info(param,"Not enough memory for blob at %s (need %lu); Row skipped",
|
||||
llstr(sort_param->start_recpos,llbuff),
|
||||
(ulong) block_info.rec_len);
|
||||
goto try_next;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
to= sort_param->rec_buff;
|
||||
}
|
||||
if (left_length < block_info.data_len || ! block_info.data_len)
|
||||
{
|
||||
mi_check_print_info(param,"Found block with too small length at %s; Skipped",
|
||||
mi_check_print_info(param,
|
||||
"Found block with too small length at %s; Skipped",
|
||||
llstr(sort_param->start_recpos,llbuff));
|
||||
goto try_next;
|
||||
}
|
||||
if (block_info.filepos + block_info.data_len >
|
||||
sort_param->read_cache.end_of_file)
|
||||
{
|
||||
mi_check_print_info(param,"Found block that points outside data file at %s",
|
||||
mi_check_print_info(param,
|
||||
"Found block that points outside data file at %s",
|
||||
llstr(sort_param->start_recpos,llbuff));
|
||||
goto try_next;
|
||||
}
|
||||
@@ -3269,8 +3301,7 @@ static int sort_ft_key_write(MI_SORT_PARAM *sort_param, const void *a)
|
||||
ft_buf->buf=0;
|
||||
return error;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
/* flushing buffer */
|
||||
if ((error=sort_ft_buf_flush(sort_param)))
|
||||
return error;
|
||||
@@ -3279,20 +3310,19 @@ word_init_ft_buf:
|
||||
a_len+=val_len;
|
||||
memcpy(ft_buf->lastkey, a, a_len);
|
||||
ft_buf->buf=ft_buf->lastkey+a_len;
|
||||
ft_buf->end=ft_buf->lastkey+ (sort_param->keyinfo->block_length-32);
|
||||
/* 32 is just a safety margin here
|
||||
/*
|
||||
32 is just a safety margin here
|
||||
(at least max(val_len, sizeof(nod_flag)) should be there).
|
||||
May be better performance could be achieved if we'd put
|
||||
(sort_info->keyinfo->block_length-32)/XXX
|
||||
instead.
|
||||
TODO: benchmark the best value for XXX.
|
||||
*/
|
||||
|
||||
ft_buf->end=ft_buf->lastkey+ (sort_param->keyinfo->block_length-32);
|
||||
return 0;
|
||||
}
|
||||
return -1; /* impossible */
|
||||
} /* sort_ft_key_write */
|
||||
|
||||
|
||||
/* get pointer to record from a key */
|
||||
|
||||
static my_off_t get_record_for_key(MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
@@ -3499,7 +3529,7 @@ static SORT_KEY_BLOCKS *alloc_key_blocks(MI_CHECK *param, uint blocks,
|
||||
buffer_length+IO_SIZE)*blocks,
|
||||
MYF(0))))
|
||||
{
|
||||
mi_check_print_error(param,"Not Enough memory for sort-key-blocks");
|
||||
mi_check_print_error(param,"Not enough memory for sort-key-blocks");
|
||||
return(0);
|
||||
}
|
||||
for (i=0 ; i < blocks ; i++)
|
||||
@@ -3883,7 +3913,7 @@ static my_bool mi_too_big_key_for_sort(MI_KEYDEF *key, ha_rows rows)
|
||||
{
|
||||
uint key_maxlength=key->maxlength;
|
||||
if (key->flag & HA_FULLTEXT)
|
||||
key_maxlength+=FT_MAX_WORD_LEN_FOR_SORT-HA_FT_MAXLEN;
|
||||
key_maxlength+=FT_MAX_WORD_LEN_FOR_SORT-HA_FT_MAXBYTELEN;
|
||||
return (key->flag & (HA_BINARY_PACK_KEY | HA_VAR_LENGTH_KEY | HA_FULLTEXT) &&
|
||||
((ulonglong) rows * key_maxlength >
|
||||
(ulonglong) myisam_max_temp_length));
|
||||
|
@@ -64,7 +64,7 @@ int mi_close(register MI_INFO *info)
|
||||
if (flag)
|
||||
{
|
||||
if (share->kfile >= 0 &&
|
||||
flush_key_blocks(*share->key_cache, share->kfile,
|
||||
flush_key_blocks(share->key_cache, share->kfile,
|
||||
share->temporary ? FLUSH_IGNORE_CHANGED :
|
||||
FLUSH_RELEASE))
|
||||
error=my_errno;
|
||||
|
@@ -289,9 +289,9 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
}
|
||||
|
||||
fulltext_keys++;
|
||||
key_length+= HA_FT_MAXLEN+HA_FT_WLEN;
|
||||
key_length+= HA_FT_MAXBYTELEN+HA_FT_WLEN;
|
||||
length++; /* At least one length byte */
|
||||
min_key_length_skipp+=HA_FT_MAXLEN;
|
||||
min_key_length_skipp+=HA_FT_MAXBYTELEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -241,7 +241,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
if (info->ft1_to_ft2)
|
||||
{
|
||||
/* we're in ft1->ft2 conversion mode. Saving key data */
|
||||
insert_dynamic(info->ft1_to_ft2, lastkey+off);
|
||||
insert_dynamic(info->ft1_to_ft2, (char*) (lastkey+off));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -53,7 +53,7 @@ int mi_delete_all_rows(MI_INFO *info)
|
||||
If we are using delayed keys or if the user has done changes to the tables
|
||||
since it was locked then there may be key blocks in the key cache
|
||||
*/
|
||||
flush_key_blocks(*share->key_cache, share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
flush_key_blocks(share->key_cache, share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
if (my_chsize(info->dfile, 0, 0, MYF(MY_WME)) ||
|
||||
my_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)) )
|
||||
goto err;
|
||||
|
@@ -33,15 +33,11 @@
|
||||
Used when function is one of:
|
||||
HA_EXTRA_WRITE_CACHE
|
||||
HA_EXTRA_CACHE
|
||||
HA_EXTRA_BULK_INSERT_BEGIN
|
||||
If extra_arg is 0, then the default cache size is used.
|
||||
HA_EXTRA_BULK_INSERT_FLUSH
|
||||
extra_arg is a a pointer to which index to flush (uint*)
|
||||
RETURN VALUES
|
||||
0 ok
|
||||
# error
|
||||
*/
|
||||
|
||||
|
||||
int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
|
||||
{
|
||||
int error=0;
|
||||
@@ -283,7 +279,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
|
||||
#ifdef __WIN__
|
||||
/* Close the isam and data files as Win32 can't drop an open table */
|
||||
pthread_mutex_lock(&share->intern_lock);
|
||||
if (flush_key_blocks(*share->keycache, share->kfile,
|
||||
if (flush_key_blocks(share->key_cache, share->kfile,
|
||||
(function == HA_EXTRA_FORCE_REOPEN ?
|
||||
FLUSH_RELEASE : FLUSH_IGNORE_CHANGED)))
|
||||
{
|
||||
@@ -329,7 +325,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
|
||||
break;
|
||||
case HA_EXTRA_FLUSH:
|
||||
if (!share->temporary)
|
||||
flush_key_blocks(*share->key_cache, share->kfile, FLUSH_KEEP);
|
||||
flush_key_blocks(share->key_cache, share->kfile, FLUSH_KEEP);
|
||||
#ifdef HAVE_PWRITE
|
||||
_mi_decrement_open_count(info);
|
||||
#endif
|
||||
|
@@ -49,19 +49,19 @@
|
||||
|
||||
int mi_assign_to_key_cache(MI_INFO *info,
|
||||
ulonglong key_map __attribute__((unused)),
|
||||
KEY_CACHE_VAR *key_cache)
|
||||
KEY_CACHE *key_cache)
|
||||
{
|
||||
int error= 0;
|
||||
MYISAM_SHARE* share= info->s;
|
||||
DBUG_ENTER("mi_assign_to_key_cache");
|
||||
DBUG_PRINT("enter",("old_key_cache_handle: %lx new_key_cache_handle: %lx",
|
||||
share->key_cache, &key_cache->cache));
|
||||
share->key_cache, key_cache));
|
||||
|
||||
/*
|
||||
Skip operation if we didn't change key cache. This can happen if we
|
||||
call this for all open instances of the same table
|
||||
*/
|
||||
if (*share->key_cache == key_cache->cache)
|
||||
if (share->key_cache == key_cache)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/*
|
||||
@@ -76,7 +76,7 @@ int mi_assign_to_key_cache(MI_INFO *info,
|
||||
in the old key cache.
|
||||
*/
|
||||
|
||||
if (flush_key_blocks(*share->key_cache, share->kfile, FLUSH_REMOVE))
|
||||
if (flush_key_blocks(share->key_cache, share->kfile, FLUSH_RELEASE))
|
||||
{
|
||||
error= my_errno;
|
||||
mi_mark_crashed(info); /* Mark that table must be checked */
|
||||
@@ -90,18 +90,24 @@ int mi_assign_to_key_cache(MI_INFO *info,
|
||||
(This can never fail as there is never any not written data in the
|
||||
new key cache)
|
||||
*/
|
||||
(void) flush_key_blocks(key_cache->cache, share->kfile, FLUSH_REMOVE);
|
||||
(void) flush_key_blocks(key_cache, share->kfile, FLUSH_RELEASE);
|
||||
|
||||
/*
|
||||
ensure that setting the key cache and changing the multi_key_cache
|
||||
is done atomicly
|
||||
*/
|
||||
pthread_mutex_lock(&share->intern_lock);
|
||||
/*
|
||||
Tell all threads to use the new key cache
|
||||
This should be seen at the lastes for the next call to an myisam function.
|
||||
*/
|
||||
share->key_cache= &key_cache->cache;
|
||||
share->key_cache= key_cache;
|
||||
|
||||
/* store the key cache in the global hash structure for future opens */
|
||||
if (multi_key_cache_set(share->unique_file_name, share->unique_name_length,
|
||||
share->key_cache))
|
||||
error= my_errno;
|
||||
pthread_mutex_unlock(&share->intern_lock);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
@@ -127,8 +133,8 @@ int mi_assign_to_key_cache(MI_INFO *info,
|
||||
*/
|
||||
|
||||
|
||||
void mi_change_key_cache(KEY_CACHE_VAR *old_key_cache,
|
||||
KEY_CACHE_VAR *new_key_cache)
|
||||
void mi_change_key_cache(KEY_CACHE *old_key_cache,
|
||||
KEY_CACHE *new_key_cache)
|
||||
{
|
||||
LIST *pos;
|
||||
DBUG_ENTER("mi_change_key_cache");
|
||||
@@ -141,7 +147,7 @@ void mi_change_key_cache(KEY_CACHE_VAR *old_key_cache,
|
||||
{
|
||||
MI_INFO *info= (MI_INFO*) pos->data;
|
||||
MYISAM_SHARE *share= info->s;
|
||||
if (share->key_cache == &old_key_cache->cache)
|
||||
if (share->key_cache == old_key_cache)
|
||||
mi_assign_to_key_cache(info, (ulonglong) ~0, new_key_cache);
|
||||
}
|
||||
|
||||
@@ -150,6 +156,6 @@ void mi_change_key_cache(KEY_CACHE_VAR *old_key_cache,
|
||||
MyISAM list structure to ensure that another thread is not trying to
|
||||
open a new table that will be associted with the old key cache
|
||||
*/
|
||||
multi_key_cache_change(&old_key_cache->cache, &new_key_cache->cache);
|
||||
multi_key_cache_change(old_key_cache, new_key_cache);
|
||||
pthread_mutex_unlock(&THR_LOCK_myisam);
|
||||
}
|
||||
|
@@ -61,7 +61,7 @@ int mi_lock_database(MI_INFO *info, int lock_type)
|
||||
count= --share->w_locks;
|
||||
--share->tot_locks;
|
||||
if (info->lock_type == F_WRLCK && !share->w_locks &&
|
||||
!share->delay_key_write && flush_key_blocks(*share->key_cache,
|
||||
!share->delay_key_write && flush_key_blocks(share->key_cache,
|
||||
share->kfile,FLUSH_KEEP))
|
||||
{
|
||||
error=my_errno;
|
||||
@@ -389,7 +389,7 @@ int _mi_test_if_changed(register MI_INFO *info)
|
||||
{ /* Keyfile has changed */
|
||||
DBUG_PRINT("info",("index file changed"));
|
||||
if (share->state.process != share->this_process)
|
||||
VOID(flush_key_blocks(*share->key_cache, share->kfile, FLUSH_RELEASE));
|
||||
VOID(flush_key_blocks(share->key_cache, share->kfile, FLUSH_RELEASE));
|
||||
share->last_process=share->state.process;
|
||||
info->last_unique= share->state.unique;
|
||||
info->last_loop= share->state.update_count;
|
||||
|
@@ -32,7 +32,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
DBUG_ENTER("_mi_fetch_keypage");
|
||||
DBUG_PRINT("enter",("page: %ld",page));
|
||||
|
||||
tmp=(uchar*) key_cache_read(*info->s->key_cache,
|
||||
tmp=(uchar*) key_cache_read(info->s->key_cache,
|
||||
info->s->kfile, page, level, (byte*) buff,
|
||||
(uint) keyinfo->block_length,
|
||||
(uint) keyinfo->block_length,
|
||||
@@ -52,7 +52,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
{
|
||||
DBUG_PRINT("error",("page %lu had wrong page length: %u",
|
||||
(ulong) page, page_size));
|
||||
DBUG_DUMP("page", tmp, keyinfo->block_length);
|
||||
DBUG_DUMP("page", (char*) tmp, keyinfo->block_length);
|
||||
info->last_keypage = HA_OFFSET_ERROR;
|
||||
my_errno = HA_ERR_CRASHED;
|
||||
tmp = 0;
|
||||
@@ -95,7 +95,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
length=keyinfo->block_length;
|
||||
}
|
||||
#endif
|
||||
DBUG_RETURN((key_cache_write(*info->s->key_cache,
|
||||
DBUG_RETURN((key_cache_write(info->s->key_cache,
|
||||
info->s->kfile,page, level, (byte*) buff,length,
|
||||
(uint) keyinfo->block_length,
|
||||
(int) ((info->lock_type != F_UNLCK) ||
|
||||
@@ -117,7 +117,7 @@ int _mi_dispose(register MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos,
|
||||
info->s->state.key_del[keyinfo->block_size]=pos;
|
||||
mi_sizestore(buff,old_link);
|
||||
info->s->state.changed|= STATE_NOT_SORTED_PAGES;
|
||||
DBUG_RETURN(key_cache_write(*info->s->key_cache,
|
||||
DBUG_RETURN(key_cache_write(info->s->key_cache,
|
||||
info->s->kfile, pos , level, buff,
|
||||
sizeof(buff),
|
||||
(uint) keyinfo->block_length,
|
||||
@@ -146,7 +146,7 @@ my_off_t _mi_new(register MI_INFO *info, MI_KEYDEF *keyinfo, int level)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!key_cache_read(*info->s->key_cache,
|
||||
if (!key_cache_read(info->s->key_cache,
|
||||
info->s->kfile, pos, level,
|
||||
buff,
|
||||
(uint) sizeof(buff),
|
||||
|
@@ -48,7 +48,7 @@ int mi_panic(enum ha_panic_function flag)
|
||||
if (info->s->options & HA_OPTION_READ_ONLY_DATA)
|
||||
break;
|
||||
#endif
|
||||
if (flush_key_blocks(*info->s->key_cache, info->s->kfile, FLUSH_RELEASE))
|
||||
if (flush_key_blocks(info->s->key_cache, info->s->kfile, FLUSH_RELEASE))
|
||||
error=my_errno;
|
||||
if (info->opt_flag & WRITE_CACHE_USED)
|
||||
if (flush_io_cache(&info->rec_cache))
|
||||
|
@@ -69,7 +69,7 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
|
||||
if (!(buff= (uchar *) my_malloc(length, MYF(MY_WME))))
|
||||
DBUG_RETURN(my_errno= HA_ERR_OUT_OF_MEM);
|
||||
|
||||
if (flush_key_blocks(*share->key_cache,share->kfile, FLUSH_RELEASE))
|
||||
if (flush_key_blocks(share->key_cache,share->kfile, FLUSH_RELEASE))
|
||||
goto err;
|
||||
|
||||
do
|
||||
@@ -87,7 +87,7 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
|
||||
{
|
||||
if (mi_test_if_nod(buff))
|
||||
{
|
||||
if (key_cache_insert(*share->key_cache,
|
||||
if (key_cache_insert(share->key_cache,
|
||||
share->kfile, pos, DFLT_INIT_HITS,
|
||||
(byte*) buff, block_length))
|
||||
goto err;
|
||||
@@ -99,7 +99,7 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (key_cache_insert(*share->key_cache,
|
||||
if (key_cache_insert(share->key_cache,
|
||||
share->kfile, pos, DFLT_INIT_HITS,
|
||||
(byte*) buff, length))
|
||||
goto err;
|
||||
@@ -108,11 +108,11 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
|
||||
}
|
||||
while (pos != key_file_length);
|
||||
|
||||
my_free(buff, MYF(0));
|
||||
my_free((char*) buff, MYF(0));
|
||||
DBUG_RETURN(0);
|
||||
|
||||
err:
|
||||
my_free(buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||
my_free((char*) buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||
DBUG_RETURN(my_errno= errno);
|
||||
}
|
||||
|
||||
|
@@ -50,7 +50,7 @@ int main(int argc,char *argv[])
|
||||
MY_INIT(argv[0]);
|
||||
my_init();
|
||||
if (key_cacheing)
|
||||
init_key_cache(dflt_keycache,KEY_CACHE_BLOCK_SIZE,IO_SIZE*16,0);
|
||||
init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,IO_SIZE*16,0,0);
|
||||
get_options(argc,argv);
|
||||
|
||||
exit(run_test("test1"));
|
||||
|
@@ -215,7 +215,7 @@ int main(int argc, char *argv[])
|
||||
if (!silent)
|
||||
printf("- Writing key:s\n");
|
||||
if (key_cacheing)
|
||||
init_key_cache(dflt_keycache,key_cache_block_size,key_cache_size,0); /* Use a small cache */
|
||||
init_key_cache(dflt_key_cache,key_cache_block_size,key_cache_size,0,0);
|
||||
if (locking)
|
||||
mi_lock_database(file,F_WRLCK);
|
||||
if (write_cacheing)
|
||||
@@ -276,7 +276,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
if (key_cacheing)
|
||||
resize_key_cache(dflt_keycache,key_cache_block_size,key_cache_size*2);
|
||||
resize_key_cache(dflt_key_cache,key_cache_block_size,key_cache_size*2,0,0);
|
||||
|
||||
if (!silent)
|
||||
printf("- Delete\n");
|
||||
@@ -829,7 +829,7 @@ reads: %10lu\n",
|
||||
my_cache_r_requests, my_cache_read);
|
||||
#endif
|
||||
}
|
||||
end_key_cache(*dflt_keycache,1);
|
||||
end_key_cache(dflt_key_cache,1);
|
||||
if (blob_buffer)
|
||||
my_free(blob_buffer,MYF(0));
|
||||
my_end(silent ? MY_CHECK_ERROR : MY_CHECK_ERROR | MY_GIVE_INFO);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user