transactd 3.4.1 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CMakeLists.txt +2 -2
  3. data/bin/common/tdclc_32_3_5.dll +0 -0
  4. data/bin/common/tdclc_64_3_5.dll +0 -0
  5. data/build/common/options.cmake +12 -0
  6. data/build/common/transactd_cl_common.cmake +1 -0
  7. data/build/common/transactd_required.cmake +5 -0
  8. data/build/swig/ruby/tdclrb_wrap.cpp +1029 -130
  9. data/build/swig/tdcl.i +60 -5
  10. data/build/tdclc/CMakeLists.txt +30 -32
  11. data/build/tdclc/libtdclcm.map +1 -1
  12. data/build/tdclc/tdclc.cbproj +1 -1
  13. data/build/tdclc/tdclc.rc +4 -4
  14. data/build/tdclcpp/CMakeLists.txt +39 -48
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +4 -1
  17. data/build/tdclrb/CMakeLists.txt +5 -4
  18. data/build/tdclrb/tdclrb.rc +4 -4
  19. data/source/bzs/db/engine/mysql/database.cpp +45 -35
  20. data/source/bzs/db/engine/mysql/database.h +6 -8
  21. data/source/bzs/db/engine/mysql/dbManager.cpp +11 -0
  22. data/source/bzs/db/engine/mysql/dbManager.h +1 -0
  23. data/source/bzs/db/engine/mysql/ha.cpp +174 -0
  24. data/source/bzs/db/engine/mysql/ha.h +50 -0
  25. data/source/bzs/db/engine/mysql/mysqlInternal.h +18 -1
  26. data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +222 -9
  27. data/source/bzs/db/engine/mysql/mysqlProtocol.h +5 -0
  28. data/source/bzs/db/protocol/tdap/client/client.cpp +23 -9
  29. data/source/bzs/db/protocol/tdap/client/client.h +125 -94
  30. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +139 -30
  31. data/source/bzs/db/protocol/tdap/client/connMgr.h +40 -8
  32. data/source/bzs/db/protocol/tdap/client/database.cpp +17 -17
  33. data/source/bzs/db/protocol/tdap/client/database.h +15 -0
  34. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +10 -4
  35. data/source/bzs/db/protocol/tdap/client/haNameResolver.cpp +486 -0
  36. data/source/bzs/db/protocol/tdap/client/haNameResolver.h +74 -0
  37. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +102 -71
  38. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +15 -3
  39. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +2 -5
  40. data/source/bzs/db/protocol/tdap/client/nsTable.h +2 -1
  41. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +2 -2
  42. data/source/bzs/db/protocol/tdap/client/table.cpp +1 -2
  43. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +13 -0
  44. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -0
  45. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +9 -7
  46. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +2 -2
  47. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +328 -117
  48. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +7 -8
  49. data/source/bzs/db/protocol/tdap/tdapcapi.h +81 -41
  50. data/source/bzs/db/transactd/connManager.cpp +118 -93
  51. data/source/bzs/db/transactd/connManager.h +6 -1
  52. data/source/bzs/db/transactd/connectionRecord.h +27 -7
  53. data/source/bzs/db/transactd/transactd.cpp +24 -13
  54. data/source/bzs/env/crosscompile.h +2 -0
  55. data/source/bzs/netsvc/client/iconnection.h +2 -0
  56. data/source/bzs/netsvc/client/tcpClient.cpp +45 -14
  57. data/source/bzs/netsvc/client/tcpClient.h +21 -4
  58. data/source/bzs/netsvc/server/IAppModule.h +1 -0
  59. data/source/bzs/netsvc/server/serverCpt.cpp +1 -1
  60. data/source/bzs/netsvc/server/serverPipe.cpp +2 -0
  61. data/source/bzs/netsvc/server/serverTpool.cpp +3 -5
  62. data/source/bzs/test/tdclatl/test_v3.js +91 -3
  63. data/source/bzs/test/tdclphp/transactd_v3_Test.php +89 -3
  64. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +69 -2
  65. data/source/bzs/test/trdclengn/testField.h +19 -1
  66. data/source/bzs/test/trdclengn/test_tdclcpp_ha.cpp +388 -0
  67. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +6 -1
  68. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1 -0
  69. data/source/bzs/test/trdclengn/testbase.h +7 -1
  70. data/source/global/replication/haCommand.cpp +843 -0
  71. data/source/global/replication/haCommand.h +78 -0
  72. data/source/global/replication/haMgr.cpp +321 -0
  73. data/source/global/replication/replCommand.cpp +696 -0
  74. data/source/global/replication/replCommand.h +161 -0
  75. data/source/global/tdclatl/BinlogPos.cpp +10 -0
  76. data/source/global/tdclatl/BinlogPos.h +1 -0
  77. data/source/global/tdclatl/ConnMgr.cpp +89 -2
  78. data/source/global/tdclatl/ConnMgr.h +13 -1
  79. data/source/global/tdclatl/ConnRecord.cpp +8 -2
  80. data/source/global/tdclatl/ConnRecord.h +4 -3
  81. data/source/global/tdclatl/Database.cpp +13 -0
  82. data/source/global/tdclatl/Database.h +2 -0
  83. data/source/global/tdclatl/HaNameREsolver.cpp +54 -0
  84. data/source/global/tdclatl/HaNameREsolver.h +68 -0
  85. data/source/global/tdclatl/resource.h +0 -0
  86. data/source/global/tdclatl/tdclatl.idl +76 -5
  87. metadata +16 -6
  88. data/bin/common/tdclc_32_3_4.dll +0 -0
  89. data/bin/common/tdclc_64_3_4.dll +0 -0
  90. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +0 -423
  91. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +0 -116
