transactd 2.0.1 → 2.1.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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +6 -6
  3. data/README +16 -16
  4. data/README-JA +16 -16
  5. data/bin/common/tdclc_32_2_1.dll +0 -0
  6. data/bin/common/tdclc_64_2_1.dll +0 -0
  7. data/build/common/transactd_cl_common.cmake +0 -1
  8. data/build/common/transactd_common.cmake +28 -38
  9. data/build/swig/ruby/ruby.swg +36 -30
  10. data/build/swig/ruby/tdclrb_wrap.cpp +35016 -0
  11. data/build/swig/tdcl.i +217 -62
  12. data/build/tdclc/CMakeLists.txt +14 -26
  13. data/build/tdclc/libtdclcm.map +4 -0
  14. data/build/tdclc/tdclc.cbproj +1 -1
  15. data/build/tdclc/tdclc.rc +0 -0
  16. data/build/tdclcpp/CMakeLists.txt +7 -22
  17. data/build/tdclcpp/tdclcpp.rc +0 -0
  18. data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
  19. data/build/tdclrb/CMakeLists.txt +7 -49
  20. data/build/tdclrb/tdclrb.rc +62 -0
  21. data/source/bzs/db/blobBuffer.h +5 -0
  22. data/source/bzs/db/blobStructs.h +2 -0
  23. data/source/bzs/db/engine/mysql/IReadRecords.h +9 -0
  24. data/source/bzs/db/engine/mysql/database.cpp +391 -169
  25. data/source/bzs/db/engine/mysql/database.h +178 -40
  26. data/source/bzs/db/engine/mysql/dbManager.cpp +45 -3
  27. data/source/bzs/db/engine/mysql/dbManager.h +3 -39
  28. data/source/bzs/db/engine/mysql/errorMessage.cpp +11 -7
  29. data/source/bzs/db/engine/mysql/errorMessage.h +1 -1
  30. data/source/bzs/db/engine/mysql/mydebuglog.cpp +1 -2
  31. data/source/bzs/db/engine/mysql/mysqlInternal.h +8 -8
  32. data/source/bzs/db/engine/mysql/mysqlThd.cpp +11 -0
  33. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +1 -1
  34. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +41 -6
  35. data/source/bzs/db/protocol/tdap/client/activeTable.h +177 -8
  36. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +141 -62
  37. data/source/bzs/db/protocol/tdap/client/client.cpp +39 -35
  38. data/source/bzs/db/protocol/tdap/client/client.h +52 -25
  39. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +17 -0
  40. data/source/bzs/db/protocol/tdap/client/connectionPool.h +1 -0
  41. data/source/bzs/db/protocol/tdap/client/database.cpp +5 -1
  42. data/source/bzs/db/protocol/tdap/client/database.h +1 -1
  43. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +49 -12
  44. data/source/bzs/db/protocol/tdap/client/databaseManager.h +42 -5
  45. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +4 -2
  46. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +71 -41
  47. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +49 -49
  48. data/source/bzs/db/protocol/tdap/client/field.cpp +22 -13
  49. data/source/bzs/db/protocol/tdap/client/field.h +7 -3
  50. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +1 -1
  51. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +0 -1
  52. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +1 -0
  53. data/source/bzs/db/protocol/tdap/client/fields.h +111 -24
  54. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +1 -1
  55. data/source/bzs/db/protocol/tdap/client/filter.h +687 -310
  56. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +12 -4
  57. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +1 -1
  58. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +190 -32
  59. data/source/bzs/db/protocol/tdap/client/memRecord.h +64 -22
  60. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +4 -4
  61. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -2
  62. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +6 -3
  63. data/source/bzs/db/protocol/tdap/client/nsTable.h +1 -1
  64. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +19 -8
  65. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +194 -87
  66. data/source/bzs/db/protocol/tdap/client/request.h +84 -26
  67. data/source/bzs/db/protocol/tdap/client/stringConverter.h +22 -12
  68. data/source/bzs/db/protocol/tdap/client/table.cpp +494 -286
  69. data/source/bzs/db/protocol/tdap/client/table.h +48 -5
  70. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +133 -87
  71. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +22 -22
  72. data/source/bzs/db/protocol/tdap/client/trdormapi.h +43 -18
  73. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +3 -3
  74. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +1 -0
  75. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +268 -74
  76. data/source/bzs/db/protocol/tdap/mysql/request.h +4 -4
  77. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +179 -43
  78. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +4 -4
  79. data/source/bzs/db/protocol/tdap/tdapRequest.h +15 -14
  80. data/source/bzs/db/protocol/tdap/tdapSchema.h +125 -90
  81. data/source/bzs/db/protocol/tdap/tdapcapi.h +46 -5
  82. data/source/bzs/db/transactd/appModule.h +1 -1
  83. data/source/bzs/db/transactd/connManager.cpp +2 -0
  84. data/source/bzs/db/transactd/transactd.cpp +1 -0
  85. data/source/bzs/env/compiler.h +10 -0
  86. data/source/bzs/env/mbcswchrLinux.cpp +42 -6
  87. data/source/bzs/env/mbcswchrLinux.h +40 -12
  88. data/source/bzs/example/queryData.cpp +33 -4
  89. data/source/bzs/netsvc/client/iconnection.h +107 -0
  90. data/source/bzs/netsvc/client/tcpClient.cpp +15 -1
  91. data/source/bzs/netsvc/client/tcpClient.h +96 -87
  92. data/source/bzs/netsvc/server/serverCpt.cpp +5 -6
  93. data/source/bzs/rtl/benchmark.cpp +2 -2
  94. data/source/bzs/rtl/stringBuffers.cpp +3 -3
  95. data/source/bzs/rtl/stringBuffers.h +2 -2
  96. data/source/bzs/test/tdclatl/bench_query_atl.js +92 -99
  97. data/source/bzs/test/tdclatl/test_query_atl.js +224 -115
  98. data/source/bzs/test/tdclphp/bench.php +126 -101
  99. data/source/bzs/test/tdclphp/transactd_Test.php +1122 -158
  100. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +12 -14
  101. data/source/bzs/test/tdclrb/transactd_spec.rb +1127 -142
  102. data/source/bzs/test/transactdBench/query_bench.cpp +32 -15
  103. data/source/bzs/test/transactdBench/scaling_bench.cpp +32 -7
  104. data/source/bzs/test/transactdBench/transactdBench.cpp +1 -1
  105. data/source/bzs/test/transactdBench/workerBase.h +46 -0
  106. data/source/bzs/test/transactdBench/workerMySQLImple.h +15 -7
  107. data/source/bzs/test/transactdBench/workerTransactdImple.h +10 -18
  108. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1487 -174
  109. data/source/global/ormsrcgen/main.cpp +2 -0
  110. data/source/global/tdclatl/Database.cpp +2 -2
  111. data/source/global/tdclatl/Database.h +1 -1
  112. data/source/global/tdclatl/FieldDefs.cpp +0 -3
  113. data/source/global/tdclatl/PooledDbManager.cpp +2 -2
  114. data/source/global/tdclatl/PooledDbManager.h +1 -1
  115. data/source/global/tdclatl/PreparedQuery.cpp +53 -0
  116. data/source/global/tdclatl/PreparedQuery.h +61 -0
  117. data/source/global/tdclatl/QueryBase.cpp +2 -1
  118. data/source/global/tdclatl/QueryBase.h +1 -1
  119. data/source/global/tdclatl/Record.cpp +3 -15
  120. data/source/global/tdclatl/Recordset.cpp +15 -10
  121. data/source/global/tdclatl/Recordset.h +3 -0
  122. data/source/global/tdclatl/Table.cpp +42 -7
  123. data/source/global/tdclatl/Table.h +3 -1
  124. data/source/global/tdclatl/activeTable.cpp +264 -76
  125. data/source/global/tdclatl/activeTable.h +12 -3
  126. data/source/global/tdclatl/tdclatl.idl +92 -10
  127. data/source/linux/charsetConvert.h +7 -7
  128. data/transactd.gemspec +14 -27
  129. metadata +18 -27
  130. data/bin/common/tdclc_32_2_0.dll +0 -0
  131. data/bin/common/tdclc_64_2_0.dll +0 -0
  132. data/build/swig/php/generate.cmake.in +0 -56
  133. data/build/swig/php/generate.cmd.in +0 -47
  134. data/build/swig/php/php.swg +0 -197
  135. data/build/swig/php/transactd.no_yield.php +0 -4494
  136. data/build/swig/php/transactd.no_yield.php.git.patch +0 -685
  137. data/build/swig/php/transactd.no_yield.php.patch +0 -685
  138. data/build/swig/php/transactd.yield.php +0 -4461
  139. data/build/swig/php/transactd.yield.php.git.patch +0 -652
  140. data/build/swig/php/transactd.yield.php.patch +0 -652
  141. data/build/swig/ruby/generate.cmake.in +0 -35
  142. data/build/swig/ruby/generate.cmd.in +0 -19
  143. data/build/tdclc/BUILDNUMBER.txt +0 -1
  144. data/build/tdclcpp/BUILDNUMBER.txt +0 -1
  145. data/build/tdclrb/BUILDNUMBER.txt +0 -1
  146. data/build/tdclrb/GEM_RELEASE_VERSION +0 -1
