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.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/CMakeLists.txt +1 -1
  3. data/README-JA.md +52 -529
  4. data/README.md +52 -523
  5. data/bin/common/tdclc_32_3_0.dll +0 -0
  6. data/bin/common/tdclc_64_3_0.dll +0 -0
  7. data/build/common/system.cmake +2 -1
  8. data/build/common/transactd_cl_common.cmake +3 -6
  9. data/build/swig/ruby/ruby.swg +85 -28
  10. data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
  11. data/build/swig/tdcl.i +161 -5
  12. data/build/tdclc/CMakeLists.txt +1 -0
  13. data/build/tdclc/tdclc.cbproj +7 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
  17. data/build/tdclrb/tdclrb.rc +4 -4
  18. data/source/bzs/db/blobStructs.h +1 -1
  19. data/source/bzs/db/engine/mysql/database.cpp +199 -74
  20. data/source/bzs/db/engine/mysql/database.h +47 -18
  21. data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
  22. data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
  23. data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
  24. data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
  25. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
  26. data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
  27. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
  28. data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
  29. data/source/bzs/db/protocol/tdap/client/client.h +82 -15
  30. data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
  31. data/source/bzs/db/protocol/tdap/client/database.h +19 -6
  32. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
  33. data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
  34. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
  35. data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
  36. data/source/bzs/db/protocol/tdap/client/field.h +110 -121
  37. data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
  38. data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
  39. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
  40. data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
  41. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
  42. data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
  43. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
  44. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
  45. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
  46. data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
  47. data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
  48. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
  49. data/source/bzs/db/protocol/tdap/client/request.h +2 -1
  50. data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
  51. data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
  52. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
  53. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
  54. data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
  55. data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
  56. data/source/bzs/db/protocol/tdap/client/table.h +112 -37
  57. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
  58. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
  59. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
  60. data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
  61. data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
  62. data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
  63. data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
  64. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
  65. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
  66. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
  67. data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
  68. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
  69. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
  70. data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
  71. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
  72. data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
  73. data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
  74. data/source/bzs/db/protocol/tdap/uri.h +40 -32
  75. data/source/bzs/db/transactd/connManager.cpp +1 -1
  76. data/source/bzs/db/transactd/transactd.cpp +7 -0
  77. data/source/bzs/env/compiler.h +107 -94
  78. data/source/bzs/env/crosscompile.cpp +24 -12
  79. data/source/bzs/env/crosscompile.h +75 -6
  80. data/source/bzs/env/mbcswchrLinux.cpp +2 -2
  81. data/source/bzs/env/tcharMinGW.h +4 -0
  82. data/source/bzs/example/changeSchema.cpp +22 -17
  83. data/source/bzs/example/queryData.cpp +4 -0
  84. data/source/bzs/netsvc/client/iconnection.h +3 -1
  85. data/source/bzs/netsvc/client/tcpClient.h +10 -3
  86. data/source/bzs/rtl/stringBuffers.cpp +7 -0
  87. data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
  88. data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
  89. data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
  90. data/source/bzs/test/tdclatl/test_v3.js +1017 -0
  91. data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
  92. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
  93. data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
  94. data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
  95. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
  96. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
  97. data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
  98. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
  99. data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
  100. data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
  101. data/source/bzs/test/trdclengn/testField.h +3305 -0
  102. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
  103. data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
  104. data/source/bzs/test/trdclengn/testbase.h +137 -0
  105. data/source/global/ormsrcgen/srcgen.cpp +23 -12
  106. data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
  107. data/source/global/querystmts/querystmts.cpp +2 -3
  108. data/source/global/tdclatl/Bitset.cpp +38 -0
  109. data/source/global/tdclatl/Bitset.h +63 -0
  110. data/source/global/tdclatl/Database.cpp +59 -18
  111. data/source/global/tdclatl/Database.h +7 -4
  112. data/source/global/tdclatl/DbDef.cpp +6 -6
  113. data/source/global/tdclatl/DbDef.h +2 -1
  114. data/source/global/tdclatl/Field.cpp +112 -0
  115. data/source/global/tdclatl/Field.h +19 -5
  116. data/source/global/tdclatl/FieldDef.cpp +137 -16
  117. data/source/global/tdclatl/FieldDef.h +18 -2
  118. data/source/global/tdclatl/FieldDefs.cpp +54 -1
  119. data/source/global/tdclatl/FieldDefs.h +3 -0
  120. data/source/global/tdclatl/GroupQuery.cpp +8 -8
  121. data/source/global/tdclatl/QueryBase.cpp +65 -0
  122. data/source/global/tdclatl/QueryBase.h +10 -0
  123. data/source/global/tdclatl/Record.cpp +33 -2
  124. data/source/global/tdclatl/Record.h +3 -1
  125. data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
  126. data/source/global/tdclatl/RecordsetQuery.h +8 -0
  127. data/source/global/tdclatl/Table.cpp +127 -3
  128. data/source/global/tdclatl/Table.h +10 -1
  129. data/source/global/tdclatl/TableDef.cpp +41 -8
  130. data/source/global/tdclatl/TableDef.h +7 -2
  131. data/source/global/tdclatl/activeTable.cpp +40 -71
  132. data/source/global/tdclatl/resource.h +0 -0
  133. data/source/global/tdclatl/tdclatl.idl +222 -28
  134. data/source/linux/tchar.h +100 -96
  135. data/transactd.gemspec +2 -2
  136. metadata +13 -11
  137. data/BUILD_UNIX-JA.md +0 -161
  138. data/BUILD_WIN-JA.md +0 -326
  139. data/README_ORMSRCGEN-JA.md +0 -115
  140. data/README_ORMSRCGEN.md +0 -118
  141. data/RELEASE_NOTE-JA.md +0 -356
  142. data/RELEASE_NOTE.md +0 -360
  143. data/bin/common/tdclc_32_2_4.dll +0 -0
  144. data/bin/common/tdclc_64_2_4.dll +0 -0
  145. data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
