transactd 1.0.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README +1 -1
  3. data/README-JA +1 -1
  4. data/bin/common/tdclc_32_1_1.dll +0 -0
  5. data/bin/common/tdclc_64_1_1.dll +0 -0
  6. data/build/common/transactd_common.cmake +6 -2
  7. data/build/tdclc/CMakeLists.txt +9 -0
  8. data/build/tdclc/tdclc_32.cbproj +2 -10
  9. data/build/tdclc/tdclc_64.cbproj +2 -9
  10. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +3 -7
  11. data/build/tdclcpp/tdclcpp_bcb_64.cbproj +1 -15
  12. data/build/tdclrb/CMakeLists.txt +12 -4
  13. data/build/tdclrb/GEM_VERSION +2 -2
  14. data/source/bzs/db/engine/mysql/mysqlThd.cpp +5 -4
  15. data/source/bzs/db/engine/mysql/mysqlThd.h +1 -1
  16. data/source/bzs/db/protocol/tdap/btrDate.cpp +15 -4
  17. data/source/bzs/db/protocol/tdap/client/client.cpp +2 -2
  18. data/source/bzs/db/protocol/tdap/client/client.h +46 -18
  19. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +53 -11
  20. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +50 -28
  21. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +5 -2
  22. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +19 -1
  23. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +16 -5
  24. data/source/bzs/db/protocol/tdap/tdapcapi.h +9 -4
  25. data/source/bzs/db/transactd/transactd.cpp +22 -8
  26. data/source/bzs/env/compiler.h +6 -0
  27. data/source/bzs/env/crosscompile.h +9 -1
  28. data/source/bzs/example/changeSchema.cpp +6 -6
  29. data/source/bzs/example/changeSchema_c.cpp +4 -4
  30. data/source/bzs/example/createDatabase.cpp +7 -7
  31. data/source/bzs/example/deleteRecords.cpp +2 -2
  32. data/source/bzs/example/deleteRecords_c.cpp +1 -1
  33. data/source/bzs/example/dropDatabase.cpp +4 -1
  34. data/source/bzs/example/dropDatabase_c.cpp +1 -1
  35. data/source/bzs/example/insertRecords.cpp +1 -1
  36. data/source/bzs/example/readRecords.cpp +1 -1
  37. data/source/bzs/example/updateRecords.cpp +1 -1
  38. data/source/bzs/example/update_with_transaction.cpp +1 -1
  39. data/source/bzs/example/update_with_transaction_c.cpp +1 -1
  40. data/source/bzs/netsvc/client/tcpClient.cpp +3 -2
  41. data/source/bzs/rtl/datetime.cpp +15 -5
  42. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1 -1
  43. metadata +3 -3
  44. data/bin/common/tdclc_32_1_0.dll +0 -0
  45. data/bin/common/tdclc_64_1_0.dll +0 -0
@@ -50,8 +50,8 @@ using namespace bzs::netsvc::client;
50
50
  void writeErrorLog(int err, const char* msg);
51
51
 
52
52
 
53
- #if (defined(_WIN32) && defined(_MSC_VER))
54
- DWORD g_tlsiID1;
53
+ #ifdef USETLS
54
+ tls_key g_tlsiID1;
55
55
  #else
56
56
  __THREAD clientID __THREAD_BCB g_cid;
57
57
  __THREAD bool __THREAD_BCB g_initCid = false;