@@ -1,4 +1,4 @@
1
- /*=================================================================
1
+ /*=================================================================
2
2
  Copyright (C) 2000-2013 BizStation Corp All rights reserved.
3
3
 
4
4
  This program is free software; you can redistribute it and/or
@@ -40,139 +40,139 @@ PACKAGE _TCHAR* getErrorMessageLocale(int errorCode, _TCHAR* buf, size_t size)
40
40
  case STATUS_LOCK_ERROR:
41
41
  case STATUS_FILE_LOCKED:
42
42
  case STATUS_CANNOT_LOCK_TABLE:
43
- p = _T("���̃��R�[�h�͊��ɑ��̃��[�U�[�ɂ�胍�b�N����Ă��܂��B");
43
+ p = _T("このレコードは既に他のユーザーによりロックされています。");
44
44
  break;
45
45
  case STATUS_CHANGE_CONFLICT:
46
- p = _T("���̃��R�[�h�͍��A���̃��[�U�[�ɂ��ύX����܂����B");
46
+ p = _T("このレコードは今、他のユーザーにより変更されました。");
47
47
  break;
48
48
  case STATUS_TABLE_YET_OPEN:
49
- p = _T("���̃e�[�u���͂܂� OPEN ����Ă��܂���B");
49
+ p = _T("このテーブルはまだ OPEN されていません。");
50
50
  break;
51
51
  case STATUS_DURING_TRANSACTION:
52
- p = _T("���̃e�[�u���͂܂��g�����U�N�V�������ł��Bclose �ł��܂���B");
52
+ p = _T("このテーブルはまだトランザクション中です。close できません。");
53
53
  break;
54
54
  case STATUS_NO_ACR_UPDATE_DELETE:
55
- p = _T("�X�V�܂��͍폜�A�N�Z�X��������܂���B");
55
+ p = _T("更新または削除アクセス権がありません。");
56
56
  break;
57
57
  case STATUS_NO_ACR_INSERT:
58
- p = _T("�lj��A�N�Z�X��������܂���B");
58
+ p = _T("追加アクセス権がありません。");
59
59
  break;
60
60
  case STATUS_NO_ACR_READ:
61
- p = _T("�ǂݎ��A�N�Z�X��������܂���B");
61
+ p = _T("読み取りアクセス権がありません。");
62
62
  break;
63
63
  case STATUS_CANT_ALLOC_MEMORY:
64
- p = _T("���������m�ۂł��܂���ł����B");
64
+ p = _T("メモリが確保できませんでした。");
65
65
  break;
66
66
  case STATUS_USE_KEYFIELD:
67
- p = _T("���̃t�B�[���h�̓L�[�Ŏg�p����Ă��邽�ߍ폜�ł��܂���B");
67
+ p = _T("このフィールドはキーで使用されているため削除できません。");
68
68
  break;
69
69
  case STATUS_TOO_MANY_TABLES:
70
- p = _T("�Ǘ��”\�ȃe�[�u�����𒴂��Ă��܂��B");
70
+ p = _T("管理可能なテーブル数を超えています。");
71
71
  break;
72
72
  case STATUS_INVARID_PRM_KEY_NUM:
73
- p = _T("MainKey�L�[�ԍ����s���ł��B");
73
+ p = _T("MainKeyキー番号が不正です。");
74
74
  break;
75
75
  case STATUS_INVARID_PNT_KEY_NUM:
76
- p = _T("ParentKey�L�[�ԍ����s���ł��B");
76
+ p = _T("ParentKeyキー番号が不正です。");
77
77
  break;
78
78
  case STATUS_INVARID_REP_KEY_NUM:
79
- p = _T("ReplicaKey�L�[�ԍ����s���ł��B");
79
+ p = _T("ReplicaKeyキー番号が不正です。");
80
80
  break;
81
81
  case STATUS_INVARID_FIELD_IDX:
82
- p = _T("�t�B�[���h�C���f�b�N�X���L���͈͂ɂ���܂���B");
82
+ p = _T("フィールドインデックスが有効範囲にありません。");
83
83
  break;
84
84
  case STATUS_ALREADY_DELETED:
85
- p = _T("���̃A�C�e���͍폜����Ă��܂��B");
85
+ p = _T("このアイテムは削除されています。");
86
86
  break;
87
87
  case STATUS_LMITS_MAX_TABLES:
88
- p = _T("�I�[�v���ł���e�[�u���̍ő吔�𒴂��Ă��܂��B");
88
+ p = _T("オープンできるテーブルの最大数を超えています。");
89
89
  break;
90
90
  case STATUS_DB_YET_OPEN:
91
- p = _T("�f�[�^�x�[�X���I�[�v������Ă��܂���B");
91
+ p = _T("データベースがオープンされていません。");
92
92
  break;
93
93
  case STATUS_TABLENAME_NOTFOUND:
94
- p = _T("�w�肵���e�[�u���������‚���܂���B");
94
+ p = _T("指定したテーブル名が見つかりません。");
95
95
  break;
96
96
  case STATUS_DIFFERENT_DBVERSION:
97
- p = _T("�f�[�^�x�[�X�̃o�[�W�������Ⴄ���A�j�����Ă��܂��B");
97
+ p = _T("データベースのバージョンが違うか、破損しています。");
98
98
  break;
99
99
  case STATUS_DUPLICATE_FIELDNAME:
100
- p = _T("�t�B�[���h�����d�����Ă��܂��B");
100
+ p = _T("フィールド名が重複しています。");
101
101
  break;
102
102
  case STATUS_INVALID_TABLE_IDX:
103
- p = _T("��`����Ȃ��e�[�u���ԍ��ł��B");
103
+ p = _T("定義されないテーブル番号です。");
104
104
  break;
105
105
  case STATUS_AUTH_DENIED:
106
- p = _T("���[�U�[���܂��̓p�X���[�h���s���ł��B");
106
+ p = _T("ユーザー名またはパスワードが不正です。");
107
107
  break;
108
108
  case STATUS_TOO_MANY_FIELDS:
109
- p = _T("�Ǘ��”\�ȃt�B�[���h���𒴂��Ă��܂��B");
109
+ p = _T("管理可能なフィールド数を超えています。");
110
110
  break;
111
111
  case STATUS_FILTERSTRING_ERROR:
112
- p = _T("�t�B���^������Ɍ�肪����܂��B");
112
+ p = _T("フィルタ文字列に誤りがあります。");
113
113
  break;
114
114
  case STATUS_INVALID_FIELDLENGTH:
115
- p = _T("�t�B�[���h�����s���ł��B");
115
+ p = _T("フィールド長が不正です。");
116
116
  break;
117
117
  case STATUS_INVALID_KEYTYPE:
118
- p = _T("�g�p�ł��Ȃ��L�[�^�C�v���w�肳��Ă��܂��B");
118
+ p = _T("使用できないキータイプが指定されています。");
119
119
  break;
120
120
  case STATUS_LVAR_NOTE_NOT_LAST:
121
- p = _T("Note�y��Lvar�^�C�v�̓t�B�[���h�̈�ԍŌ�łȂ���΂Ȃ�܂���")
121
+ p = _T("Note及びLvarタイプはフィールドの一番最後でなければなりません")
122
122
  _T("B");
123
123
  break;
124
124
  case STATUS_INVALID_VARIABLETABLE:
125
- p = _T("�•ϒ��e�[�u���̍Ō�̃t�B�[���h��Note Lvar ")
126
- _T("varbinary�^�C�v���K�v�ł��B");
125
+ p = _T("可変長テーブルの最後のフィールドはNote Lvar ")
126
+ _T("varbinaryタイプが必要です。");
127
127
  break;
128
128
  case STATUS_NODEF_FOR_CONVERT:
129
- p = _T("�R���o�[�g����`������܂���B");
129
+ p = _T("コンバート元定義がありません。");
130
130
  break;
131
131
  case STATUS_TRD_NEED_VARLENGTH:
132
- p = _T("�•ϒ��e�[�u���̎w�肪�K�v�ł��B");
132
+ p = _T("可変長テーブルの指定が必要です。");
133
133
  break;
134
134
  case STATUS_TOO_LONG_OWNERNAME:
135
- p = _T("�I�[�i�[�l�[�����������܂��B");
135
+ p = _T("オーナーネームが長すぎます。");
136
136
  break;
137
137
  case STATUS_CANT_DEL_FOR_REL:
138
- p = _T("�Q�Ɛ������̂��ߍ폜�ł��܂���B");
138
+ p = _T("参照整合性のため削除できません。");
139
139
  break;
140
140
  case STATUS_NO_AUTOINC_SPACE:
141
- p = _T("AutoIncEx�̃X�y�[�X������܂���B");
141
+ p = _T("AutoIncExのスペースがありません。");
142
142
  break;
143
143
  case STATUS_INVALID_RECLEN:
144
- p = _T("���R�[�h����`���s�����A�e�[�u�����I�[�v������Ă��܂���B");
144
+ p = _T("レコード長定義が不正か、テーブルがオープンされていません。");
145
145
  break;
146
146
  case STATUS_INVALID_FIELDVALUE:
147
- p = _T("�t�B�[���h�̒l���s���ł��B");
147
+ p = _T("フィールドの値が不正です。");
148
148
  break;
149
149
  case STATUS_INVALID_VALLEN:
150
- p = _T("�•ϒ����R�[�h�̒������o�b�t�@�T�C�Y�𒴂��Ă��܂��B");
150
+ p = _T("可変長レコードの長さがバッファサイズを超えています。");
151
151
  break;
152
152
  case STATUS_FIELDTYPE_NOTSUPPORT:
153
153
  p = _T("This field type is not supported.");
154
154
  break;
155
155
  case STATUS_DUPPLICATE_KEYVALUE:
156
- p = _T("�L�[�l���d�����Ă��邽�ߓo�^�ł��܂���B");
156
+ p = _T("キー値が重複しているため登録できません。");
157
157
  break;
158
158
  case STATUS_REQUESTER_DEACTIVE:
159
- p = _T("�f�[�^�x�[�X�G���W�������[�h�ł��܂���B\r\nTerminal ")
160
- _T("Service�y�сAWindowsXP�̃��[�U�[�؂�ւ�")
159
+ p = _T("データベースエンジンをロードできません。\r\nTerminal ")
160
+ _T("Service及び、WindowsXPのユーザー切り替え")
161
161
  _T
162
- ("�ɂ����āA�����ɑ����̃��[�U�[�����p����ɂ́APervasive.SQL 2000i Server�ȏ�̃C���X�g�[�����K�v�ł��B");
162
+ ("において、同時に多数のユーザーが利用するには、Pervasive.SQL 2000i Server以上のインストールが必要です。");
163
163
  break;
164
164
  case STATUS_ACCESS_DENIED:
165
- p = _T("�X�V�̂��߂̃A�N�Z�X��������܂���B\r\n�t�@�C���̓��[�h�I����")
166
- _T("�[���p�X���[�h������������܂���B");
165
+ p = _T("更新のためのアクセス権がありません。\r\nファイルはリードオンリ")
166
+ _T("ーかパスワードが正しくありません。");
167
167
  break;
168
168
  case STATUS_CANT_CREATE:
169
- p = _T("�f�[�^�x�[�X�̍쐬�Ɏ��s���܂����B���Ƀf�[�^�x�[�X�����݂��Ă�")
170
- _T("�Ȃ����m�F���Ă��������B");
169
+ p = _T("データベースの作成に失敗しました。既にデータベースが存在してい")
170
+ _T("ないか確認してください。");
171
171
  break;
172
172
  default:
173
- _stprintf_s(buf, 256, _T("�f�[�^�x�[�X�I�y���[�V�����ŃG���[����������")
174
- _T("�����B\r\n�G���[�ԍ��� %d \r\n ")
175
- _T("�����𒆎~���܂��B"),
173
+ _stprintf_s(buf, 256, _T("データベースオペレーションでエラーが発生しま")
174
+ _T("した。\r\nエラー番号は %d \r\n ")
175
+ _T("処理を中止します。"),
176
176
  errorCode);
177
177
  }
178
178
  if (p)
@@ -23,8 +23,6 @@
23
23
  #include <bzs/db/protocol/tdap/fieldComp.h>
24
24
  #include "stringConverter.h"
25
25
  #include <bzs/rtl/stringBuffers.h>
26
- #include <boost/shared_array.hpp>
27
-
28
26
  #ifdef BCB_32
29
27
  #pragma option push
30
28
  #pragma option -O1
@@ -33,6 +31,7 @@
33
31
  #else
34
32
  #include <boost/unordered_map.hpp>
35
33
  #endif
34
+ #include <boost/shared_array.hpp>
36
35
 
37
36
  #pragma package(smart_init)
38
37
 
@@ -437,7 +436,6 @@ inline void setValue(const fielddef& fd, uchar_td* ptr, __int64 value)
437
436
  void* field::ptr() const
438
437
  {
439
438
  return m_ptr + m_fd->pos;
440
- ;
441
439
  }
442
440
 
443
441
  void field::setFVA(const char* data)
@@ -705,7 +703,7 @@ void field::setFV(int data)
705
703
  {
706
704
  if (!m_ptr)
707
705
  return;
708
- char buf[20];
706
+ char buf[50];
709
707
  double d;
710
708
  int v = data;
711
709
  switch (m_fd->type)
@@ -781,7 +779,7 @@ void field::setFV(int data)
781
779
  setFVA("");
782
780
  else
783
781
  {
784
- _ltoa_s(data, buf, 20, 10);
782
+ _ltoa_s(data, buf, 50, 10);
785
783
  setFVA(buf);
786
784
  }
787
785
  break;
@@ -795,8 +793,8 @@ void field::setFV(int data)
795
793
  setFV(_T(""));
796
794
  else
797
795
  {
798
- _TCHAR buf[30];
799
- _ltot_s(data, buf, 30, 10);
796
+ _TCHAR buf[50];
797
+ _ltot_s(data, buf, 50, 10);
800
798
  setFV(buf);
801
799
  }
802
800
  break;
@@ -810,7 +808,7 @@ void field::setFV(double data)
810
808
  {
811
809
  if (!m_ptr)
812
810
  return;
813
- char buf[20];
811
+ char buf[50];
814
812
  __int64 i64;
815
813
  switch (m_fd->type)
816
814
  {
@@ -884,8 +882,8 @@ void field::setFV(double data)
884
882
  setFV(_T(""));
885
883
  else
886
884
  {
887
- _TCHAR buf[40];
888
- _stprintf_s(buf, 40, _T("%f"), data);
885
+ _TCHAR buf[50];
886
+ _stprintf_s(buf, 50, _T("%f"), data);
889
887
  setFV(buf);
890
888
  }
891
889
  break;
@@ -1570,8 +1568,12 @@ void* field::getFVbin(uint_td& size) const
1570
1568
  int sizeByte = m_fd->len - 8;
1571
1569
  size = 0;
1572
1570
  memcpy(&size, (char*)m_ptr + m_fd->pos, sizeByte);
1573
- char** ptr = (char**)((char*)m_ptr + m_fd->pos + sizeByte);
1574
- return (void*)*ptr;
1571
+ if (size)
1572
+ {
1573
+ char** ptr = (char**)((char*)m_ptr + m_fd->pos + sizeByte);
1574
+ return (void*)*ptr;
1575
+ }
1576
+ return NULL;
1575
1577
  }
1576
1578
  case ft_lvar:
1577
1579
  {
@@ -1602,7 +1604,7 @@ double field::getFVDecimal() const
1602
1604
  buf[len - 1] = (unsigned char)(buf[len - 1] & 0xF0);
1603
1605
  for (i = 0; i < len; i++)
1604
1606
  {
1605
- sprintf_s(n, 50, "%02x", buf[i]);
1607
+ sprintf_s(n, 10, "%02x", buf[i]);
1606
1608
  strcat(result, n);
1607
1609
  }
1608
1610
  i = (int)strlen(result);
@@ -1978,6 +1980,13 @@ bool field::isCompPartAndMakeValue()
1978
1980
  return ret;
1979
1981
  }
1980
1982
 
1983
+ void field::offsetBlobPtr(size_t offset)
1984
+ {
1985
+ int size = m_fd->blobLenBytes();
1986
+ char** p = (char**)((char*)m_ptr + size);
1987
+ *p += offset;
1988
+ }
1989
+
1981
1990
  } // namespace client
1982
1991
  } // namespace tdap
1983
1992
  } // namespace protocol
@@ -169,8 +169,6 @@ private:
169
169
  void setFVNumeric(double data);
170
170
  // ---- end regacy interfaces ---- //
171
171
 
172
- inline field(unsigned char* ptr, const fielddef& fd, fielddefs* fds)
173
- : m_fd((fielddef*)&fd), m_ptr(ptr), m_fds(fds){};
174
172
 
175
173
  /** @cond INTERNAL */
