/**********************************************************//**
Returns the number of milliseconds since some epoch. The
value may wrap around. It should only be used for heuristic
purposes.
@return ms since epoch */
ulint
ut_time_ms(void) /*============*/
{ returnstatic_cast<ulint>(my_interval_timer() / 1000000);
} #endif/* !UNIV_INNOCHECKSUM */
/**********************************************************//**
Sprintfs a timestamp to a buffer, 13..14 chars plus terminating NUL. */ void
ut_sprintf_timestamp( /*=================*/ char* buf, /*!< in: buffer where to sprintf */
size_t buf_size) /*!< in: size of the buffer */
{ #ifdef _WIN32
SYSTEMTIME cal_tm;
GetLocalTime(&cal_tm);
/*************************************************************//**
Prints the contents of a memory buffer in hex and ascii. */ void
ut_print_buf( /*=========*/
FILE* file, /*!< in: file where to print */ constvoid* buf, /*!< in: memory buffer */
ulint len) /*!< in: length of the buffer */
{ const byte* data;
ulint i;
fprintf(file, " len " ULINTPF "; hex ", len);
for (data = (const byte*) buf, i = 0; i < len; i++) {
fprintf(file, "%02x", *data++);
}
fputs("; asc ", file);
data = (const byte*) buf;
for (i = 0; i < len; i++) { int c = (int) *data++;
putc(isprint(c) ? c : ' ', file);
}
putc(';', file);
}
/*************************************************************//**
Prints the contents of a memory buffer in hex. */ void
ut_print_buf_hex( /*=============*/
std::ostream& o, /*!< in/out: output stream */ constvoid* buf, /*!< in: memory buffer */
ulint len) /*!< in: length of the buffer */
{ const byte* data;
ulint i;
for (data = static_cast<const byte*>(buf), i = 0; i < len; i++) {
byte b = *data++;
o << hexdigit[int(b) >> 4] << hexdigit[b & 15];
}
o << ")";
}
/*************************************************************//**
Prints the contents of a memory buffer in hex and ascii. */ void
ut_print_buf( /*=========*/
std::ostream& o, /*!< in/out: output stream */ constvoid* buf, /*!< in: memory buffer */
ulint len) /*!< in: length of the buffer */
{ const byte* data;
ulint i;
for (data = static_cast<const byte*>(buf), i = 0; i < len; i++) { int c = static_cast<int>(*data++);
o << (isprint(c) ? static_cast<char>(c) : ' ');
}
ut_print_buf_hex(o, buf, len);
}
/** Get a fixed-length string, quoted as an SQL identifier. Ifthestringcontainsaslash'/',thestringwillbe outputastwoidentifiersseparatedbyaperiod(.), asinSQLdatabase_name.identifier. @param[in]trxtransaction(NULL=noquotes). @param[in]nametablename. @retvalStringquotedasanSQLidentifier.
*/
std::string
ut_get_name( const trx_t* trx, constchar* name)
{ /* 2 * NAME_LEN for database and table name,
and some slack for the #mysql50# prefix and quotes */ char buf[3 * NAME_LEN]; constchar* bufend;
/**********************************************************************//**
Outputs a fixed-length string, quoted as an SQL identifier. If the string contains a slash '/', the string will be
output as two identifiers separated by a period (.),
as in SQL database_name.identifier. */ void
ut_print_name( /*==========*/
FILE* f, /*!< in: output stream */ const trx_t* trx, /*!< in: transaction */ constchar* name) /*!< in: name to print */
{ /* 2 * NAME_LEN for database and table name,
and some slack for the #mysql50# prefix and quotes */ char buf[3 * NAME_LEN]; constchar* bufend;
/**********************************************************************//**
Catenate files. */ void
ut_copy_file( /*=========*/
FILE* dest, /*!< in: output file */
FILE* src) /*!< in: input file to be appended to output */
{ long len = ftell(src); char buf[4096];
rewind(src); do {
size_t maxs = len < (long) sizeof buf
? (size_t) len
: sizeof buf;
size_t size = fread(buf, 1, maxs, src); if (fwrite(buf, 1, size, dest) != size) {
perror("fwrite");
}
len -= (long) size; if (size < maxs) { break;
}
} while (len > 0);
}
/** Convert an error number to a human readable text message. Thereturnedstringisstaticandshouldnotbefreedormodified. @param[in]numInnoDBinternalerrornumber
@return string, describing the error */ constchar*
ut_strerr(
dberr_t num)
{ switch (num) { case DB_SUCCESS: return("Success"); case DB_SUCCESS_LOCKED_REC: return("Success, record lock created"); case DB_ERROR: return("Generic error"); case DB_READ_ONLY: return("Read only transaction"); case DB_INTERRUPTED: return("Operation interrupted"); case DB_OUT_OF_MEMORY: return("Cannot allocate memory"); case DB_OUT_OF_FILE_SPACE: return("Out of disk space"); case DB_LOCK_WAIT: return("Lock wait"); case DB_DEADLOCK: return("Deadlock"); case DB_RECORD_CHANGED: return("Record changed"); #ifdef WITH_WSREP case DB_ROLLBACK: return("Rollback"); #endif case DB_DUPLICATE_KEY: return("Duplicate key"); case DB_MISSING_HISTORY: return("Required history data has been deleted"); case DB_TABLE_NOT_FOUND: return("Table not found"); case DB_TOO_BIG_RECORD: return("Record too big"); case DB_TOO_BIG_INDEX_COL: return("Index columns size too big"); case DB_LOCK_WAIT_TIMEOUT: return("Lock wait timeout"); case DB_NO_REFERENCED_ROW: return("Referenced key value not found"); case DB_ROW_IS_REFERENCED: return("Row is referenced"); case DB_CANNOT_ADD_CONSTRAINT: return("Cannot add constraint"); case DB_CORRUPTION: return("Data structure corruption"); case DB_CANNOT_DROP_CONSTRAINT: return("Cannot drop constraint"); case DB_TABLESPACE_EXISTS: return("Tablespace already exists"); case DB_TABLESPACE_DELETED: return("Tablespace deleted or being deleted"); case DB_TABLESPACE_NOT_FOUND: return("Tablespace not found"); case DB_LOCK_TABLE_FULL: return("Lock structs have exhausted the buffer pool"); case DB_FOREIGN_DUPLICATE_KEY: return("Foreign key activated with duplicate keys"); case DB_FOREIGN_EXCEED_MAX_CASCADE: return("Foreign key cascade delete/update exceeds max depth"); case DB_TOO_MANY_CONCURRENT_TRXS: return("Too many concurrent transactions"); case DB_UNSUPPORTED: return("Unsupported"); case DB_INVALID_NULL: return("NULL value encountered in NOT NULL column"); case DB_STATS_DO_NOT_EXIST: return("Persistent statistics do not exist"); case DB_FAIL: return("Failed, retry may succeed"); case DB_OVERFLOW: return("Overflow"); case DB_UNDERFLOW: return("Underflow"); case DB_STRONG_FAIL: return("Failed, retry will not succeed"); case DB_ZIP_OVERFLOW: return("Zip overflow"); case DB_RECORD_NOT_FOUND: return("Record not found"); case DB_CHILD_NO_INDEX: return("No index on referencing keys in referencing table"); case DB_PARENT_NO_INDEX: return("No index on referenced keys in referenced table"); case DB_FTS_INVALID_DOCID: return("FTS Doc ID cannot be zero"); case DB_INDEX_CORRUPT: return("Index corrupted"); case DB_UNDO_RECORD_TOO_BIG: return("Undo record too big"); case DB_END_OF_INDEX: return("End of index"); case DB_IO_ERROR: return("I/O error"); case DB_NOT_FOUND: return("not found"); case DB_ONLINE_LOG_TOO_BIG: return("Log size exceeded during online index creation"); case DB_IDENTIFIER_TOO_LONG: return("Identifier name is too long"); case DB_FTS_EXCEED_RESULT_CACHE_LIMIT: return("FTS query exceeds result cache limit"); case DB_TEMP_FILE_WRITE_FAIL: return("Temp file write failure"); case DB_CANT_CREATE_GEOMETRY_OBJECT: return("Can't create specified geometry data object"); case DB_CANNOT_OPEN_FILE: return("Cannot open a file"); case DB_TABLE_CORRUPT: return("Table is corrupted"); case DB_FTS_TOO_MANY_WORDS_IN_PHRASE: return("Too many words in a FTS phrase or proximity search"); case DB_DECRYPTION_FAILED: return("Table is compressed or encrypted but uncompress or decrypt failed."); case DB_IO_PARTIAL_FAILED: return("Partial IO failed"); case DB_COMPUTE_VALUE_FAILED: return("Compute generated column failed"); case DB_NO_FK_ON_S_BASE_COL: return("Cannot add foreign key on the base column " "of stored column"); case DB_IO_NO_PUNCH_HOLE: return ("File system does not support punch hole (trim) operation."); case DB_PAGE_CORRUPTED: return("Page read from tablespace is corrupted.");
/* do not add default: in order to produce a warning if new code
is added to the enum but not added here */
}
/* we abort here because if unknown error code is given, this could meanthatmemorycorruptionhashappenedandsomeone'serror-code
variable has been overwritten with bogus data */
ut_error;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.