@@ -66,7 +66,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
66
66
  {
67
67
  if (reason == DLL_PROCESS_ATTACH)
68
68
  {
69
- #ifdef _MSC_VER
69
+ #ifdef USETLS
70
70
  if ((g_tlsiID = TlsAlloc()) == TLS_OUT_OF_INDEXES)
71
71
  return FALSE;
72
72
  if ((g_tlsiID1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
@@ -74,16 +74,12 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
74
74
  #endif
75
75
 
76
76
  m_cons = new connections(PIPENAME);
77
- }else if(reason == DLL_THREAD_ATTACH)
77
+ }else if(reason == DLL_THREAD_DETACH)
78
78
  {
79
- #ifdef _MSC_VER
80
- TlsSetValue(g_tlsiID, 0);
81
- clientID* p = new clientID();
82
- memset(p, 0, sizeof(clientID));
83
- p->id = 1;
84
- p->aid[0] = 'G';
85
- p->aid[1] = 'X';
86
- TlsSetValue(g_tlsiID1, p);
79
+ #ifdef USETLS
80
+ delete (bzs::db::protocol::tdap::client::client*)tls_getspecific(g_tlsiID);
81
+ #else
82
+ delete g_client;
87
83
  #endif
88
84
  }
89
85
  else if (reason == DLL_PROCESS_DETACH)
@@ -91,7 +87,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
91
87
  delete m_cons;
92
88
  m_cons=NULL;
93
89
 
94
- #ifdef _MSC_VER
90
+ #ifdef USETLS
95
91
  TlsFree(g_tlsiID);
96
92
  TlsFree(g_tlsiID1);
97
93
 
@@ -106,12 +102,21 @@ void __attribute__ ((destructor)) onUnloadLibrary(void);
106
102
 
107
103
  void onLoadLibrary(void)
108
104
  {
109
- m_cons = new connections(PIPENAME);
105
+ m_cons = new connections(PIPENAME);
106
+ #ifdef USETLS
107
+ pthread_key_create(&g_tlsiID, NULL);
108
+ pthread_key_create(&g_tlsiID1, NULL);
109
+ #endif
110
+
110
111
  }
111
112
  void onUnloadLibrary(void)
112
113
  {
113
- delete m_cons;
114
- m_cons=NULL;
114
+ delete m_cons;
115
+ m_cons=NULL;
116
+ #ifdef USETLS
117
+ pthread_key_delete(g_tlsiID);
118
+ pthread_key_delete(g_tlsiID1);
119
+ #endif
115
120
  }
116
121
  #endif
117
122
 
@@ -120,22 +125,20 @@ extern "C" short_td __STDCALL
120
125
  uint_td* datalen, void_td* keybuf, keylen_td keylen,
121
126
  char_td keyNum, clientID* cid)
122
127
  {
123
- bzs::db::protocol::tdap::client::client* client_t;
124
- if ((client_t = getClientThread()) == NULL)
125
- {
126
- client_t = new bzs::db::protocol::tdap::client::client();
127
- setClientThread(client_t);
128
- }
128
+ bzs::db::protocol::tdap::client::client* client_t = getClientThread();
129
129
 
130
130
  short_td ret;
131
131
  try
132
132
  {
133
- //op = op%100;
134
133
 
135
134
  if ((TD_GET_BLOB_BUF != op) && (TD_ADD_SENDBLOB != op))
136
135
  client_t->setParam(op, pbk,data,datalen,keybuf,keylen,keyNum,cid);
137
136
 
138
- if (client_t->stop_if()) return 0;
137
+ if (client_t->stop_if())
138
+ {
139
+ client_t->cleanup();
140
+ return 0;
141
+ }
139
142
  if (cid==NULL) return 1;
140
143
 
141
144
  switch(op)
@@ -154,7 +157,10 @@ extern "C" short_td __STDCALL
154
157
  if (client_t->readServerCharsetIndex())
155
158
  client_t->create();
156
159
  else
160
+ {
161
+ client_t->cleanup();
157
162
  return 1;
163
+ }
158
164
  }
159
165
  else if (op == TD_OPENTABLE)
160
166
  client_t->req().paramMask = P_MASK_ALL;
@@ -190,6 +196,7 @@ extern "C" short_td __STDCALL
190
196
  break;
191
197
  case TD_UNLOCK:
192
198
  case TD_UPDATE_PART:
199
+ client_t->cleanup();
193
200
  return 0;
194
201
  case TD_REC_DELETE:
195
202
  case TD_CLOSETABLE:
@@ -271,13 +278,18 @@ extern "C" short_td __STDCALL
271
278
  }else
272
279
  client_t->req().result = STATUS_BUFFERTOOSMALL;
273
280
  if (datalen < sizeof(btrVersion)*2)
281
+ {
282
+ client_t->cleanup();
274
283
  return 0;
284
+ }
275
285
  break;
276
286
  }
277
287
 
278
288
 
279
289
  }
280
- return client_t->execute();
290
+ short_td ret = client_t->execute();
291
+ client_t->cleanup();
292
+ return ret;
281
293
  }
282
294
  catch(boost::system::system_error &e)
