transactd 2.4.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -111,26 +111,26 @@ public:
111
111
 
112
112
  writableRecord& getWritableRecord();
113
113
 
114
- activeTable& join(recordset& rs, queryBase& q, const _TCHAR* name1,
114
+ recordset& join(recordset& rs, queryBase& q, const _TCHAR* name1,
115
115
  const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
116
116
  const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
117
117
  const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
118
118
  const _TCHAR* name8 = NULL);
119
119
 
120
- activeTable&
120
+ recordset&
121
121
  outerJoin(recordset& rs, queryBase& q, const _TCHAR* name1,
122
122
  const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
123
123
  const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
124
124
  const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
125
125
  const _TCHAR* name8 = NULL);
126
126
 
127
- activeTable& join(recordset& rs, pq_handle& q, const _TCHAR* name1,
127
+ recordset& join(recordset& rs, pq_handle& q, const _TCHAR* name1,
128
128
  const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
129
129
  const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
130
130
  const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
131
131
  const _TCHAR* name8 = NULL);
132
132
 
133
- activeTable&
133
+ recordset&
134
134
  outerJoin(recordset& rs, pq_handle& q, const _TCHAR* name1,
135
135
  const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
136
136
  const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
@@ -141,42 +141,42 @@ public:
141
141
  table_ptr table() const;
142
142
  activeTable& option(int v);
143
143
  pq_handle prepare(queryBase& q, bool serverPrepare = false);
144
- activeTable& read(recordset& rs, queryBase& q);
145
- activeTable& read(recordset& rs, queryBase& q, validationFunc func);
146
- activeTable& read(recordset& rs, pq_handle& q);
147
- activeTable& read(recordset& rs, pq_handle& q, validationFunc func);
148
- activeTable& readMore(recordset& rs);
144
+ recordset& read(recordset& rs, queryBase& q);
145
+ recordset& read(recordset& rs, queryBase& q, validationFunc func);
146
+ recordset& read(recordset& rs, pq_handle& q);
147
+ recordset& read(recordset& rs, pq_handle& q, validationFunc func);
148
+ recordset& readMore(recordset& rs);
149
149
  /** @cond INTERNAL */
150
150
  template<class T0>
151
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0)
151
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0)
152
152
  {
153
153
  _supplyValue(q, 0, v0);
154
154
  read(rs, q);
155
- return *this;
155
+ return rs;
156
156
  }
157
157
 
158
158
  template<class T0, class T1>
159
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1)
159
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1)
160
160
  {
161
161
  _supplyValue(q, 0, v0);
162
162
  _supplyValue(q, 1, v1);
163
163
  read(rs, q);
164
- return *this;
164
+ return rs;
165
165
  }
166
166
 
167
167
  template<class T0, class T1, class T2>
168
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
168
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
169
169
  const T2 v2)
170
170
  {
171
171
  _supplyValue(q, 0, v0);
172
172
  _supplyValue(q, 1, v1);
173
173
  _supplyValue(q, 2, v2);
174
174
  read(rs, q);
175
- return *this;
175
+ return rs;
176
176
  }
177
177
 
178
178
  template<class T0, class T1, class T2, class T3>
179
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
179
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
180
180
  const T2 v2, const T3 v3)
181
181
  {
182
182
  _supplyValue(q, 0, v0);
@@ -184,11 +184,11 @@ public:
184
184
  _supplyValue(q, 2, v2);
185
185
  _supplyValue(q, 3, v3);
186
186
  read(rs, q);
187
- return *this;
187
+ return rs;
188
188
  }
189
189
 
190
190
  template<class T0, class T1, class T2, class T3, class T4>
191
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
191
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
192
192
  const T2 v2, const T3 v3, const T4 v4)
193
193
  {
194
194
  _supplyValue(q, 0, v0);
@@ -197,11 +197,11 @@ public:
197
197
  _supplyValue(q, 3, v3);
198
198
  _supplyValue(q, 4, v4);
199
199
  read(rs, q);
200
- return *this;
200
+ return rs;
201
201
  }
202
202
 
203
203
  template<class T0, class T1, class T2, class T3, class T4, class T5>
204
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
204
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
205
205
  const T2 v2, const T3 v3, const T4 v4, const T5 v5)
