mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
5ad477f6cb
Abort mysqld if Maria engine didn't start and we are using Maria for temporary tables Fixed bug that caused update of big blobs to crash Use pagecache_page_no_t as type for pages (to get rid of compiler warnings) Added cast to get rid of compiler warning Fixed wrong types of variables and arguments that caused lost information Fixed wrong DBUG_ASSERT() that caused REDO of big blobs to fail Removed some historical ifdefs that caused problem with windows compilations BUILD/SETUP.sh: Added --with-maria-tmp-tables include/maria.h: Use pagecache_page_no_t as type for pages Use my_bool as parameter for 'rep_quick' option include/my_base.h: Added comment mysql-test/r/maria-big.result: Added test that uses big blobs mysql-test/t/maria-big.test: Added test that uses big blobs sql/mysqld.cc: Abort mysqld if Maria engine didn't start and we are using Maria for temporary tables sql/sql_class.h: Don't use Maria for temporary tables if --with-maria-tmp-tables is not defined sql/sql_select.cc: Don't use Maria for temporary tables if --with-maria-tmp-tables is not defined storage/maria/ha_maria.cc: Fixed compiler warnings reported by MCC - Fixed usage of wrong types that caused data loss - Changed parameter for rep_quick to my_bool - Added safe casts Fixed indentation storage/maria/ma_bitmap.c: Use pagecache_page_no_t as type for pages Fixed compiler warnings Fixed bug that caused update of big blobs to crash storage/maria/ma_blockrec.c: Use pagecache_page_no_t as type for pages Use my_bool as parameter for 'rep_quick' option Fixed compiler warnings Fixed wrong DBUG_ASSERT() storage/maria/ma_blockrec.h: Use pagecache_page_no_t as type for pages storage/maria/ma_check.c: Fixed some wrong parameters where we didn't get all bits for test_flag Changed rep_quick to be of type my_bool Use pagecache_page_no_t as type for pages Added cast's to get rid of compiler warnings Changed type of record_pos to get rid of compiler warning storage/maria/ma_create.c: Added safe cast's to get rid of compiler warnings storage/maria/ma_dynrec.c: Fixed usage of wrong type storage/maria/ma_key.c: Fixed compiler warning storage/maria/ma_key_recover.c: Use pagecache_page_no_t as type for pages storage/maria/ma_loghandler_lsn.h: Added cast's to get rid of compiler warnings storage/maria/ma_page.c: Changed variable name from 'page' to 'pos' as it was an offset and not a page address Moved page_size inside block to get rid of compiler warning storage/maria/ma_pagecache.c: Fixed compiler warnings Replaced compile time assert with TODO storage/maria/ma_pagecache.h: Use pagecache_page_no_t as type for pages storage/maria/ma_pagecrc.c: Allow bitmap pages that is all zero storage/maria/ma_preload.c: Added cast to get rid of compiler warning storage/maria/ma_recovery.c: Changed types to get rid of compiler warnings Use bool for quick_repair to get rid of compiler warning Fixed some variables that was wrongly declared (not enough precission) Added cast to get rid of compiler warning storage/maria/ma_test2.c: Remove historical undefs storage/maria/maria_chk.c: Changed rep_quick to bool Fixed wrong parameter to maria_chk_data_link() storage/maria/maria_def.h: Use pagecache_page_no_t as type for pages storage/maria/maria_pack.c: Renamed isam -> maria storage/maria/plug.in: Added option --with-maria-tmp-tables storage/maria/trnman.c: Added cast to get rid of compiler warning storage/myisam/mi_test2.c: Remove historical undefs
105 lines
3.3 KiB
C
105 lines
3.3 KiB
C
/* Copyright (C) 2007 MySQL AB & Sanja Belkin
|
|
|
|
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; version 2 of the License.
|
|
|
|
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 */
|
|
|
|
#ifndef _ma_loghandler_lsn_h
|
|
#define _ma_loghandler_lsn_h
|
|
|
|
/*
|
|
Transaction log record address:
|
|
file_no << 32 | offset
|
|
file_no is only 3 bytes so we can use signed integer to make
|
|
comparison simpler.
|
|
*/
|
|
typedef int64 TRANSLOG_ADDRESS;
|
|
|
|
/*
|
|
Compare addresses
|
|
A1 > A2 -> result > 0
|
|
A1 == A2 -> 0
|
|
A1 < A2 -> result < 0
|
|
*/
|
|
#define cmp_translog_addr(A1,A2) ((A1) - (A2))
|
|
|
|
/*
|
|
TRANSLOG_ADDRESS is just address of some byte in the log (usually some
|
|
chunk)
|
|
LSN used where address of some record in the log needed (not just any
|
|
address)
|
|
*/
|
|
typedef TRANSLOG_ADDRESS LSN;
|
|
|
|
/* Gets file number part of a LSN/log address */
|
|
#define LSN_FILE_NO(L) (uint32) ((L) >> 32)
|
|
|
|
/* Gets raw file number part of a LSN/log address */
|
|
#define LSN_FILE_NO_PART(L) ((L) & ((int64)0xFFFFFF00000000LL))
|
|
|
|
/* Parts of LSN for printing */
|
|
#define LSN_IN_PARTS(L) (ulong)LSN_FILE_NO(L),(ulong)LSN_OFFSET(L)
|
|
|
|
/* Gets record offset of a LSN/log address */
|
|
#define LSN_OFFSET(L) (ulong) ((L) & 0xFFFFFFFFL)
|
|
|
|
/* Makes lsn/log address from file number and record offset */
|
|
#define MAKE_LSN(F,S) ((LSN) ((((uint64)(F)) << 32) | (S)))
|
|
|
|
/* checks LSN */
|
|
#define LSN_VALID(L) \
|
|
((LSN_FILE_NO_PART(L) != FILENO_IMPOSSIBLE) && \
|
|
(LSN_OFFSET(L) != LOG_OFFSET_IMPOSSIBLE))
|
|
|
|
/* size of stored LSN on a disk, don't change it! */
|
|
#define LSN_STORE_SIZE 7
|
|
|
|
/* Puts LSN into buffer (dst) */
|
|
#define lsn_store(dst, lsn) \
|
|
do { \
|
|
int3store((dst), LSN_FILE_NO(lsn)); \
|
|
int4store((char*)(dst) + 3, LSN_OFFSET(lsn)); \
|
|
} while (0)
|
|
|
|
/* Unpacks LSN from the buffer (P) */
|
|
#define lsn_korr(P) MAKE_LSN(uint3korr(P), uint4korr((char*)(P) + 3))
|
|
|
|
/* what we need to add to LSN to increase it on one file */
|
|
#define LSN_ONE_FILE ((int64)0x100000000LL)
|
|
|
|
#define LSN_REPLACE_OFFSET(L, S) (LSN_FILE_NO_PART(L) | (S))
|
|
|
|
/*
|
|
an 8-byte type whose most significant uchar is used for "flags"; 7
|
|
other bytes are a LSN.
|
|
*/
|
|
typedef LSN LSN_WITH_FLAGS;
|
|
#define LSN_WITH_FLAGS_TO_LSN(x) (x & ULL(0x00FFFFFFFFFFFFFF))
|
|
#define LSN_WITH_FLAGS_TO_FLAGS(x) (x & ULL(0xFF00000000000000))
|
|
|
|
#define FILENO_IMPOSSIBLE 0 /**< log file's numbering starts at 1 */
|
|
#define LOG_OFFSET_IMPOSSIBLE 0 /**< log always has a header */
|
|
#define LSN_IMPOSSIBLE ((LSN)0)
|
|
/* following LSN also is impossible */
|
|
#define LSN_ERROR ((LSN)1)
|
|
|
|
/** @brief some impossible LSN serve as markers */
|
|
#define LSN_REPAIRED_BY_MARIA_CHK ((LSN)2)
|
|
|
|
/**
|
|
@brief the maximum valid LSN.
|
|
Unlike ULONGLONG_MAX, it can be safely used in comparison with valid LSNs
|
|
(ULONGLONG_MAX is too big for correctness of cmp_translog_addr()).
|
|
*/
|
|
#define LSN_MAX (LSN)ULL(0x00FFFFFFFFFFFFFF)
|
|
|
|
#endif
|