transactd 2.4.0 → 2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA.md +37 -29
- data/BUILD_WIN-JA.md +96 -69
- data/CMakeLists.txt +7 -17
- data/README-JA.md +22 -17
- data/README.md +23 -16
- data/{RELEASE_NOTE-JA → RELEASE_NOTE-JA.md} +163 -98
- data/{RELEASE_NOTE → RELEASE_NOTE.md} +165 -99
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/build/common/get_boost_libs.cmake +2 -0
- data/build/common/system.cmake +6 -4
- data/build/common/transactd_cl_output.cmake +14 -2
- data/build/common/transactd_common.cmake +34 -12
- data/build/tdclc/CMakeLists.txt +10 -2
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/CMakeLists.txt +34 -9
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclrb/CMakeLists.txt +24 -15
- data/build/tdclrb/gem/Makefile.win32-VS +2 -2
- data/build/tdclrb/gem_output.cmake +27 -10
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +18 -18
- data/source/bzs/db/engine/mysql/database.h +4 -4
- data/source/bzs/db/engine/mysql/dbManager.cpp +1 -2
- data/source/bzs/db/engine/mysql/mysqlInternal.h +23 -2
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +3 -2
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +26 -12
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +3 -3
- data/source/bzs/db/protocol/tdap/client/field.cpp +74 -23
- data/source/bzs/db/protocol/tdap/client/field.h +3 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +4 -4
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +3 -1
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +16 -9
- data/source/bzs/db/protocol/tdap/client/memRecord.h +2 -2
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +3 -2
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +12 -0
- data/source/bzs/db/protocol/tdap/client/serializer.h +1 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +60 -109
- data/source/bzs/db/protocol/tdap/client/table.h +2 -1
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +13 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +1 -1
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +8 -8
- data/source/bzs/db/protocol/tdap/fieldComp.h +6 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +147 -46
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +78 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.h +6 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +3 -3
- data/source/bzs/db/transactd/transactd.cpp +1 -1
- data/source/bzs/env/compiler.h +12 -0
- data/source/bzs/env/tcharMinGW.h +1 -0
- data/source/bzs/netsvc/client/tcpClient.h +4 -2
- data/source/bzs/netsvc/server/serverCpt.cpp +1 -0
- data/source/bzs/netsvc/server/serverTpool.cpp +3 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +2 -2
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +6 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +2 -2
- data/source/global/ormsrcgen/srcgen.cpp +1 -2
- data/source/linux/tchar.h +1 -0
- metadata +4 -4
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,2,91
|
33
|
+
PRODUCTVERSION 2,4,2,91
|
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.2.91"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2014 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "2.4.
|
52
|
+
VALUE "ProductVersion", "2.4.2.91"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
data/build/tdclrb/CMakeLists.txt
CHANGED
@@ -66,6 +66,15 @@ if("${TRANSACTD_RUBY_GEM_ROOT_PATH}" STREQUAL "")
|
|
66
66
|
set(TRANSACTD_RUBY_GEM_ROOT_PATH "${TRANSACTD_BINARY_ROOT}")
|
67
67
|
endif()
|
68
68
|
|
69
|
+
# ==========================================================
|
70
|
+
# add library path
|
71
|
+
# ==========================================================
|
72
|
+
if(WIN32)
|
73
|
+
link_directories("${TRANSACTD_RUBY_GEM_ROOT_PATH}/bin/common")
|
74
|
+
else()
|
75
|
+
link_directories("../tdclcpp")
|
76
|
+
endif()
|
77
|
+
|
69
78
|
|
70
79
|
# ==========================================================
|
71
80
|
# add swig wrapper source file
|
@@ -104,6 +113,16 @@ endif()
|
|
104
113
|
# ==========================================================
|
105
114
|
add_library(${this_target} SHARED ${${this_target}_SOURCE_FILES})
|
106
115
|
|
116
|
+
# ==========================================================
|
117
|
+
# add dependencie projects
|
118
|
+
# ==========================================================
|
119
|
+
if(WIN32)
|
120
|
+
if(MSVC)
|
121
|
+
add_dependencies(${this_target} tdclcpp)
|
122
|
+
endif()
|
123
|
+
else()
|
124
|
+
add_dependencies(${this_target} tdclc tdclcpp)
|
125
|
+
endif()
|
107
126
|
|
108
127
|
# ==========================================================
|
109
128
|
# Add compile options
|
@@ -127,7 +146,7 @@ endif()
|
|
127
146
|
if(MSVC)
|
128
147
|
set_property(TARGET ${this_target} APPEND PROPERTY COMPILE_DEFINITIONS
|
129
148
|
WIN32 _WIN32 _WINDOWS _USRDLL BOOST_ALL_NO_LIB
|
130
|
-
LIB_TDCLCPP
|
149
|
+
LIB_TDCLCPP TRDCL_AUTOLINK TRDCLENGN_EXPORTS _CRT_SECURE_NO_WARNINGS)
|
131
150
|
else()
|
132
151
|
set_property(TARGET ${this_target} APPEND PROPERTY COMPILE_DEFINITIONS
|
133
152
|
PIC _REENTRANT BOOST_ALL_NO_LIB)
|
@@ -145,20 +164,10 @@ endif()
|
|
145
164
|
# add link / include
|
146
165
|
# ==========================================================
|
147
166
|
target_link_libraries(${this_target} "${TRANSACTD_RUBY_LIBRARY_PATH}")
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
if(MSVC)
|
153
|
-
target_link_libraries(${this_target} "tdclcppmr")
|
154
|
-
else()
|
155
|
-
if(NOT TRANSACTD_WITHOUT_C_CPP_CLIENTS)
|
156
|
-
target_link_libraries(${this_target} "tdclcppm")
|
157
|
-
else()
|
158
|
-
transactd_link_boost_libraries("timer;filesystem;thread;chrono;system")
|
159
|
-
target_link_libraries(${this_target} "tdclcpp_64m")
|
160
|
-
endif()
|
161
|
-
endif()
|
167
|
+
transactd_link_boost_libraries("timer;filesystem;thread;chrono;system")
|
168
|
+
#tdclcpp_x on windows is auto link
|
169
|
+
if(NOT WIN32)
|
170
|
+
target_link_libraries(${this_target} "tdclcpp_64m")
|
162
171
|
endif()
|
163
172
|
|
164
173
|
|
@@ -26,8 +26,8 @@ set INSMSG=..\..\..\install.log
|
|
26
26
|
set ERRMSG=errormsg.log
|
27
27
|
|
28
28
|
@REM BUILD
|
29
|
-
echo BUILD
|
30
|
-
msbuild
|
29
|
+
echo BUILD TransactdRubyClient.sln %date% %time% >> "%BLDMSG%"
|
30
|
+
msbuild TransactdRubyClient.sln /p:Configuration=Release /m:2 >> "%BLDMSG%" 2>&1
|
31
31
|
if ERRORLEVEL 1 (
|
32
32
|
echo ************************************************************** 1>&2
|
33
33
|
echo EROOR MESSAGE 1>&2
|
@@ -23,24 +23,41 @@ include(../common/smart_install.cmake)
|
|
23
23
|
# ==========================================================
|
24
24
|
if(NOT COMMAND tdcl_set_output)
|
25
25
|
macro(tdcl_set_output TRANSACTD_BINARY_ROOT prefix)
|
26
|
-
|
26
|
+
if("${TRANSACTD_RUBY_GEM_ROOT_PATH}" STREQUAL "")
|
27
|
+
set(TRANSACTD_RUBY_GEM_ROOT_PATH "${TRANSACTD_BINARY_ROOT}")
|
28
|
+
endif()
|
29
|
+
## install tdclcpp
|
27
30
|
if((NOT WIN32) OR MSVC)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
foreach(tmp_build_type "_RELEASE" "_DEBUG" "_RELWITHDEBINFO" "_MINSIZEREL")
|
32
|
+
set_target_properties(tdclcpp PROPERTIES
|
33
|
+
RUNTIME_OUTPUT_DIRECTORY${tmp_build_type} "${TRANSACTD_RUBY_GEM_ROOT_PATH}/bin/common"
|
34
|
+
LIBRARY_OUTPUT_DIRECTORY${tmp_build_type} "${TRANSACTD_RUBY_GEM_ROOT_PATH}/bin/common"
|
35
|
+
ARCHIVE_OUTPUT_DIRECTORY${tmp_build_type} "${TRANSACTD_RUBY_GEM_ROOT_PATH}/bin/common")
|
36
|
+
endforeach()
|
33
37
|
## install to system dir (copy file if greater)
|
34
38
|
if(WIN32)
|
35
|
-
|
36
|
-
|
39
|
+
set(tmp_target_name "")
|
40
|
+
if(TARGET "tdclcpp")
|
41
|
+
set(tmp_target_name "tdclcpp")
|
42
|
+
elseif(TARGET "tdclcppmr")
|
43
|
+
set(tmp_target_name "tdclcppmr")
|
44
|
+
elseif(TARGET "tdclcppm")
|
45
|
+
set(tmp_target_name "tdclcppm")
|
46
|
+
endif()
|
47
|
+
if (NOT "${tmp_target_name}" STREQUAL "")
|
48
|
+
string(TOUPPER "OUTPUT_NAME_${CMAKE_BUILD_TYPE}" tmp_var)
|
49
|
+
get_target_property(tmp_var "${tmp_target_name}" "${tmp_var}")
|
50
|
+
set(tmp_var "${tmp_var}.dll")
|
51
|
+
else()
|
52
|
+
set(tmp_var "tdclcpp_vc100_*.dll")
|
53
|
+
endif()
|
37
54
|
file(TO_CMAKE_PATH "${TRANSACTD_RUBY_GEM_ROOT_PATH}/bin/common/${tmp_var}" tmp_var)
|
38
55
|
bz_smart_install(SOURCES "${tmp_var}" TO_WIN_SYSTEMDIR)
|
39
56
|
else()
|
40
57
|
if("${prefix}" STREQUAL "")
|
41
|
-
install(TARGETS
|
58
|
+
install(TARGETS tdclcpp LIBRARY DESTINATION /usr/lib)
|
42
59
|
else()
|
43
|
-
install(TARGETS
|
60
|
+
install(TARGETS tdclcpp LIBRARY DESTINATION "${prefix}")
|
44
61
|
endif()
|
45
62
|
endif()
|
46
63
|
endif()
|
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,2,91
|
33
|
+
PRODUCTVERSION 2,4,2,91
|
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.2.91"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2014 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "2.4.
|
52
|
+
VALUE "ProductVersion", "2.4.2.91"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
@@ -1077,7 +1077,7 @@ void table::fillNull(uchar* ptr, int size)
|
|
1077
1077
|
|
1078
1078
|
void table::setKeyValues(const uchar* ptr, int size)
|
1079
1079
|
{
|
1080
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1080
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1081
1081
|
memcpy(&m_keybuf[0], ptr, std::min(MAX_KEYLEN, size));
|
1082
1082
|
int pos = 0;
|
1083
1083
|
for (int j = 0; j < (int)key.user_defined_key_parts; j++)
|
@@ -1107,7 +1107,7 @@ void table::setKeyValues(const uchar* ptr, int size)
|
|
1107
1107
|
*/
|
1108
1108
|
short table::setKeyValuesPacked(const uchar* ptr, int size)
|
1109
1109
|
{
|
1110
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1110
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1111
1111
|
int to = 0;
|
1112
1112
|
const uchar* from = ptr;
|
1113
1113
|
int ret = -1;
|
@@ -1166,7 +1166,7 @@ uint table::keyPackCopy(uchar* ptr)
|
|
1166
1166
|
if (m_keyNum < 0)
|
1167
1167
|
return 0;
|
1168
1168
|
|
1169
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1169
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1170
1170
|
if ((key.flags & HA_NULL_PART_KEY) || (key.flags & HA_VAR_LENGTH_KEY))
|
1171
1171
|
{
|
1172
1172
|
int from = 0;
|
@@ -1488,7 +1488,7 @@ void table::seekKey(enum ha_rkey_function find_flag, key_part_map keyMap)
|
|
1488
1488
|
{
|
1489
1489
|
if (find_flag != HA_READ_KEY_EXACT)
|
1490
1490
|
key_copy(&m_keybuf[0], m_table->record[0],
|
1491
|
-
&m_table->key_info[m_keyNum], KEYLEN_ALLCOPY);
|
1491
|
+
&m_table->key_info[(int)m_keyNum], KEYLEN_ALLCOPY);
|
1492
1492
|
}
|
1493
1493
|
}
|
1494
1494
|
else
|
@@ -1508,7 +1508,7 @@ void table::moveKey(boost::function<int()> func)
|
|
1508
1508
|
setCursorStaus();
|
1509
1509
|
if (m_stat == 0)
|
1510
1510
|
key_copy(&m_keybuf[0], m_table->record[0],
|
1511
|
-
&m_table->key_info[m_keyNum], KEYLEN_ALLCOPY);
|
1511
|
+
&m_table->key_info[(int)m_keyNum], KEYLEN_ALLCOPY);
|
1512
1512
|
}
|
1513
1513
|
else
|
1514
1514
|
m_stat = STATUS_INVALID_KEYNUM;
|
@@ -1528,7 +1528,7 @@ void table::getNextSame(key_part_map keyMap)
|
|
1528
1528
|
if (m_stat == 0)
|
1529
1529
|
{
|
1530
1530
|
key_copy(&m_keybuf[0], m_table->record[0],
|
1531
|
-
&m_table->key_info[m_keyNum], KEYLEN_ALLCOPY);
|
1531
|
+
&m_table->key_info[(int)m_keyNum], KEYLEN_ALLCOPY);
|
1532
1532
|
}
|
1533
1533
|
}
|
1534
1534
|
else
|
@@ -1603,7 +1603,7 @@ bool table::keyCheckForPercent()
|
|
1603
1603
|
if (m_keyNum == -1)
|
1604
1604
|
m_keyNum = m_table->s->primary_key;
|
1605
1605
|
// The value of the beginning of a key
|
1606
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1606
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1607
1607
|
if (key.key_length > 128)
|
1608
1608
|
return false;
|
1609
1609
|
return true;
|
@@ -1611,7 +1611,7 @@ bool table::keyCheckForPercent()
|
|
1611
1611
|
|
1612
1612
|
void table::preBuildPercent(uchar* first, uchar* last)
|
1613
1613
|
{
|
1614
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1614
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1615
1615
|
getFirst();
|
1616
1616
|
if (m_stat == 0)
|
1617
1617
|
{
|
@@ -1661,7 +1661,7 @@ void table::getByPercentage(unsigned short per)
|
|
1661
1661
|
uchar* st = keybufFirst;
|
1662
1662
|
uchar* en = keybufLast;
|
1663
1663
|
uchar* cu = (uchar*)keybuf();
|
1664
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1664
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1665
1665
|
uint keylen = key.key_length + 10;
|
1666
1666
|
boost::shared_array<uchar> stbuf(new uchar[keylen]);
|
1667
1667
|
boost::shared_array<uchar> lsbuf(new uchar[keylen]);
|
@@ -1749,7 +1749,7 @@ void table::getByPercentage(unsigned short per)
|
|
1749
1749
|
|
1750
1750
|
int table::percentage(uchar* first, uchar* last, uchar* cur)
|
1751
1751
|
{
|
1752
|
-
KEY& key = m_table->key_info[m_keyNum];
|
1752
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
1753
1753
|
// 1 cur to last
|
1754
1754
|
key_range minkey;
|
1755
1755
|
minkey.key = cur;
|
@@ -1786,7 +1786,7 @@ void table::calcPercentage()
|
|
1786
1786
|
m_percentResult = 0;
|
1787
1787
|
// The present key value is copied.
|
1788
1788
|
uchar keybufCur[MAX_KEYLEN] = { 0x00 };
|
1789
|
-
key_copy(keybufCur, m_table->record[0], &m_table->key_info[m_keyNum],
|
1789
|
+
key_copy(keybufCur, m_table->record[0], &m_table->key_info[(int)m_keyNum],
|
1790
1790
|
KEYLEN_ALLCOPY);
|
1791
1791
|
|
1792
1792
|
uchar keybufFirst[MAX_KEYLEN] = { 0x00 };
|
@@ -1982,7 +1982,7 @@ void table::movePos(const uchar* pos, char keyNum, bool sureRawValue)
|
|
1982
1982
|
if (m_keyNum != keyNum)
|
1983
1983
|
{ // need key change
|
1984
1984
|
key_copy(&m_keybuf[0], m_table->record[0],
|
1985
|
-
&m_table->key_info[keyNum], KEYLEN_ALLCOPY);
|
1985
|
+
&m_table->key_info[(int)keyNum], KEYLEN_ALLCOPY);
|
1986
1986
|
// It seek(s) until ref becomes the same, since it is a duplication
|
1987
1987
|
// key.
|
1988
1988
|
setKeyNum(keyNum);
|
@@ -2086,7 +2086,7 @@ bool table::isNisKey(char num) const
|
|
2086
2086
|
{
|
2087
2087
|
if ((num >= 0) && (num < (short)m_table->s->keys))
|
2088
2088
|
{
|
2089
|
-
Field* fd = m_table->key_info[num].key_part[0].field;
|
2089
|
+
Field* fd = m_table->key_info[(int)num].key_part[0].field;
|
2090
2090
|
if (fd->null_bit)
|
2091
2091
|
return true;
|
2092
2092
|
}
|
@@ -2195,7 +2195,7 @@ __int64 table::insert(bool ncc)
|
|
2195
2195
|
m_nonNcc = !ncc;
|
2196
2196
|
if (!ncc && !m_bulkInserting)
|
2197
2197
|
key_copy(&m_keybuf[0], m_table->record[0],
|
2198
|
-
&m_table->key_info[m_keyNum], KEYLEN_ALLCOPY);
|
2198
|
+
&m_table->key_info[(int)m_keyNum], KEYLEN_ALLCOPY);
|
2199
2199
|
|
2200
2200
|
/* Do not change to m_changed = false */
|
2201
2201
|
m_changed = true;
|
@@ -2282,7 +2282,7 @@ void table::update(bool ncc)
|
|
2282
2282
|
// Only when the present key value is changed
|
2283
2283
|
if (m_keyNum >= 0)
|
2284
2284
|
{
|
2285
|
-
const KEY& key = m_table->key_info[m_keyNum];
|
2285
|
+
const KEY& key = m_table->key_info[(int)m_keyNum];
|
2286
2286
|
key_copy(&m_keybuf[0], m_table->record[0], (KEY*)&key,
|
2287
2287
|
KEYLEN_ALLCOPY);
|
2288
2288
|
|
@@ -2354,7 +2354,7 @@ const char* table::keyName(char keyNum)
|
|
2354
2354
|
{
|
2355
2355
|
if ((keyNum >= 0) && (keyNum < (short)m_table->s->keys))
|
2356
2356
|
{
|
2357
|
-
KEY& key = m_table->key_info[keyNum];
|
2357
|
+
KEY& key = m_table->key_info[(int)keyNum];
|
2358
2358
|
return key.name;
|
2359
2359
|
}
|
2360
2360
|
return "";
|
@@ -2387,7 +2387,7 @@ void table::endBulkInsert()
|
|
2387
2387
|
{
|
2388
2388
|
if (m_bulkInserting)
|
2389
2389
|
{
|
2390
|
-
key_copy(&m_keybuf[0], m_table->record[0], &m_table->key_info[m_keyNum],
|
2390
|
+
key_copy(&m_keybuf[0], m_table->record[0], &m_table->key_info[(int)m_keyNum],
|
2391
2391
|
KEYLEN_ALLCOPY);
|
2392
2392
|
m_bulkInserting = false;
|
2393
2393
|
m_table->file->ha_release_auto_increment();
|
@@ -2441,7 +2441,7 @@ inline void setSegmentValue(const KEY_PART_INFO& segment, const std::string& v)
|
|
2441
2441
|
void table::setKeyValues(const std::vector<std::string>& values, int keypart,
|
2442
2442
|
const std::string* inValue)
|
2443
2443
|
{
|
2444
|
-
KEY& key = m_table->key_info[m_keyNum];
|
2444
|
+
KEY& key = m_table->key_info[(int)m_keyNum];
|
2445
2445
|
for (int i = 0; i < (int)key.user_defined_key_parts; i++)
|
2446
2446
|
if (i < (int)values.size())
|
2447
2447
|
setSegmentValue(key.key_part[i], values[i]);
|
@@ -311,7 +311,7 @@ class table : private boost::noncopyable
|
|
311
311
|
|
312
312
|
inline uint keylen() const
|
313
313
|
{
|
314
|
-
return m_table->key_info[m_keyNum].key_length;
|
314
|
+
return m_table->key_info[(int)m_keyNum].key_length;
|
315
315
|
}
|
316
316
|
void setKeyValues(const uchar* ptr, int size);
|
317
317
|
void setBlobFieldPointer(const bzs::db::blobHeader* hd);
|
@@ -446,7 +446,7 @@ public:
|
|
446
446
|
|
447
447
|
inline bool isUniqueKey()
|
448
448
|
{
|
449
|
-
return (m_table->key_info[m_keyNum].flags & HA_NOSAME);
|
449
|
+
return (m_table->key_info[(int)m_keyNum].flags & HA_NOSAME);
|
450
450
|
}
|
451
451
|
|
452
452
|
/*
|
@@ -475,7 +475,7 @@ public:
|
|
475
475
|
|
476
476
|
inline key_part_map keymap()
|
477
477
|
{
|
478
|
-
return (1U << m_table->key_info[m_keyNum].user_defined_key_parts) - 1;
|
478
|
+
return (1U << m_table->key_info[(int)m_keyNum].user_defined_key_parts) - 1;
|
479
479
|
}
|
480
480
|
unsigned long long tableFlags() const { return m_table->file->ha_table_flags();}
|
481
481
|
void seekKey(enum ha_rkey_function find_flag, key_part_map keyMap);
|
@@ -604,7 +604,7 @@ public:
|
|
604
604
|
|
605
605
|
inline const KEY& keyDef(char keyNum) const
|
606
606
|
{
|
607
|
-
return m_table->key_info[keyNum];
|
607
|
+
return m_table->key_info[(int)keyNum];
|
608
608
|
}
|
609
609
|
|
610
610
|
inline const KEY* primaryKey() const
|
@@ -224,8 +224,7 @@ int dbManager::ddl_execSql(THD* thd, const std::string& sql_stmt)
|
|
224
224
|
smartDbsReopen reopen(thd, m_dbs);
|
225
225
|
|
226
226
|
thd->clear_error();
|
227
|
-
|
228
|
-
(uint)sql_stmt.size());
|
227
|
+
int result = cp_query_command(thd, (char*)sql_stmt.c_str());
|
229
228
|
//if (!thd->cp_isOk())
|
230
229
|
// result = 1;
|
231
230
|
if (thd->is_error())
|
@@ -65,6 +65,7 @@ extern "C" {
|
|
65
65
|
extern void * my_malloc(PSI_memory_key key, size_t size, myf_t flags);
|
66
66
|
extern void * my_realloc(PSI_memory_key key, void *ptr, size_t size, myf_t flags);
|
67
67
|
extern void my_free(void *ptr);
|
68
|
+
extern void my_claim(void *ptr);
|
68
69
|
extern void * my_memdup(PSI_memory_key key, const void *from, size_t length, myf_t flags);
|
69
70
|
extern char * my_strdup(PSI_memory_key key, const char *from, myf_t flags);
|
70
71
|
extern char * my_strndup(PSI_memory_key key, const char *from, size_t length, myf_t flags);
|
@@ -170,9 +171,12 @@ extern "C" {
|
|
170
171
|
# endif
|
171
172
|
#endif // MySQL 5.5 Only
|
172
173
|
|
173
|
-
#if ((MYSQL_VERSION_NUM > 50600) && (MYSQL_VERSION_NUM <
|
174
|
+
#if ((MYSQL_VERSION_NUM > 50600) && (MYSQL_VERSION_NUM < 1000000)) // MySQL 5.6.25 or later
|
174
175
|
# if (MYSQL_VERSION_NUM >= 50625)
|
175
176
|
# define FINDFILE_6PRAMS
|
177
|
+
# if (MYSQL_VERSION_NUM >= 50708)
|
178
|
+
# define MYSQL_578_LATER
|
179
|
+
# endif
|
176
180
|
# endif
|
177
181
|
#endif
|
178
182
|
|
@@ -363,6 +367,15 @@ inline void cp_open_error_release(THD* /*thd*/, TABLE_LIST& /*tables*/)
|
|
363
367
|
;
|
364
368
|
}
|
365
369
|
|
370
|
+
inline bool cp_query_command(THD* thd, char* str)
|
371
|
+
{
|
372
|
+
COM_DATA com_data;
|
373
|
+
com_data.com_query.query = (char*)str;
|
374
|
+
com_data.com_query.length = (uint)strlen(str);
|
375
|
+
return dispatch_command(thd, &com_data, COM_QUERY);
|
376
|
+
}
|
377
|
+
|
378
|
+
|
366
379
|
#else //Not MySQL 5.7
|
367
380
|
#define OPEN_TABLE_FLAG_TYPE MYSQL_OPEN_GET_NEW_TABLE
|
368
381
|
|
@@ -461,6 +474,10 @@ inline void cp_open_error_release(THD* thd, TABLE_LIST& tables)
|
|
461
474
|
|
462
475
|
}
|
463
476
|
|
477
|
+
inline bool cp_query_command(THD* thd, char* str)
|
478
|
+
{
|
479
|
+
return dispatch_command(COM_QUERY, thd, str, (uint)strlen(str));
|
480
|
+
}
|
464
481
|
|
465
482
|
#endif
|
466
483
|
|
@@ -490,7 +507,11 @@ inline void cp_open_error_release(THD* thd, TABLE_LIST& tables)
|
|
490
507
|
{
|
491
508
|
#ifdef FINDFILE_6PRAMS
|
492
509
|
MEM_ROOT tmp_mem_root;
|
493
|
-
|
510
|
+
# ifdef MYSQL_578_LATER
|
511
|
+
init_sql_alloc(key_memory_get_all_tables, &tmp_mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
|
512
|
+
# else
|
513
|
+
init_sql_alloc(&tmp_mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
|
514
|
+
# endif
|
494
515
|
return find_files(thd, files, NullS, mysql_data_home, "", true, &tmp_mem_root);
|
495
516
|
#else
|
496
517
|
return find_files(thd, files, NullS, mysql_data_home, "", true);
|
@@ -139,9 +139,10 @@ THD* buildTHD()
|
|
139
139
|
assert(thd->mysys_var);
|
140
140
|
cp_set_mysys_var(thd->mysys_var);
|
141
141
|
thd->system_thread = NON_SYSTEM_THREAD;
|
142
|
+
#ifndef MYSQL_578_LATER
|
142
143
|
const NET v = { 0 };
|
143
144
|
thd->net = v;
|
144
|
-
|
145
|
+
#endif
|
145
146
|
thd->variables.option_bits |= OPTION_BIN_LOG;
|
146
147
|
thd->variables.tx_isolation = (ulong)getTransactdIsolation();
|
147
148
|
|
@@ -149,7 +150,7 @@ THD* buildTHD()
|
|
149
150
|
char tmp[256];
|
150
151
|
sprintf_s(tmp, 256, "set innodb_lock_wait_timeout=%d;",
|
151
152
|
g_lock_wait_timeout);
|
152
|
-
|
153
|
+
cp_query_command(thd, tmp);
|
153
154
|
|
154
155
|
|
155
156
|
cp_set_db(thd, td_strdup("bizstation", MYF(0)));
|
@@ -140,7 +140,7 @@ class activeTableImple : public activeObject<map_orm>
|
|
140
140
|
joinFields.resize(fnsCount);
|
141
141
|
fieldIndexes.resize(fnsCount);
|
142
142
|
const tabledef* td = table()->tableDef();
|
143
|
-
const keydef* kd = &td->keyDefs[table()->keyNum()];
|
143
|
+
const keydef* kd = &td->keyDefs[(int)table()->keyNum()];
|
144
144
|
if (kd->segmentCount < fnsCount)
|
145
145
|
THROW_BZS_ERROR_WITH_MSG(_T("Join key fields are too many.\n ")
|
146
146
|
_T("Check index number and field count."));
|
@@ -157,9 +157,13 @@ class activeTableImple : public activeObject<map_orm>
|
|
157
157
|
if (f.len > FIXED_VALUE_BUF_SIZE)
|
158
158
|
THROW_BZS_ERROR_WITH_MSG(_T("Join fixed key field is too long")
|
159
159
|
_T(" field.\n This field can not use join."));
|
160
|
-
field fd(joinFields[i].fixedValue, f, fds);
|
161
|
-
|
162
|
-
|
160
|
+
field fd(joinFields[i].fixedValue - f.pos, f, fds);
|
161
|
+
size_t pos = s.find(_T(']'), 1);
|
162
|
+
if (pos == std::_tstring::npos)
|
163
|
+
THROW_BZS_ERROR_WITH_MSG(_T("Join fixed key field is invalid format")
|
164
|
+
_T(".\n This field can not use join."));
|
165
|
+
fd = s.substr(1, pos - 1).c_str();
|
166
|
+
joinFields[i].len = f.isStringType() ? 0xff : f.len;
|
163
167
|
joinFields[i].type = JOIN_KEYVALUE_TYPE_PTR;
|
164
168
|
|
165
169
|
}
|
@@ -173,7 +177,7 @@ class activeTableImple : public activeObject<map_orm>
|
|
173
177
|
convertFieldType(
|
174
178
|
td->fieldDefs[kd->segments[i].fieldNum].type))
|
175
179
|
{
|
176
|
-
joinFields[i].len = fd.len;
|
180
|
+
joinFields[i].len = fd.isStringType() ? 0xff : fd.len;
|
177
181
|
joinFields[i].type = JOIN_KEYVALUE_TYPE_PTR;
|
178
182
|
}
|
179
183
|
else
|
@@ -211,10 +215,16 @@ class activeTableImple : public activeObject<map_orm>
|
|
211
215
|
template <class Container>
|
212
216
|
inline void addSeekValues(row& mdl, pq_handle& q,
|
213
217
|
std::vector<typename Container::key_type>& fieldIndexes,
|
214
|
-
std::vector<joinInfo>& joinFields
|
218
|
+
std::vector<joinInfo>& joinFields,
|
219
|
+
const fielddefs* fds)
|
215
220
|
{
|
216
221
|
const uchar_td* ptr[8];
|
217
222
|
int len[8];
|
223
|
+
uchar_td buf[MAX_KEYLEN];
|
224
|
+
uchar_td* buf_ptr = buf;
|
225
|
+
const tabledef* td = table()->tableDef();
|
226
|
+
const keydef* kd = &td->keyDefs[(int)table()->keyNum()];
|
227
|
+
|
218
228
|
for (int i = 0; i < (int)fieldIndexes.size(); ++i)
|
219
229
|
{
|
220
230
|
if (fieldIndexes[i] == -1)
|
@@ -223,15 +233,19 @@ class activeTableImple : public activeObject<map_orm>
|
|
223
233
|
len[i] = joinFields[i].len;
|
224
234
|
}
|
225
235
|
else if (joinFields[i].type == JOIN_KEYVALUE_TYPE_PTR)
|
226
|
-
{
|
236
|
+
{
|
227
237
|
ptr[i] = (const uchar_td*)mdl[fieldIndexes[i]].ptr();
|
228
238
|
len[i] = joinFields[i].len;
|
229
239
|
}
|
230
240
|
else
|
231
241
|
{
|
232
|
-
|
233
|
-
|
234
|
-
|
242
|
+
// if target field type is different then we need convrt type
|
243
|
+
const fielddef& f = td->fieldDefs[kd->segments[i].fieldNum];
|
244
|
+
field fd(buf_ptr - f.pos, f, fds);
|
245
|
+
fd = mdl[fieldIndexes[i]].c_str();
|
246
|
+
ptr[i] = buf_ptr;
|
247
|
+
len[i] = f.isStringType() ? 0xff : f.len;
|
248
|
+
buf_ptr += f.len;
|
235
249
|
}
|
236
250
|
}
|
237
251
|
|
@@ -293,7 +307,7 @@ class activeTableImple : public activeObject<map_orm>
|
|
293
307
|
while (it1 != ite1)
|
294
308
|
{
|
295
309
|
row& mdl = *(mdls.getRow((*it1)[0]));
|
296
|
-
addSeekValues<Container>(mdl, stmt, fieldIndexes, joinFields);
|
310
|
+
addSeekValues<Container>(mdl, stmt, fieldIndexes, joinFields, fds);
|
297
311
|
++it1;
|
298
312
|
}
|
299
313
|
}
|
@@ -303,7 +317,7 @@ class activeTableImple : public activeObject<map_orm>
|
|
303
317
|
while (it != ite)
|
304
318
|
{
|
305
319
|
row& mdl = *(*it);
|
306
|
-
addSeekValues<Container>(mdl, stmt, fieldIndexes, joinFields);
|
320
|
+
addSeekValues<Container>(mdl, stmt, fieldIndexes, joinFields, fds);
|
307
321
|
++it;
|
308
322
|
}
|
309
323
|
}
|
@@ -1018,9 +1018,9 @@ short dbdef::fieldNumByName(short TableIndex, const _TCHAR* name)
|
|
1018
1018
|
uint_td dbdef::fieldValidLength(eFieldQuery query, uchar_td FieldType)
|
1019
1019
|
{ // return MaxLen or MinLen or DefaultLen or Dec of field type
|
1020
1020
|
|
1021
|
-
uint_td maxlen;
|
1022
|
-
uint_td minlen;
|
1023
|
-
uint_td defaultlen;
|
1021
|
+
uint_td maxlen = 0;
|
1022
|
+
uint_td minlen = 0;
|
1023
|
+
uint_td defaultlen = 0;
|
1024
1024
|
int dec = -1;
|
1025
1025
|
switch (FieldType)
|
1026
1026
|
{
|