206
206
  {
207
207
  _supplyValue(q, 0, v0);
@@ -211,11 +211,11 @@ public:
211
211
  _supplyValue(q, 4, v4);
212
212
  _supplyValue(q, 5, v5);
213
213
  read(rs, q);
214
- return *this;
214
+ return rs;
215
215
  }
216
216
 
217
217
  template<class T0, class T1, class T2, class T3, class T4, class T5, class T6>
218
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
218
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
219
219
  const T2 v2, const T3 v3, const T4 v4, const T5 v5,
220
220
  const T6 v6)
221
221
  {
@@ -227,12 +227,12 @@ public:
227
227
  _supplyValue(q, 5, v5);
228
228
  _supplyValue(q, 6, v6);
229
229
  read(rs, q);
230
- return *this;
230
+ return rs;
231
231
  }
232
232
 
233
233
  template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
234
234
  class T7>
235
- activeTable& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
235
+ recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
236
236
  const T2 v2, const T3 v3, const T4 v4, const T5 v5,
237
237
  const T6 v6, const T7 v7)
238
238
  {
@@ -245,7 +245,7 @@ public:
245
245
  _supplyValue(q, 6, v6);
246
246
  _supplyValue(q, 7, v7);
247
247
  read(rs, q);
248
- return *this;
248
+ return rs;
249
249
  }
250
250
  /** @endcond */
251
251
 
@@ -234,7 +234,8 @@ class activeTableImple : public activeObject<map_orm>
234
234
  }
235
235
  else if (joinFields[i].type == JOIN_KEYVALUE_TYPE_PTR)
236
236
  {
237
- ptr[i] = (const uchar_td*)mdl[fieldIndexes[i]].ptr();
237
+ ptr[i] = (mdl[fieldIndexes[i]].isNull()) ? NULL :
238
+ (const uchar_td*)mdl[fieldIndexes[i]].ptr();
238
239
  len[i] = joinFields[i].len;
239
240
  }
240
241
  else
@@ -242,10 +243,15 @@ class activeTableImple : public activeObject<map_orm>
242
243
  // if target field type is different then we need convrt type
243
244
  const fielddef& f = td->fieldDefs[kd->segments[i].fieldNum];
244
245
  field fd(buf_ptr - f.pos, f, fds);
245
- fd = mdl[fieldIndexes[i]].c_str();
246
- ptr[i] = buf_ptr;
247
246
  len[i] = f.isStringType() ? 0xff : f.len;
248
- buf_ptr += f.len;
247
+ if (mdl[fieldIndexes[i]].isNull())
248
+ ptr[i] = NULL;
249
+ else
250
+ {
251
+ fd = mdl[fieldIndexes[i]].c_str();// operator=(const _TCHAR* p)
252
+ ptr[i] = buf_ptr;
253
+ buf_ptr += f.len;
254
+ }
249
255
  }
250
256
  }
251
257
 
@@ -63,6 +63,7 @@ short errorCode(const boost::system::error_code& e)
63
63
  case 32: //write:brokn pipe
64
64
  case 111: //connect: Connection refused
65
65
  case 10061:
66
+ case 10053:
66
67
  ret = ERROR_TD_CONNECTION_FAILURE;
67
68
  break;
68
69
  case 104: //write: Connection reset by peer
@@ -95,15 +96,15 @@ int client::getServerCharsetIndex()
95
96
 
96
97
  request req = m_req;
97
98
  req.paramMask = P_MASK_POSBLK | P_MASK_DATA | P_MASK_DATALEN;
98
- trdVersiton ver;
99
- memset(&ver, 0, sizeof(trdVersiton));
100
- ver.cherserServer[0] = 0x00;
99
+ trdVersiton vers;
100
+ memset(&vers, 0, sizeof(trdVersiton));
101
+ clsrv_ver& ver = vers.desc;
101
102
  ver.clMajor = (ushort_td)atoi(C_INTERFACE_VER_MAJOR);
102
103
  ver.clMinor = (ushort_td)atoi(C_INTERFACE_VER_MINOR);
103
104
  ver.clRelease = (ushort_td)atoi(C_INTERFACE_VER_RELEASE);
104
105
  uint_td len = sizeof(trdVersiton);
105
106
  req.op = TD_GETSERVER_CHARSET;
106
- req.data = &ver;
107
+ req.data = &vers;
107
108
  req.datalen = &len;
108
109
 
