MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ndbjtie_lib.cpp
1 /*
2  Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; version 2 of the License.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; if not, write to the Free Software
15  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 /*
18  * ndbjtie_lib.cpp
19  */
20 
21 // libraries
22 #include "helpers.hpp"
23 
24 // global jtie library definitions
25 #include "jtie.hpp"
26 #include "jtie_lib.hpp"
27 
28 // ndb client library initialization
29 #include "ndb_init.h"
30 #include "CharsetMap.hpp"
31 
32 // global ndb client library definitions
33 #include "mysql_utils_jtie.hpp"
34 #include "mgmapi_jtie.hpp"
35 #include "ndbapi_jtie.hpp"
36 
37 // ---------------------------------------------------------------------------
38 // API Global Symbol Definitions & Template Instantiations
39 // ---------------------------------------------------------------------------
40 
41 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_m_CharsetMap,
42  "com/mysql/ndbjtie/mysql/CharsetMap")
43 
44 // ---------------------------------------------------------------------------
45 
46 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_Ndb,
47  "com/mysql/ndbjtie/ndbapi/Ndb")
48 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbBlob,
49  "com/mysql/ndbjtie/ndbapi/NdbBlob")
50 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary,
51  "com/mysql/ndbjtie/ndbapi/NdbDictionary")
52 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_AutoGrowSpecification,
53  "com/mysql/ndbjtie/ndbapi/NdbDictionary$AutoGrowSpecification")
54 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Column,
55  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Column")
56 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Datafile,
57  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Datafile")
58 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Dictionary,
59  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Dictionary")
60 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_DictionaryConst_List,
61  "com/mysql/ndbjtie/ndbapi/NdbDictionary$DictionaryConst$List")
62 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_DictionaryConst_ListConst_Element,
63  "com/mysql/ndbjtie/ndbapi/NdbDictionary$DictionaryConst$ListConst$Element")
64 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_DictionaryConst_ListConst_ElementArray,
65  "com/mysql/ndbjtie/ndbapi/NdbDictionary$DictionaryConst$ListConst$ElementArray")
66 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Event,
67  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Event")
68 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Index,
69  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Index")
70 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_LogfileGroup,
71  "com/mysql/ndbjtie/ndbapi/NdbDictionary$LogfileGroup")
72 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Object,
73  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Object")
74 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_ObjectId,
75  "com/mysql/ndbjtie/ndbapi/NdbDictionary$ObjectId")
76 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_OptimizeIndexHandle,
77  "com/mysql/ndbjtie/ndbapi/NdbDictionary$OptimizeIndexHandle")
78 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_OptimizeTableHandle,
79  "com/mysql/ndbjtie/ndbapi/NdbDictionary$OptimizeTableHandle")
80 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_RecordSpecification,
81  "com/mysql/ndbjtie/ndbapi/NdbDictionary$RecordSpecification")
82 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_RecordSpecificationArray,
83  "com/mysql/ndbjtie/ndbapi/NdbDictionary$RecordSpecificationArray")
84 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Table,
85  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Table")
86 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Tablespace,
87  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Tablespace")
88 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbDictionary_Undofile,
89  "com/mysql/ndbjtie/ndbapi/NdbDictionary$Undofile")
90 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbError,
91  "com/mysql/ndbjtie/ndbapi/NdbError")
92 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbEventOperation,
93  "com/mysql/ndbjtie/ndbapi/NdbEventOperation")
94 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbIndexOperation,
95  "com/mysql/ndbjtie/ndbapi/NdbIndexOperation")
96 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbIndexScanOperation,
97  "com/mysql/ndbjtie/ndbapi/NdbIndexScanOperation")
98 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbIndexScanOperation_IndexBound,
99  "com/mysql/ndbjtie/ndbapi/NdbIndexScanOperation$IndexBound")
100 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbInterpretedCode,
101  "com/mysql/ndbjtie/ndbapi/NdbInterpretedCode")
102 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbLockHandle,
103  "com/mysql/ndbjtie/ndbapi/NdbLockHandle")
104 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbOperation,
105  "com/mysql/ndbjtie/ndbapi/NdbOperation")
106 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbOperation_GetValueSpec,
107  "com/mysql/ndbjtie/ndbapi/NdbOperation$GetValueSpec")
108 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbOperation_GetValueSpecArray,
109  "com/mysql/ndbjtie/ndbapi/NdbOperation$GetValueSpecArray")
110 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbOperation_OperationOptions,
111  "com/mysql/ndbjtie/ndbapi/NdbOperation$OperationOptions")
112 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbOperation_SetValueSpec,
113  "com/mysql/ndbjtie/ndbapi/NdbOperation$SetValueSpec")
114 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbOperation_SetValueSpecArray,
115  "com/mysql/ndbjtie/ndbapi/NdbOperation$SetValueSpecArray")
116 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbRecAttr,
117  "com/mysql/ndbjtie/ndbapi/NdbRecAttr")
118 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbRecord,
119  "com/mysql/ndbjtie/ndbapi/NdbRecord")
120 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbScanFilter,
121  "com/mysql/ndbjtie/ndbapi/NdbScanFilter")
122 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbScanOperation,
123  "com/mysql/ndbjtie/ndbapi/NdbScanOperation")
124 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbScanOperation_ScanOptions,
125  "com/mysql/ndbjtie/ndbapi/NdbScanOperation$ScanOptions")
126 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_NdbTransaction,
127  "com/mysql/ndbjtie/ndbapi/NdbTransaction")
128 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_Ndb_Key_part_ptr,
129  "com/mysql/ndbjtie/ndbapi/Ndb$Key_part_ptr")
130 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_Ndb_Key_part_ptrArray,
131  "com/mysql/ndbjtie/ndbapi/Ndb$Key_part_ptrArray")
132 JTIE_INSTANTIATE_PEER_CLASS_MAPPING(c_m_n_n_Ndb_cluster_connection,
133  "com/mysql/ndbjtie/ndbapi/Ndb_cluster_connection")
134 
135 // ---------------------------------------------------------------------------
136 
137 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbBlob::State)
138 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Object::Status)
139 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Object::Type)
140 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Object::State)
141 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Object::Store)
142 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Object::FragmentType)
143 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Column::Type)
144 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Column::ArrayType)
145 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Column::StorageType)
146 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Table::SingleUserMode)
147 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Index::Type)
148 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Event::TableEvent)
149 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Event::EventDurability)
150 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::Event::EventReport)
151 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::NdbRecordFlags)
152 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbDictionary::RecordType)
153 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbError::Status)
154 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbError::Classification)
155 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbEventOperation::State)
156 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbIndexScanOperation::BoundType)
157 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbOperation::Type)
158 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbOperation::LockMode)
159 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbOperation::AbortOption)
160 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbOperation::OperationOptions::Flags)
161 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbScanFilter::Group)
162 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbScanFilter::BinaryCondition)
163 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbScanFilter::Error)
164 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbScanOperation::ScanFlag)
165 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbScanOperation::ScanOptions::Type)
166 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbTransaction::ExecType)
167 JTIE_INSTANTIATE_JINT_ENUM_TYPE_MAPPING(NdbTransaction::CommitStatusType)
168 
169 // ---------------------------------------------------------------------------
170 // Library Load and Unload Handlers
171 // ---------------------------------------------------------------------------
172 
173 // initialize the NDB interface and JTie resources
174 // called when the native library is loaded; returns the JNI version
175 // needed by the native library or JNI_ERR.
176 JNIEXPORT jint JNICALL
177 JNI_OnLoad(JavaVM * jvm, void * reserved)
178 {
179  TRACE("jint JNI_OnLoad(JavaVM *, void *)");
180  VERBOSE("loading the NDB JTie library ...");
181 
182  const jint required_jni_version = JTie_OnLoad(jvm, reserved);
183  if (required_jni_version == JNI_ERR) {
184  PRINT_ERROR("JTie_OnLoad() returned: JNI_ERR");
185  return JNI_ERR;
186  }
187 
188  VERBOSE("initializing the NDBAPI resources ...");
189  int stat = ndb_init();
190  if (stat != 0) {
191  PRINT_ERROR_CODE("ndb_init() returned: ", stat);
192  return JNI_ERR;
193  }
194  VERBOSE("... initialized the NDBAPI resources");
195 
196  VERBOSE("initializing the MySQL Utilities resources ...");
197  // XXX add a return status to init_global_charset_map()
198  //int stat = init_global_charset_map();
200  //if (stat != 0) {
201  // PRINT_ERROR_CODE("init_global_charset_map() returned: ", stat);
202  // return JNI_ERR;
203  //}
204  VERBOSE("... initialized the MySQL Utilities resources");
205 
206  VERBOSE("... loaded the NDB JTie library");
207  return required_jni_version;
208 }
209 
210 // called when the class loader containing the native library is garbage
211 // collected; called in an unknown context (such as from a finalizer):
212 // be conservative, and refrain from arbitrary Java call-backs.
213 JNIEXPORT void JNICALL
214 JNI_OnUnload(JavaVM * jvm, void * reserved)
215 {
216  TRACE("void JNI_OnUnload(JavaVM *, void *)");
217  VERBOSE("unloading the NDB JTie library...");
218 
219  VERBOSE("releasing the MySQL Utilities resources ...");
221  VERBOSE("... released the MySQL Utilities resources");
222 
223  VERBOSE("releasing NDBAPI resources ...");
224  ndb_end(0);
225  VERBOSE("... released NDBAPI resources");
226 
227  JTie_OnUnload(jvm, reserved);
228 
229  VERBOSE("... unloaded the NDB JTie library");
230 }
231 
232 // ---------------------------------------------------------------------------