transactd 2.4.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CMakeLists.txt +1 -1
- data/README-JA.md +52 -529
- data/README.md +52 -523
- data/bin/common/tdclc_32_3_0.dll +0 -0
- data/bin/common/tdclc_64_3_0.dll +0 -0
- data/build/common/system.cmake +2 -1
- data/build/common/transactd_cl_common.cmake +3 -6
- data/build/swig/ruby/ruby.swg +85 -28
- data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
- data/build/swig/tdcl.i +161 -5
- data/build/tdclc/CMakeLists.txt +1 -0
- data/build/tdclc/tdclc.cbproj +7 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/blobStructs.h +1 -1
- data/source/bzs/db/engine/mysql/database.cpp +199 -74
- data/source/bzs/db/engine/mysql/database.h +47 -18
- data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
- data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
- data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
- data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
- data/source/bzs/db/protocol/tdap/client/client.h +82 -15
- data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
- data/source/bzs/db/protocol/tdap/client/database.h +19 -6
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
- data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
- data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
- data/source/bzs/db/protocol/tdap/client/field.h +110 -121
- data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
- data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
- data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
- data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
- data/source/bzs/db/protocol/tdap/client/request.h +2 -1
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
- data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
- data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
- data/source/bzs/db/protocol/tdap/client/table.h +112 -37
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
- data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
- data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
- data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
- data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
- data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
- data/source/bzs/db/protocol/tdap/uri.h +40 -32
- data/source/bzs/db/transactd/connManager.cpp +1 -1
- data/source/bzs/db/transactd/transactd.cpp +7 -0
- data/source/bzs/env/compiler.h +107 -94
- data/source/bzs/env/crosscompile.cpp +24 -12
- data/source/bzs/env/crosscompile.h +75 -6
- data/source/bzs/env/mbcswchrLinux.cpp +2 -2
- data/source/bzs/env/tcharMinGW.h +4 -0
- data/source/bzs/example/changeSchema.cpp +22 -17
- data/source/bzs/example/queryData.cpp +4 -0
- data/source/bzs/netsvc/client/iconnection.h +3 -1
- data/source/bzs/netsvc/client/tcpClient.h +10 -3
- data/source/bzs/rtl/stringBuffers.cpp +7 -0
- data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
- data/source/bzs/test/tdclatl/test_v3.js +1017 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
- data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
- data/source/bzs/test/trdclengn/testField.h +3305 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
- data/source/bzs/test/trdclengn/testbase.h +137 -0
- data/source/global/ormsrcgen/srcgen.cpp +23 -12
- data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
- data/source/global/querystmts/querystmts.cpp +2 -3
- data/source/global/tdclatl/Bitset.cpp +38 -0
- data/source/global/tdclatl/Bitset.h +63 -0
- data/source/global/tdclatl/Database.cpp +59 -18
- data/source/global/tdclatl/Database.h +7 -4
- data/source/global/tdclatl/DbDef.cpp +6 -6
- data/source/global/tdclatl/DbDef.h +2 -1
- data/source/global/tdclatl/Field.cpp +112 -0
- data/source/global/tdclatl/Field.h +19 -5
- data/source/global/tdclatl/FieldDef.cpp +137 -16
- data/source/global/tdclatl/FieldDef.h +18 -2
- data/source/global/tdclatl/FieldDefs.cpp +54 -1
- data/source/global/tdclatl/FieldDefs.h +3 -0
- data/source/global/tdclatl/GroupQuery.cpp +8 -8
- data/source/global/tdclatl/QueryBase.cpp +65 -0
- data/source/global/tdclatl/QueryBase.h +10 -0
- data/source/global/tdclatl/Record.cpp +33 -2
- data/source/global/tdclatl/Record.h +3 -1
- data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
- data/source/global/tdclatl/RecordsetQuery.h +8 -0
- data/source/global/tdclatl/Table.cpp +127 -3
- data/source/global/tdclatl/Table.h +10 -1
- data/source/global/tdclatl/TableDef.cpp +41 -8
- data/source/global/tdclatl/TableDef.h +7 -2
- data/source/global/tdclatl/activeTable.cpp +40 -71
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +222 -28
- data/source/linux/tchar.h +100 -96
- data/transactd.gemspec +2 -2
- metadata +13 -11
- data/BUILD_UNIX-JA.md +0 -161
- data/BUILD_WIN-JA.md +0 -326
- data/README_ORMSRCGEN-JA.md +0 -115
- data/README_ORMSRCGEN.md +0 -118
- data/RELEASE_NOTE-JA.md +0 -356
- data/RELEASE_NOTE.md +0 -360
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
#ifndef BZS_DB_PROTOCOL_TDAP_MYDATETIME_H
|
|
2
|
+
#define BZS_DB_PROTOCOL_TDAP_MYDATETIME_H
|
|
3
|
+
/*=================================================================
|
|
4
|
+
Copyright (C) 2015 BizStation Corp All rights reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or
|
|
7
|
+
modify it under the terms of the GNU General Public License
|
|
8
|
+
as published by the Free Software Foundation; either version 2
|
|
9
|
+
of the License, or (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
|
+
02111-1307, USA.
|
|
20
|
+
=================================================================*/
|
|
21
|
+
#include <tchar.h>
|
|
22
|
+
#include <bzs/env/compiler.h>
|
|
23
|
+
#include <stddef.h>
|
|
24
|
+
|
|
25
|
+
namespace bzs
|
|
26
|
+
{
|
|
27
|
+
namespace db
|
|
28
|
+
{
|
|
29
|
+
namespace protocol
|
|
30
|
+
{
|
|
31
|
+
namespace tdap
|
|
32
|
+
{
|
|
33
|
+
/** @cond INTERNAL */
|
|
34
|
+
|
|
35
|
+
#pragma pack(push, 1)
|
|
36
|
+
pragma_pack1;
|
|
37
|
+
|
|
38
|
+
struct PACKAGE myDate
|
|
39
|
+
{
|
|
40
|
+
union
|
|
41
|
+
{
|
|
42
|
+
struct
|
|
43
|
+
{
|
|
44
|
+
unsigned int dd : 5;
|
|
45
|
+
unsigned int mm : 4;
|
|
46
|
+
unsigned int yy : 15;
|
|
47
|
+
unsigned int tmp : 8;
|
|
48
|
+
};
|
|
49
|
+
int i;
|
|
50
|
+
};
|
|
51
|
+
inline myDate() {};
|
|
52
|
+
inline myDate(int /*dec*/, bool /*bigendian*/) {};
|
|
53
|
+
void setValue(int v, bool btrDate_i = false);
|
|
54
|
+
int getValue(bool btrvValue = false);
|
|
55
|
+
char* toString(char* p, size_t size, bool w3_format = false);
|
|
56
|
+
myDate& operator=(const char* p);
|
|
57
|
+
#ifdef _WIN32
|
|
58
|
+
wchar_t* toString(wchar_t* p, size_t size, bool w3_format = false);
|
|
59
|
+
myDate& operator=(const wchar_t* p);
|
|
60
|
+
#endif
|
|
61
|
+
inline __int64 internalValue() const { return i; }
|
|
62
|
+
inline void setInternalValue(__int64 v) { i = (int)v; }
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
struct PACKAGE myTime
|
|
66
|
+
{
|
|
67
|
+
|
|
68
|
+
protected:
|
|
69
|
+
int m_dec;
|
|
70
|
+
bool m_bigendian;
|
|
71
|
+
public:
|
|
72
|
+
union
|
|
73
|
+
{
|
|
74
|
+
struct
|
|
75
|
+
{
|
|
76
|
+
unsigned __int64 ms : 24;
|
|
77
|
+
unsigned __int64 ss : 6;
|
|
78
|
+
unsigned __int64 nn : 6;
|
|
79
|
+
unsigned __int64 hh : 10;
|
|
80
|
+
unsigned __int64 unused : 1;
|
|
81
|
+
unsigned __int64 sign : 1;
|
|
82
|
+
unsigned __int64 tmp : 16;
|
|
83
|
+
};
|
|
84
|
+
__int64 i64;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
public:
|
|
88
|
+
inline myTime(int dec, bool bigendian) : m_dec(dec),
|
|
89
|
+
m_bigendian(bigendian){};
|
|
90
|
+
virtual void setValue(__int64 v, bool btrTime_i = false);
|
|
91
|
+
virtual __int64 getValue(bool btrTime_i = false);
|
|
92
|
+
char* toString(char* p, size_t size);
|
|
93
|
+
myTime& operator=(const char* p);
|
|
94
|
+
#ifdef _WIN32
|
|
95
|
+
wchar_t* toString(wchar_t* p, size_t size);
|
|
96
|
+
myTime& operator=(const wchar_t* p);
|
|
97
|
+
#endif
|
|
98
|
+
inline __int64 internalValue() const { return i64; }
|
|
99
|
+
inline void setInternalValue(__int64 v) { i64 = v; }
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
struct PACKAGE maTime : public myTime
|
|
103
|
+
{
|
|
104
|
+
virtual void setValue(__int64 v, bool btrTime_i = false);
|
|
105
|
+
virtual __int64 getValue(bool btrTime_i = false);
|
|
106
|
+
public:
|
|
107
|
+
inline maTime(int dec, bool bigendian) : myTime(dec, bigendian){}
|
|
108
|
+
maTime& operator=(const char* p);
|
|
109
|
+
#ifdef _WIN32
|
|
110
|
+
maTime& operator=(const wchar_t* p) ;
|
|
111
|
+
#endif
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
struct PACKAGE myDateTime
|
|
115
|
+
{
|
|
116
|
+
protected:
|
|
117
|
+
int m_dec;
|
|
118
|
+
bool m_bigendian;
|
|
119
|
+
public:
|
|
120
|
+
union
|
|
121
|
+
{
|
|
122
|
+
struct
|
|
123
|
+
{
|
|
124
|
+
unsigned __int64 ms : 24;
|
|
125
|
+
unsigned __int64 ss : 6;
|
|
126
|
+
unsigned __int64 nn : 6;
|
|
127
|
+
unsigned __int64 hh : 5;
|
|
128
|
+
unsigned __int64 dd : 5;
|
|
129
|
+
unsigned __int64 yymm : 17; // yy*13+mm (yy 0-9999, mm 0-12)
|
|
130
|
+
unsigned __int64 sign : 1; //always 1 0 is reserved
|
|
131
|
+
};
|
|
132
|
+
__int64 i64;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
inline myDateTime(int dec, bool bigendian) : m_dec(dec), m_bigendian(bigendian){};
|
|
136
|
+
virtual void setValue(__int64 v);
|
|
137
|
+
virtual __int64 getValue();
|
|
138
|
+
char* toString(char* p, size_t size) const;
|
|
139
|
+
myDateTime& operator=(const char* p);
|
|
140
|
+
char* dateStr(char* p, size_t size) const;
|
|
141
|
+
char* timeStr(char* p, size_t size) const;
|
|
142
|
+
void setTime(const char* p);
|
|
143
|
+
|
|
144
|
+
#ifdef _WIN32
|
|
145
|
+
wchar_t* toString(wchar_t* p, size_t size) const ;
|
|
146
|
+
myDateTime& operator=(const wchar_t* p) ;
|
|
147
|
+
wchar_t* dateStr(wchar_t* p, size_t size) const;
|
|
148
|
+
wchar_t* timeStr(wchar_t*, size_t size) const;
|
|
149
|
+
void setTime(const wchar_t* p);
|
|
150
|
+
#endif
|
|
151
|
+
inline __int64 internalValue() const { return i64; }
|
|
152
|
+
inline void setInternalValue(__int64 v) { i64 = v; }
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
struct PACKAGE maDateTime : public myDateTime
|
|
156
|
+
{
|
|
157
|
+
virtual void setValue(__int64 v);
|
|
158
|
+
virtual __int64 getValue();
|
|
159
|
+
public:
|
|
160
|
+
inline maDateTime(int dec, bool bigendian) : myDateTime(dec, bigendian){};
|
|
161
|
+
maDateTime& operator=(const char* p);
|
|
162
|
+
#ifdef _WIN32
|
|
163
|
+
maDateTime& operator=(const wchar_t* p) ;
|
|
164
|
+
#endif
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
struct PACKAGE myTimeStamp
|
|
168
|
+
{
|
|
169
|
+
private:
|
|
170
|
+
int m_dec;
|
|
171
|
+
bool m_bigendian;
|
|
172
|
+
protected:
|
|
173
|
+
bool m_mariadb;
|
|
174
|
+
public:
|
|
175
|
+
union
|
|
176
|
+
{
|
|
177
|
+
struct
|
|
178
|
+
{
|
|
179
|
+
unsigned __int64 ms : 24;
|
|
180
|
+
unsigned __int64 datetime : 32;
|
|
181
|
+
unsigned __int64 tmp : 8;
|
|
182
|
+
};
|
|
183
|
+
__int64 i64;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
inline myTimeStamp(int dec, bool bigendian) : m_dec(dec),
|
|
187
|
+
m_bigendian(bigendian), m_mariadb(false){};
|
|
188
|
+
void setValue(__int64 v);
|
|
189
|
+
__int64 getValue();
|
|
190
|
+
char* toString(char* p, size_t size);
|
|
191
|
+
myTimeStamp& operator=(const char* p);
|
|
192
|
+
char* dateStr(char* p, size_t size) const;
|
|
193
|
+
char* timeStr(char* p, size_t size) const;
|
|
194
|
+
|
|
195
|
+
#ifdef _WIN32
|
|
196
|
+
wchar_t* toString(wchar_t* p, size_t size);
|
|
197
|
+
myTimeStamp& operator=(const wchar_t* p);
|
|
198
|
+
wchar_t* dateStr(wchar_t* p, size_t size) const;
|
|
199
|
+
wchar_t* timeStr(wchar_t* p, size_t size) const;
|
|
200
|
+
#endif
|
|
201
|
+
inline __int64 internalValue() const { return i64; }
|
|
202
|
+
inline void setInternalValue(__int64 v) { i64 = v; }
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
struct PACKAGE maTimeStamp : public myTimeStamp
|
|
207
|
+
{
|
|
208
|
+
|
|
209
|
+
inline maTimeStamp (int dec, bool bigendian) : myTimeStamp(dec, bigendian)
|
|
210
|
+
{
|
|
211
|
+
m_mariadb = true;
|
|
212
|
+
}
|
|
213
|
+
inline maTimeStamp& operator=(const char* p){ myTimeStamp::operator=(p); return *this;}
|
|
214
|
+
#ifdef _WIN32
|
|
215
|
+
inline maTimeStamp& operator=(const wchar_t* p) { myTimeStamp::operator=(p); return *this; }
|
|
216
|
+
#endif
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
inline int btrdateToMydate(int btrd)
|
|
220
|
+
{
|
|
221
|
+
myDate myd;
|
|
222
|
+
myd.setValue(btrd, true);
|
|
223
|
+
return myd.getValue(true);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Do not work at maridab
|
|
227
|
+
inline __int64 btrtimeToMytime(int btrTime_i, bool bigendian)
|
|
228
|
+
{
|
|
229
|
+
myTime myt(4, bigendian);
|
|
230
|
+
myt.setValue(btrTime_i, true);
|
|
231
|
+
return myt.getValue(true);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
inline int mydateToBtrdate(int myDate_i)
|
|
235
|
+
{
|
|
236
|
+
myDate myd;
|
|
237
|
+
myd.setValue(myDate_i, false);
|
|
238
|
+
return myd.getValue(true);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
inline int mytimeToBtrtime(__int64 myTime_i, bool bigendian, int dec)
|
|
242
|
+
{
|
|
243
|
+
myTime myt(dec, bigendian);
|
|
244
|
+
myt.setValue(myTime_i, false);
|
|
245
|
+
return (int)myt.getValue(true);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
template <class T>
|
|
249
|
+
__int64 getInternalValue(int dec, bool bigendian, __int64 value)
|
|
250
|
+
{
|
|
251
|
+
T t(dec, bigendian);
|
|
252
|
+
t.setValue(value);
|
|
253
|
+
return t.internalValue();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
template <class T>
|
|
257
|
+
__int64 getStoreValue(int dec, bool bigendian, __int64 value)
|
|
258
|
+
{
|
|
259
|
+
T t(dec, bigendian);
|
|
260
|
+
t.setInternalValue(value);
|
|
261
|
+
return t.getValue();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
#pragma warning(disable : 4244)
|
|
265
|
+
template <class T, typename CHAR>
|
|
266
|
+
const CHAR* date_time_str(int dec, bool bigendian, __int64 value, CHAR* buf, size_t size)
|
|
267
|
+
{
|
|
268
|
+
T t(dec, bigendian);
|
|
269
|
+
t.setValue(value);
|
|
270
|
+
return t.toString(buf, size);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
template <class T, class T2>
|
|
274
|
+
inline __int64 str_to_64(int dec, bool bigendian, const T2* data)
|
|
275
|
+
{
|
|
276
|
+
T t(dec, bigendian);
|
|
277
|
+
t = data;
|
|
278
|
+
return t.getValue();
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
#pragma warning(default : 4244)
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
#pragma pack(pop)
|
|
286
|
+
pragma_pop;
|
|
287
|
+
/** @endcond */
|
|
288
|
+
|
|
289
|
+
} // namespace tdap
|
|
290
|
+
} // namespace protocol
|
|
291
|
+
} // namespace db
|
|
292
|
+
} // namespace bzs
|
|
293
|
+
|
|
294
|
+
#endif //BZS_DB_PROTOCOL_TDAP_MYDATETIME_H
|
|
@@ -43,7 +43,7 @@ namespace tdap
|
|
|
43
43
|
namespace mysql
|
|
44
44
|
{
|
|
45
45
|
|
|
46
|
-
schemaBuilder::schemaBuilder(void)
|
|
46
|
+
schemaBuilder::schemaBuilder(void): m_stat(0)
|
|
47
47
|
{
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -72,12 +72,12 @@ uchar_td convFieldType(enum enum_field_types type, uint flags, bool binary,
|
|
|
72
72
|
switch (type)
|
|
73
73
|
{
|
|
74
74
|
case MYSQL_TYPE_DECIMAL:
|
|
75
|
-
|
|
75
|
+
case MYSQL_TYPE_NEWDECIMAL:
|
|
76
|
+
return ft_mydecimal;
|
|
76
77
|
case MYSQL_TYPE_TINY:
|
|
77
78
|
case MYSQL_TYPE_SHORT:
|
|
78
79
|
case MYSQL_TYPE_LONG:
|
|
79
80
|
case MYSQL_TYPE_LONGLONG:
|
|
80
|
-
case MYSQL_TYPE_YEAR:
|
|
81
81
|
case MYSQL_TYPE_INT24:
|
|
82
82
|
if (flags & AUTO_INCREMENT_FLAG)
|
|
83
83
|
return (flags & UNSIGNED_FLAG) ? ft_autoIncUnsigned : ft_autoinc;
|
|
@@ -85,29 +85,24 @@ 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_enum;
|
|
88
89
|
case MYSQL_TYPE_SET:
|
|
90
|
+
return ft_set;
|
|
89
91
|
case MYSQL_TYPE_BIT:
|
|
90
|
-
return
|
|
92
|
+
return ft_bit;
|
|
91
93
|
case MYSQL_TYPE_FLOAT:
|
|
92
94
|
case MYSQL_TYPE_DOUBLE:
|
|
93
95
|
return ft_float;
|
|
96
|
+
case MYSQL_TYPE_YEAR:
|
|
97
|
+
return ft_myyear;
|
|
94
98
|
case MYSQL_TYPE_DATE:
|
|
95
|
-
|
|
99
|
+
case MYSQL_TYPE_NEWDATE:
|
|
96
100
|
return ft_mydate;
|
|
97
101
|
case MYSQL_TYPE_TIME:
|
|
98
|
-
#if(MYSQL_VERSION_ID > 50600)
|
|
99
|
-
case MYSQL_TYPE_TIME2:
|
|
100
|
-
#endif
|
|
101
102
|
return ft_mytime;
|
|
102
103
|
case MYSQL_TYPE_DATETIME:
|
|
103
|
-
#if(MYSQL_VERSION_ID > 50600)
|
|
104
|
-
case MYSQL_TYPE_DATETIME2:
|
|
105
|
-
#endif
|
|
106
104
|
return ft_mydatetime;
|
|
107
105
|
case MYSQL_TYPE_TIMESTAMP:
|
|
108
|
-
#if(MYSQL_VERSION_ID > 50600)
|
|
109
|
-
case MYSQL_TYPE_TIMESTAMP2:
|
|
110
|
-
#endif
|
|
111
106
|
return ft_mytimestamp;
|
|
112
107
|
case MYSQL_TYPE_VARCHAR:
|
|
113
108
|
case MYSQL_TYPE_VAR_STRING: //?
|
|
@@ -125,6 +120,20 @@ uchar_td convFieldType(enum enum_field_types type, uint flags, bool binary,
|
|
|
125
120
|
if (flags & BINARY_FLAG)
|
|
126
121
|
return ft_myblob;
|
|
127
122
|
return ft_mytext;
|
|
123
|
+
case MYSQL_TYPE_GEOMETRY:
|
|
124
|
+
return ft_mygeometry;
|
|
125
|
+
#if ((MYSQL_VERSION_ID > 50700) && (MYSQL_VERSION_ID < 100000))
|
|
126
|
+
case MYSQL_TYPE_JSON:
|
|
127
|
+
return ft_myjson;
|
|
128
|
+
#endif
|
|
129
|
+
#if(MYSQL_VERSION_ID > 50600)
|
|
130
|
+
case MYSQL_TYPE_TIME2:
|
|
131
|
+
return ft_mytime;
|
|
132
|
+
case MYSQL_TYPE_DATETIME2:
|
|
133
|
+
return ft_mydatetime;
|
|
134
|
+
case MYSQL_TYPE_TIMESTAMP2:
|
|
135
|
+
return ft_mytimestamp;
|
|
136
|
+
#endif
|
|
128
137
|
default: // MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_GEOMETRY
|
|
129
138
|
return unicode ? ft_wstring : ft_string;
|
|
130
139
|
}
|
|
@@ -142,67 +151,136 @@ bool isBinary(const CHARSET_INFO& cs)
|
|
|
142
151
|
return (&cs == &my_charset_bin);
|
|
143
152
|
}
|
|
144
153
|
|
|
145
|
-
|
|
146
|
-
|
|
154
|
+
tabledef* schemaBuilder::getTabledef(engine::mysql::table* src, int id,
|
|
155
|
+
bool nouseNullkey, uchar* rec, size_t size)
|
|
156
|
+
{
|
|
157
|
+
|
|
158
|
+
src->restoreRecord();
|
|
159
|
+
size_t tdSizelen = (sizeof(tabledef) + (sizeof(fielddef) * src->fields()) +
|
|
160
|
+
(sizeof(keydef) * src->keys()));
|
|
161
|
+
|
|
162
|
+
if (size < tdSizelen)
|
|
163
|
+
{
|
|
164
|
+
m_stat = STATUS_BUFFERTOOSMALL;
|
|
165
|
+
return NULL;
|
|
166
|
+
}
|
|
167
|
+
// index
|
|
168
|
+
keynumConvert kc(&src->keyDef(0), src->keys());
|
|
169
|
+
|
|
147
170
|
uint_td datalen = 0;
|
|
148
|
-
boost::shared_array<uchar> rec(new uchar[65000]);
|
|
149
171
|
// table
|
|
150
|
-
tabledef&
|
|
151
|
-
initTableDef(src,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
(src->
|
|
172
|
+
tabledef& td = (*((tabledef*)rec));
|
|
173
|
+
initTableDef(src, td, id);
|
|
174
|
+
td.fieldCount = (uchar_td)src->fields();
|
|
175
|
+
td.keyCount = (uchar_td)src->keys();
|
|
176
|
+
td.charsetIndex = charsetIndex(src->charset().csname);
|
|
177
|
+
td.primaryKeyNum =
|
|
178
|
+
(src->primarykeyNum() < td.keyCount) ? kc.clientKeynum(src->primarykeyNum()) : -1;
|
|
157
179
|
#ifdef USE_BTRV_VARIABLE_LEN
|
|
158
|
-
|
|
180
|
+
td.flags.bit0 = (src->recordFormatType() & RF_FIXED_PLUS_VALIABLE_LEN);
|
|
159
181
|
if (src->recordFormatType() & RF_FIXED_PLUS_VALIABLE_LEN)
|
|
160
|
-
|
|
182
|
+
td.fixedRecordLen =
|
|
161
183
|
(ushort_td)(src->recordLenCl() - src->lastVarFieldDataLen());
|
|
162
184
|
else
|
|
163
185
|
#endif
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
186
|
+
td.fixedRecordLen = (ushort_td)src->recordLenCl();
|
|
187
|
+
td.m_maxRecordLen = (ushort_td)src->recordLenCl();
|
|
188
|
+
td.optionFlags.bitA = ((src->recordFormatType() & RF_VALIABLE_LEN) != 0);
|
|
189
|
+
td.optionFlags.bitB = (src->blobFields() != 0);
|
|
190
|
+
#if defined(MARIADB_BASE_VERSION)
|
|
191
|
+
td.m_useInMariadb = true;
|
|
192
|
+
#else
|
|
193
|
+
td.m_useInMariadb = false;
|
|
194
|
+
#endif
|
|
195
|
+
td.m_srvMinorVer = (MYSQL_VERSION_ID / 100) % 100;
|
|
170
196
|
datalen += sizeof(tabledef);
|
|
171
|
-
|
|
197
|
+
td.fieldDefs = (fielddef*)(rec + datalen);
|
|
172
198
|
// field
|
|
173
199
|
ushort_td pos = 0;
|
|
200
|
+
String str;
|
|
174
201
|
for (int i = 0; i < src->fields(); ++i)
|
|
175
202
|
{
|
|
176
203
|
if (isNisField(src->fieldName(i)))
|
|
177
|
-
--
|
|
204
|
+
--td.fieldCount;
|
|
178
205
|
else
|
|
179
206
|
{
|
|
180
207
|
fielddef fd;
|
|
181
|
-
|
|
208
|
+
Field* f = src->field(i);
|
|
209
|
+
memset(&fd, 0, sizeof(fd));
|
|
182
210
|
fd.setName(src->fieldName(i));
|
|
183
211
|
fd.len = src->fieldLen(i); // filed->pack_length();
|
|
184
212
|
fd.pos = pos;
|
|
185
213
|
fd.type = convFieldType(src->fieldRealType(i), src->fieldFlags(i),
|
|
186
214
|
isBinary(src->fieldCharset(i)),
|
|
187
215
|
isUnicode(src->fieldCharset(i)));
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
216
|
+
if ((fd.type == ft_mytime) || (fd.type == ft_mydatetime) || (fd.type == ft_mytimestamp))
|
|
217
|
+
{
|
|
218
|
+
if (src->isLegacyTimeFormat(i))
|
|
219
|
+
fd.m_options |= FIELD_OPTION_REGACY_TIME;
|
|
220
|
+
|
|
221
|
+
//for mariadb
|
|
222
|
+
#if defined(MARIADB_BASE_VERSION)
|
|
223
|
+
if(td.isMariaTimeFormat())
|
|
224
|
+
fd.m_options |= FIELD_OPTION_MARIADB;
|
|
225
|
+
#endif
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (fd.type == ft_mydecimal)
|
|
229
|
+
{
|
|
230
|
+
fd.digits = my_decimal_length_to_precision(f->field_length, f->decimals(),
|
|
231
|
+
(f->flags & UNSIGNED_FLAG) != 0);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
fd.setPadCharSettings(false, true);
|
|
235
|
+
if (fd.isStringType())
|
|
236
|
+
fd.setCharsetIndex(charsetIndex(src->fieldCharset(i).csname));
|
|
237
|
+
|
|
238
|
+
if ((fd.type == ft_mydatetime || fd.type == ft_mytimestamp) && (f->val_real() == 0))
|
|
239
|
+
{// No constant value
|
|
240
|
+
fd.setDefaultValue(0.0f);
|
|
241
|
+
if (cp_has_insert_default_function(f))
|
|
242
|
+
fd.setDefaultValue(DFV_TIMESTAMP_DEFAULT);
|
|
243
|
+
}
|
|
244
|
+
else if (fd.isIntegerType())
|
|
245
|
+
fd.setDefaultValue((__int64)f->val_int());
|
|
246
|
+
else
|
|
247
|
+
{
|
|
248
|
+
f->val_str(&str, &str);
|
|
249
|
+
fd.setDefaultValue(str.c_ptr());
|
|
250
|
+
}
|
|
251
|
+
fd.setNullable(f->null_bit != 0, f->is_null());
|
|
252
|
+
if (fd.isNullable()) ++td.m_nullfields;
|
|
253
|
+
if ((fd.type == ft_mydatetime || fd.type == ft_mytimestamp) &&
|
|
254
|
+
cp_has_update_default_function(f))
|
|
255
|
+
fd.setTimeStampOnUpdate(true);
|
|
256
|
+
|
|
257
|
+
fd.decimals = (uchar_td)f->decimals();
|
|
258
|
+
if (fd.decimals == NOT_FIXED_DEC)
|
|
259
|
+
fd.decimals = 0;
|
|
260
|
+
|
|
261
|
+
if (td.isLegacyTimeFormat(fd))
|
|
262
|
+
{
|
|
263
|
+
fd.m_options |= FIELD_OPTION_REGACY_TIME;
|
|
264
|
+
fd.decimals = 0;
|
|
265
|
+
}
|
|
266
|
+
else
|
|
267
|
+
fd.m_options &= ~FIELD_OPTION_REGACY_TIME;
|
|
191
268
|
pos += fd.len;
|
|
192
269
|
datalen =
|
|
193
|
-
copyToRecordImage(rec
|
|
270
|
+
copyToRecordImage(rec, &fd, sizeof(fielddef), datalen);
|
|
194
271
|
}
|
|
195
272
|
}
|
|
273
|
+
td.m_nullbytes = (td.m_nullfields + 7) / 8;
|
|
196
274
|
|
|
197
|
-
// index
|
|
198
275
|
for (int i = 0; i < src->keys(); ++i)
|
|
199
276
|
{
|
|
200
|
-
const KEY& key = src->keyDef(i);
|
|
277
|
+
const KEY& key = src->keyDef(kc.keyNumByMakeOrder(i));
|
|
201
278
|
keydef kd;
|
|
202
279
|
memset(&kd, 0, sizeof(keydef));
|
|
203
280
|
kd.segmentCount = key.user_defined_key_parts;
|
|
204
281
|
kd.keyNumber = i;
|
|
205
282
|
int segNum = 0;
|
|
283
|
+
bool allNullkey = true;
|
|
206
284
|
for (int j = 0; j < (int)key.user_defined_key_parts; ++j)
|
|
207
285
|
{
|
|
208
286
|
keySegment& sg = kd.segments[segNum];
|
|
@@ -216,7 +294,9 @@ short schemaBuilder::insertMetaRecord(table* mtb, table* src, int id)
|
|
|
216
294
|
sg.flags.bit1 = 1; // change able
|
|
217
295
|
sg.flags.bit4 = (j != kd.segmentCount - 1); // segment
|
|
218
296
|
sg.flags.bit8 = 1; // extend key type
|
|
219
|
-
|
|
297
|
+
if (nouseNullkey == false)
|
|
298
|
+
sg.flags.bit9 = ks.null_bit ? 1 : 0; // null key
|
|
299
|
+
allNullkey = allNullkey & sg.flags.bit9;
|
|
220
300
|
if (isStringTypeForIndex(convFieldType(
|
|
221
301
|
src->fieldType(sg.fieldNum),
|
|
222
302
|
src->fieldFlags(sg.fieldNum),
|
|
@@ -224,21 +304,51 @@ short schemaBuilder::insertMetaRecord(table* mtb, table* src, int id)
|
|
|
224
304
|
isUnicode(src->fieldCharset(sg.fieldNum)))))
|
|
225
305
|
sg.flags.bitA =
|
|
226
306
|
!(src->fieldFlags(sg.fieldNum) & BINARY_FLAG);// case in-sencitive
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
// suppot prefix key
|
|
231
|
-
fd.keylen = ks.length;
|
|
232
|
-
}
|
|
307
|
+
|
|
308
|
+
Field* f = src->field(sg.fieldNum);
|
|
309
|
+
if (f->pack_length() != ks.length + var_bytes_if(f))
|
|
310
|
+
td.fieldDefs[sg.fieldNum].keylen = ks.length ; // suppot prefix key
|
|
233
311
|
++segNum;
|
|
234
312
|
}
|
|
235
313
|
}
|
|
236
|
-
|
|
314
|
+
if (allNullkey)
|
|
315
|
+
{
|
|
316
|
+
for (int i=0;i<kd.segmentCount; ++i)
|
|
317
|
+
{
|
|
318
|
+
kd.segments[segNum].flags.bit9 = 0; //part segment null key
|
|
319
|
+
kd.segments[segNum].flags.bit3 = 1; //all segment null key
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
datalen = copyToRecordImage(rec, &kd, sizeof(keydef), datalen);
|
|
323
|
+
}
|
|
324
|
+
td = (tabledef&)(*rec);
|
|
325
|
+
td.varSize = datalen - 4;
|
|
326
|
+
td.setFielddefsPtr();
|
|
327
|
+
td.setKeydefsPtr();
|
|
328
|
+
|
|
329
|
+
return &td;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
tabledef* schemaBuilder::getTabledef(database* db, const char* tablename, uchar* rec, size_t size)
|
|
333
|
+
{
|
|
334
|
+
table* tb = db->openTable(tablename, TD_OPEN_READONLY, NULL);
|
|
335
|
+
if (db->stat())
|
|
336
|
+
{
|
|
337
|
+
m_stat = db->stat();
|
|
338
|
+
return NULL;
|
|
237
339
|
}
|
|
238
|
-
|
|
239
|
-
|
|
340
|
+
tabledef* td = getTabledef(tb, 0, true, rec, size);
|
|
341
|
+
db->closeTable(tb);
|
|
342
|
+
return td;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
short schemaBuilder::insertMetaRecord(table* mtb, table* src, int id, bool nouseNullkey)
|
|
346
|
+
{
|
|
347
|
+
boost::shared_array<uchar> rec(new uchar[65000]);
|
|
348
|
+
|
|
349
|
+
tabledef* td = getTabledef(src, id, nouseNullkey, rec.get(), 65000);
|
|
240
350
|
mtb->clearBuffer();
|
|
241
|
-
mtb->setRecordFromPacked(rec.get(),
|
|
351
|
+
mtb->setRecordFromPacked(rec.get(), td->varSize + 4, NULL);
|
|
242
352
|
mtb->insert(true);
|
|
243
353
|
return mtb->stat();
|
|
244
354
|
}
|
|
@@ -299,7 +409,7 @@ void schemaBuilder::listSchemaTable(database* db, std::vector<std::string>& shce
|
|
|
299
409
|
}
|
|
300
410
|
}
|
|
301
411
|
|
|
302
|
-
short schemaBuilder::execute(database* db, table* mtb)
|
|
412
|
+
short schemaBuilder::execute(database* db, table* mtb, bool nouseNullkey)
|
|
303
413
|
{
|
|
304
414
|
char path[FN_REFLEN + 1];
|
|
305
415
|
build_table_filename(path, sizeof(path) - 1, db->name().c_str(), "", "", 0);
|
|
@@ -336,7 +446,7 @@ short schemaBuilder::execute(database* db, table* mtb)
|
|
|
336
446
|
smartTransction trn(db);
|
|
337
447
|
for (size_t i = 0; i < tables.size(); ++i)
|
|
338
448
|
{
|
|
339
|
-
if ((stat = insertMetaRecord(mtb, tables[i], ++id)) != 0)
|
|
449
|
+
if ((stat = insertMetaRecord(mtb, tables[i], ++id, nouseNullkey)) != 0)
|
|
340
450
|
break;
|
|
341
451
|
}
|
|
342
452
|
if (stat == 0) trn.end();
|
|
@@ -47,12 +47,15 @@ namespace mysql
|
|
|
47
47
|
class schemaBuilder
|
|
48
48
|
{
|
|
49
49
|
short insertMetaRecord(engine::mysql::table* mtb, engine::mysql::table* src,
|
|
50
|
-
int id);
|
|
51
|
-
|
|
50
|
+
int id, bool nouseNullkey);
|
|
51
|
+
short m_stat;
|
|
52
52
|
public:
|
|
53
53
|
schemaBuilder();
|
|
54
54
|
~schemaBuilder();
|
|
55
|
-
short
|
|
55
|
+
short stat() const { return m_stat;}
|
|
56
|
+
tabledef* getTabledef(engine::mysql::table* src, int id, bool nouseNullkey, uchar* rec, size_t size);
|
|
57
|
+
tabledef* getTabledef(engine::mysql::database* db, const char* tablename, uchar* rec, size_t size);
|
|
58
|
+
short execute(engine::mysql::database* db, engine::mysql::table* mtb, bool nouseNullkey);
|
|
56
59
|
static void listSchemaTable(engine::mysql::database* db, std::vector<std::string>& shcemaNames);
|
|
57
60
|
};
|
|
58
61
|
|