@@ -0,0 +1,68 @@
1
+
2
+ #pragma once
3
+ #include "resource.h" // ���C�� �V���{��
4
+
5
+
6
+
7
+ #include "tdclatl_i.h"
8
+ #include <bzs/db/protocol/tdap/client/haNameResolver.h>
9
+
10
+
11
+ #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
12
+ #error "DCOM �̊��S�T�|�[�g���܂�ł��Ȃ� Windows Mobile �v���b�g�t�H�[���̂悤�� Windows CE �v���b�g�t�H�[���ł́A�P��X���b�h COM �I�u�W�F�N�g�͐������T�|�[�g����Ă��܂���BATL ���P��X���b�h COM �I�u�W�F�N�g�̍쐬���T�|�[�g���邱�ƁA����т��̒P��X���b�h COM �I�u�W�F�N�g�̎����̎g�p�����‚��邱�Ƃ���������ɂ́A_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA ���`���Ă��������B���g�p�� rgs �t�@�C���̃X���b�h ���f���� 'Free' �ɐݒ肳��Ă���ADCOM Windows CE �ȊO�̃v���b�g�t�H�[���ŃT�|�[�g�����B��̃X���b�h ���f���Ɛݒ肳��Ă��܂����B"
13
+ #endif
14
+
15
+ using namespace ATL;
16
+
17
+
18
+ // CHaNameResolver
19
+
20
+ class ATL_NO_VTABLE CHaNameResolver :
21
+ public CComObjectRootEx<CComSingleThreadModel>,
22
+ public CComCoClass<CHaNameResolver, &CLSID_HaNameResolver>,
23
+ public IDispatchImpl<IHaNameResolver, &IID_IHaNameResolver, &LIBID_transactd, /*wMajor =*/ 1, /*wMinor =*/ 0>
24
+ {
25
+
26
+ public:
27
+
28
+
29
+ CHaNameResolver()
30
+ {
31
+ }
32
+
33
+ DECLARE_REGISTRY_RESOURCEID(IDR_HANAMERESOLVER)
34
+
35
+
36
+ BEGIN_COM_MAP(CHaNameResolver)
37
+ COM_INTERFACE_ENTRY(IHaNameResolver)
38
+ COM_INTERFACE_ENTRY(IDispatch)
39
+ END_COM_MAP()
40
+
41
+
42
+
43
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
44
+
45
+ HRESULT FinalConstruct()
46
+ {
47
+ return S_OK;
48
+ }
49
+
50
+ void FinalRelease()
51
+ {
52
+ }
53
+
54
+ public:
55
+ STDMETHOD(Start)(BSTR master, BSTR slaves,
56
+ BSTR slaveHostsWithPort, short slaveNum,
57
+ BSTR userName,
58
+ BSTR password,
59
+ int option, int* retVal);
60
+ STDMETHOD(AddPortMap)(short mysqlPort, short transactdPort);
61
+ STDMETHOD(ClearPortMap)();
62
+ STDMETHOD(Stop)();
63
+ STDMETHOD(get_Master)(BSTR* retVal);
64
+ STDMETHOD(get_Slave)(BSTR* retVal);
65
+
66
+ };
67
+
68
+ OBJECT_ENTRY_AUTO(__uuidof(HaNameResolver), CHaNameResolver)
Binary file
@@ -49,6 +49,7 @@ interface IBookmark;
49
49
  interface IBitset;
50
50
  interface IBinlogPos;
51
51
  interface IConnMgr;
52
+ interface IHaNameResolver;
52
53
 
53
54
  typedef
54
55
  [
@@ -205,7 +206,10 @@ enum eStatus
205
206
  ERROR_TD_NET_TOO_BIGDATA = 3802,
206
207
  ERROR_TD_NET_OTHER = 3810,
207
208
  ERROR_TD_C_CLIENT_UNKNOWN = 3811,
208
- ERROR_TD_RECONNECTED = 3900
209
+ ERROR_TD_INVALID_SERVER_ROLE= 3812,
210
+ ERROR_TD_RECONNECTED = 3900,
211
+ ERROR_TD_RECONNECTED_OFFSET = 1000,
212
+ MYSQL_ERROR_OFFSET = 25000
209
213
  }eStatus;