176
174
  #if defined(SWIG) || \
@@ -178,9 +176,14 @@ private:
178
176
  public:
179
177
  #endif
180
178
  inline field() : m_fd(NULL), m_ptr(NULL), m_fds(NULL){};
181
- /** @endcond */
179
+ /** @endcond */
182
180
 
183
181
  public:
182
+ /** @cond INTERNAL */
183
+ inline field(unsigned char* ptr, const fielddef& fd, fielddefs* fds)
184
+ : m_fd((fielddef*)&fd), m_ptr(ptr), m_fds(fds){};
185
+ /** @endcond */
186
+
184
187
  // To inline
185
188
  inline field(const field& r) : m_fd(r.m_fd), m_ptr(r.m_ptr), m_fds(r.m_fds)
186
189
  {
@@ -310,6 +313,7 @@ public:
310
313
 
311
314
  /** @cond INTERNAL */
312
315
  bool isCompPartAndMakeValue();
316
+ void offsetBlobPtr(size_t offset);
313
317
  /** @endcond */
314
318
  };
315
319
 
@@ -111,7 +111,7 @@ void fieldDDF::createTable(const _TCHAR* fullpath)
111
111
  {
112
112
  fileSpec* fs;
113
113
  fs = (fileSpec*)malloc(512);
114
- memset(fs, 512, 0x00);
114
+ memset(fs, 0x00, 512);
115
115
  fs->recLen = 32;
116
116
  fs->pageSize = 4096;
117
117
  fs->indexCount = 5;
@@ -86,7 +86,6 @@ const _TCHAR* fdNmaeAlias::get(const _TCHAR* src) const
86
86
  {
87
87
  return _T("");
88
88
  }
89
- return _T("");
90
89
  }