@@ -23,10 +23,145 @@
23
23
  #include <algorithm>
24
24
  #include <string.h>
25
25
 
26
+
27
+ inline __int64 changeEndian2(__int64 v)
28
+ {
29
+ __int64 ret = 0;
30
+ char* l = (char*)&ret;
31
+ char* r = (char*)&v;
32
+ l[0] = r[1];
33
+ l[1] = r[0];
34
+ return ret;
35
+ }
36
+
37
+ inline __int64 changeEndian3(__int64 v)
38
+ {
39
+ __int64 ret = 0;
40
+ char* l = (char*)&ret;
41
+ char* r = (char*)&v;
42
+ l[0] = r[2];
43
+ l[1] = r[1];
44
+ l[2] = r[0];
45
+ return ret;
46
+ }
47
+
48
+ inline __int64 changeEndian4(__int64 v)
49
+ {
50
+ __int64 ret = 0;
51
+ char* l = (char*)&ret;
52
+ char* r = (char*)&v;
53
+ l[0] = r[3];
54
+ l[1] = r[2];
55
+ l[2] = r[1];
56
+ l[3] = r[0];
57
+ return ret;
58
+ }
59
+
60
+ inline __int64 changeEndian5(__int64 v)
61
+ {
62
+ __int64 ret = 0;
63
+ char* l = (char*)&ret;
64
+ char* r = (char*)&v;
65
+ l[0] = r[4];
66
+ l[1] = r[3];
67
+ l[2] = r[2];
68
+ l[3] = r[1];
69
+ l[4] = r[0];
70
+ return ret;
71
+ }
72
+
73
+ inline __int64 changeEndian6(__int64 v)
74
+ {
75
+ __int64 ret = 0;
76
+ char* l = (char*)&ret;
77
+ char* r = (char*)&v;
78
+ l[0] = r[5];
79
+ l[1] = r[4];
80
+ l[2] = r[3];
81
+ l[3] = r[2];
82
+ l[4] = r[1];
83
+ l[5] = r[0];
84
+ return ret;
85
+ }
86
+
87
+ inline __int64 changeEndian7(__int64 v)
88
+ {
89
+ __int64 ret = 0;
90
+ char* l = (char*)&ret;
91
+ char* r = (char*)&v;
92
+ l[0] = r[6];
93
+ l[1] = r[5];
94
+ l[2] = r[4];
95
+ l[3] = r[3];
96
+ l[4] = r[2];
97
+ l[5] = r[1];
98
+ l[6] = r[0];
99
+ return ret;
100
+ }
101
+
102
+ inline __int64 changeEndian8(__int64 v)
103
+ {
104
+ __int64 ret = 0;
105
+ char* l = (char*)&ret;
106
+ char* r = (char*)&v;
107
+ l[0] = r[7];
108
+ l[1] = r[6];
109
+ l[2] = r[5];
110
+ l[3] = r[4];
111
+ l[4] = r[3];
112
+ l[5] = r[2];
113
+ l[6] = r[1];
114
+ l[7] = r[0];
115
+ return ret;
116
+ }
117
+
118
+ inline __int64 changeEndian(__int64 v, int len)
119
+ {
120
+ switch(len)
121
+ {
122
+ case 1: return v;
123
+ case 2: return changeEndian2(v);
124
+ case 3: return changeEndian3(v);
125
+ case 4: return changeEndian4(v);
126
+ case 5: return changeEndian5(v);
127
+ case 6: return changeEndian6(v);
128
+ case 7: return changeEndian7(v);
129
+ case 8: return changeEndian8(v);
130
+ }
131
+ return v;
132
+ }
133
+
134
+ inline int int24toInt(const char* p)
135
+ {
136
+ return ((*((int*)p) & 0xFFFFFF) << 8) / 0x100;
137
+ }
138
+
139
+ inline unsigned int int24toUint(const char* p)
140
+ {
141
+ return *((unsigned int*)p) & 0xFFFFFF;
142
+ }
143
+
144
+ inline __int64 myBittoInt64(const char* p, int len)
145
+ {
146
+ __int64 v = 0;
147
+ memcpy(&v, p, len);
148
+ return changeEndian8(v);
149
+ }
150
+
151
+ inline void storeInt24(int v, char* p)
152
+ {
153
+ memcpy(p, &v, 3);
154
+ }
155
+
156
+ inline void storeUint24(unsigned int v, char* p)
157
+ {
158
+ memcpy(p, &v, 3);
159
+ }
160
+
26
161
  inline int compareUint24(const char* l, const char* r)
