transactd 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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