91
90
 
92
91
  const _TCHAR* fdNmaeAlias::resolv(const _TCHAR* dst) const
@@ -45,6 +45,7 @@ public:
45
45
  const _TCHAR* resolv(const _TCHAR* dst) const;
46
46
  void clear();
47
47
  void reverseAliasNamesQuery(queryBase& q) const;
48
+
48
49
  };
49
50
 
50
51
  typedef fdNmaeAlias aliasMap_type;
@@ -22,7 +22,6 @@
22
22
  #include "table.h"
23
23
  #include <boost/shared_ptr.hpp>
24
24
  #include <stdio.h>
25
-
26
25
  namespace bzs
27
26
  {
28
27
  namespace db
@@ -34,16 +33,102 @@ namespace tdap
34
33
  namespace client
35
34
  {
36
35
 
36
+
37
+ /** @cond INTERNAL */
38
+ #define MEM_ALLOC_TYPE_NONE 0
39
+ #define MEM_ALLOC_TYPE_ONE 1
40
+ #define MEM_ALLOC_TYPE_ARRAY 2
41
+
42
+ /* This class specify memory allocation type owned.
43
+ If copy this object do not copy menbers.
44
+ Because copy destination allocation type specify destination owned.
45
+ */
46
+ class refarymem
47
+ {
48
+ union
49
+ {
50
+ refarymem* m_parent;
51
+ int m_refCount;
52
+ };
53
+
54
+ bool m_child;
55
+ unsigned char m_allocType;
56
+
57
+ virtual void releaseMemory() = 0;
58
+
59
+ protected:
60
+
61
+ refarymem(const refarymem& r):m_parent(NULL),
62
+ m_child(0), m_allocType(MEM_ALLOC_TYPE_NONE){}
63
+
64
+ refarymem& operator=(const refarymem& r)
65
+ {
66
+ return *this;
67
+ }
68
+
69
+ inline int allocType() {return m_allocType;}
70
+
71
+ public:
72
+
73
+ refarymem():m_parent(NULL), m_child(0), m_allocType(MEM_ALLOC_TYPE_NONE){}
74
+
75
+ inline void setAllocParent(refarymem* v)
76
+ {
77
+ m_parent = v;
78
+ m_child = (v != NULL);
79
+ }
80
+
81
+ void setAllocTypeThis(int v) { m_allocType = ( unsigned char)v; }
82
+
83
+ void addref()
84
+ {
85
+ if (m_child)
86
+ m_parent->addref();
87
+ else if (m_allocType)
88
+ ++m_refCount;
89
+ }
90
+
91
+ void release()
92
+ {
93
+ if (m_child)
94
+ m_parent->release();
95
+ else
96
+ {
97
+ --m_refCount;
98
+ if (m_refCount == 0)
99
+ releaseMemory();
100
+ }
101
+ }
102
+
103
+ int refcount() const { return m_refCount; }
104
+
105
+ bool tryFastRelease(int totalRefCount)
106
+ {
107
+ if (!m_child && (m_refCount == totalRefCount))
108
+ {
109
+ m_refCount = 1;
110
+ release();
111
+ return true;
112
+ }
113
+ return false;
114
+ }
115
+ };
116
+ /** @endcond */
117
+
118
+ class autoMemory;
119
+
37
120
  /* copyable */
38
- class fieldsBase
121
+ class fieldsBase : public refarymem
39
122
  {
40
123
  friend class multiRecordAlocatorImple;
41
124
  friend class recordsetImple;
125
+ friend class recordsetQuery;
126
+
42
127
  virtual unsigned char* ptr(int index) const = 0;
43
128
 
44
129
  protected:
45
130
  /** @cond INTERNAL */
46
- fielddefs& m_fns;
131
+ fielddefs* m_fns;
47
132
  bool m_invalidRecord;
48
133
  virtual table* tbptr() const { return NULL; }
49
134
 
@@ -62,21 +147,21 @@ protected:
62
147
  nstable::throwError(tmp, STATUS_INVARID_FIELD_IDX);
63
148
  }
64
149
  }
65
- explicit inline fieldsBase(fielddefs& fns)
66
- : m_fns(fns), m_invalidRecord(false)
150
+
151
+ explicit inline fieldsBase(fielddefs* fns)
152
+ : refarymem(), m_fns(fns), m_invalidRecord(false)
67
153
  {
68
154
  }
69
155
 
70
- inline void setFielddefs(fielddefs& def) { m_fns = def; }
156
+ inline void setFielddefs(fielddefs* def) { m_fns = def; }
71
157
 
72
158
  virtual void removeLastMemBlock(){};
73
159
 
74
- virtual void setRecordData(unsigned char* ptr, size_t size,
160
+ virtual void setRecordData(autoMemory* am, unsigned char* ptr, size_t size,
75
161
  short* endFieldIndex, bool owner = false){};
76
-
77
162
  /** @endcond */
78
-
79
163
  public:
164
+
80
165
  virtual ~fieldsBase(){};
81
166
 
82
167
  inline void setInvalidRecord(bool v) { m_invalidRecord = v; }
@@ -85,45 +170,45 @@ public:
85
170
 
86
171
  inline field getFieldNoCheck(short index) const
87
172
  {
88
- return field(ptr((short)index), m_fns[(short)index], &m_fns);
173
+ return field(ptr((short)index), (*m_fns)[(short)index], m_fns);
89
174
  }
90
175
 
91
176
  inline field operator[](short index) const
92
177
  {
93
- if (m_fns.checkIndex(index))
94
- return field(ptr((short)index), m_fns[(short)index], &m_fns);
178
+ if (m_fns->checkIndex(index))
179
+ return field(ptr((short)index), (*m_fns)[(short)index], m_fns);
95
180
 
96
181
  throwIndexError(index);
97
- return field(NULL, dummyFd(), &m_fns);
182
+ return field(NULL, dummyFd(), m_fns);
98
183
  }
99
184
 
100
185
  inline field operator[](const _TCHAR* name) const
101
186
  {
102
- int index = m_fns.indexByName(name);
103
- return operator[](index);
187
+ return operator[](std::_tstring(name));
104
188
  }
105
189
 
106
190
  inline field operator[](const std::_tstring& name) const
107
191
  {
108
- return operator[](name.c_str());
192
+ short index = m_fns->indexByName(name);
193
+ return operator[](index);
109
194
  }
110
195
 
111
- inline size_t size() const { return m_fns.size(); }
196
+ inline size_t size() const { return m_fns->size(); }
112
197
 
113
198
  inline field fd(short index) const { return operator[](index); }
114
199
 
115
200
  inline field fd(const _TCHAR* name) const
116
201
  {
117
- int index = m_fns.indexByName(name);
202
+ int index = m_fns->indexByName(name);
118
203
  return operator[](index);
119
204
  }
120
205
 
121
206
  inline short indexByName(const _TCHAR* name) const
122
207
  {
123
- return m_fns.indexByName(name);
208
+ return m_fns->indexByName(name);
124
209
  }
125
210
 
126
- inline const fielddefs* fieldDefs() const { return &m_fns; }
211
+ inline const fielddefs* fieldDefs() const { return m_fns; }
127
212
 
128
213
  virtual void clear() = 0;
129
214
  };
@@ -131,13 +216,15 @@ public:
131
216
  typedef boost::shared_ptr<database> database_ptr;
132
217
  typedef boost::shared_ptr<table> table_ptr;
133
218
  typedef fieldsBase row;
134
- typedef boost::shared_ptr<row> row_ptr;
219
+ typedef row* row_ptr;
135
220
 
136
221
  /* copyable*/
137
222
  class fields : public fieldsBase
138
223
  {
139
224
  table& m_tb;
140
225
 
226
+ void releaseMemory(){}
227
+
141
228
  inline unsigned char* ptr(int index) const
142
229
  {
143
230
  return (unsigned char*)m_tb.data();
@@ -145,15 +232,15 @@ class fields : public fieldsBase
145
232
 
146
233
  table* tbptr() const { return &m_tb; }
147
234
 
148
- inline explicit fields() : fieldsBase(*((fielddefs*)0)), m_tb(*((table*)0))
235
+ inline explicit fields() : fieldsBase(NULL), m_tb(*((table*)0))
149
236
  {
150
237
  }
151
238
 
152
239
  public:
153
- inline explicit fields(table& tb) : fieldsBase(*(tb.m_fddefs)), m_tb(tb) {}
240
+ inline explicit fields(table& tb) : fieldsBase(tb.m_fddefs), m_tb(tb) {}
154
241
 
155
242
  inline explicit fields(table_ptr tb)
156
- : fieldsBase(*((*tb).m_fddefs)), m_tb(*tb)
243
+ : fieldsBase((*tb).m_fddefs), m_tb(*tb)
157
244
  {
158
245
  }
159
246