283
295
  {
@@ -364,8 +376,18 @@ void writeErrorLog(int err, const char* msg)
364
376
 
365
377
  inline clientID* getCid()
366
378
  {
367
- #ifdef _MSC_VER
368
- return (clientID*)TlsGetValue(g_tlsiID1);
379
+ #ifdef USETLS
380
+ clientID* p = (clientID*)tls_getspecific(g_tlsiID1);
381
+ if (p==NULL)
382
+ {
383
+ clientID* p = new clientID();
384
+ memset(p, 0, sizeof(clientID));
385
+ p->id = 1;
386
+ p->aid[0] = 'G';
387
+ p->aid[1] = 'X';
388
+ tls_setspecific(g_tlsiID1, p);
389
+ }
390
+ return p;
369
391
  #else
370
392
  return &g_cid;
371
393
  #endif
@@ -374,7 +396,7 @@ inline clientID* getCid()
374
396
 
375
397
  void initCid()
376
398
  {
377
- #ifndef _MSC_VER
399
+ #ifndef USETLS
378
400
  if (!g_initCid)
379
401
  {
380
402
  g_initCid = true;
@@ -185,7 +185,7 @@ boost::mutex g_mutex;
185
185
 
186
186
  nsdatabase::nsdatabase() : m_stat(0)
187
187
  {
188
- m_nsimpl = new nsdbimpl();
188
+
189
189
  int type = 0;
190
190
  if (hBtrvDLL == 0x00)
191
191
  type = smartLoadLibrary();
@@ -193,8 +193,11 @@ nsdatabase::nsdatabase() : m_stat(0)
193
193
  m_btrcallid = getBtrvEntryPoint();
194
194
  if (m_btrcallid == NULL)
195
195
  m_btrcallid = getTrnsctdEntryPoint();
196
+ if (!m_btrcallid)
197
+ nstable::throwError(_T("Can't load C Interface library"), ERROR_LOAD_CLIBRARY);
196
198
 
197
- if ((type == 2) || MYTICALLID)
199
+ m_nsimpl = new nsdbimpl();
200
+ if ((type == 2) || MYTICALLID)
198
201
  setUseLongFilename(true);
199
202
  else
200
203
  {
@@ -54,6 +54,20 @@ namespace mysql
54
54
  static const char* TableNameTitle = "dbfile=";
55
55
  static const char* BdfNameTitle = ".bdf";
56
56
 
57
+ std::string& toLowerCaseName(std::string& name , bool forSql)
58
+ {
59
+ if (forSql)
60
+ {
61
+ char tmp[MAX_PATH];
62
+ strcpy_s(tmp, MAX_PATH, name.c_str());
63
+ my_casedn_str(global_system_variables.collation_server, tmp);
64
+ name = tmp;
65
+ }
66
+ else
67
+ boost::algorithm::to_lower(name);
68
+ return name;
69
+ }
70
+
57
71
  std::string getDatabaseName(const request& req, bool forSql)
58
72
  {
59
73
  std::vector<std::string> ssc ;
@@ -74,7 +88,11 @@ std::string getDatabaseName(const request& req, bool forSql)
74
88
  std::vector<std::string> db;
75
89
  split(db, ss[3], "?");
76
90
  if (db.size()>0)
91
+ {
92
+ if (g_tableNmaeLower)
93
+ toLowerCaseName(db[0], forSql);
77
94
  return db[0];
95
+ }
78
96
  }
79
97
  }
80
98
  }
@@ -107,7 +125,7 @@ std::string getTableName(const std::string& src, bool forSql)
107
125
 
108
126
  name = name.substr(pos, pos2 - pos);
109
127
  if (g_tableNmaeLower)
110
- boost::algorithm::to_lower(name);
128
+ toLowerCaseName(name, forSql);
111
129
  return name;
112
130
  }
113
131
 
@@ -29,11 +29,16 @@
29
29
 
30
30
  #pragma package(smart_init)
31
31
 
32
+ #undef USETLS
33
+ #if ((defined(_WIN32) && _MSC_VER) || __APPLE__)
34
+ #define USETLS
35
+ #endif
36
+
32
37
 
33
- #if (defined(_WIN32) && _MSC_VER)
34
- extern DWORD g_tlsiID_SC1;
38
+ #ifdef USETLS
39
+ extern tls_key g_tlsiID_SC1;
35
40
  #else
36
- wchar_t __THREAD g_nameBuf[266]={NULL};
41
+ wchar_t __THREAD g_nameBuf[266]={0};
37
42
  #endif
38
43
 
39
44
 
@@ -52,8 +57,14 @@ namespace tdap
52
57
 
53
58
  inline wchar_t* namebuf()
54
59
  {
55
- #if (defined(_WIN32) && _MSC_VER)
56
- return (wchar_t*)TlsGetValue(g_tlsiID_SC1);
60
+ #ifdef USETLS
61
+ _TCHAR* p = (_TCHAR*)tls_getspecific(g_tlsiID_SC1);
62
+ if (p == NULL)
63
+ {
64
+ p = (_TCHAR*)new wchar_t[256];
65
+ tls_setspecific(g_tlsiID_SC1, p);
66
+ }
67
+ return p;
57
68
  #else
58
69
  return g_nameBuf;
59
70
  #endif
@@ -328,6 +328,7 @@ typedef short_td (__STDCALL *BTRCALLID_PTR)(ushort_td,void*,void*, uint_td*
328
328
  #define STATUS_INVALID_FIELDNAME STATUS_INVALID_FIELD_OFFSET
329
329
  #define ERROR_TD_INVALID_CLINETHOST 171
330
330
  #define ERROR_NOSPECIFY_TABLE 176
331
+ #define ERROR_LOAD_CLIBRARY 200
331
332
  #define NET_BAD_SRB_FORMAT 3021
332
333
  #define ERROR_TD_HOSTNAME_NOT_FOUND 3103
333
334
  #define ERROR_TD_CONNECTION_FAILURE 3106
@@ -363,11 +364,15 @@ typedef short_td (__STDCALL *BTRCALLID_PTR)(ushort_td,void*,void*, uint_td*
363
364
  If you change this version then you need change The ($TargetName) project options too.
364
365
  */
365
366
  #define C_INTERFACE_VER_MAJOR "1"//##1 Build marker! Don't remove
366
- #define C_INTERFACE_VER_MINOR "0"//##2 Build marker! Don't remove
367
- #define C_INTERFACE_VER_RELEASE "1"//##3 Build marker! Don't remove
367
+ #define C_INTERFACE_VER_MINOR "1"//##2 Build marker! Don't remove
368
+ #define C_INTERFACE_VER_RELEASE "2"//##3 Build marker! Don't remove
368
369
 
369
370
  #ifdef LINUX
371
+ #ifdef __APPLE__
372
+ #define C_INTERFACE_VERSTR "." C_INTERFACE_VER_MAJOR "." C_INTERFACE_VER_MINOR ".so"//use loadlibrary
373
+ #else
370
374
  #define C_INTERFACE_VERSTR ".so." C_INTERFACE_VER_MAJOR "." C_INTERFACE_VER_MINOR//use loadlibrary
375
+ #endif
371
376
  #else
372
377
  #define C_INTERFACE_VERSTR "_" C_INTERFACE_VER_MAJOR "_" C_INTERFACE_VER_MINOR ".dll"//use loadlibrary
373
378
  #endif
@@ -410,7 +415,7 @@ typedef short_td (__STDCALL *BTRCALLID_PTR)(ushort_td,void*,void*, uint_td*
410
415
 
411
416
  #define CPP_INTERFACE_VER_MAJOR "1"//##4 Build marker! Don't remove
412
417
  #define CPP_INTERFACE_VER_MINOR "1"//##5 Build marker! Don't remove
413
- #define CPP_INTERFACE_VER_RELEASE "0"//##6 Build marker! Don't remove
418
+ #define CPP_INTERFACE_VER_RELEASE "2"//##6 Build marker! Don't remove
414
419
 
415
420
  #ifdef _WIN32
416
421
  #define CPP_INTERFACE_VERSTR "_" COMPILER_VERSTR "_" TD_LIB_PART "_" CPP_INTERFACE_VER_MAJOR "_" CPP_INTERFACE_VER_MINOR //use autolink
@@ -418,6 +423,6 @@ typedef short_td (__STDCALL *BTRCALLID_PTR)(ushort_td,void*,void*, uint_td*
418
423
 
419
424
  #define TRANSACTD_VER_MAJOR 1//##7 Build marker! Don't remove
420
425
  #define TRANSACTD_VER_MINOR 1//##8 Build marker! Don't remove
421
- #define TRANSACTD_VER_RELEASE 0//##9 Build marker! Don't remove
426
+ #define TRANSACTD_VER_RELEASE 2//##9 Build marker! Don't remove
422
427
 
423
428
  #endif //BZS_DB_PROTOCOL_TDAP_TDAPCAPI_H
@@ -297,7 +297,24 @@ mysql_declare_plugin(transactd)
297
297
  mysql_declare_plugin_end;
298
298
 
299
299
  #ifdef USETLS
300
- extern DWORD g_tlsiID;
300
+ extern tls_key g_tlsiID;
301
+
302
+ #ifdef __APPLE__
303
+
304
+ void __attribute__ ((constructor)) onLoadLibrary(void);
305
+ void __attribute__ ((destructor)) onUnloadLibrary(void);
306
+
307
+ void onLoadLibrary(void)
308
+ {
309
+ pthread_key_create(&g_tlsiID, NULL);
310
+ }
311
+
312
+ void onUnloadLibrary(void)
313
+ {
314
+ pthread_key_delete(g_tlsiID);
315
+ }
316
+
317
+ #else //WIN32
301
318
 
302
319
  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
303
320
  {
@@ -306,13 +323,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
306
323
  case DLL_PROCESS_ATTACH:
307
324
  if ((g_tlsiID = TlsAlloc()) == TLS_OUT_OF_INDEXES)
308
325
  return FALSE;
309
- TlsSetValue(g_tlsiID, 0);
310
326
  break;
311
- case DLL_THREAD_ATTACH:
312
- TlsSetValue(g_tlsiID, 0);
313
- break;
314
- case DLL_THREAD_DETACH:
315
- break;
316
327
  case DLL_PROCESS_DETACH:
317
328
  TlsFree(g_tlsiID);
318
329
  break;
@@ -322,4 +333,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
322
333
  return TRUE;
323
334
  }
324
335
 
325
- #endif
336
+ #endif //__APPLE__
337
+
338
+ #endif //USETLS
339
+
@@ -39,9 +39,15 @@
39
39
  # else
40
40
  # define __x86_32__
41
41
  # endif
42
+ #else
43
+ # ifndef LINUX
44
+ # define LINUX //Support 64bit only
45
+ # endif
42
46
  #endif
43
47
 
44
48
 
49
+
50
+
45
51
  #undef PACKAGE
46
52
 
47
53
  #ifndef __THREAD_BCB
@@ -145,6 +145,14 @@
145
145
  #define localtime_x(_tm, time) (localtime_s(_tm, time)==0)
146
146
  #endif//__BORLANDC__
147
147
 
148
-
148
+ #ifdef _WIN32
149
+ #define tls_key DWORD
150
+ #define tls_getspecific(A) TlsGetValue(A)
151
+ #define tls_setspecific(A, B) TlsSetValue(A, B)
152
+ #else
153
+ #define tls_key pthread_key_t
154
+ #define tls_getspecific(A) pthread_getspecific(A)
155
+ #define tls_setspecific(A, B) pthread_setspecific(A, B)
156
+ #endif
149
157
 
150
158
  #endif //BZS_ENV_CROSSCOMPILE_H
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
  #include <boost/bind.hpp>
6
6
  using namespace bzs::db::protocol::tdap::client;
7
7
  using namespace bzs::db::protocol::tdap;
@@ -36,19 +36,19 @@ bool changeUserTable(dbdef* def)
36
36
  {
37
37
 
38
38
  //change name size
39
- tabledef* td = def->tableDefs(tablenum_user);
40
- fielddef* fd = &td->fieldDefs[fieldnum_name];
39
+ tabledef** td = def->tableDefPtr(tablenum_user);
40
+ fielddef* fd = &(*td)->fieldDefs[fieldnum_name];
41
41
  fd->setLenByCharnum(64);
42
42
 
43
43
  //add tel field
44
- fd = def->insertField(td->id, td->fieldCount);
44
+ fd = def->insertField((*td)->id, (*td)->fieldCount);
45
45
  fd->setName(_T("tel"));
46
46
  fd->type = ft_mychar;
47
47
  fd->setCharsetIndex( CHARSET_LATIN1);
48
48
  fd->setLenByCharnum(16);
49
49
 
50
50
  //write user table schema
51
- def->updateTableDef(td->id);
51
+ def->updateTableDef((*td)->id);
52
52
  if (def->stat() != 0)
53
53
  {
54
54
  showError(_T("edit schema table"), NULL, def->stat());
@@ -70,7 +70,7 @@ bool openDbExclusive(database* db, const _TCHAR* uri)
70
70
  return true;
71
71
  }
72
72
 
73
- void __stdcall onCopyData(database* db, int recordCount, int count, bool &cancel)
73
+ void __STDCALL onCopyData(database* db, int recordCount, int count, bool &cancel)
74
74
  {
75
75
  if (count == 0)
76
76
  _tprintf(_T("\n"));
@@ -25,17 +25,17 @@ static const short fieldnum_name = 1;
25
25
  void changeUserTable(dbdef* def)
26
26
  {
27
27
  //change name size
28
- tabledef* td = def->tableDefs(tablenum_user);
29
- fielddef* fd = &td->fieldDefs[fieldnum_name];
28
+ tabledef** td = def->tableDefPtr(tablenum_user);
29
+ fielddef* fd = &(*td)->fieldDefs[fieldnum_name];
30
30
  fd->setLenByCharnum(64);
31
31
 
32
32
  //add tel field
33
33
  int size = lenByCharnum(ft_mychar, CHARSET_LATIN1, 16);
34
- fd = insertField(def, td->id, td->fieldCount, _T("tel"), ft_mychar, size);
34
+ fd = insertField(def, (*td)->id, (*td)->fieldCount, _T("tel"), ft_mychar, size);
35
35
  fd->setCharsetIndex(CHARSET_LATIN1);
36
36
 
37
37
  //write user table schema
38
- updateTableDef(def, td->id);
38
+ updateTableDef(def, (*td)->id);
39
39
  }
40
40
 
41
41
  void __stdcall onCopyData(database* db, int recordCount, int count, bool &cancel)
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
 
6
6
  using namespace bzs::db::protocol::tdap::client;
7
7
  using namespace bzs::db::protocol::tdap;
@@ -104,8 +104,8 @@ bool createUserTableSchema(dbdef* def)
104
104
 
105
105
  //Insert table
106
106
  tabledef td;
107
- td.setTableName(L"user");
108
- td.setFileName(L"user.dat");
107
+ td.setTableName(_T("user"));
108
+ td.setFileName(_T("user.dat"));
109
109
  td.id =1;
110
110
  td.charsetIndex = CHARSET_UTF8B4;
111
111
  def->insertTable(&td);
@@ -167,8 +167,8 @@ bool createGroupTableSchema(dbdef* def)
167
167
 
168
168
  //Insert table
169
169
  tabledef td;
170
- td.setTableName(L"group1");
171
- td.setFileName(L"group1.dat");
170
+ td.setTableName(_T("group1"));
171
+ td.setFileName(_T("group1.dat"));
172
172
  td.id = 2;
173
173
  td.charsetIndex = CHARSET_UTF8B4;
174
174
  def->insertTable(&td);
@@ -216,8 +216,8 @@ bool createPictureTableSchema(dbdef* def)
216
216
  {
217
217
  //Insert table
218
218
  tabledef td;
219
- td.setTableName(L"picture");
220
- td.setFileName(L"picture.dat");
219
+ td.setTableName(_T("picture"));
220
+ td.setFileName(_T("picture.dat"));
221
221
  td.id = 3;
222
222
  td.charsetIndex = CHARSET_LATIN1;
223
223
  def->insertTable(&td);
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
 
6
6
 
7
7
  using namespace bzs::db::protocol::tdap::client;
@@ -77,7 +77,7 @@ int _tmain(int argc, _TCHAR* argv[])
77
77
  else
78
78
  {
79
79
  if (deleteUser(tbu))
80
- _tprintf(_T("Update records success. \n"));
80
+ _tprintf(_T("Delete records success. \n"));
81
81
  tbu->release();
82
82
  }
83
83
  db->close();
@@ -45,7 +45,7 @@ int _tmain(int argc, _TCHAR* argv[])
45
45
 
46
46
  table_ptr tb = openTable(db, _T("user"));
47
47
  deleteUser(tb);
48
- std::cout << "Insert records success." << std::endl;
48
+ std::cout << "Delete records success." << std::endl;
49
49
  return 0;
50
50
  }
51
51
 
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
 
6
6
  using namespace bzs::db::protocol::tdap::client;
7
7
  using namespace bzs::db::protocol::tdap;
@@ -52,7 +52,10 @@ int _tmain(int argc, _TCHAR* argv[])
52
52
  if (db->stat() != 0)
53
53
  showError(_T("drop daatabase"), NULL, db->stat());
54
54
  result = db->stat();
55
+ if (result == 0)
56
+ _tprintf(_T("Drop daatabase success. \n"));
55
57
  db->close();
58
+
56
59
  }
57
60
  database::destroy(db);
58
61
  return result;
@@ -23,7 +23,7 @@ int _tmain(int argc, _TCHAR* argv[])
23
23
  openDatabase(db, prams);
24
24
  dropDatabase(db);
25
25
 
26
- std::cout << "drop databse success." << std::endl;
26
+ std::cout << "Drop databse success." << std::endl;
27
27
  return 0;
28
28
  }
29
29
  catch(bzs::rtl::exception& e)
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
  #include <iostream>
6
6
  #include <fstream>
7
7
  #include <vector>
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
  #include <vector>
6
6
 
7
7
  using namespace bzs::db::protocol::tdap::client;
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
 
6
6
 
7
7
  using namespace bzs::db::protocol::tdap::client;
@@ -1,7 +1,7 @@
1
1
  #include <stdio.h>
2
2
  #include <bzs/db/protocol/tdap/client/database.h>
3
3
  #include <bzs/db/protocol/tdap/client/table.h>
4
- #include <bzs/db/protocol/tdap/client/dbdef.h>
4
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
5
5
 
6
6
 
7
7
  using namespace bzs::db::protocol::tdap::client;
@@ -68,7 +68,7 @@ int _tmain(int argc, _TCHAR* argv[])
68
68
  //Commit transaction. If an error throwed then abort transaction automaticaly.
69
69
  trn.end();
70
70
 
71
- std::cout << "Insert records success." << std::endl;
71
+ std::cout << "Update records success." << std::endl;
72
72
  return 0;
73
73
  }
74
74
 
@@ -147,7 +147,7 @@ connection* connections::getConnectionPipe()
147
147
 
148
148
  bool connections::disconnect(connection* c)
149
149
  {
150
- if (!c) return false;
150
+ //if (!c) return false;
151
151
  mutex::scoped_lock lck(m_mutex);
152
152
  c->release();
153
153
  if (c->refCount()==0)
@@ -161,8 +161,9 @@ bool connections::disconnect(connection* c)
161
161
  }
162
162
  }
163
163
  delete c;
164
+ return true;
164
165
  }
165
- return true;
166
+ return false;
166
167
  }
167
168
 
168
169
  /** If ep is local then isUseNamedPipe is true
@@ -32,17 +32,27 @@
32
32
  #pragma package(smart_init) // BCB package
33
33
  #pragma warning(disable:4996) // VC++ unsafe function
34
34
 
35
- //Ansi & Unicode
36
- #if (defined(_WIN32) && _MSC_VER)
37
- extern DWORD g_tlsiID_SC3;
35
+ #undef USETLS
36
+ #if ((defined(_WIN32) && _MSC_VER) || __APPLE__)
37
+ #define USETLS
38
+ #endif
39
+
40
+ #ifdef USETLS
41
+ extern tls_key g_tlsiID_SC3;
38
42
  #else
39
43
  __THREAD _TCHAR __THREAD_BCB g_date[30];
40
44
  #endif
41
45
 
42
46
  inline _TCHAR* databuf()
43
47
  {
44
- #if (defined(_WIN32) && _MSC_VER)
45
- return (_TCHAR*)TlsGetValue(g_tlsiID_SC3);
48
+ #ifdef USETLS
49
+ _TCHAR* p = (_TCHAR*)tls_getspecific(g_tlsiID_SC3);
50
+ if (p == NULL)
51
+ {
52
+ p = (_TCHAR*)new wchar_t[45];
53
+ tls_setspecific(g_tlsiID_SC3, p);
54
+ }
55
+ return p;
46
56
  #else
47
57
  return g_date;
48
58
  #endif
@@ -1720,7 +1720,7 @@ void testStringFileter(database* db)
1720
1720
  BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase");
1721
1721
 
1722
1722
  db->open(makeUri(PROTOCOL, HOSTNAME, _T("testString"), BDFNAME), 0, 0);
1723
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase 1");
1723
+ BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase 1 stat = " << db->stat());
1724
1724
 
1725
1725
  doTestStringFileter(db, 1, _T("zstring"), ft_zstring, ft_wzstring);
1726
1726
  if (isUtf16leSupport(db))