27
162
  {
28
- unsigned int lv = *((unsigned int*)l) & 0xFFFFFF;
29
- unsigned int rv = *((unsigned int*)r) & 0xFFFFFF;
163
+ unsigned int lv = int24toUint(l);
164
+ unsigned int rv = int24toUint(r);;
30
165
  if (lv < rv)
31
166
  return -1;
32
167
  if (lv > rv)
@@ -36,8 +171,8 @@ inline int compareUint24(const char* l, const char* r)
36
171
 
37
172
  inline int compareInt24(const char* l, const char* r)
38
173
  {
39
- int lv = ((*((int*)l) & 0xFFFFFF) << 8) / 0x100;
40
- int rv = ((*((int*)r) & 0xFFFFFF) << 8) / 0x100;
174
+ int lv = int24toInt(l);
175
+ int rv = int24toInt(r);
41
176
 
42
177
  if (lv < rv)
43
178
  return -1;
@@ -58,7 +193,12 @@ template <class T> inline int compare(const char* l, const char* r)
58
193
  template <class T> inline int bitMask(const char* l, const char* r)
59
194
  {
60
195
  T v = *((T*)l) & *((T*)r);
61
- return (int)(*((T*)r) - v);
196
+ v = (*((T*)r) - v);
197
+ /*
198
+ When T is __int64 then v is incoreect value.
199
+ Because return size is int.
200
+ */
201
+ return (v > 0) ? 1 : ((v < 0) ? -1 : 0);
62
202
  }
63
203
 
64
204
  template <class T> inline int compare(T l, T r)
@@ -71,30 +211,30 @@ template <class T> inline int compare(T l, T r)
71
211
  }
72
212
 
73
213
  template <class T>
74
- inline int compareVartype(const char* l, const char* r, bool bin, char logType)
214
+ inline int compareVartype(const char* l, const char* r, bool bin, bool all, bool incase)
75
215
  {
76
216
  int llen = (*(T*)l);
77
217
  int rlen = (*(T*)r);
78
218
  int tmp = std::min<int>(llen, rlen);
79
- if (logType & CMPLOGICAL_CASEINSENSITIVE)
219
+ if (incase)
80
220
  tmp = _strnicmp(l + sizeof(T), r + sizeof(T), tmp);
81
221
  else if (bin)
82
222
  tmp = memcmp(l + sizeof(T), r + sizeof(T), tmp);
83
223
  else
84
224
  tmp = strncmp(l + sizeof(T), r + sizeof(T), tmp);
85
225
 
86
- if (logType & CMPLOGICAL_VAR_COMP_ALL)
226
+ if (all)
87
227
  return (tmp == 0) ? compare<int>(llen, rlen) : tmp; // match complete
88
228
  return (tmp == 0 && (llen < rlen)) ? -1 : tmp; // match a part
89
229
  }
90
230
 
91
231
  template <class T>
92
- inline int compareWvartype(const char* l, const char* r, bool bin, char logType)
232
+ inline int compareWvartype(const char* l, const char* r, bool bin, bool all, bool incase)
93
233
  {
94
234
  int llen = (*(T*)l) / sizeof(char16_t);
95
235
  int rlen = (*(T*)r) / sizeof(char16_t);
96
236
  int tmp = std::min<int>(llen, rlen);
97
- if (logType & CMPLOGICAL_CASEINSENSITIVE)
237
+ if (incase)
98
238
  tmp = wcsnicmp16((char16_t*)(l + sizeof(T)), (char16_t*)(r + sizeof(T)),
99
239
  tmp);
100
240
  else if (bin)
@@ -103,12 +243,12 @@ inline int compareWvartype(const char* l, const char* r, bool bin, char logType)
103
243
  else
104
244
  tmp = wcsncmp16((char16_t*)(l + sizeof(T)), (char16_t*)(r + sizeof(T)),
105
245
  tmp);
106
- if (logType & CMPLOGICAL_VAR_COMP_ALL)
246
+ if (all)
107
247
  return (tmp == 0) ? compare<int>(llen, rlen) : tmp; // match complete
108
248
  return (tmp == 0 && (llen < rlen)) ? -1 : tmp; // match a part
109
249
  }
110
250
 
111
- inline int compareBlobType(const char* l, const char* r, bool bin, char logType,
251
+ inline int compareBlobType(const char* l, const char* r, bool bin, bool all, bool incase,
112
252
  int sizeByte)
113
253
  {
114
254
  int llen = 0;
@@ -118,16 +258,560 @@ inline int compareBlobType(const char* l, const char* r, bool bin, char logType,
118
258
  int tmp = std::min<int>(llen, rlen);
119
259
  const char* lptr = *((const char**)(l + sizeByte));
120
260
  const char* rptr = r + sizeByte;
121
- if (logType & CMPLOGICAL_CASEINSENSITIVE)
261
+ if (incase)
122
262
  tmp = _strnicmp(lptr, rptr, tmp);
123
263
  else if (bin)
124
264
  tmp = memcmp(lptr, rptr, tmp);
125
265
  else
126
266
  tmp = strncmp(lptr, rptr, tmp);
127
267
 
128
- if (logType & CMPLOGICAL_VAR_COMP_ALL)
268
+ if (all)
129
269
  return (tmp == 0) ? compare<int>(llen, rlen) : tmp;
130
270
  return (tmp == 0 && (llen < rlen)) ? -1 : tmp;
131
271
  }
132
272
 
273
+ /* int nullComp(bool lnull, bool rnull, char log)
274
+
275
+ lnull rnull log ret
276
+ -----------------------------------------------
277
+ true true isNull 0
278
+ true true isNotNull -1
279
+ true false 0 -1
280
+ false true isNull 1
281
+ false true isNotNull 0
282
+ false false 0 2
283
+ -----------------------------------------------
284
+
285
+ real value example
286
+
287
+ lval rval ret
288
+ -----------------------------------------------
289
+ NULL isNull 0
290
+ NULL isNotNull -1
291
+ NULL 2 -1
292
+ 1 isNull 1
293
+ 1 isNotNull 0
294
+ 1 2 2
295
+ -----------------------------------------------
296
+ */
297
+ inline int nullComp(bool lnull, bool rnull, char log)
298
+ {
299
+ if (lnull)
300
+ return (log == eIsNull) ? 0 : -1;
301
+ else if (rnull)
302
+ return (log == eIsNull) ? 1 : 0;
303
+ return 2;
304
+ }
305
+
306
+ template <class T>
307
+ inline int compBitAnd(const char* l, const char* r, int len)
308
+ {
309
+ return bitMask<T>(l, r);
310
+ }
311
+
312
+ inline int compBitAnd24(const char* l, const char* r, int len)
313
+ {
314
+ int lv = int24toInt(l);
315
+ int rv = int24toInt(r);
316
+ return bitMask<int>((const char*)&lv, (const char*)&rv);
317
+ }
318
+
319
+ inline int compBitAnd64(const char* l, const char* r, int len)
320
+ {
321
+ __int64 lv = 0;
322
+ __int64 rv = 0;
323
+ memcpy(&lv, l, len);
324
+ memcpy(&rv, r, len);
325
+ return bitMask<__int64>((const char*)&lv, (const char*)&rv);
326
+ }
327
+
328
+ template <class T>
329
+ inline int compNumber(const char* l, const char* r, int len)
330
+ {
331
+ return compare<T>(l, r);
332
+ }
333
+
334
+ inline int compNumber24(const char* l, const char* r, int len)
335
+ {
336
+ return compareInt24(l, r);
337
+ }
338
+
339
+ inline int compNumberU24(const char* l, const char* r, int len)
340
+ {
341
+ return compareUint24(l, r);
342
+ }
343
+
344
+ inline int compMem(const char* l, const char* r, int len)
345
+ {
346
+ return memcmp(l, r, len);
347
+ }
348
+
349
+ inline int compString(const char* l, const char* r, int len)
350
+ {
351
+ return strncmp(l, r, len);
352
+ }
353
+
354
+ inline int compiString(const char* l, const char* r, int len)
355
+ {
356
+ return _strnicmp(l, r, len);
357
+ }
358
+
359
+ inline int compWString(const char* l, const char* r, int len)
360
+ {
361
+ return wcsncmp16((char16_t*)l, (char16_t*)r, len/2);
362
+ }
363
+
364
+ inline int compiWString(const char* l, const char* r, int len)
365
+ {
366
+ return wcsnicmp16((char16_t*)l, (char16_t*)r, len/2);
367
+ }
368
+
369
+ #define T_BIN true
370
+ #define T_STR false
371
+
372
+ #define T_INCASE true
373
+ #define T_CASE false
374
+
375
+ #define T_CMP_ALL true
376
+ #define T_CMP_PART false
377
+
378
+
379
+ template <class T, bool all>
380
+ inline int compVarString(const char* l, const char* r, int len)
381
+ {
382
+ return compareVartype<T>(l, r, T_STR, all, T_CASE);
383
+ }
384
+
385
+ template <class T, bool all>
386
+ inline int compVarString_bin(const char* l, const char* r, int len)
387
+ {
388
+ return compareVartype<T>(l, r, T_BIN, all, T_CASE);
389
+ }
390
+ template <class T, bool all>
391
+ inline int compVarString_i(const char* l, const char* r, int len)
392
+ {
393
+ return compareVartype<T>(l, r, T_STR, all, T_INCASE);
394
+ }
395
+
396
+ template <class T, bool all>
397
+ inline int compVarString_bin_i(const char* l, const char* r, int len)
398
+ {
399
+ return compareVartype<T>(l, r, T_BIN, all, T_INCASE);
400
+ }
401
+
402
+ template <class T, bool all>
403
+ inline int compWVarString(const char* l, const char* r, int len)
404
+ {
405
+ return compareWvartype<T>(l, r, T_STR, all, T_CASE);
406
+ }
407
+
408
+ template <class T, bool all>
409
+ inline int compWVarString_bin(const char* l, const char* r, int len)
410
+ {
411
+ return compareWvartype<T>(l, r, T_BIN, all, T_CASE);
412
+ }
413
+
414
+ template <class T, bool all>
415
+ inline int compWVarString_i(const char* l, const char* r, int len)
416
+ {
417
+ return compareWvartype<T>(l, r, T_STR, all, T_INCASE);
418
+ }
419
+
420
+ template <class T, bool all>
421
+ inline int compWVarString_bin_i(const char* l, const char* r, int len)
422
+ {
423
+ return compareWvartype<T>(l, r, T_BIN, all, T_INCASE);
424
+ }
425
+
426
+ template <int sizeByte, bool all>
427
+ inline int compBlob(const char* l, const char* r, int len)
428
+ {
429
+ return compareBlobType(l, r, T_STR, all, T_CASE, sizeByte);
430
+ }
431
+
432
+ template <int sizeByte, bool all>
433
+ inline int compBlob_bin(const char* l, const char* r, int len)
434
+ {
435
+ return compareBlobType(l, r, T_BIN, all, T_CASE, sizeByte);
436
+ }
437
+
438
+ template <int sizeByte, bool all>
439
+ inline int compBlob_i(const char* l, const char* r, int len)
440
+ {
441
+ return compareBlobType(l, r, T_STR, all, T_INCASE, sizeByte);
442
+ }
443
+
444
+ template <int sizeByte, bool all>
445
+ inline int compBlob_bin_i(const char* l, const char* r, int len)
446
+ {
447
+ return compareBlobType(l, r, T_BIN, all, T_INCASE, sizeByte);
448
+ }
449
+
450
+
451
+ typedef int (*comp1Func)(const char* l, const char* r,int len);
452
+
453
+ typedef bool (*judgeFunc)(int);
454
+
455
+ inline comp1Func getCompFunc(uchar_td type, ushort_td len, char logType, int sizeByte)
456
+ {
457
+ bool compAll = (logType & CMPLOGICAL_VAR_COMP_ALL) != 0;
458
+ bool incase = (logType & CMPLOGICAL_CASEINSENSITIVE) != 0;
459
+ switch (type)
460
+ {
461
+ case ft_integer:
462
+ case ft_autoinc:
463
+ case ft_currency:
464
+ {
465
+ if (logType & (char)eBitAnd)
466
+ {
467
+ switch (len)
468
+ {
469
+ case 1:
470
+ return &compBitAnd<char>;
471
+ case 2:
472
+ return &compBitAnd<short>;
473
+ case 3:
474
+ return &compBitAnd24;
475
+ case 4:
476
+ return &compBitAnd<int>;
477
+ case 8:
478
+ return &compBitAnd<__int64>;
479
+ }
480
+ }else
481
+ {
482
+ switch (len)
483
+ {
484
+ case 1:
485
+ return &compNumber<char>;
486
+ case 2:
487
+ return &compNumber<short>;
488
+ case 3:
489
+ return &compNumber24;
490
+ case 4:
491
+ return &compNumber<int>;
492
+ case 8:
493
+ return &compNumber<__int64>;
494
+ }
495
+ }
496
+ }
497
+ case ft_mychar:
498
+ case ft_string:
499
+ if (incase)
500
+ return &compiString;
501
+ return &compMem;
502
+ case ft_zstring:
503
+ case ft_note:
504
+ if (incase)
505
+ return &compiString;
506
+ return &compString;
507
+ case ft_logical:
508
+ case ft_uinteger:
509
+ case ft_autoIncUnsigned:
510
+ case ft_date:
511
+ case ft_time:
512
+ case ft_timestamp:
513
+ case ft_myyear:
514
+ case ft_mydate:
515
+ case ft_mytime_num_cmp:
516
+ case ft_mydatetime_num_cmp:
517
+ case ft_mytimestamp_num_cmp:
518
+ case ft_set:
519
+ case ft_enum:
520
+ {
521
+ if (logType & (char)eBitAnd)
522
+ {
523
+ switch (len)
524
+ {
525
+ case 1:
526
+ return &compBitAnd<char>;
527
+ case 2:
528
+ return &compBitAnd<short>;
529
+ case 3:
530
+ return &compBitAnd24;
531
+ case 4:
532
+ return &compBitAnd<int>;
533
+ case 8:
534
+ return &compBitAnd<__int64>;
535
+ }
536
+ }else
537
+ {
538
+ switch (len)
539
+ {
540
+ case 1:
541
+ return &compNumber<unsigned char>;
542
+ case 2:
543
+ return &compNumber<unsigned short>;
544
+ case 3:
545
+ return &compNumberU24;
546
+ case 4:
547
+ return &compNumber<unsigned int>;
548
+ case 8:
549
+ return &compNumber<unsigned __int64>;
550
+ }
551
+ }
552
+ }
553
+ case ft_bit:
554
+ if (logType & (char)eBitAnd)
555
+ return &compBitAnd64;
556
+ return &compMem;
557
+ case ft_mytime:
558
+ case ft_mydatetime:
559
+ case ft_mytimestamp:
560
+ case ft_mydecimal:
561
+ return &compMem;
562
+ case ft_float:
563
+ switch (len)
564
+ {
565
+ case 4:
566
+ return &compNumber<float>;
567
+ case 8:
568
+ return &compNumber<double>;
569
+ }
570
+ case ft_mywchar:
571
+ case ft_wstring:
572
+ case ft_wzstring:
573
+ if (incase)
574
+ return &compiWString;
575
+ if ((type == ft_wstring) || (type == ft_mywchar))
576
+ return &compMem;
577
+ return &compWString;
578
+ case ft_lstring:
579
+ case ft_myvarchar:
580
+ if (sizeByte == 1)
581
+ {
582
+ if (incase)
583
+ {
584
+ if (compAll)
585
+ return &compVarString_i<unsigned char, T_CMP_ALL>;
586
+ return &compVarString_i<unsigned char, T_CMP_PART>;
587
+ }else
588
+ {
589
+ if (compAll)
590
+ return &compVarString<unsigned char, T_CMP_ALL>;
591
+ return &compVarString<unsigned char, T_CMP_PART>;
592
+ }
593
+ }
594
+ if (incase)
595
+ {
596
+ if (compAll)
597
+ return &compVarString_i<unsigned short, T_CMP_ALL>;
598
+ return &compVarString_i<unsigned short, T_CMP_PART>;
599
+ }
600
+ if (compAll)
601
+ return &compVarString<unsigned short, T_CMP_ALL>;
602
+ return &compVarString<unsigned short, T_CMP_PART>;
603
+ case ft_myvarbinary:
604
+ if (sizeByte == 1)
605
+ {
606
+ if (incase)
607
+ {
608
+ if (compAll)
609
+ return &compVarString_bin_i<unsigned char, T_CMP_ALL>;
610
+ return &compVarString_bin_i<unsigned char, T_CMP_PART>;
611
+ }
612
+ if (compAll)
613
+ return &compVarString_bin<unsigned char, T_CMP_ALL>;
614
+ return &compVarString_bin<unsigned char, T_CMP_PART>;
615
+ }
616
+ if (incase)
617
+ {
618
+ if (compAll)
619
+ return &compVarString_bin_i<unsigned short, T_CMP_ALL>;
620
+ return &compVarString_bin_i<unsigned short, T_CMP_PART>;
621
+ }
622
+ if (compAll)
623
+ return &compVarString_bin<unsigned short, T_CMP_ALL>;
624
+ return &compVarString_bin<unsigned short, T_CMP_PART>;
625
+ case ft_mywvarchar:
626
+ if (sizeByte == 1)
627
+ {
628
+ if (incase)
629
+ {
630
+ if (compAll)
631
+ return &compWVarString_i<unsigned char, T_CMP_ALL>;
632
+ return &compWVarString_i<unsigned char, T_CMP_PART>;
633
+ }
634
+ if (compAll)
635
+ return &compWVarString<unsigned char, T_CMP_ALL>;
636
+ return &compWVarString<unsigned char, T_CMP_PART>;
637
+ }
638
+ if (incase)
639
+ {
640
+ if (compAll)
641
+ return &compWVarString_i<unsigned short, T_CMP_ALL>;
642
+ return &compWVarString_i<unsigned short, T_CMP_PART>;
643
+ }
644
+ if (compAll)
645
+ return &compWVarString<unsigned short, T_CMP_ALL>;
646
+ return &compWVarString<unsigned short, T_CMP_PART>;
647
+ case ft_mywvarbinary:
648
+ if (sizeByte == 1)
649
+ {
650
+ if (incase)
651
+ {
652
+ if (compAll)
653
+ return &compWVarString_bin_i<unsigned char, T_CMP_ALL>;
654
+ return &compWVarString_bin_i<unsigned char, T_CMP_PART>;
655
+ }
656
+ if (compAll)
657
+ return &compWVarString_bin<unsigned char, T_CMP_ALL>;
658
+ return &compWVarString_bin<unsigned char, T_CMP_PART>;
659
+ }
660
+ if (incase)
661
+ {
662
+ if (compAll)
663
+ return &compWVarString_bin_i<unsigned short, T_CMP_ALL>;
664
+ return &compWVarString_bin_i<unsigned short, T_CMP_PART>;
665
+ }
666
+ if (compAll)
667
+ return &compWVarString_bin<unsigned short, T_CMP_ALL>;
668
+ return &compWVarString_bin<unsigned short, T_CMP_PART>;
669
+ case ft_mytext:
670
+ {
671
+ if (compAll)
672
+ {
673
+ if (incase)
674
+ {
675
+ switch(sizeByte)
676
+ {
677
+ case 1:return &compBlob_i<1, T_CMP_ALL>;
678
+ case 2:return &compBlob_i<2, T_CMP_ALL>;
679
+ case 3:return &compBlob_i<3, T_CMP_ALL>;
680
+ case 4:return &compBlob_i<4, T_CMP_ALL>;
681
+ }
682
+ }
683
+ switch(sizeByte)
684
+ {
685
+ case 1:return &compBlob<1, T_CMP_ALL>;
686
+ case 2:return &compBlob<2, T_CMP_ALL>;
687
+ case 3:return &compBlob<3, T_CMP_ALL>;
688
+ case 4:return &compBlob<4, T_CMP_ALL>;
689
+ }
690
+ }
691
+ if (incase)
692
+ {
693
+ switch(sizeByte)
694
+ {
695
+ case 1:return &compBlob_i<1, T_CMP_PART>;
696
+ case 2:return &compBlob_i<2, T_CMP_PART>;
697
+ case 3:return &compBlob_i<3, T_CMP_PART>;
698
+ case 4:return &compBlob_i<4, T_CMP_PART>;
699
+ }
700
+ }
701
+ switch(sizeByte)
702
+ {
703
+ case 1:return &compBlob<1, T_CMP_PART>;
704
+ case 2:return &compBlob<2, T_CMP_PART>;
705
+ case 3:return &compBlob<3, T_CMP_PART>;
706
+ case 4:return &compBlob<4, T_CMP_PART>;
707
+ }
708
+ }
709
+ case ft_myblob:
710
+ case ft_myjson: //TODO Json binary comp
711
+ case ft_mygeometry: //TODO geometory binary comp
712
+ {
713
+ if (compAll)
714
+ {
715
+ if (incase)
716
+ {
717
+ switch(sizeByte)
718
+ {
719
+ case 1:return &compBlob_bin_i<1, T_CMP_ALL>;
720
+ case 2:return &compBlob_bin_i<2, T_CMP_ALL>;
721
+ case 3:return &compBlob_bin_i<3, T_CMP_ALL>;
722
+ case 4:return &compBlob_bin_i<4, T_CMP_ALL>;
723
+ }
724
+ }
725
+ switch(sizeByte)
726
+ {
727
+ case 1:return &compBlob_bin<1, T_CMP_ALL>;
728
+ case 2:return &compBlob_bin<2, T_CMP_ALL>;
729
+ case 3:return &compBlob_bin<3, T_CMP_ALL>;
730
+ case 4:return &compBlob_bin<4, T_CMP_ALL>;
731
+ }
732
+ }
733
+ if (incase)
734
+ {
735
+ switch(sizeByte)
736
+ {
737
+ case 1:return &compBlob_bin_i<1, T_CMP_PART>;
738
+ case 2:return &compBlob_bin_i<2, T_CMP_PART>;
739
+ case 3:return &compBlob_bin_i<3, T_CMP_PART>;
740
+ case 4:return &compBlob_bin_i<4, T_CMP_PART>;
741
+ }
742
+ }
743
+ switch(sizeByte)
744
+ {
745
+ case 1:return &compBlob_bin<1, T_CMP_PART>;
746
+ case 2:return &compBlob_bin<2, T_CMP_PART>;
747
+ case 3:return &compBlob_bin<3, T_CMP_PART>;
748
+ case 4:return &compBlob_bin<4, T_CMP_PART>;
749
+ }
750
+ assert(0);
751
+ }
752
+ }
753
+ return NULL;
754
+ }
755
+
756
+ inline bool isMatch1(int v) // eEqual eBitAnd
757
+ {
758
+ return (v == 0);
759
+ }
760
+
761
+ inline bool isMatch2(int v) // eGreater
762
+ {
763
+ return (v > 0);
764
+ }
765
+
766
+ inline bool isMatch3(int v) // eLess
767
+ {
768
+ return (v < 0);
769
+ }
770
+
771
+ inline bool isMatch4(int v) // eNotEq eNotBitAnd
772
+ {
773
+ return (v != 0);
774
+ }
775
+
776
+ inline bool isMatch5(int v) // eGreaterEq
777
+ {
778
+ return (v >= 0);
779
+ }
780
+
781
+ inline bool isMatch6(int v) // eLessEq
782
+ {
783
+ return (v <= 0);
784
+ }
785
+
786
+ inline judgeFunc getJudgeFunc(eCompType log)
787
+ {
788
+ switch (log & 0xF)
789
+ {
790
+ case eEqual:
791
+ case eBitAnd:
792
+ return isMatch1;
793
+ case eGreater:
794
+ return isMatch2;
795
+ case eLess:
796
+ return isMatch3;
797
+ case eNotEq:
798
+ return isMatch4;
799
+ case eNotBitAnd:
800
+ case eGreaterEq:
801
+ return isMatch5;
802
+ case eLessEq:
803
+ return isMatch6;
804
+ case eIsNull:
805
+ case eIsNotNull:
806
+ return NULL;
807
+ }
808
+ assert(0);
809
+ return NULL;
810
+ }
811
+
812
+ inline bool isEndComp(uchar_td opr, bool ret)
813
+ {
814
+ return (opr == eCend) || (!ret && (opr == eCand)) || (ret && (opr == eCor));
815
+ }
816
+
133
817
  #endif