109
110
  mutex::scoped_lock lck(m_mutex);
@@ -117,7 +118,7 @@ int client::getServerCharsetIndex()
117
118
  {
118
119
  if (!checkVersion(ver))
119
120
  return -1;
120
- c->setCharsetServer(mysql::charsetIndex(ver.cherserServer));
121
+ c->setCharsetServer(mysql::charsetIndex(vers.cherserServer));
121
122
  return c->charsetServer();
122
123
  }
123
124
  }
@@ -82,7 +82,7 @@ class client
82
82
 
83
83
  std::vector<char> m_sendbuf;
84
84
 
85
- bool checkVersion(trdVersiton& ver)
85
+ bool checkVersion(clsrv_ver& ver)
86
86
  {
87
87
  if ((ver.srvMajor < 2) || ((ver.srvMajor == 2) && (ver.srvMinor < 3)))
88
88
  return false;
@@ -150,13 +150,16 @@ class client
150
150
  handshale_t* hst = (handshale_t*)c->read();
151
151
  if (c->error()) return false;
152
152
  bool auth = (hst->size == sizeof(handshale_t));
153
- bool min = (hst->size == (sizeof(handshale_t)
154
- - sizeof(hst->scramble)));
155
-
153
+ bool min = (hst->size == (sizeof(handshale_t) - sizeof(hst->scramble)));
154
+ memcpy(c->versions(), &hst->ver.desc, sizeof(clsrv_ver));
155
+
156
156
  if (min || auth)
157
157
  {
158
- if (!checkVersion(hst->ver))
158
+ if (!checkVersion(hst->ver.desc))
159
+ {
160
+ m_preResult = SERVER_CLIENT_NOT_COMPATIBLE;
159
161
  return false;
162
+ }
160
163
  c->setCharsetServer(mysql::charsetIndex(hst->ver.cherserServer));
161
164
  m_req.cid->lock_wait_timeout = hst->lock_wait_timeout;
162
165
  m_req.cid->transaction_isolation = hst->transaction_isolation;
@@ -190,7 +193,10 @@ class client
190
193
  }
191
194
 
192
195
  public:
193
- client() : m_cryptPwd(NULL), m_disconnected(true), m_connecting(false) {}
196
+ client() : m_cryptPwd(NULL), m_disconnected(false), m_connecting(false)
197
+ {
198
+ }
199
+
194
200
  ~client()
195
201
  {
196
202
  if (m_cryptPwd)
@@ -216,6 +222,23 @@ public:
216
222
 
217
223
  inline request& req() { return m_req; }
218
224
 
225
+ inline const clsrv_ver* ver()
226
+ {
227
+ if (m_req.cid->con)
228
+ return (clsrv_ver*)m_req.cid->con->versions();
229
+ return NULL;
230
+ }
231
+ inline bool isSupportFunction(short op)
232
+ {
233
+ if (op == TD_GET_SCHEMA)
234
+ {
235
+ const clsrv_ver* v = ver();
236
+ if (!v) return false;
237
+ return (v->srvMajor > 2) || ((v->srvMajor == 2) && (v->srvMinor >= 6));
238
+ }
239
+ return false;
240
+ }
241
+
219
242
  inline void setParam(ushort_td op, posblk* pbk, void_td* data,
220
243
  uint_td* datalen, void_td* keybuf, keylen_td keylen,
221
244
  char_td keyNum, clientID* cid)
@@ -253,6 +276,7 @@ public:
253
276
  {
254
277
  if (!m_req.cid->con)
255
278
  {
279
+ m_preResult = 0;
256
280
  endpoint_t ep;
257
281
  endPoint((const char*)m_req.keybuf, &ep);
258
282
  if (ep.host[0] == 0x00)
@@ -264,7 +288,7 @@ public:
264
288
  setCon(c);
265
289
  m_connecting = true;
266
290
  }
267
- else
291
+ else if (m_preResult == 0)
268
292
  m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
269
293
  }
270
294
  m_disconnected = !m_req.cid->con;
@@ -272,19 +296,47 @@ public:
272
296
 
273
297
  inline void createIndex()
274
298
  {
299
+ if (!ver())
300
+ {
301
+ m_preResult = ERROR_TD_NOT_CONNECTED;
302
+ return;
303
+ }
275
304
  m_req.paramMask = P_MASK_NOKEYBUF;
276
305
  int charsetIndexServer = getServerCharsetIndex();
277
306
  unsigned char keynum = m_req.keyNum;
278
307
  bool specifyKeyNum = (keynum >= 0x80);
279
308
  if (keynum >= 0x80)
280
309
  keynum -= 0x80;
281
- m_sql = sqlCreateIndex((tabledef*)m_req.data, keynum,
282
- specifyKeyNum, charsetIndexServer);
310
+ m_sql = sqlBuilder::sqlCreateIndex((tabledef*)m_req.data, keynum,
311
+ specifyKeyNum, charsetIndexServer, ver());
283
312
  m_req.data = (ushort_td*)m_sql.c_str();
284
313
  m_tmplen = (uint_td)(m_sql.size() + 1);
285
314
  m_req.datalen = &m_tmplen;
286
315
  }
287
316
 
317
+ inline void getSqlCreate()
318
+ {
319
+ if (!ver())
320
+ {
321
+ m_req.result = ERROR_TD_NOT_CONNECTED;
322
+ return;
323
+ }
324
+ _TCHAR tmp[MAX_PATH*2]={0};
325
+ stripAuth((const char*)m_req.keybuf, tmp, MAX_PATH);
326
+ std::string name = getTableName(tmp);
327
+ int charsetIndexServer = getServerCharsetIndex();
328
+ std::string sql = sqlBuilder::sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
329
+ charsetIndexServer, ver());
330
+ uint_td datalen = *m_req.datalen;
331
+ *m_req.datalen = (uint_td)(sql.size() + 1);
332
+ if (datalen <= sql.size())
333
+ {
334
+ m_req.result = STATUS_BUFFERTOOSMALL;
335
+ return;
336
+ }
337
+ strcpy_s((char*)m_req.data, *m_req.datalen, sql.c_str());
338
+ }
339
+
288
340
  inline void create()
289
341
  {
290
342
  m_req.paramMask = P_MASK_ALL;
@@ -298,15 +350,27 @@ public:
298
350
  m_req.paramMask &= ~P_MASK_POSBLK;
299
351
  std::string name = getTableName(tmp);
300
352
  int charsetIndexServer = getServerCharsetIndex();
301
- if ((m_req.keyNum == 1) || (m_req.keyNum == 2)) // make by tabledef
353
+ if (!ver())
354
+ {
355
+ m_preResult = ERROR_TD_NOT_CONNECTED;
356
+ return;
357
+ }
358
+ if ((m_req.keyNum == CR_SUBOP_BY_TABLEDEF) ||
359
+ (m_req.keyNum == CR_SUBOP_BY_TABLEDEF_NOCKECK)) // make by tabledef
302
360
  {
303
- m_sql = sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
304
- charsetIndexServer);
305
- m_req.keyNum -= 2; // 1= exists check 2 = no exists check
361
+ m_sql = sqlBuilder::sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
362
+ charsetIndexServer, ver());
363
+ m_req.keyNum -= 2; // -1= exists check 0 = no exists check
364
+ }
365
+ else if ((m_req.keyNum == CR_SUBOP_BY_SQL) ||
366
+ (m_req.keyNum == CR_SUBOP_BY_SQL_NOCKECK)) // make by sql
367
+ {
368
+ m_sql = (char*)m_req.data;
369
+ m_req.keyNum -= 4; // -1= exists check 0 = no exists check
306
370
  }
307
371
  else
308
- m_sql = sqlCreateTable(name.c_str(), (fileSpec*)m_req.data,
309
- charsetIndexServer);
372
+ m_sql = sqlBuilder::sqlCreateTable(name.c_str(), (fileSpec*)m_req.data,
373
+ charsetIndexServer, ver());
310
374
  m_req.data = (ushort_td*)m_sql.c_str();
311
375
  m_tmplen = (uint_td)(m_sql.size() + 1);
312
376
  m_req.datalen = &m_tmplen;
@@ -379,7 +443,10 @@ public:
379
443
  m_preResult = SERVER_CLIENT_NOT_COMPATIBLE;
380
444
  }
381
445
  else
446
+ {
382
447
  buildDualChasetKeybuf();
448
+ m_disconnected = false;
449
+ }
383
450
  }
384
451
  else
385
452
  m_preResult = errorCode(m_cons->connectError());