transactd 3.4.1 → 3.5.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 (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