transactd 2.4.4 → 2.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README-JA.md +3 -1
- data/README.md +3 -1
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/build/common/smart_install.cmake +1 -1
- data/build/common/system.cmake +22 -15
- data/build/common/transactd_common.cmake +2 -2
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/CMakeLists.txt +2 -2
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclrb/CMakeLists.txt +4 -4
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +49 -10
- data/source/bzs/db/engine/mysql/database.h +3 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +91 -9
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +13 -9
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +83 -15
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +15 -4
- data/source/bzs/db/protocol/tdap/tdapcapi.h +5 -4
- data/source/bzs/db/transactd/connManager.cpp +1 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +12 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2de552536553b6f1ec957ded4f1c690fe8cec516
|
4
|
+
data.tar.gz: 0ba45cc088a557220ad580c41425a71c66703090
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14aeb6ef47eac061acf54e79abe374d91b7c855bb2a2469918d78685ba652690eea12ec7d376d2931019d771e6f8415f8ec82eac5da9361f64cc927ac268fb4b
|
7
|
+
data.tar.gz: 58918f295465ee10d3cd28312133fa4018e4aae8c23f79e510a6bf800f6d5d594a094afd21878818fe775d11f1b2e8b04b96069241a6cfd57e62139f59c83965
|
data/README-JA.md
CHANGED
@@ -228,7 +228,9 @@ loose-transactd_hostcheck_username = yourUserName
|
|
228
228
|
```
|
229
229
|
を加えてください。yourUserNameは任意のユーザー名にできます。
|
230
230
|
|
231
|
-
|
231
|
+
### ファイアーウォールの設定
|
232
|
+
TransactdプラグインはデフォルトでTCPポート8610を使用します。もし、このポートが
|
233
|
+
ブロックされている場合は、クライアントホストからアクセスできるように設定します。
|
232
234
|
|
233
235
|
テストとベンチマークの起動
|
234
236
|
-------------------------------------------------------------------------------
|
data/README.md
CHANGED
@@ -229,7 +229,9 @@ loose-transactd_hostcheck_username = yourUserName
|
|
229
229
|
```
|
230
230
|
Replace yourUserName to an actual user name.
|
231
231
|
|
232
|
-
|
232
|
+
### Setting of firewall
|
233
|
+
Transactd Plugin is used TCP port 8610 as default. If this port is blocked,
|
234
|
+
please be able to access from your client host.
|
233
235
|
|
234
236
|
Execution of test and benchmark program
|
235
237
|
-------------------------------------------------------------------------------
|
data/bin/common/tdclc_32_2_4.dll
CHANGED
Binary file
|
data/bin/common/tdclc_64_2_4.dll
CHANGED
Binary file
|
@@ -112,7 +112,7 @@ macro(bz_do_smart_install_dll)
|
|
112
112
|
string(STRIP "${tmp_var}" tmp_var)
|
113
113
|
string(REGEX REPLACE "\n" ";" tmp_list "${tmp_var}")
|
114
114
|
foreach(tmp_line ${tmp_list})
|
115
|
-
message(STATUS "${tmp_line}")
|
115
|
+
#message(STATUS "${tmp_line}")
|
116
116
|
foreach(tmp_key "Installing-if-grater: " "Up-to-date-if-grater: ")
|
117
117
|
string(REGEX MATCH "${tmp_key}(.*)" tmp_filename "${tmp_line}")
|
118
118
|
string(STRIP "${tmp_filename}" tmp_filename)
|
data/build/common/system.cmake
CHANGED
@@ -50,26 +50,34 @@ if(NOT COMMAND bz_get_compiler)
|
|
50
50
|
macro(bz_get_compiler)
|
51
51
|
set(BZ_COMPILER "")
|
52
52
|
if(WIN32)
|
53
|
-
if(
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
53
|
+
if(MSVC)
|
54
|
+
if(MSVC60)
|
55
|
+
set(BZ_COMPILER "_vc60")
|
56
|
+
elseif(MSVC70)
|
57
|
+
set(BZ_COMPILER "_vc70")
|
58
|
+
elseif(MSVC80)
|
59
|
+
set(BZ_COMPILER "_vc80")
|
60
|
+
elseif(MSVC90)
|
61
|
+
set(BZ_COMPILER "_vc90")
|
62
|
+
elseif(MSVC10)
|
63
|
+
set(BZ_COMPILER "_vc100")
|
64
|
+
elseif(MSVC11)
|
65
|
+
set(BZ_COMPILER "_vc110")
|
66
|
+
elseif(MSVC12)
|
67
|
+
set(BZ_COMPILER "_vc120")
|
68
|
+
elseif(MSVC14)
|
69
|
+
set(BZ_COMPILER "_vc140")
|
70
|
+
else()
|
71
|
+
MESSAGE(FATAL_ERROR "Unknown Visual Studio version.")
|
72
|
+
endif()
|
67
73
|
elseif(MINGW)
|
68
74
|
string(REPLACE "." ";" tmp_list ${CMAKE_CXX_COMPILER_VERSION})
|
69
75
|
list (GET tmp_list 0 MINGW_MAJOR)
|
70
76
|
list (GET tmp_list 1 MINGW_MINOR)
|
71
77
|
list (GET tmp_list 2 MINGW_RELEASE)
|
72
78
|
set(BZ_COMPILER "_mgw${MINGW_MAJOR}${MINGW_MINOR}")
|
79
|
+
else()
|
80
|
+
MESSAGE(FATAL_ERROR "Unknown compiler.")
|
73
81
|
endif()
|
74
82
|
endif()
|
75
83
|
endmacro()
|
@@ -121,4 +129,3 @@ macro(bz_get_win_sysdir)
|
|
121
129
|
endif()
|
122
130
|
endmacro()
|
123
131
|
endif()
|
124
|
-
|
@@ -184,7 +184,7 @@ macro(transactd_set_MTMD MT_OR_MD)
|
|
184
184
|
string(TOUPPER "${MT_OR_MD}" MT_OR_MD)
|
185
185
|
if( (NOT ("${MT_OR_MD}" STREQUAL "MT")) AND
|
186
186
|
(NOT ("${MT_OR_MD}" STREQUAL "MD")))
|
187
|
-
message(
|
187
|
+
message(SEND_ERROR "[${MT_OR_MD}] is invalid. Please specify MT or MD.")
|
188
188
|
endif()
|
189
189
|
foreach(build_type "_RELEASE" "_DEBUG" "_RELWITHDEBINFO" "_MINSIZEREL")
|
190
190
|
set(CMAKE_CXX_FLAGS${build_type}_BEFORE_${this_target} "${CMAKE_CXX_FLAGS${build_type}}")
|
@@ -321,7 +321,7 @@ macro(transactd_link_boost_libraries boost_components)
|
|
321
321
|
endif()
|
322
322
|
|
323
323
|
transactd_has_MD_option("${CMAKE_CXX_FLAGS_${BUILD_TYPE}}")
|
324
|
-
message(STATUS "CMAKE_CXX_FLAGS_${BUILD_TYPE} = ${CMAKE_CXX_FLAGS_${BUILD_TYPE}} IS_MD=${IS_MD}")
|
324
|
+
#message(STATUS "CMAKE_CXX_FLAGS_${BUILD_TYPE} = ${CMAKE_CXX_FLAGS_${BUILD_TYPE}} IS_MD=${IS_MD}")
|
325
325
|
if ("${IS_MD}" STREQUAL "ON")
|
326
326
|
if("${BUILD_TYPE}" STREQUAL "DEBUG")
|
327
327
|
set(boost_libs_for${BT_NAME} "${Boost_LIBRARIES_STATIC_USE_RUNTIME_DEBUG}")
|
data/build/tdclc/tdclc.rc
CHANGED
@@ -29,8 +29,8 @@
|
|
29
29
|
//
|
30
30
|
|
31
31
|
VS_VERSION_INFO VERSIONINFO
|
32
|
-
FILEVERSION 2,4,
|
33
|
-
PRODUCTVERSION 2,4,
|
32
|
+
FILEVERSION 2,4,5,103
|
33
|
+
PRODUCTVERSION 2,4,5,103
|
34
34
|
FILEFLAGSMASK 0x3fL
|
35
35
|
#ifdef _DEBUG
|
36
36
|
FILEFLAGS 0x1L
|
@@ -47,9 +47,9 @@ BEGIN
|
|
47
47
|
BEGIN
|
48
48
|
VALUE "CompanyName", "BizStation Corp."
|
49
49
|
VALUE "FileDescription", "Transactd C client"
|
50
|
-
VALUE "FileVersion", "2.4.
|
50
|
+
VALUE "FileVersion", "2.4.5.103"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2014 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "2.4.
|
52
|
+
VALUE "ProductVersion", "2.4.5.103"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
@@ -49,7 +49,7 @@ elseif("${this_target}" STREQUAL "tdclcppmr")
|
|
49
49
|
set(TDCL_CPP_CHARSET m)
|
50
50
|
set(TDCL_CPP_USE_RUNTIME_LIBS ON)
|
51
51
|
else()
|
52
|
-
|
52
|
+
set(TDCL_CPP_USE_RUNTIME_LIBS OFF)
|
53
53
|
endif()
|
54
54
|
|
55
55
|
|
@@ -139,7 +139,7 @@ else()
|
|
139
139
|
LINUX)
|
140
140
|
else()
|
141
141
|
set_property(TARGET ${this_target} APPEND PROPERTY COMPILE_DEFINITIONS
|
142
|
-
WIN32 _WIN32)
|
142
|
+
WIN32 _WIN32 _SYS_TIME_H_ _GETTIMEOFDAY_DEFINED)
|
143
143
|
endif()
|
144
144
|
endif()
|
145
145
|
if(TRANSACTD_RUBY_GEM OR TRANSACTD_PHP)
|
data/build/tdclcpp/tdclcpp.rc
CHANGED
@@ -29,8 +29,8 @@
|
|
29
29
|
//
|
30
30
|
|
31
31
|
VS_VERSION_INFO VERSIONINFO
|
32
|
-
FILEVERSION 2,4,
|
33
|
-
PRODUCTVERSION 2,4,
|
32
|
+
FILEVERSION 2,4,5,103
|
33
|
+
PRODUCTVERSION 2,4,5,103
|
34
34
|
FILEFLAGSMASK 0x3fL
|
35
35
|
#ifdef _DEBUG
|
36
36
|
FILEFLAGS 0x1L
|
@@ -47,9 +47,9 @@ BEGIN
|
|
47
47
|
BEGIN
|
48
48
|
VALUE "CompanyName", "BizStation Corp."
|
49
49
|
VALUE "FileDescription", "Transactd C++ client"
|
50
|
-
VALUE "FileVersion", "2.4.
|
50
|
+
VALUE "FileVersion", "2.4.5.103"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2014 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "2.4.
|
52
|
+
VALUE "ProductVersion", "2.4.5.103"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
data/build/tdclrb/CMakeLists.txt
CHANGED
@@ -59,8 +59,8 @@ endif()
|
|
59
59
|
if("${TRANSACTD_RUBY_LIBRARY_PATH}" STREQUAL "")
|
60
60
|
set(TRANSACTD_RUBY_LIBRARY_PATH "${RUBY_LIB_PATH}")
|
61
61
|
endif()
|
62
|
-
message(STATUS " TRANSACTD_RUBY_INCLUDE_PATH ${TRANSACTD_RUBY_INCLUDE_PATH}")
|
63
|
-
message(STATUS " TRANSACTD_RUBY_LIBRARY_PATH ${TRANSACTD_RUBY_LIBRARY_PATH}")
|
62
|
+
#message(STATUS " TRANSACTD_RUBY_INCLUDE_PATH ${TRANSACTD_RUBY_INCLUDE_PATH}")
|
63
|
+
#message(STATUS " TRANSACTD_RUBY_LIBRARY_PATH ${TRANSACTD_RUBY_LIBRARY_PATH}")
|
64
64
|
set(TDCL_GEM_PREFIX "${RUBY_VERSION_FOR_GEM}")
|
65
65
|
if("${TRANSACTD_RUBY_GEM_ROOT_PATH}" STREQUAL "")
|
66
66
|
set(TRANSACTD_RUBY_GEM_ROOT_PATH "${TRANSACTD_BINARY_ROOT}")
|
@@ -69,10 +69,10 @@ endif()
|
|
69
69
|
# ==========================================================
|
70
70
|
# add library path
|
71
71
|
# ==========================================================
|
72
|
-
if(WIN32)
|
72
|
+
if(WIN32)
|
73
73
|
link_directories("${TRANSACTD_RUBY_GEM_ROOT_PATH}/bin/common")
|
74
74
|
else()
|
75
|
-
link_directories("../tdclcpp")
|
75
|
+
link_directories("../tdclcpp")
|
76
76
|
endif()
|
77
77
|
|
78
78
|
|
data/build/tdclrb/tdclrb.rc
CHANGED
@@ -29,8 +29,8 @@
|
|
29
29
|
//
|
30
30
|
|
31
31
|
VS_VERSION_INFO VERSIONINFO
|
32
|
-
FILEVERSION 2,4,
|
33
|
-
PRODUCTVERSION 2,4,
|
32
|
+
FILEVERSION 2,4,5,103
|
33
|
+
PRODUCTVERSION 2,4,5,103
|
34
34
|
FILEFLAGSMASK 0x3fL
|
35
35
|
#ifdef _DEBUG
|
36
36
|
FILEFLAGS 0x1L
|
@@ -47,9 +47,9 @@ BEGIN
|
|
47
47
|
BEGIN
|
48
48
|
VALUE "CompanyName", "BizStation Corp."
|
49
49
|
VALUE "FileDescription", "Transactd Ruby client"
|
50
|
-
VALUE "FileVersion", "2.4.
|
50
|
+
VALUE "FileVersion", "2.4.5.103"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2014 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "2.4.
|
52
|
+
VALUE "ProductVersion", "2.4.5.103"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
@@ -114,7 +114,9 @@ void tableCacheCounter::release(const std::string& dbname,
|
|
114
114
|
bool lockTable(THD* thd, TABLE* tb)
|
115
115
|
{
|
116
116
|
bool append = (thd->lock != 0);
|
117
|
-
|
117
|
+
#ifdef MARIADDB_10_1
|
118
|
+
thd->variables.option_bits |= OPTION_TABLE_LOCK;
|
119
|
+
#endif
|
118
120
|
MYSQL_LOCK* lock = mysql_lock_tables(thd, &tb, 1, 0);
|
119
121
|
if (!append)
|
120
122
|
thd->lock = lock;
|
@@ -267,10 +269,10 @@ unsigned char* database::getUserSha1Passwd(const char* host, const char* user,
|
|
267
269
|
// true ok false fail
|
268
270
|
bool database::setGrant(const char* host, const char* user)
|
269
271
|
{
|
270
|
-
bool ret = (acl_getroot(cp_security_ctx(m_thd), cp_strdup(user, MYF(0)),
|
272
|
+
bool ret = (acl_getroot(cp_security_ctx(m_thd), cp_strdup(user, MYF(0)),
|
271
273
|
cp_strdup(host, MYF(0)), cp_strdup(host, MYF(0)), (char*)m_dbname.c_str())) == false;
|
272
274
|
if (ret)
|
273
|
-
check_access(m_thd, SELECT_ACL, m_dbname.c_str(), &m_privilege, NULL, false, true);
|
275
|
+
check_access(m_thd, SELECT_ACL, m_dbname.c_str(), &m_privilege, NULL, false, true);
|
274
276
|
|
275
277
|
return ret;
|
276
278
|
}
|
@@ -279,9 +281,9 @@ bool database::setGrant(const char* host, const char* user)
|
|
279
281
|
short database::aclReload()
|
280
282
|
{
|
281
283
|
if (name() != "mysql")
|
282
|
-
return STATUS_ACCESS_DENIED;
|
283
|
-
if(!(m_privilege & GRANT_ACL))
|
284
|
-
return STATUS_ACCESS_DENIED;
|
284
|
+
return STATUS_ACCESS_DENIED;
|
285
|
+
if(!(m_privilege & GRANT_ACL))
|
286
|
+
return STATUS_ACCESS_DENIED;
|
285
287
|
short ret = STATUS_SUCCESS;
|
286
288
|
|
287
289
|
THD* thdCur = _current_thd();
|
@@ -708,9 +710,9 @@ TABLE* database::doOpenTable(const std::string& name, short mode,
|
|
708
710
|
m_thd->variables.lock_wait_timeout = OPEN_TABLE_TIMEOUT_SEC;
|
709
711
|
tables.init_one_table(m_dbname.c_str(), m_dbname.size(), name.c_str(),
|
710
712
|
name.size(), name.c_str(), TL_READ);
|
711
|
-
if(!(m_privilege & SELECT_ACL) &&
|
712
|
-
(check_grant(m_thd, SELECT_ACL, &tables, FALSE, 1, true)))
|
713
|
-
{
|
713
|
+
if(!(m_privilege & SELECT_ACL) &&
|
714
|
+
(check_grant(m_thd, SELECT_ACL, &tables, FALSE, 1, true)))
|
715
|
+
{
|
714
716
|
m_stat = STATUS_ACCESS_DENIED;
|
715
717
|
return NULL;
|
716
718
|
}
|
@@ -983,6 +985,17 @@ table::table(TABLE* myTable, database& db, const std::string& name, short mode,
|
|
983
985
|
m_nonKeySegNullFields.push_back(fd);
|
984
986
|
}
|
985
987
|
}
|
988
|
+
// Chash timestamp field
|
989
|
+
for (int i = 0; i < (int)m_table->s->fields; ++i)
|
990
|
+
{
|
991
|
+
Field* fd = m_table->field[i];
|
992
|
+
if (fd->unireg_check == Field::TIMESTAMP_UN_FIELD ||
|
993
|
+
fd->unireg_check == Field::TIMESTAMP_DNUN_FIELD ||
|
994
|
+
fd->unireg_check == Field::TIMESTAMP_DN_FIELD)
|
995
|
+
{
|
996
|
+
m_timeStampFields.push_back(fd);
|
997
|
+
}
|
998
|
+
}
|
986
999
|
}
|
987
1000
|
|
988
1001
|
table::~table()
|
@@ -2164,6 +2177,30 @@ void table::setFiledNullFlags()
|
|
2164
2177
|
}
|
2165
2178
|
}
|
2166
2179
|
|
2180
|
+
void table::setTimeStamp(bool insert)
|
2181
|
+
{
|
2182
|
+
if (m_timeStampFields.size())
|
2183
|
+
m_db.setCurTime();
|
2184
|
+
std::vector<Field*>::iterator it = m_timeStampFields.begin();
|
2185
|
+
while (it != m_timeStampFields.end())
|
2186
|
+
{
|
2187
|
+
/*if (g_timestamp_always)
|
2188
|
+
{
|
2189
|
+
if ((insert && cp_has_insert_default_function((*it))) ||
|
2190
|
+
(!insert && cp_has_update_default_function((*it))))
|
2191
|
+
(*it)->store(0.0f);
|
2192
|
+
}*/
|
2193
|
+
if (/*!(*it)->is_null() &&*/ ((*it)->val_real() == 0))
|
2194
|
+
{
|
2195
|
+
if (insert)
|
2196
|
+
cp_evaluate_insert_default_function((*it));
|
2197
|
+
else
|
2198
|
+
cp_evaluate_update_default_function((*it));
|
2199
|
+
}
|
2200
|
+
++it;
|
2201
|
+
}
|
2202
|
+
}
|
2203
|
+
|
2167
2204
|
__int64 table::insert(bool ncc)
|
2168
2205
|
{
|
2169
2206
|
if ((m_mode == TD_OPEN_READONLY) || (m_table->reginfo.lock_type < TL_WRITE))
|
@@ -2177,6 +2214,7 @@ __int64 table::insert(bool ncc)
|
|
2177
2214
|
autoincSetup setup(m_table);
|
2178
2215
|
setKeyNullFlags();
|
2179
2216
|
setFiledNullFlags();
|
2217
|
+
setTimeStamp(true /* insert */);
|
2180
2218
|
|
2181
2219
|
m_stat = m_table->file->ha_write_row(m_table->record[0]);
|
2182
2220
|
autoincValue = m_table->file->insert_id_for_cur_row;
|
@@ -2248,7 +2286,7 @@ void table::beginDel()
|
|
2248
2286
|
movePos(position(true), -1, true);
|
2249
2287
|
|
2250
2288
|
// Has blob fields then ignore conflicts.
|
2251
|
-
if ((m_table->s->blob_fields == 0) &&
|
2289
|
+
if ((m_stat == 0) && (m_table->s->blob_fields == 0) &&
|
2252
2290
|
cmp_record(m_table, record[1]))
|
2253
2291
|
m_stat = STATUS_CHANGE_CONFLICT;
|
2254
2292
|
|
@@ -2271,6 +2309,7 @@ void table::update(bool ncc)
|
|
2271
2309
|
{
|
2272
2310
|
int nullFieldsOfCurrentKey = setKeyNullFlags();
|
2273
2311
|
setFiledNullFlags();
|
2312
|
+
setTimeStamp(false /* update */);
|
2274
2313
|
m_stat = m_table->file->ha_update_row(m_table->record[1],
|
2275
2314
|
m_table->record[0]);
|
2276
2315
|
if (m_stat == 0 || (m_stat == HA_ERR_RECORD_IS_THE_SAME))
|
@@ -195,6 +195,7 @@ public:
|
|
195
195
|
}
|
196
196
|
|
197
197
|
short aclReload();
|
198
|
+
inline void setCurTime(){m_thd->set_current_time();}
|
198
199
|
|
199
200
|
static tableCacheCounter tableRef;
|
200
201
|
|
@@ -267,6 +268,7 @@ class table : private boost::noncopyable
|
|
267
268
|
String m_str;
|
268
269
|
keynumConvert m_keyconv;
|
269
270
|
IblobBuffer* m_blobBuffer;
|
271
|
+
std::vector<Field*> m_timeStampFields;
|
270
272
|
std::vector<Field*> m_nonKeySegNullFields;
|
271
273
|
unsigned int m_readCount;
|
272
274
|
unsigned int m_updCount;
|
@@ -300,6 +302,7 @@ class table : private boost::noncopyable
|
|
300
302
|
void seekPos(const uchar* pos);
|
301
303
|
int setKeyNullFlags();
|
302
304
|
void setFiledNullFlags();
|
305
|
+
void setTimeStamp(bool insert);
|
303
306
|
|
304
307
|
bookmarks* bms();
|
305
308
|
int percentage(uchar* first, uchar* last, uchar* cur);
|
@@ -45,14 +45,21 @@
|
|
45
45
|
#pragma warning(disable : 4996)
|
46
46
|
#pragma warning(disable : 4805)
|
47
47
|
#pragma warning(disable : 4005)
|
48
|
+
#pragma warning(disable : 4101)
|
48
49
|
#define NOMINMAX
|
49
50
|
#endif
|
50
51
|
#include <my_config.h>
|
51
52
|
#include <mysql_version.h>
|
52
|
-
|
53
|
-
#
|
53
|
+
|
54
|
+
#if defined(MARIADB_BASE_VERSION) && (MYSQL_VERSION_ID > 100107)
|
55
|
+
# define MARIADDB_10_1 MYSQL_VERSION_ID
|
56
|
+
#else
|
57
|
+
# if defined(MARIADB_BASE_VERSION) && (MYSQL_VERSION_ID > 100000)
|
58
|
+
# define MARIADDB_10_0 MYSQL_VERSION_ID
|
59
|
+
# endif
|
54
60
|
#endif
|
55
61
|
|
62
|
+
|
56
63
|
#include <sql/sql_const.h>
|
57
64
|
#include "my_global.h"
|
58
65
|
#include <math.h>
|
@@ -117,6 +124,7 @@ extern "C" {
|
|
117
124
|
#pragma warning(default : 4800)
|
118
125
|
#pragma warning(default : 4805)
|
119
126
|
#pragma warning(default : 4005)
|
127
|
+
#pragma warning(default : 4101)
|
120
128
|
#endif
|
121
129
|
|
122
130
|
#undef min
|
@@ -216,9 +224,56 @@ inline bool cp_thd_get_global_read_only(THD* thd)
|
|
216
224
|
inline bool cp_open_table(THD* thd, TABLE_LIST* tables,
|
217
225
|
Open_table_context* ot_act)
|
218
226
|
{
|
227
|
+
#if defined(MARIADDB_10_1)
|
228
|
+
return open_table(thd, tables, ot_act);
|
229
|
+
#else
|
219
230
|
return open_table(thd, tables, thd->mem_root, ot_act);
|
231
|
+
#endif
|
220
232
|
}
|
221
233
|
#define set_mysys_var(A)
|
234
|
+
|
235
|
+
|
236
|
+
inline bool cp_has_insert_default_function(Field* fd)
|
237
|
+
{
|
238
|
+
return fd->unireg_check == Field::TIMESTAMP_DN_FIELD ||
|
239
|
+
fd->unireg_check == Field::TIMESTAMP_DNUN_FIELD;
|
240
|
+
}
|
241
|
+
|
242
|
+
inline bool cp_has_update_default_function(Field* fd)
|
243
|
+
{
|
244
|
+
return fd->unireg_check == Field::TIMESTAMP_UN_FIELD ||
|
245
|
+
fd->unireg_check == Field::TIMESTAMP_DNUN_FIELD;
|
246
|
+
}
|
247
|
+
|
248
|
+
inline void cp_evaluate_insert_default_function(Field* fd)
|
249
|
+
{
|
250
|
+
#if (MYSQL_VERSION_ID > 50600)
|
251
|
+
Field* ft = fd;
|
252
|
+
#else
|
253
|
+
Field_timestamp* ft = (Field_timestamp*)(fd);
|
254
|
+
#endif
|
255
|
+
if (ft)
|
256
|
+
ft->set_time();
|
257
|
+
}
|
258
|
+
|
259
|
+
inline void cp_evaluate_update_default_function(Field* fd)
|
260
|
+
{
|
261
|
+
|
262
|
+
#if (MYSQL_VERSION_ID > 50600)
|
263
|
+
Field* ft = fd;
|
264
|
+
#else
|
265
|
+
Field_timestamp* ft = (Field_timestamp*)(fd);
|
266
|
+
#endif
|
267
|
+
if (ft)
|
268
|
+
ft->set_time();
|
269
|
+
}
|
270
|
+
|
271
|
+
inline unsigned char* cp_null_ptr(Field* fd, unsigned char* /*record*/)
|
272
|
+
{
|
273
|
+
return (unsigned char*)fd->null_ptr;
|
274
|
+
}
|
275
|
+
|
276
|
+
|
222
277
|
#else
|
223
278
|
|
224
279
|
|
@@ -227,14 +282,12 @@ inline void cp_thd_release_resources(THD* thd)
|
|
227
282
|
thd->release_resources();
|
228
283
|
}
|
229
284
|
|
230
|
-
inline void cp_set_mysys_var(st_my_thread_var* var)
|
231
|
-
{
|
232
285
|
#if(MYSQL_VERSION_NUM < 50700)
|
286
|
+
inline void cp_set_mysys_var(struct st_my_thread_var* var)
|
287
|
+
{
|
233
288
|
set_mysys_var(var);
|
234
|
-
#else
|
235
|
-
set_mysys_thread_var(var);
|
236
|
-
#endif
|
237
289
|
}
|
290
|
+
#endif
|
238
291
|
|
239
292
|
inline void cp_restore_globals(THD* thd)
|
240
293
|
{
|
@@ -256,6 +309,33 @@ inline bool cp_open_table(THD* thd, TABLE_LIST* tables,
|
|
256
309
|
{
|
257
310
|
return open_table(thd, tables, ot_act);
|
258
311
|
}
|
312
|
+
|
313
|
+
inline bool cp_has_insert_default_function(Field* fd)
|
314
|
+
{
|
315
|
+
return fd->has_insert_default_function();
|
316
|
+
}
|
317
|
+
|
318
|
+
inline bool cp_has_update_default_function(Field* fd)
|
319
|
+
{
|
320
|
+
return fd->has_update_default_function();
|
321
|
+
|
322
|
+
}
|
323
|
+
|
324
|
+
inline void cp_evaluate_insert_default_function(Field* fd)
|
325
|
+
{
|
326
|
+
fd->evaluate_insert_default_function();
|
327
|
+
}
|
328
|
+
|
329
|
+
inline void cp_evaluate_update_default_function(Field* fd)
|
330
|
+
{
|
331
|
+
fd->evaluate_update_default_function();
|
332
|
+
}
|
333
|
+
|
334
|
+
inline unsigned char* cp_null_ptr(Field* fd, unsigned char* record)
|
335
|
+
{
|
336
|
+
return fd->null_offset() + record;
|
337
|
+
}
|
338
|
+
|
259
339
|
#endif
|
260
340
|
|
261
341
|
#if (MYSQL_VERSION_NUM < 50611)
|
@@ -485,16 +565,18 @@ inline bool cp_query_command(THD* thd, char* str)
|
|
485
565
|
make_db_list function is not static, but it is not list in sql_show.h.
|
486
566
|
*/
|
487
567
|
|
488
|
-
#
|
568
|
+
#if (defined(MARIADDB_10_0) || defined(MARIADDB_10_1))
|
489
569
|
typedef Dynamic_array<LEX_STRING*> SQL_Strings;
|
570
|
+
#if (!defined(MARIADDB_10_1))
|
490
571
|
typedef struct st_lookup_field_values
|
491
572
|
{
|
492
573
|
LEX_STRING db_value, table_value;
|
493
574
|
bool wild_db_value, wild_table_value;
|
494
575
|
} LOOKUP_FIELD_VALUES;
|
495
|
-
|
576
|
+
#endif
|
496
577
|
extern int make_db_list(THD *thd, Dynamic_array<LEX_STRING*> *files,
|
497
578
|
LOOKUP_FIELD_VALUES *lookup_field_vals);
|
579
|
+
|
498
580
|
inline int db_list(THD *thd, SQL_Strings *files)
|
499
581
|
{
|
500
582
|
LOOKUP_FIELD_VALUES lv;
|
@@ -99,12 +99,12 @@ void endThread()
|
|
99
99
|
setStackaddr(0);
|
100
100
|
}
|
101
101
|
|
102
|
-
void waitForServerStart()
|
103
|
-
{
|
104
|
-
mysql_mutex_lock(&LOCK_server_started);
|
105
|
-
while (!mysqld_server_started)
|
106
|
-
mysql_cond_wait(&COND_server_started, &LOCK_server_started);
|
107
|
-
mysql_mutex_unlock(&LOCK_server_started);
|
102
|
+
void waitForServerStart()
|
103
|
+
{
|
104
|
+
mysql_mutex_lock(&LOCK_server_started);
|
105
|
+
while (!mysqld_server_started)
|
106
|
+
mysql_cond_wait(&COND_server_started, &LOCK_server_started);
|
107
|
+
mysql_mutex_unlock(&LOCK_server_started);
|
108
108
|
}
|
109
109
|
|
110
110
|
int getTransactdIsolation()
|
@@ -136,10 +136,10 @@ THD* buildTHD()
|
|
136
136
|
|
137
137
|
thd->thread_stack = reinterpret_cast<char*>(&thd);
|
138
138
|
thd->store_globals();
|
139
|
-
|
140
|
-
cp_set_mysys_var(thd->mysys_var);
|
141
|
-
thd->system_thread = NON_SYSTEM_THREAD;
|
139
|
+
thd->system_thread = NON_SYSTEM_THREAD;
|
142
140
|
#ifndef MYSQL_578_LATER
|
141
|
+
assert(thd->mysys_var);
|
142
|
+
cp_set_mysys_var(thd->mysys_var);
|
143
143
|
const NET v = { 0 };
|
144
144
|
thd->net = v;
|
145
145
|
#endif
|
@@ -168,11 +168,15 @@ THD* attachThd(THD* thd)
|
|
168
168
|
else
|
169
169
|
{
|
170
170
|
initThread(thd);
|
171
|
+
#ifndef MYSQL_578_LATER
|
171
172
|
assert(thd->mysys_var);
|
173
|
+
#endif
|
172
174
|
if (curThd != thd)
|
173
175
|
{
|
174
176
|
thd->store_globals();
|
177
|
+
#ifndef MYSQL_578_LATER
|
175
178
|
cp_set_mysys_var(thd->mysys_var);
|
179
|
+
#endif
|
176
180
|
}
|
177
181
|
}
|
178
182
|
return curThd;
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include "groupQuery.h"
|
23
23
|
#ifdef _DEBUG
|
24
24
|
#include <iostream>
|
25
|
+
#include <iomanip>
|
25
26
|
#endif
|
26
27
|
|
27
28
|
namespace bzs
|
@@ -35,6 +36,86 @@ namespace tdap
|
|
35
36
|
namespace client
|
36
37
|
{
|
37
38
|
|
39
|
+
#ifdef _DEBUG
|
40
|
+
|
41
|
+
/*
|
42
|
+
Print record set whole row like a mysql command line tool.
|
43
|
+
*/
|
44
|
+
template <class RS>
|
45
|
+
class dumpRecordset
|
46
|
+
{
|
47
|
+
std::vector<size_t> m_widths;
|
48
|
+
std::vector<std::ios::fmtflags> m_ailgns;
|
49
|
+
|
50
|
+
void cacheWidthAndAlign(RS& rs)
|
51
|
+
{
|
52
|
+
const fielddefs& fds = *rs.fieldDefs();
|
53
|
+
m_widths.clear();
|
54
|
+
m_widths.resize(fds.size());
|
55
|
+
m_ailgns.clear();
|
56
|
+
m_ailgns.resize(fds.size());
|
57
|
+
|
58
|
+
for (size_t col = 0; col < fds.size(); ++col)
|
59
|
+
{
|
60
|
+
m_widths[col] = std::max(_tcslen(fds[col].name()), m_widths[col]);
|
61
|
+
m_ailgns[col] = fds[col].isStringType() ? std::ios::left : std::ios::right;
|
62
|
+
}
|
63
|
+
for(size_t i = 0; i < rs.size(); ++i)
|
64
|
+
{
|
65
|
+
row& rec = rs[i];
|
66
|
+
for (size_t col = 0; col < fds.size(); ++col)
|
67
|
+
m_widths[col] = std::max(_tcslen(rec[col].c_str()), m_widths[col]);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
std::_tstring makeLine()
|
72
|
+
{
|
73
|
+
std::_tstring s = _T("+");
|
74
|
+
for (size_t i = 0;i < m_widths.size(); ++i)
|
75
|
+
{
|
76
|
+
s += std::_tstring(m_widths[i] + 2, _T('-'));
|
77
|
+
s += _T('+');
|
78
|
+
}
|
79
|
+
s += _T("\n");
|
80
|
+
return s;
|
81
|
+
}
|
82
|
+
|
83
|
+
void printValue(size_t width, std::ios::fmtflags f, const _TCHAR* value)
|
84
|
+
{
|
85
|
+
std::tcout.setf(f, std::ios::adjustfield);
|
86
|
+
std::tcout << _T(" ") << std::setw(width) << value << _T(" |");
|
87
|
+
}
|
88
|
+
|
89
|
+
const _TCHAR* value(const fielddef& fd) {return fd.name();}
|
90
|
+
const _TCHAR* value(const field& fd) {return fd.c_str();}
|
91
|
+
|
92
|
+
template <class T>
|
93
|
+
void printRecord(const T& coll)
|
94
|
+
{
|
95
|
+
std::tcout << _T("|");
|
96
|
+
for (size_t col = 0; col < m_widths.size(); ++col)
|
97
|
+
printValue(m_widths[col], m_ailgns[col], value(coll[col]));
|
98
|
+
std::tcout << std::endl;
|
99
|
+
}
|
100
|
+
public:
|
101
|
+
void operator()(RS& rs)
|
102
|
+
{
|
103
|
+
cacheWidthAndAlign(rs);
|
104
|
+
std::_tstring line = makeLine();
|
105
|
+
//header
|
106
|
+
std::tcout << line;
|
107
|
+
printRecord(*rs.fieldDefs());
|
108
|
+
std::tcout << line;
|
109
|
+
|
110
|
+
//field value
|
111
|
+
for(size_t i = 0; i < rs.size(); ++i)
|
112
|
+
printRecord(rs[i]);
|
113
|
+
std::tcout << line;
|
114
|
+
}
|
115
|
+
};
|
116
|
+
#endif
|
117
|
+
|
118
|
+
|
38
119
|
struct sortDescription
|
39
120
|
{
|
40
121
|
short index;
|
@@ -595,21 +676,8 @@ public:
|
|
595
676
|
#ifdef _DEBUG
|
596
677
|
void dump()
|
597
678
|
{
|
598
|
-
|
599
|
-
|
600
|
-
std::tcout << fields[j].name() << _T("\t");
|
601
|
-
std::tcout << _T("\n");
|
602
|
-
|
603
|
-
for (int i = 0; i < (int)size(); ++i)
|
604
|
-
{
|
605
|
-
row& m = (operator[](i));
|
606
|
-
for (int j = 0; j < (int)m.size(); ++j)
|
607
|
-
{
|
608
|
-
std::tcout << m[(short)j].c_str() << _T("\t");
|
609
|
-
if (j == (int)m.size() - 1)
|
610
|
-
std::tcout << _T("\n");
|
611
|
-
}
|
612
|
-
}
|
679
|
+
dumpRecordset<recordsetImple> dumpRs;
|
680
|
+
dumpRs(*this);
|
613
681
|
}
|
614
682
|
#endif
|
615
683
|
};
|
@@ -85,19 +85,29 @@ uchar_td convFieldType(enum enum_field_types type, uint flags, bool binary,
|
|
85
85
|
return ft_uinteger;
|
86
86
|
return ft_integer;
|
87
87
|
case MYSQL_TYPE_ENUM:
|
88
|
-
return ft_integer;
|
89
88
|
case MYSQL_TYPE_SET:
|
89
|
+
case MYSQL_TYPE_BIT:
|
90
90
|
return ft_uinteger;
|
91
91
|
case MYSQL_TYPE_FLOAT:
|
92
92
|
case MYSQL_TYPE_DOUBLE:
|
93
93
|
return ft_float;
|
94
94
|
case MYSQL_TYPE_DATE:
|
95
|
+
case MYSQL_TYPE_NEWDATE:
|
95
96
|
return ft_mydate;
|
96
97
|
case MYSQL_TYPE_TIME:
|
98
|
+
#if(MYSQL_VERSION_ID > 50600)
|
99
|
+
case MYSQL_TYPE_TIME2:
|
100
|
+
#endif
|
97
101
|
return ft_mytime;
|
98
102
|
case MYSQL_TYPE_DATETIME:
|
103
|
+
#if(MYSQL_VERSION_ID > 50600)
|
104
|
+
case MYSQL_TYPE_DATETIME2:
|
105
|
+
#endif
|
99
106
|
return ft_mydatetime;
|
100
107
|
case MYSQL_TYPE_TIMESTAMP:
|
108
|
+
#if(MYSQL_VERSION_ID > 50600)
|
109
|
+
case MYSQL_TYPE_TIMESTAMP2:
|
110
|
+
#endif
|
101
111
|
return ft_mytimestamp;
|
102
112
|
case MYSQL_TYPE_VARCHAR:
|
103
113
|
case MYSQL_TYPE_VAR_STRING: //?
|
@@ -115,15 +125,16 @@ uchar_td convFieldType(enum enum_field_types type, uint flags, bool binary,
|
|
115
125
|
if (flags & BINARY_FLAG)
|
116
126
|
return ft_myblob;
|
117
127
|
return ft_mytext;
|
118
|
-
default:
|
119
|
-
return unicode ?
|
128
|
+
default: // MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_GEOMETRY
|
129
|
+
return unicode ? ft_wstring : ft_string;
|
120
130
|
}
|
121
131
|
return 0;
|
122
132
|
}
|
123
133
|
|
124
134
|
bool isUnicode(const CHARSET_INFO& cs)
|
125
135
|
{
|
126
|
-
|
136
|
+
int index = charsetIndex(cs.csname);
|
137
|
+
return (index == CHARSET_UTF16LE) || (index == CHARSET_USC2);
|
127
138
|
}
|
128
139
|
|
129
140
|
bool isBinary(const CHARSET_INFO& cs)
|
@@ -236,7 +236,8 @@ typedef void(__STDCALL* WIN_TPOOL_SHUTDOWN_PTR)();
|
|
236
236
|
#define ft_myblob 51
|
237
237
|
#define ft_autoIncUnsigned 52
|
238
238
|
#define ft_myfixedbinary 53
|
239
|
-
|
239
|
+
#define ft_enum 54
|
240
|
+
#define ft_set 55
|
240
241
|
#define ft_nullindicator 255
|
241
242
|
|
242
243
|
/** charset type number
|
@@ -503,7 +504,7 @@ struct handshale_t
|
|
503
504
|
*/
|
504
505
|
#define C_INTERFACE_VER_MAJOR "2"//##1 Build marker! Don't remove
|
505
506
|
#define C_INTERFACE_VER_MINOR "4"//##2 Build marker! Don't remove
|
506
|
-
#define C_INTERFACE_VER_RELEASE "
|
507
|
+
#define C_INTERFACE_VER_RELEASE "5"//##3 Build marker! Don't remove
|
507
508
|
|
508
509
|
/* dnamic load library name.
|
509
510
|
The default extention of Mac is ".boudle", Therefore ".so" is popular. */
|
@@ -567,7 +568,7 @@ struct handshale_t
|
|
567
568
|
|
568
569
|
#define CPP_INTERFACE_VER_MAJOR "2"//##4 Build marker! Don't remove
|
569
570
|
#define CPP_INTERFACE_VER_MINOR "4"//##5 Build marker! Don't remove
|
570
|
-
#define CPP_INTERFACE_VER_RELEASE "
|
571
|
+
#define CPP_INTERFACE_VER_RELEASE "5"//##6 Build marker! Don't remove
|
571
572
|
|
572
573
|
/* use autolink tdclcpp */
|
573
574
|
#if (__BCPLUSPLUS__ || _MSC_VER)
|
@@ -584,6 +585,6 @@ struct handshale_t
|
|
584
585
|
|
585
586
|
#define TRANSACTD_VER_MAJOR 2//##7 Build marker! Don't remove
|
586
587
|
#define TRANSACTD_VER_MINOR 4//##8 Build marker! Don't remove
|
587
|
-
#define TRANSACTD_VER_RELEASE
|
588
|
+
#define TRANSACTD_VER_RELEASE 5//##9 Build marker! Don't remove
|
588
589
|
|
589
590
|
#endif // BZS_DB_PROTOCOL_TDAP_TDAPCAPI_H
|
@@ -233,7 +233,7 @@ const connManager::records& connManager::getDefinedDatabaseList() const
|
|
233
233
|
cp_security_ctx(thd)->skip_grants();
|
234
234
|
SQL_Strings files;
|
235
235
|
db_list(thd, &files);
|
236
|
-
#
|
236
|
+
#if defined(MARIADDB_10_0) || defined(MARIADDB_10_1)
|
237
237
|
for (int i = 0; i < (int)files.elements(); ++i)
|
238
238
|
appenDbList(m_records, files.at(i));
|
239
239
|
#else
|
@@ -23,6 +23,9 @@
|
|
23
23
|
#pragma warn -8022
|
24
24
|
#endif
|
25
25
|
#include <boost/test/included/unit_test.hpp>
|
26
|
+
#ifndef BOOST_TEST_MESSAGE
|
27
|
+
#define BOOST_TEST_MESSAGE BOOST_MESSAGE
|
28
|
+
#endif
|
26
29
|
#if defined(__BCPLUSPLUS__)
|
27
30
|
#pragma warn .8012
|
28
31
|
#pragma warn .8022
|
@@ -410,7 +413,8 @@ void testVersion(database* db)
|
|
410
413
|
"mysql_server_Major = " << vv.versions[1].majorVersion);
|
411
414
|
BOOST_CHECK_MESSAGE(
|
412
415
|
((5 <= vv.versions[1].minorVersion) ||
|
413
|
-
(0 == vv.versions[1].minorVersion)
|
416
|
+
(0 == vv.versions[1].minorVersion) ||
|
417
|
+
(1 == vv.versions[1].minorVersion)),
|
414
418
|
"mysql_server_Miner = " << vv.versions[1].minorVersion);
|
415
419
|
BOOST_CHECK_MESSAGE((int)'M' == (int)vv.versions[1].type,
|
416
420
|
"mysql_server_Type = " << vv.versions[1].type);
|
@@ -2420,7 +2424,7 @@ void testLogin(database* db)
|
|
2420
2424
|
#ifndef _UNICODE
|
2421
2425
|
TCHAR buf[256];
|
2422
2426
|
sprintf_s(buf, 256, "bad host db->stat()=%d", db->stat());
|
2423
|
-
|
2427
|
+
BOOST_TEST_MESSAGE(buf);
|
2424
2428
|
#endif
|
2425
2429
|
}
|
2426
2430
|
|
@@ -2750,7 +2754,7 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
|
|
2750
2754
|
bool f = string(tb->getFVAstr(1)) == string("0松本");
|
2751
2755
|
BOOST_CHECK_MESSAGE(f, "Get Set A3");
|
2752
2756
|
if (!f)
|
2753
|
-
|
2757
|
+
BOOST_TEST_MESSAGE(tb->getFVAstr(1));
|
2754
2758
|
}
|
2755
2759
|
BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 2");
|
2756
2760
|
|
@@ -2845,13 +2849,13 @@ void testVarField(database* db)
|
|
2845
2849
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "open 1");
|
2846
2850
|
table* tb = db->openTable(_T("user1"));
|
2847
2851
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable");
|
2848
|
-
|
2852
|
+
BOOST_TEST_MESSAGE("Start acp varchar");
|
2849
2853
|
doTestverField(tb, false, true);
|
2850
2854
|
tb->release();
|
2851
2855
|
|
2852
2856
|
tb = db->openTable(_T("user2"));
|
2853
2857
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable2");
|
2854
|
-
|
2858
|
+
BOOST_TEST_MESSAGE("Start acp varbinary");
|
2855
2859
|
doTestverField(tb, false, false);
|
2856
2860
|
tb->release();
|
2857
2861
|
|
@@ -2859,19 +2863,19 @@ void testVarField(database* db)
|
|
2859
2863
|
{
|
2860
2864
|
tb = db->openTable(_T("user3"));
|
2861
2865
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable3");
|
2862
|
-
|
2866
|
+
BOOST_TEST_MESSAGE("Start unicode varchar");
|
2863
2867
|
doTestverField(tb, true, true);
|
2864
2868
|
tb->release();
|
2865
2869
|
}
|
2866
2870
|
tb = db->openTable(_T("user4"));
|
2867
2871
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable4");
|
2868
|
-
|
2872
|
+
BOOST_TEST_MESSAGE("Start unicode varbinary");
|
2869
2873
|
doTestverField(tb, true, false);
|
2870
2874
|
tb->release();
|
2871
2875
|
|
2872
2876
|
tb = db->openTable(_T("user5"));
|
2873
2877
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable5");
|
2874
|
-
|
2878
|
+
BOOST_TEST_MESSAGE("Start utf8 varchar");
|
2875
2879
|
doTestverField(tb, true, true);
|
2876
2880
|
|
2877
2881
|
tb->release();
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transactd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BizStation Corp.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Transactd client for ruby gem
|
14
14
|
email: transactd@bizstation.jp
|