mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge 4.1 to 5.0
This commit is contained in:
commit
6e717133c5
270 changed files with 4938 additions and 2632 deletions
|
@ -380,6 +380,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 +390,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
|
||||
|
@ -644,5 +646,3 @@ vio/test-ssl
|
|||
vio/test-sslclient
|
||||
vio/test-sslserver
|
||||
vio/viotest-ssl
|
||||
libmysqld/protocol_cursor.cc
|
||||
libmysqld/sp_rcontext.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"
|
||||
|
|
|
@ -51,6 +51,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-BINARY ../support-files/MacOSX/ReadMe.txt
|
||||
|
||||
CLEAN_FILES: $(BUILD_SOURCES)
|
||||
|
@ -201,10 +201,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'",
|
||||
|
|
|
@ -19,15 +19,13 @@
|
|||
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 \
|
||||
|
|
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
|
||||
|
|
|
@ -7,24 +7,24 @@
|
|||
CFG=test_libmysqld - Win32 Release
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "test_libmysqld.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "test_libmysqld.mak" CFG="test_libmysqld - Win32 Release"
|
||||
!MESSAGE
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE
|
||||
!MESSAGE "test_libmysqld - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# 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 };
|
||||
|
|
142
client/mysql.cc
142
client/mysql.cc
|
@ -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}
|
||||
};
|
||||
|
||||
|
@ -706,7 +709,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case 'A':
|
||||
rehash= 0;
|
||||
break;
|
||||
|
@ -1621,7 +1624,8 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
|||
char buff[200], time_buff[32], *pos;
|
||||
MYSQL_RES *result;
|
||||
ulong timer, warnings;
|
||||
uint error=0;
|
||||
uint error= 0;
|
||||
int err= 0;
|
||||
|
||||
if (!status.batch)
|
||||
{
|
||||
|
@ -1665,79 +1669,84 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
|||
buffer->length(0); // Remove query on error
|
||||
return error;
|
||||
}
|
||||
|
||||
error=0;
|
||||
buffer->length(0);
|
||||
|
||||
if (quick)
|
||||
do
|
||||
{
|
||||
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
|
||||
return put_error(&mysql);
|
||||
}
|
||||
else
|
||||
{
|
||||
error= mysql_store_result_for_lazy(&result);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
if (verbose >= 3 || !opt_silent)
|
||||
mysql_end_timer(timer,time_buff);
|
||||
else
|
||||
time_buff[0]=0;
|
||||
if (result)
|
||||
{
|
||||
if (!mysql_num_rows(result) && ! quick)
|
||||
if (quick)
|
||||
{
|
||||
strmov(buff, "Empty set");
|
||||
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
|
||||
return put_error(&mysql);
|
||||
}
|
||||
else
|
||||
{
|
||||
init_pager();
|
||||
if (opt_html)
|
||||
print_table_data_html(result);
|
||||
else if (opt_xml)
|
||||
print_table_data_xml(result);
|
||||
else if (vertical)
|
||||
print_table_data_vertically(result);
|
||||
else if (opt_silent && verbose <= 2 && !output_tables)
|
||||
print_tab_data(result);
|
||||
else
|
||||
print_table_data(result);
|
||||
sprintf(buff,"%ld %s in set",
|
||||
(long) mysql_num_rows(result),
|
||||
(long) mysql_num_rows(result) == 1 ? "row" : "rows");
|
||||
end_pager();
|
||||
error= mysql_store_result_for_lazy(&result);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
}
|
||||
else if (mysql_affected_rows(&mysql) == ~(ulonglong) 0)
|
||||
strmov(buff,"Query OK");
|
||||
else
|
||||
sprintf(buff,"Query OK, %ld %s affected",
|
||||
(long) mysql_affected_rows(&mysql),
|
||||
(long) mysql_affected_rows(&mysql) == 1 ? "row" : "rows");
|
||||
|
||||
pos=strend(buff);
|
||||
if ((warnings= mysql_warning_count(&mysql)))
|
||||
{
|
||||
*pos++= ',';
|
||||
*pos++= ' ';
|
||||
pos=int2str(warnings, pos, 10);
|
||||
pos=strmov(pos, " warning");
|
||||
if (warnings != 1)
|
||||
*pos++= 's';
|
||||
}
|
||||
strmov(pos, time_buff);
|
||||
put_info(buff,INFO_RESULT);
|
||||
if (mysql_info(&mysql))
|
||||
put_info(mysql_info(&mysql),INFO_RESULT);
|
||||
put_info("",INFO_RESULT); // Empty row
|
||||
if (verbose >= 3 || !opt_silent)
|
||||
mysql_end_timer(timer,time_buff);
|
||||
else
|
||||
time_buff[0]=0;
|
||||
if (result)
|
||||
{
|
||||
if (!mysql_num_rows(result) && ! quick)
|
||||
{
|
||||
strmov(buff, "Empty set");
|
||||
}
|
||||
else
|
||||
{
|
||||
init_pager();
|
||||
if (opt_html)
|
||||
print_table_data_html(result);
|
||||
else if (opt_xml)
|
||||
print_table_data_xml(result);
|
||||
else if (vertical)
|
||||
print_table_data_vertically(result);
|
||||
else if (opt_silent && verbose <= 2 && !output_tables)
|
||||
print_tab_data(result);
|
||||
else
|
||||
print_table_data(result);
|
||||
sprintf(buff,"%ld %s in set",
|
||||
(long) mysql_num_rows(result),
|
||||
(long) mysql_num_rows(result) == 1 ? "row" : "rows");
|
||||
end_pager();
|
||||
}
|
||||
}
|
||||
else if (mysql_affected_rows(&mysql) == ~(ulonglong) 0)
|
||||
strmov(buff,"Query OK");
|
||||
else
|
||||
sprintf(buff,"Query OK, %ld %s affected",
|
||||
(long) mysql_affected_rows(&mysql),
|
||||
(long) mysql_affected_rows(&mysql) == 1 ? "row" : "rows");
|
||||
|
||||
if (result && !mysql_eof(result)) /* Something wrong when using quick */
|
||||
pos=strend(buff);
|
||||
if ((warnings= mysql_warning_count(&mysql)))
|
||||
{
|
||||
*pos++= ',';
|
||||
*pos++= ' ';
|
||||
pos=int2str(warnings, pos, 10);
|
||||
pos=strmov(pos, " warning");
|
||||
if (warnings != 1)
|
||||
*pos++= 's';
|
||||
}
|
||||
strmov(pos, time_buff);
|
||||
put_info(buff,INFO_RESULT);
|
||||
if (mysql_info(&mysql))
|
||||
put_info(mysql_info(&mysql),INFO_RESULT);
|
||||
put_info("",INFO_RESULT); // Empty row
|
||||
|
||||
if (result && !mysql_eof(result)) /* Something wrong when using quick */
|
||||
error= put_error(&mysql);
|
||||
else if (unbuffered)
|
||||
fflush(stdout);
|
||||
mysql_free_result(result);
|
||||
} while (!(err= mysql_next_result(&mysql)));
|
||||
if (err >= 1)
|
||||
error= put_error(&mysql);
|
||||
else if (unbuffered)
|
||||
fflush(stdout);
|
||||
mysql_free_result(result);
|
||||
|
||||
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);
|
||||
|
@ -398,9 +414,11 @@ static int parse_args(int *argc, char*** argv)
|
|||
static MYSQL* safe_connect()
|
||||
{
|
||||
MYSQL *local_mysql = mysql_init(NULL);
|
||||
if(!local_mysql)
|
||||
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,9 +1563,9 @@ 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,
|
||||
con_user, con_pass,
|
||||
con_db, con_port, con_sock ? con_sock: 0)))
|
||||
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,
|
||||
mysql_error(&next_con->mysql));
|
||||
|
||||
|
@ -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\
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
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,
|
||||
unsigned int fields);
|
||||
MYSQL_RES * (STDCALL *use_result)(MYSQL *mysql);
|
||||
void (STDCALL *fetch_lengths)(unsigned long *to,
|
||||
MYSQL_ROW column, unsigned int field_count);
|
||||
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 *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
|
||||
unsigned int fields);
|
||||
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 */
|
||||
|
|
|
@ -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,37 @@
|
|||
#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_WARN_HOSTNAME_WONT_WORK 1284
|
||||
#define ER_SP_NO_RECURSIVE_CREATE 1285
|
||||
#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_BADSTATEMENT 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_SP_DOES_NOT_EXIST 1287
|
||||
#define ER_SP_DROP_FAILED 1288
|
||||
#define ER_SP_STORE_FAILED 1289
|
||||
#define ER_SP_LILABEL_MISMATCH 1290
|
||||
#define ER_SP_LABEL_REDEFINE 1291
|
||||
#define ER_SP_LABEL_MISMATCH 1292
|
||||
#define ER_SP_UNINIT_VAR 1293
|
||||
#define ER_SP_BADSELECT 1294
|
||||
#define ER_SP_BADRETURN 1295
|
||||
#define ER_SP_BADSTATEMENT 1296
|
||||
#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1297
|
||||
#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1298
|
||||
#define ER_QUERY_INTERRUPTED 1299
|
||||
#define ER_SP_WRONG_NO_OF_ARGS 1300
|
||||
#define ER_SP_COND_MISMATCH 1301
|
||||
#define ER_SP_NORETURN 1302
|
||||
#define ER_SP_NORETURNEND 1303
|
||||
#define ER_SP_BAD_CURSOR_QUERY 1304
|
||||
#define ER_SP_BAD_CURSOR_SELECT 1305
|
||||
#define ER_SP_CURSOR_MISMATCH 1306
|
||||
#define ER_SP_CURSOR_ALREADY_OPEN 1307
|
||||
#define ER_SP_CURSOR_NOT_OPEN 1308
|
||||
#define ER_SP_UNDECLARED_VAR 1309
|
||||
#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1310
|
||||
#define ER_SP_FETCH_NO_DATA 1311
|
||||
#define ER_SP_DUP_PARAM 1312
|
||||
#define ER_SP_DUP_VAR 1313
|
||||
#define ER_SP_DUP_COND 1314
|
||||
#define ER_SP_DUP_CURS 1315
|
||||
#define ER_SP_CANT_ALTER 1316
|
||||
#define ER_ERROR_MESSAGES 317
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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++;
|
||||
|
||||
|
@ -2038,16 +2050,19 @@ retry:
|
|||
}
|
||||
|
||||
/* Check that the old name in the space is right */
|
||||
|
||||
ut_a(strlen(old_name) + strlen(fil_path_to_mysql_datadir)
|
||||
|
||||
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);
|
||||
srv_normalize_path_for_win(old_path);
|
||||
|
||||
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);
|
||||
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,29 +807,33 @@ static MYSQL* spawn_init(MYSQL* parent, const char* host,
|
|||
const char* passwd)
|
||||
{
|
||||
MYSQL* child;
|
||||
if (!(child = mysql_init(0)))
|
||||
return 0;
|
||||
DBUG_ENTER("spawn_init");
|
||||
if (!(child= mysql_init(0)))
|
||||
DBUG_RETURN(0);
|
||||
|
||||
child->options.user = my_strdup((user) ? user :
|
||||
(parent->user ? parent->user :
|
||||
parent->options.user), MYF(0));
|
||||
child->options.password = my_strdup((passwd) ? passwd :
|
||||
(parent->passwd ?
|
||||
parent->passwd :
|
||||
parent->options.password), MYF(0));
|
||||
child->options.port = port;
|
||||
child->options.host = my_strdup((host) ? host :
|
||||
(parent->host ?
|
||||
parent->host :
|
||||
parent->options.host), MYF(0));
|
||||
child->options.user= my_strdup((user) ? user :
|
||||
(parent->user ? parent->user :
|
||||
parent->options.user), MYF(0));
|
||||
child->options.password= my_strdup((passwd) ? passwd :
|
||||
(parent->passwd ?
|
||||
parent->passwd :
|
||||
parent->options.password), MYF(0));
|
||||
child->options.port= port;
|
||||
child->options.host= my_strdup((host) ? host :
|
||||
(parent->host ?
|
||||
parent->host :
|
||||
parent->options.host), MYF(0));
|
||||
if (parent->db)
|
||||
child->options.db = my_strdup(parent->db, MYF(0));
|
||||
child->options.db= my_strdup(parent->db, MYF(0));
|
||||
else if (parent->options.db)
|
||||
child->options.db = my_strdup(parent->options.db, MYF(0));
|
||||
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,22 +313,31 @@ 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)
|
||||
{
|
||||
ftbw->docid[0]=HA_POS_ERROR;
|
||||
ftbw->up->yweaks++;
|
||||
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;
|
||||
for (ftbe=ftbw->up; ftbe != top_ftbe; ftbe=ftbe->up)
|
||||
if (ftbe->flags & FTB_FLAG_YES)
|
||||
ftbe->yweaks++;
|
||||
ftbe=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!ftbe)
|
||||
continue;
|
||||
}
|
||||
else /* 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);
|
||||
else
|
||||
reset_tree(& ftb->no_dupes);
|
||||
}
|
||||
/* 3 */
|
||||
if (!is_tree_inited(& ftb->no_dupes))
|
||||
init_tree(& ftb->no_dupes,0,0,sizeof(my_off_t),
|
||||
_ftb_no_dupes_cmp,0,0,0);
|
||||
else
|
||||
reset_tree(& ftb->no_dupes);
|
||||
}
|
||||
|
||||
if (_ft2_search(ftb, ftbw, 1))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
@ -814,16 +816,17 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
|||
goto next;
|
||||
}
|
||||
mi_check_print_error(param,"Wrong bytesec: %d-%d-%d at linkstart: %s",
|
||||
block_info.header[0],block_info.header[1],
|
||||
block_info.header[2],
|
||||
llstr(start_block,llbuff));
|
||||
block_info.header[0],block_info.header[1],
|
||||
block_info.header[2],
|
||||
llstr(start_block,llbuff));
|
||||
goto err2;
|
||||
}
|
||||
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",
|
||||
llstr(pos,llbuff));
|
||||
mi_check_print_error(param,
|
||||
"Recordlink that points outside datafile at %s",
|
||||
llstr(pos,llbuff));
|
||||
got_error=1;
|
||||
break;
|
||||
}
|
||||
|
@ -834,9 +837,9 @@ 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,
|
||||
llstr(start_recpos,llbuff));
|
||||
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,8 +848,10 @@ 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",
|
||||
llstr(start_recpos,llbuff));
|
||||
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",
|
||||
llstr(start_recpos,llbuff));
|
||||
got_error=1; break;
|
||||
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;
|
||||
}
|
||||
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,
|
||||
|
@ -1163,7 +1173,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
|
|||
MYF(0))) ||
|
||||
!mi_alloc_rec_buff(info, -1, &sort_param.rec_buff))
|
||||
{
|
||||
mi_check_print_error(param,"Not enough memory for extra record");
|
||||
mi_check_print_error(param, "Not enough memory for extra record");
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
@ -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=
|
||||
|
@ -1834,7 +1848,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
|
|||
MYF(0))) ||
|
||||
!mi_alloc_rec_buff(info, -1, &sort_param.rec_buff))
|
||||
{
|
||||
mi_check_print_error(param,"Not enough memory for extra record");
|
||||
mi_check_print_error(param, "Not enough memory for extra record");
|
||||
goto err;
|
||||
}
|
||||
if (!rep_quick)
|
||||
|
@ -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 */
|
||||
}
|
||||
|
@ -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,17 +2284,19 @@ 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;
|
||||
/*
|
||||
+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
|
||||
is called after sort_key_read, where the comparison is performed,
|
||||
but in parallel mode master thread can call sort_key_write
|
||||
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.
|
||||
*/
|
||||
sort_info.max_records=
|
||||
/* +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
|
||||
is called after sort_key_read, where the comparison is performed,
|
||||
but in parallel mode master thread can call sort_key_write
|
||||
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. */
|
||||
((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;
|
||||
|
@ -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,9 +2866,20 @@ 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));
|
||||
DBUG_RETURN(1);
|
||||
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
|
||||
|
@ -2857,14 +2887,16 @@ static int sort_get_next_record(MI_SORT_PARAM *sort_param)
|
|||
}
|
||||
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,30 +3301,28 @@ 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;
|
||||
|
||||
/* flushing buffer */
|
||||
if ((error=sort_ft_buf_flush(sort_param)))
|
||||
return error;
|
||||
|
||||
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
|
||||
(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.
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
return -1; /* impossible */
|
||||
a_len+=val_len;
|
||||
memcpy(ft_buf->lastkey, a, a_len);
|
||||
ft_buf->buf=ft_buf->lastkey+a_len;
|
||||
/*
|
||||
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;
|
||||
} /* 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++)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
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);
|
||||
|
|
|
@ -177,7 +177,7 @@ void start_test(int id)
|
|||
exit(1);
|
||||
}
|
||||
if (key_cacheing && rnd(2) == 0)
|
||||
init_key_cache(dflt_keycache, KEY_CACHE_BLOCK_SIZE, 65536L,0);
|
||||
init_key_cache(dflt_key_cache, KEY_CACHE_BLOCK_SIZE, 65536L, 0, 0);
|
||||
printf("Process %d, pid: %d\n",id,getpid()); fflush(stdout);
|
||||
|
||||
for (error=i=0 ; i < tests && !error; i++)
|
||||
|
|
|
@ -521,7 +521,7 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||
we cannot easily dispatch an empty page here */
|
||||
b+=blen+ft2len+2;
|
||||
for (a=anc_buff+a_length ; b < a ; b+=ft2len+2)
|
||||
insert_dynamic(info->ft1_to_ft2, b);
|
||||
insert_dynamic(info->ft1_to_ft2, (char*) b);
|
||||
|
||||
/* fixing the page's length - it contains only one key now */
|
||||
mi_putint(anc_buff,2+blen+ft2len+2,0);
|
||||
|
|
|
@ -110,7 +110,8 @@ int main(int argc, char **argv)
|
|||
VOID(fflush(stderr));
|
||||
if ((check_param.error_printed | check_param.warning_printed) &&
|
||||
(check_param.testflag & T_FORCE_CREATE) &&
|
||||
(!(check_param.testflag & (T_REP | T_SORT_RECORDS | T_SORT_INDEX))))
|
||||
(!(check_param.testflag & (T_REP | T_REP_BY_SORT | T_SORT_RECORDS |
|
||||
T_SORT_INDEX))))
|
||||
{
|
||||
uint old_testflag=check_param.testflag;
|
||||
if (!(check_param.testflag & T_REP))
|
||||
|
@ -153,7 +154,7 @@ enum options_mc {
|
|||
OPT_KEY_CACHE_BLOCK_SIZE, OPT_MYISAM_BLOCK_SIZE,
|
||||
OPT_READ_BUFFER_SIZE, OPT_WRITE_BUFFER_SIZE, OPT_SORT_BUFFER_SIZE,
|
||||
OPT_SORT_KEY_BLOCKS, OPT_DECODE_BITS, OPT_FT_MIN_WORD_LEN,
|
||||
OPT_FT_MAX_WORD_LEN, OPT_FT_MAX_WORD_LEN_FOR_SORT
|
||||
OPT_FT_MAX_WORD_LEN, OPT_FT_MAX_WORD_LEN_FOR_SORT, OPT_MAX_RECORD_LENGTH
|
||||
};
|
||||
|
||||
static struct my_option my_long_options[] =
|
||||
|
@ -215,6 +216,11 @@ static struct my_option my_long_options[] =
|
|||
(gptr*) &check_param.keys_in_use,
|
||||
(gptr*) &check_param.keys_in_use,
|
||||
0, GET_ULL, REQUIRED_ARG, -1, 0, 0, 0, 0, 0},
|
||||
{"max-record-length", OPT_MAX_RECORD_LENGTH,
|
||||
"Skip rows bigger than this if myisamchk can't allocate memory to hold it",
|
||||
(gptr*) &check_param.max_record_length,
|
||||
(gptr*) &check_param.max_record_length,
|
||||
0, GET_ULL, REQUIRED_ARG, LONGLONG_MAX, 0, LONGLONG_MAX, 0, 0, 0},
|
||||
{"medium-check", 'm',
|
||||
"Faster than extend-check, but only finds 99.99% of all errors. Should be good enough for most cases.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
@ -321,13 +327,13 @@ static struct my_option my_long_options[] =
|
|||
{ "ft_max_word_len", OPT_FT_MAX_WORD_LEN, "", (gptr*) &ft_max_word_len,
|
||||
(gptr*) &ft_max_word_len, 0, GET_ULONG, REQUIRED_ARG, HA_FT_MAXLEN, 10,
|
||||
HA_FT_MAXLEN, 0, 1, 0},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
||||
static void print_version(void)
|
||||
{
|
||||
printf("%s Ver 2.6 for %s at %s\n", my_progname, SYSTEM_TYPE,
|
||||
printf("%s Ver 2.7 for %s at %s\n", my_progname, SYSTEM_TYPE,
|
||||
MACHINE_TYPE);
|
||||
}
|
||||
|
||||
|
@ -394,6 +400,9 @@ static void usage(void)
|
|||
-k, --keys-used=# Tell MyISAM to update only some specific keys. # is a\n\
|
||||
bit mask of which keys to use. This can be used to\n\
|
||||
get faster inserts.\n\
|
||||
--max-record-length=#\n\
|
||||
Skip rows bigger than this if myisamchk can't allocate\n\
|
||||
memory to hold it.\n\
|
||||
-r, --recover Can fix almost anything except unique keys that aren't\n\
|
||||
unique.\n\
|
||||
-n, --sort-recover Forces recovering with sorting even if the temporary\n\
|
||||
|
@ -1032,8 +1041,8 @@ static int myisamchk(MI_CHECK *param, my_string filename)
|
|||
!(param->testflag & (T_FAST | T_FORCE_CREATE)))
|
||||
{
|
||||
if (param->testflag & (T_EXTEND | T_MEDIUM))
|
||||
VOID(init_key_cache(dflt_keycache,opt_key_cache_block_size,
|
||||
param->use_buffers,&dflt_key_cache_var));
|
||||
VOID(init_key_cache(dflt_key_cache,opt_key_cache_block_size,
|
||||
param->use_buffers, 0, 0));
|
||||
VOID(init_io_cache(¶m->read_cache,datafile,
|
||||
(uint) param->read_buffer_length,
|
||||
READ_CACHE,
|
||||
|
@ -1047,7 +1056,7 @@ static int myisamchk(MI_CHECK *param, my_string filename)
|
|||
HA_OPTION_COMPRESS_RECORD)) ||
|
||||
(param->testflag & (T_EXTEND | T_MEDIUM)))
|
||||
error|=chk_data_link(param, info, param->testflag & T_EXTEND);
|
||||
error|=flush_blocks(param, *share->key_cache, share->kfile);
|
||||
error|=flush_blocks(param, share->key_cache, share->kfile);
|
||||
VOID(end_io_cache(¶m->read_cache));
|
||||
}
|
||||
if (!error)
|
||||
|
@ -1456,8 +1465,8 @@ static int mi_sort_records(MI_CHECK *param,
|
|||
if (share->state.key_root[sort_key] == HA_OFFSET_ERROR)
|
||||
DBUG_RETURN(0); /* Nothing to do */
|
||||
|
||||
init_key_cache(dflt_keycache, opt_key_cache_block_size, param->use_buffers,
|
||||
&dflt_key_cache_var);
|
||||
init_key_cache(dflt_key_cache, opt_key_cache_block_size, param->use_buffers,
|
||||
0, 0);
|
||||
if (init_io_cache(&info->rec_cache,-1,(uint) param->write_buffer_length,
|
||||
WRITE_CACHE,share->pack.header_length,1,
|
||||
MYF(MY_WME | MY_WAIT_IF_FULL)))
|
||||
|
@ -1571,7 +1580,7 @@ err:
|
|||
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
|
||||
sort_info.buff=0;
|
||||
share->state.sortkey=sort_key;
|
||||
DBUG_RETURN(flush_blocks(param, *share->key_cache, share->kfile) |
|
||||
DBUG_RETURN(flush_blocks(param, share->key_cache, share->kfile) |
|
||||
got_error);
|
||||
} /* sort_records */
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ typedef struct st_mi_isam_share { /* Shared between opens */
|
|||
char *data_file_name, /* Resolved path names from symlinks */
|
||||
*index_file_name;
|
||||
byte *file_map; /* mem-map of file if possible */
|
||||
KEY_CACHE_HANDLE *key_cache; /* ref to the current key cache */
|
||||
KEY_CACHE *key_cache; /* ref to the current key cache */
|
||||
MI_DECODE_TREE *decode_trees;
|
||||
uint16 *decode_tables;
|
||||
int (*read_record)(struct st_myisam_info*, my_off_t, byte*);
|
||||
|
@ -713,7 +713,7 @@ int thr_write_keys(MI_SORT_PARAM *sort_param);
|
|||
#ifdef THREAD
|
||||
pthread_handler_decl(thr_find_all_keys,arg);
|
||||
#endif
|
||||
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);
|
||||
|
||||
int sort_write_record(MI_SORT_PARAM *sort_param);
|
||||
int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, ulong);
|
||||
|
|
|
@ -71,7 +71,7 @@ static void printf_log(const char *str,...);
|
|||
static bool cmp_filename(struct file_info *file_info,my_string name);
|
||||
|
||||
static uint verbose=0,update=0,test_info=0,max_files=0,re_open_count=0,
|
||||
recover=0,prefix_remove=0,opt_processes=0,opt_myisam_with_debug=0;
|
||||
recover=0,prefix_remove=0,opt_processes=0;
|
||||
static my_string log_filename=0,filepath=0,write_filename=0,record_pos_file=0;
|
||||
static ulong com_count[10][3],number_of_commands=(ulong) ~0L,
|
||||
isamlog_process;
|
||||
|
@ -201,9 +201,6 @@ static void get_options(register int *argc, register char ***argv)
|
|||
update=1;
|
||||
recover++;
|
||||
break;
|
||||
case 'D':
|
||||
opt_myisam_with_debug=1;
|
||||
break;
|
||||
case 'P':
|
||||
opt_processes=1;
|
||||
break;
|
||||
|
@ -333,8 +330,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 &&
|
||||
|
@ -648,7 +645,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)));
|
||||
|
@ -668,7 +665,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)));
|
||||
|
|
|
@ -51,7 +51,7 @@ struct st_file_buffer {
|
|||
char *buffer,*pos,*end;
|
||||
my_off_t pos_in_file;
|
||||
int bits;
|
||||
uint byte;
|
||||
uint current_byte;
|
||||
};
|
||||
|
||||
struct st_huff_tree;
|
||||
|
@ -1912,7 +1912,7 @@ static void init_file_buffer(File file, pbool read_buffer)
|
|||
file_buffer.pos=file_buffer.buffer;
|
||||
file_buffer.bits=BITS_SAVED;
|
||||
}
|
||||
file_buffer.byte=0;
|
||||
file_buffer.current_byte=0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1961,13 +1961,13 @@ static void write_bits (register ulong value, register uint bits)
|
|||
{
|
||||
if ((file_buffer.bits-=(int) bits) >= 0)
|
||||
{
|
||||
file_buffer.byte|=value << file_buffer.bits;
|
||||
file_buffer.current_byte|=value << file_buffer.bits;
|
||||
}
|
||||
else
|
||||
{
|
||||
reg3 uint byte_buff;
|
||||
bits= (uint) -file_buffer.bits;
|
||||
byte_buff=file_buffer.byte | (uint) (value >> bits);
|
||||
byte_buff=file_buffer.current_byte | (uint) (value >> bits);
|
||||
#if BITS_SAVED == 32
|
||||
*file_buffer.pos++= (byte) (byte_buff >> 24) ;
|
||||
*file_buffer.pos++= (byte) (byte_buff >> 16) ;
|
||||
|
@ -1993,7 +1993,7 @@ static void write_bits (register ulong value, register uint bits)
|
|||
if (file_buffer.pos >= file_buffer.end)
|
||||
VOID(flush_buffer((uint) ~0));
|
||||
file_buffer.bits=(int) (BITS_SAVED - bits);
|
||||
file_buffer.byte=(uint) (value << (BITS_SAVED - bits));
|
||||
file_buffer.current_byte=(uint) (value << (BITS_SAVED - bits));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -2005,7 +2005,7 @@ static void flush_bits (void)
|
|||
uint bits,byte_buff;
|
||||
|
||||
bits=(file_buffer.bits) & ~7;
|
||||
byte_buff = file_buffer.byte >> bits;
|
||||
byte_buff = file_buffer.current_byte >> bits;
|
||||
bits=BITS_SAVED - bits;
|
||||
while (bits > 0)
|
||||
{
|
||||
|
@ -2013,7 +2013,7 @@ static void flush_bits (void)
|
|||
*file_buffer.pos++= (byte) (uchar) (byte_buff >> bits) ;
|
||||
}
|
||||
file_buffer.bits=BITS_SAVED;
|
||||
file_buffer.byte=0;
|
||||
file_buffer.current_byte=0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue