1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/* Copyright (C) 2006 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; 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 */
/*
Static variables for MARIA library. All definied here for easy making of
a shared library
*/
#ifndef _global_h
#include "maria_def.h"
#include "trnman.h"
#endif
LIST *maria_open_list=0;
uchar maria_file_magic[]=
{ (uchar) 254, (uchar) 254, (uchar) 9, '\003', };
uchar maria_pack_file_magic[]=
{ (uchar) 254, (uchar) 254, (uchar) 10, '\001', };
/* Unique number for this maria instance */
uchar maria_uuid[MY_UUID_SIZE];
uint maria_quick_table_bits=9;
ulong maria_block_size= MARIA_KEY_BLOCK_LENGTH;
my_bool maria_flush= 0, maria_single_user= 0;
my_bool maria_delay_key_write= 0, maria_page_checksums= 1;
my_bool maria_inited= FALSE;
my_bool maria_in_ha_maria= FALSE; /* If used from ha_maria or not */
my_bool maria_recovery_changed_data= 0, maria_recovery_verbose= 0;
pthread_mutex_t THR_LOCK_maria;
#if defined(THREAD) && !defined(DONT_USE_RW_LOCKS)
ulong maria_concurrent_insert= 2;
#else
ulong maria_concurrent_insert= 0;
#endif
my_off_t maria_max_temp_length= MAX_FILE_SIZE;
ulong maria_bulk_insert_tree_size=8192*1024;
ulong maria_data_pointer_size= 4;
PAGECACHE maria_pagecache_var;
PAGECACHE *maria_pagecache= &maria_pagecache_var;
PAGECACHE maria_log_pagecache_var;
PAGECACHE *maria_log_pagecache= &maria_log_pagecache_var;
MY_TMPDIR *maria_tmpdir; /* Tempdir for redo */
char *maria_data_root;
HASH maria_stored_state;
int (*maria_create_trn_hook)(MARIA_HA *);
/**
@brief when transactionality does not matter we can use this transaction
Used in external programs like ma_test*, and also internally inside
libmaria when there is no transaction around and the operation isn't
transactional (CREATE/DROP/RENAME/OPTIMIZE/REPAIR).
*/
TRN dummy_transaction_object;
/* a WT_RESOURCE_TYPE for transactions waiting on a unique key conflict */
WT_RESOURCE_TYPE ma_rc_dup_unique={ wt_resource_id_memcmp, 0};
/* Enough for comparing if number is zero */
uchar maria_zero_string[]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/*
read_vec[] is used for converting between P_READ_KEY.. and SEARCH_
Position is , == , >= , <= , > , <
*/
uint32 maria_read_vec[]=
{
SEARCH_FIND, /* HA_READ_KEY_EXACT */
SEARCH_FIND | SEARCH_BIGGER, /* HA_READ_KEY_OR_NEXT */
SEARCH_FIND | SEARCH_SMALLER, /* HA_READ_KEY_OR_PREV */
SEARCH_NO_FIND | SEARCH_BIGGER, /* HA_READ_AFTER_KEY */
SEARCH_NO_FIND | SEARCH_SMALLER, /* HA_READ_BEFORE_KEY */
SEARCH_FIND | SEARCH_PART_KEY, /* HA_READ_PREFIX */
SEARCH_LAST, /* HA_READ_PREFIX_LAST */
SEARCH_LAST | SEARCH_SMALLER, /* HA_READ_PREFIX_LAST_OR_PREV */
MBR_CONTAIN, /* HA_READ_MBR_CONTAIN */
MBR_INTERSECT, /* HA_READ_MBR_INTERSECT */
MBR_WITHIN, /* HA_READ_MBR_WITHIN */
MBR_DISJOINT, /* HA_READ_MBR_DISJOINT */
MBR_EQUAL /* HA_READ_MBR_EQUAL */
};
uint32 maria_readnext_vec[]=
{
SEARCH_BIGGER, SEARCH_BIGGER, SEARCH_SMALLER, SEARCH_BIGGER, SEARCH_SMALLER,
SEARCH_BIGGER, SEARCH_SMALLER, SEARCH_SMALLER
};
static int always_valid(const char *filename __attribute__((unused)))
{
return 0;
}
int (*maria_test_invalid_symlink)(const char *filename)= always_valid;
#ifdef HAVE_PSI_INTERFACE
PSI_mutex_key ma_key_mutex_PAGECACHE_cache_lock;
static PSI_mutex_info all_mutexes[]=
{
{ &ma_key_mutex_PAGECACHE_cache_lock, "PAGECACHE::cache_lock", 0}
};
void init_aria_psi_keys()
{
const char* category= "aria";
int count;
if (PSI_server == NULL)
return;
count= array_elements(all_mutexes);
PSI_server->register_mutex(category, all_mutexes, count);
}
#endif /* HAVE_PSI_INTERFACE */
|