210
214
 
211
215
  typedef
@@ -571,6 +575,10 @@ interface IDatabase : IDispatch
571
575
  HRESULT _stdcall GetCreateViewSql([in]BSTR name, [out, retval] BSTR* retVal);
572
576
  [id(0x00000101)]
573
577
  HRESULT _stdcall ExecSql([in] BSTR Sql, [out, retval] VARIANT_BOOL* Value);
578
+ [propget, id(0x00000102)]
579
+ HRESULT _stdcall EnableAutoReconnect([out, retval] VARIANT_BOOL* retVal);
580
+ [propput, id(0x00000102)]
581
+ HRESULT _stdcall EnableAutoReconnect([in] VARIANT_BOOL val);
574
582
 
575
583
  };
576
584
 
@@ -1780,6 +1788,8 @@ interface IBinlogPos : IDispatch{
1780
1788
  HRESULT _stdcall Filename([out, retval] BSTR* retVal);
1781
1789
  [propget, id(3)]
1782
1790
  HRESULT _stdcall Gtid([out, retval] BSTR* retVal);
1791
+ [propput, id(3)]
1792
+ HRESULT _stdcall Gtid([in] BSTR Value);
1783
1793
  };
1784
1794
 
1785
1795
  [
@@ -1797,11 +1807,11 @@ interface IConnRecord : IDispatch{
1797
1807
  HRESULT _stdcall ConId([out, retval] BSTR* retVal);
1798
1808
  #endif
1799
1809
  [propget, id(0x0000002)]
1800
- HRESULT _stdcall Id([out, retval] int* retVal); //unsigned int value_id;
1810
+ HRESULT _stdcall Id([out, retval] int* retVal);
1801
1811
  [propget, id(0x0000003)]
1802
- HRESULT _stdcall Db([out, retval] short* retVal);
1812
+ HRESULT _stdcall Db([out, retval] int* retVal);
1803
1813
  [propget, id(0x0000004)]
1804
- HRESULT _stdcall Type([out, retval] short* retVal); //trnType
1814
+ HRESULT _stdcall Type([out, retval] int* retVal);
1805
1815
  [propget, id(0x0000005)]
1806
1816
  HRESULT _stdcall Name([out, retval] BSTR* retVal);
1807
1817
  [propget, id(0x0000006)]
@@ -1818,6 +1828,9 @@ interface IConnRecord : IDispatch{
1818
1828
  HRESULT _stdcall InsCount([out, retval] int* retVal);
1819
1829
  [propget, id(0x000000C)]
1820
1830
  HRESULT _stdcall LongValue([out, retval] BSTR* retVal);
1831
+ [propget, id(0x000000D)]
1832
+ HRESULT _stdcall Port([out, retval] int* retVal);
1833
+
1821
1834
  }
1822
1835
 
1823
1836
  [
@@ -1859,7 +1872,7 @@ interface IConnMgr : IDispatch{
1859
1872
  [id(0x0000008)]
1860
1873
  HRESULT _stdcall Sysvars([out, retval] IConnRecords** retVal);
1861
1874
  [id(0x0000011)]
1862
- HRESULT _stdcall SlaveStatus([out, retval] IConnRecords** retVal);
1875
+ HRESULT _stdcall SlaveStatus([in, defaultvalue("") ]BSTR channel, [out, retval] IConnRecords** retVal);
1863
1876
  [id(0x0000009)]
1864
1877
  HRESULT _stdcall Connections([out, retval] IConnRecords** retVal);
1865
1878
  [id(0x000000A)]
@@ -1897,9 +1910,59 @@ interface IConnMgr : IDispatch{
1897
1910
  HRESULT _stdcall Statusvars([out, retval] IConnRecords** retVal);
1898
1911
  [id(0x0000015)]
1899
1912
  HRESULT _stdcall StatusvarName([in]int index, [out, retval] BSTR* retVal);
1913
+ [id(0x0000016)]
1914
+ HRESULT _stdcall Extendedvars([out, retval] IConnRecords** retVal);
1915
+ [id(0x0000017)]
1916
+ HRESULT _stdcall SlaveHosts([out, retval] IConnRecords** retVal);
1917
+ [id(0x0000018)]
1918
+ HRESULT _stdcall Channels([out, retval] IConnRecords** retVal);
1919
+ [id(0x0000019)]
1920
+ HRESULT _stdcall ExtendedVarName([in]int index, [out, retval] BSTR* retVal);
1921
+ [id(0x000001A)]
1922
+ HRESULT _stdcall HaLock([out, retval] VARIANT_BOOL* retVal);
1923
+ [id(0x000001B)]
1924
+ HRESULT _stdcall HaUnlock();
1925
+ [id(0x000001C)]
1926
+ HRESULT _stdcall SetRole([in]int v, [out, retval] VARIANT_BOOL* retVal);
1927
+ [id(0x000001D)]
1928
+ HRESULT _stdcall SetTrxBlock([in]VARIANT_BOOL v, [out, retval] VARIANT_BOOL* retVal);
1929
+ [id(0x000001E)]
1930
+ HRESULT _stdcall SetEnableFailover([in]VARIANT_BOOL v, [out, retval] VARIANT_BOOL* retVal);
1931
+ [propget, id(0x0000001F)]
1932
+ HRESULT _stdcall IsOpen([out, retval] VARIANT_BOOL* retVal);
1900
1933
 
1901
1934
  };
1902
1935
 
1936
+ interface IHaNameResolver;
1937
+ [
1938
+ object,
1939
+ uuid(C6665527-3B17-49A3-BF38-AE3855EC073F),
1940
+ dual,
1941
+ nonextensible,
1942
+ pointer_default(unique)
1943
+ ]
1944
+ interface IHaNameResolver : IDispatch{
1945
+ [id(0x0000001)]
1946
+ HRESULT _stdcall Start([in]BSTR master, [in]BSTR slaves,
1947
+ [in]BSTR slaveHostsWithPort, [in]short slaveNum,
1948
+ [in]BSTR userName,
1949
+ [in]BSTR password,
1950
+ [in, defaultvalue(0)]int option,
1951
+ [out, retval]int* retVal);
1952
+ [id(0x0000002)]
1953
+ HRESULT _stdcall AddPortMap([in]short mysqlPort, [in]short transactdPort);
1954
+ [id(0x0000003)]
1955
+ HRESULT _stdcall ClearPortMap();
1956
+ [id(0x0000004)]
1957
+ HRESULT _stdcall Stop();
1958
+ /*[id(0x0000005)]
1959
+ HRESULT _stdcall Clear();*/
1960
+ [propget, id(0x0000006)]
1961
+ HRESULT _stdcall Master([out, retval]BSTR* retVal);
1962
+ [propget, id(0x0000007)]
1963
+ HRESULT _stdcall Slave([out, retval]BSTR* retVal);
1964
+ };
1965
+
1903
1966
 
1904
1967
  [
1905
1968
  uuid(3B712514-E2EF-4040-8A3C-BCACB839EB3E),
@@ -2196,6 +2259,14 @@ library transactd
2196
2259
  {
2197
2260
  [default] interface IConnMgr;
2198
2261
  };
2262
+
2263
+ [
2264
+ uuid(9259C707-BF39-4B9A-B013-67AF11F4B642)
2265
+ ]
2266
+ coclass HaNameResolver
2267
+ {
2268
+ [default] interface IHaNameResolver;
2269
+ };
2199
2270
 
2200
2271
  };
2201
2272
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transactd
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.1
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - BizStation Corp.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-24 00:00:00.000000000 Z
11
+ date: 2016-07-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Transactd client for ruby gem
14
14
  email: transactd@bizstation.jp
@@ -19,8 +19,8 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - CMakeLists.txt
21
21
  - build/tdclrb/bldgem/extconf.rb
22
- - bin/common/tdclc_32_3_4.dll
23
- - bin/common/tdclc_64_3_4.dll
22
+ - bin/common/tdclc_32_3_5.dll
23
+ - bin/common/tdclc_64_3_5.dll
24
24
  - source/bzs/db/blobBuffer.h
25
25
  - source/bzs/db/blobStructs.h
26
26
  - source/bzs/db/engine/mysql/bookmark.h
@@ -31,6 +31,8 @@ files:
31
31
  - source/bzs/db/engine/mysql/errorMessage.cpp
32
32
  - source/bzs/db/engine/mysql/errorMessage.h
33
33
  - source/bzs/db/engine/mysql/fieldAccess.h
34
+ - source/bzs/db/engine/mysql/ha.cpp
35
+ - source/bzs/db/engine/mysql/ha.h
34
36
  - source/bzs/db/engine/mysql/IReadRecords.h
35
37
  - source/bzs/db/engine/mysql/mydebuglog.cpp
36
38
  - source/bzs/db/engine/mysql/mydebuglog.h
@@ -79,6 +81,8 @@ files:
79
81
  - source/bzs/db/protocol/tdap/client/groupComp.h
80
82
  - source/bzs/db/protocol/tdap/client/groupQuery.cpp
81
83
  - source/bzs/db/protocol/tdap/client/groupQuery.h
84
+ - source/bzs/db/protocol/tdap/client/haNameResolver.cpp
85
+ - source/bzs/db/protocol/tdap/client/haNameResolver.h
82
86
  - source/bzs/db/protocol/tdap/client/indexDDF.cpp
83
87
  - source/bzs/db/protocol/tdap/client/indexDDF.h
84
88
  - source/bzs/db/protocol/tdap/client/memRecord.cpp
@@ -113,8 +117,6 @@ files:
113
117
  - source/bzs/db/protocol/tdap/mysql/characterset.h
114
118
  - source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp
115
119
  - source/bzs/db/protocol/tdap/mysql/databaseSchema.h
116
- - source/bzs/db/protocol/tdap/mysql/debuglog.cpp
117
- - source/bzs/db/protocol/tdap/mysql/debuglog.h
118
120
  - source/bzs/db/protocol/tdap/mysql/recordsetReader.h
119
121
  - source/bzs/db/protocol/tdap/mysql/request.h
120
122
  - source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp
@@ -215,6 +217,7 @@ files:
215
217
  - source/bzs/test/transactdBench/workerTransactdImple.h
216
218
  - source/bzs/test/trdclengn/testbase.h
217
219
  - source/bzs/test/trdclengn/testField.h
220
+ - source/bzs/test/trdclengn/test_tdclcpp_ha.cpp
218
221
  - source/bzs/test/trdclengn/test_tdclcpp_v3.cpp
219
222
  - source/bzs/test/trdclengn/test_trdclengn.cpp
220
223
  - source/global/boost/sha1.hpp
@@ -231,6 +234,11 @@ files:
231
234
  - source/global/ormsrcgen/template/ormMapClass_template.h
232
235
  - source/global/ormsrcgen/template/template.cnf
233
236
  - source/global/querystmts/querystmts.cpp
237
+ - source/global/replication/haCommand.cpp
238
+ - source/global/replication/haCommand.h
239
+ - source/global/replication/haMgr.cpp
240
+ - source/global/replication/replCommand.cpp
241
+ - source/global/replication/replCommand.h
234
242
  - source/global/tdclatl/activeTable.cpp
235
243
  - source/global/tdclatl/activeTable.h
236
244
  - source/global/tdclatl/BinlogPos.cpp
@@ -265,6 +273,8 @@ files:
265
273
  - source/global/tdclatl/Flags.h
266
274
  - source/global/tdclatl/GroupQuery.cpp
267
275
  - source/global/tdclatl/GroupQuery.h
276
+ - source/global/tdclatl/HaNameREsolver.cpp
277
+ - source/global/tdclatl/HaNameREsolver.h
268
278
  - source/global/tdclatl/KeyDef.cpp
269
279
  - source/global/tdclatl/KeyDef.h
270
280
  - source/global/tdclatl/KeySegment.cpp
Binary file
Binary file
@@ -1,423 +0,0 @@
1
- /*=================================================================
2
- Copyright (C) 2012 2013 BizStation Corp All rights reserved.
3
-
4
- This program is free software; you can redistribute it and/or
5
- modify it under the terms of the GNU General Public License
6
- as published by the Free Software Foundation; either version 2
7
- of the License, or (at your option) any later version.
8
-
9
- This program is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU General Public License for more details.
13
-
14
- You should have received a copy of the GNU General Public License
15
- along with this program; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
- 02111-1307, USA.
18
- =================================================================*/
19
-
20
- #include "debuglog.h"
21
- #include "btrvProtocol.h"
22
- #include "recordsetReader.h"
23
- #include "stl_uty.h"
24
-
25
- namespace bzs
26
- {
27
- namespace msqlp
28
- {
29
-
30
- static char logfilename[FN_REFLEN];
31
- static boost::mutex g_logMutex;
32
-
33
- char msg[1024];
34
- void writeDebuglog(ushort_td op, request& req, bool error)
35
- {
36
- bool write = false;
37
-
38
- switch (op)
39
- {
40
- /*case TD_CONNECT:
41
- case TD_STOP_ENGINE:
42
-
43
- break;*/
44
- case TD_RESET_CLIENT:
45
- {
46
- std::string dbname = getDatabaseName(req);
47
- sprintf_s(msg,
48
- "%s TD_RESET_CLIENT result = %d \tdbname = %s\t cid = %d \n",
49
- dateTime(), req.result, dbname.c_str(), req.cid);
50
- write = true;
51
- break;
52
- }
53
- case TD_CREATETABLE:
54
- {
55
- std::string dbname = getDatabaseName(req);
56
- sprintf_s(
57
- msg, "%s TD_CREATETABLE result = %d \tdbname = %s\t table=%s\n",
58
- dateTime(), req.result, dbname.c_str(), getTableName(req).c_str());
59
- write = true;
60
- break;
61
- }
62
- case TD_OPENTABLE:
63
- {
64
- std::string dbname = getDatabaseName(req);
65
- sprintf_s(msg,
66
- "%s TD_OPENTABLE result = %d \tHandle = %d \tdbname = %s\n",
67
- dateTime(), req.result, req.pbk->handle, dbname.c_str());
68
- write = true;
69
- break;
70
- }
71
- case TD_CLOSETABLE:
72
- sprintf_s(msg, "%s TD_CLOSETABLE result = %d \tHandle = %d\n",
73
- dateTime(), req.result, req.pbk->handle);
74
- write = true;
75
- break;
76
- case TD_KEY_SEEK:
77
- sprintf_s(msg, "%s TD_KEY_SEEK result = %d \tHandle = %d\n", dateTime(),
78
- req.result, req.pbk->handle);
79
- write = true;
80
- break;
81
- case TD_KEY_AFTER:
82
- sprintf_s(msg, "%s TD_KEY_AFTER result = %d \tHandle = %d\n",
83
- dateTime(), req.result, req.pbk->handle);
84
- write = true;
85
- break;
86
- case TD_KEY_OR_AFTER:
87
- sprintf_s(msg, "%s TD_KEY_OR_AFTER result = %d \tHandle = %d\n",
88
- dateTime(), req.result, req.pbk->handle);
89
- write = true;
90
- break;
91
- case TD_KEY_BEFORE:
92
- sprintf_s(msg, "%s TD_KEY_BEFORE result = %d \tHandle = %d\n",
93
- dateTime(), req.result, req.pbk->handle);
94
- write = true;
95
- break;
96
- case TD_KEY_OR_BEFORE:
97
- sprintf_s(msg, "%s TD_KEY_OR_BEFORE result = %d \tHandle = %d\n",
98
- dateTime(), req.result, req.pbk->handle);
99
- write = true;
100
- break;
101
- case TD_KEY_FIRST:
102
- sprintf_s(msg, "%s TD_KEY_FIRST result = %d \tHandle = %d\n",
103
- dateTime(), req.result, req.pbk->handle);
104
- write = true;
105
- break;
106
- case TD_KEY_PREV:
107
- sprintf_s(msg, "%s TD_KEY_PREV result = %d \tHandle = %d\n", dateTime(),
108
- req.result, req.pbk->handle);
109
- write = true;
110
- break;
111
- case TD_KEY_LAST:
112
- sprintf_s(msg, "%s TD_KEY_LAST result = %d \tHandle = %d\n", dateTime(),
113
- req.result, req.pbk->handle);
114
- write = true;
115
- break;
116
- case TD_KEY_NEXT:
117
- sprintf_s(msg, "%s TD_KEY_NEXT result = %d \tHandle = %d\n", dateTime(),
118
- req.result, req.pbk->handle);
119
- write = true;
120
- break;
121
- case TD_REC_INSERT:
122
- sprintf_s(msg, "%s TD_REC_INSERT result = %d \tHandle = %d\n",
123
- dateTime(), req.result, req.pbk->handle);
124
- write = true;
125
- break;
126
- case TD_REC_UPDATE:
127
- sprintf_s(msg, "%s TD_REC_UPDATE result = %d \tHandle = %d\n",
128
- dateTime(), req.result, req.pbk->handle);
129
- write = true;
130
- break;
131
- case TD_REC_DELETE:
132
- sprintf_s(msg, "%s TD_REC_DELETE result = %d \tHandle = %d\n",
133
- dateTime(), req.result, req.pbk->handle);
134
- write = true;
135
- break;
136
- case TD_BEGIN_TRANSACTION:
137
- sprintf_s(msg, "%s TD_BEGIN_TRANSACTION cid = %d \n", dateTime(),
138
- req.cid);
139
- write = true;
140
- break;
141
- case TD_END_TRANSACTION:
142
- sprintf_s(msg, "%s TD_END_TRANSACTION cid = %d \n", dateTime(),
143
- req.cid);
144
- write = true;
145
- break;
146
- case TD_ABORT_TRANSACTION:
147
- sprintf_s(msg, "%s TD_ABORT_TRANSACTION cid = %d \n", dateTime(),
148
- req.cid);
149
- write = true;
150
- break;
151
- case TD_BEGIN_SHAPSHOT:
152
- sprintf_s(msg, "%s TD_BEGIN_SHAPSHOT cid = %d \n", dateTime(), req.cid);
153
- write = true;
154
- break;
155
- case TD_END_SNAPSHOT:
156
- sprintf_s(msg, "%s TD_END_SNAPSHOT cid = %d \n", dateTime(), req.cid);
157
- write = true;
158
- break;
159
- case TD_TABLE_INFO:
160
- {
161
- std::string dbname = getDatabaseName(req);
162
- sprintf_s(msg, "%s TD_TABLE_INFO result = %d \tHandle = %d\n",
163
- dateTime(), req.result, req.pbk->handle);
164
- write = true;
165
- break;
166
- }
167
-
168
- case TD_POS_FIRST:
169
- sprintf_s(msg, "%s TD_POS_FIRST result = %d \tHandle = %d\n",
170
- dateTime(), req.result, req.pbk->handle);
171
- write = true;
172
- break;
173
- case TD_POS_LAST:
174
- sprintf_s(msg, "%s TD_POS_LAST result = %d \tHandle = %d\n", dateTime(),
175
- req.result, req.pbk->handle);
176
- write = true;
177
- break;
178
- case TD_POS_NEXT:
179
- sprintf_s(msg, "%s TD_POS_NEXT result = %d \tHandle = %d\n", dateTime(),
180
- req.result, req.pbk->handle);
181
- write = true;
182
- break;
183
- case TD_POS_PREV:
184
- sprintf_s(msg, "%s TD_POS_PREV result = %d \tHandle = %d\n", dateTime(),
185
- req.result, req.pbk->handle);
186
- write = true;
187
- break;
188
- case TD_BOOKMARK:
189
- if (req.result == 0)
190
- sprintf_s(
191
- msg,
192
- "%s TD_BOOKMARK result = %d \tHandle = %d key = %d pos = %d\n",
193
- dateTime(), req.result, req.pbk->handle, req.keyNum,
194
- *((uint*)req.data));
195
- else
196
- sprintf_s(msg,
197
- "%s TD_BOOKMARK result = %d \tHandle = %d key = %d \n",
198
- dateTime(), req.result, req.pbk->handle, req.keyNum);
199
- write = true;
200
- break;
201
-
202
- case TD_MOVE_BOOKMARK:
203
- sprintf_s(
204
- msg,
205
- "%s TD_MOVE_BOOKMARK result = %d \tHandle = %d key = %d pos = %d\n",
206
- dateTime(), req.result, req.pbk->handle, req.keyNum,
207
- *((uchar*)req.data));
208
- write = true;
209
- break;
210
-
211
- case TD_GETDIRECTORY:
212
- sprintf_s(msg, "%s TD_GETDIRECTORY cid = %d \n", dateTime(), req.cid);
213
- write = true;
214
- break;
215
-
216
- /*case TD_VERSION:
217
- break;
218
- case TD_CLEAR_OWNERNAME:
219
- */
220
- case TD_SET_OWNERNAME:
221
- sprintf_s(msg, "%s TD_SET_OWNERNAME result = %d \tHandle = %d\n",
222
- dateTime(), req.result, req.pbk->handle);
223
- write = true;
224
- break;
225
- case TD_DROP_INDEX:
226
- sprintf_s(msg, "%s TD_DROP_INDEX result = %d \tHandle = %d\n",
227
- dateTime(), req.result, req.pbk->handle);
228
- write = true;
229
- break;
230
- case TD_KEY_NEXT_MULTI:
231
- sprintf_s(msg, "%s TD_KEY_NEXT_MULTI result = %d \tHandle = %d\n",
232
- dateTime(), req.result, req.pbk->handle);
233
- write = true;
234
- break;
235
- case TD_KEY_PREV_MULTI:
236
- sprintf_s(msg, "%s TD_KEY_PREV_MULTI result = %d \tHandle = %d\n",
237
- dateTime(), req.result, req.pbk->handle);
238
- write = true;
239
- break;
240
- case TD_POS_NEXT_MULTI:
241
- sprintf_s(msg, "%s TD_POS_NEXT_MULTI result = %d \tHandle = %d\n",
242
- dateTime(), req.result, req.pbk->handle);
243
- write = true;
244
- break;
245
- case TD_POS_PREV_MULTI:
246
- sprintf_s(msg, "%s TD_POS_PREV_MULTI result = %d \tHandle = %d\n",
247
- dateTime(), req.result, req.pbk->handle);
248
- write = true;
249
- break;
250
- case TD_MOVE_PER:
251
- sprintf_s(msg, "%s TD_MOVE_PER result = %d \tHandle = %d\n", dateTime(),
252
- req.result, req.pbk->handle);
253
- write = true;
254
- break;
255
- case TD_GET_PER:
256
- sprintf_s(msg, "%s TD_GET_PER result = %d \tHandle = %d\n", dateTime(),
257
- req.result, req.pbk->handle);
258
- write = true;
259
- break;
260
- case TD_INSERT_BULK:
261
- sprintf_s(msg, "%s TD_INSERT_BULK result = %d \tHandle = %d\n",
262
- dateTime(), req.result, req.pbk->handle);
263
- write = true;
264
- break;
265
- }
266
- if (error)
267
- {
268
- sprintf_s(msg, "%s ERROR result = %d op=%d\t\tHandle = %d\n",
269
- dateTime(), req.result, op, req.pbk ? req.pbk->handle : 0);
270
- write = true;
271
- }
272
- if (write)
273
- {
274
- boost::mutex::scoped_lock lck(g_logMutex);
275
- FILE* fp = fileOpne(logfilename, "a+");
276
- if (fp)
277
- {
278
- fputs(msg, fp);
279
- fclose(fp);
280
- }
281
- }
282
- }
283
- void writeDebuglog(const char* msg)
284
- {
285
- boost::mutex::scoped_lock lck(g_logMutex);
286
- FILE* fp = fileOpne(logfilename, "a+");
287
- if (fp)
288
- {
289
- fputs(dateTime(), fp);
290
- fputs(" ", fp);
291
- fputs(msg, fp);
292
- fclose(fp);
293
- }
294
- }
295
- void writeDebuglogDump(const char* msg, const char* p, int size)
296
- {
297
- boost::mutex::scoped_lock lck(g_logMutex);
298
- FILE* fp = fileOpne(logfilename, "a+");
299
- if (fp)
300
- {
301
- fputs(msg, fp);
302
- fputs("\n", fp);
303
- dump(fp, p, size, INT_MAX);
304
-
305
- fclose(fp);
306
- }
307
- }
308
- void fieldDump(table* tb)
309
- {
310
- boost::mutex::scoped_lock lck(g_logMutex);
311
- FILE* fp = fileOpne(logfilename, "a+");
312
- if (fp)
313
- {
314
- for (int j = 0; j < (int)tb->m_table->s->fields; j++)
315
- {
316
- fputs(tb->m_table->s->field[j]->field_name, fp);
317
- fputs("=", fp);
318
- fputs(tb->valStr(j), fp);
319
- fputs("\n", fp);
320
- }
321
- fclose(fp);
322
- }
323
- }
324
-
325
- void initLog()
326
- {
327
- fn_format(logfilename, "transctd_debug", "", ".log",
328
- MY_REPLACE_EXT | MY_UNPACK_FILENAME);
329
-
330
- FILE* fp = fileOpne(logfilename, "w");
331
- if (fp)
332
- {
333
- fputs(dateTime(), fp);
334
- fputs("Transctd debug Start", fp);
335
- fputs(msg, fp);
336
- fclose(fp);
337
- }
338
- }
339
- void endLog()
340
- {
341
- writeDebuglog("Transctd debug End");
342
- }
343
- void dump(FILE* fp, const char* p, int size, int limit)
344
- {
345
- size = std::min(size, limit);
346
- for (int i = 0; i < size; i += 16)
347
- {
348
-
349
- for (int j = 0; j < 16; j++)
350
- fprintf(fp, "%02X ", *((unsigned char*)(p + i + j)));
351
- fprintf(fp, " ");
352
- for (int j = 0; j < 16; j++)
353
- fprintf(fp, "%c", *((unsigned char*)(p + i + j)));
354
- fprintf(fp, "\n");
355
- }
356
- fprintf(fp, "\n");
357
- }
358
- void debugReadRecordsBegin(extResultDef* resultDef, extRequest* req)
359
- {
360
- char tmp[2048];
361
- char tmp2[1024] = { 0x00 };
362
- sprintf(tmp, "READS RESULTDEF maxRows=%d fieldCount=%d\n",
363
- resultDef->maxRows, resultDef->fieldCount);
364
- for (int i = 0; i < resultDef->fieldCount; i++)
365
- {
366
- resultField* fd = &resultDef->field[i];
367
- sprintf(tmp2, "RESULTDEF FIELD%d pos =%d len=%d \n", i + 1, fd->pos,
368
- fd->len);
369
- strcat(tmp, tmp2);
370
- }
371
- sprintf(tmp2, "READS REQ len=%d reject=%d logicalCount=%d\n", req->len,
372
- req->rejectCount, req->logicalCount);
373
- strcat(tmp, tmp2);
374
- logicalField* field = &req->field;
375
- while (1)
376
- {
377
- sprintf(
378
- tmp2, "REQUEST FIELD1 type =%d len=%d pos=%d logType=%d opr=%d ",
379
- field->type, field->len, field->pos, field->logType, field->opr);
380
- strcat(tmp, tmp2);
381
- if (field->logType & CMPLOGICAL_FIELD)
382
- sprintf(tmp2, "offset=%d\n", field->offset);
383
- else
384
- {
385
- strcat(tmp, "Value=");
386
- for (int j = 0; j < field->len; j++)
387
- {
388
- sprintf(tmp2, "%02X ", *(field->ptr + j));
389
- strcat(tmp, tmp2);
390
- }
391
- strcat(tmp, "\n");
392
- }
393
- if (field->opr == 0)
394
- break; // this is last
395
- field = field->next();
396
- }
397
- writeDebuglog(tmp);
398
- }
399
- void debugReadRecordsEnd(resultWriter* rw)
400
- {
401
- writeDebuglogDump("READS RESULT DUMP",
402
- rw->resultBuffer() + RETBUF_EXT_RESERVE_SIZE,
403
- rw->resultLen() - RETBUF_EXT_RESERVE_SIZE);
404
- }
405
- void debugInsert(table* tb, const char* packPtr, int packlen, int row,
406
- int errorCount)
407
- {
408
- char tmp[64];
409
- sprintf(tmp, "INSERT PACKED Row=%d len=%d ErrorRows=%d ", packlen, row,
410
- errorCount);
411
- writeDebuglogDump(tmp, packPtr + sizeof(ushort_td), packlen);
412
- sprintf(tmp, "INSERT UNPACKED Row=%d len=%ld stat=%d", row, tb->recordLen(),
413
- tb->stat());
414
- writeDebuglogDump(tmp, (const char*)tb->record(), tb->recordLen());
415
- fieldDump(tb);
416
- }
417
-
418
- } // namespace msqlp
419
- } // namespace bzs
420
-
421
- #ifdef DEBUG_PROFILE
422
- unsigned int g_v;
423
- #endif