transactd 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +6 -6
- data/README +16 -16
- data/README-JA +16 -16
- data/bin/common/tdclc_32_2_1.dll +0 -0
- data/bin/common/tdclc_64_2_1.dll +0 -0
- data/build/common/transactd_cl_common.cmake +0 -1
- data/build/common/transactd_common.cmake +28 -38
- data/build/swig/ruby/ruby.swg +36 -30
- data/build/swig/ruby/tdclrb_wrap.cpp +35016 -0
- data/build/swig/tdcl.i +217 -62
- data/build/tdclc/CMakeLists.txt +14 -26
- data/build/tdclc/libtdclcm.map +4 -0
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +7 -22
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/CMakeLists.txt +7 -49
- data/build/tdclrb/tdclrb.rc +62 -0
- data/source/bzs/db/blobBuffer.h +5 -0
- data/source/bzs/db/blobStructs.h +2 -0
- data/source/bzs/db/engine/mysql/IReadRecords.h +9 -0
- data/source/bzs/db/engine/mysql/database.cpp +391 -169
- data/source/bzs/db/engine/mysql/database.h +178 -40
- data/source/bzs/db/engine/mysql/dbManager.cpp +45 -3
- data/source/bzs/db/engine/mysql/dbManager.h +3 -39
- data/source/bzs/db/engine/mysql/errorMessage.cpp +11 -7
- data/source/bzs/db/engine/mysql/errorMessage.h +1 -1
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +1 -2
- data/source/bzs/db/engine/mysql/mysqlInternal.h +8 -8
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +11 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +41 -6
- data/source/bzs/db/protocol/tdap/client/activeTable.h +177 -8
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +141 -62
- data/source/bzs/db/protocol/tdap/client/client.cpp +39 -35
- data/source/bzs/db/protocol/tdap/client/client.h +52 -25
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +17 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +1 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +5 -1
- data/source/bzs/db/protocol/tdap/client/database.h +1 -1
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +49 -12
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +42 -5
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +4 -2
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +71 -41
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +49 -49
- data/source/bzs/db/protocol/tdap/client/field.cpp +22 -13
- data/source/bzs/db/protocol/tdap/client/field.h +7 -3
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +0 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +1 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +111 -24
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +687 -310
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +12 -4
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +190 -32
- data/source/bzs/db/protocol/tdap/client/memRecord.h +64 -22
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +4 -4
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +6 -3
- data/source/bzs/db/protocol/tdap/client/nsTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +19 -8
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +194 -87
- data/source/bzs/db/protocol/tdap/client/request.h +84 -26
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +22 -12
- data/source/bzs/db/protocol/tdap/client/table.cpp +494 -286
- data/source/bzs/db/protocol/tdap/client/table.h +48 -5
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +133 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +22 -22
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +43 -18
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +3 -3
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +1 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +268 -74
- data/source/bzs/db/protocol/tdap/mysql/request.h +4 -4
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +179 -43
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +4 -4
- data/source/bzs/db/protocol/tdap/tdapRequest.h +15 -14
- data/source/bzs/db/protocol/tdap/tdapSchema.h +125 -90
- data/source/bzs/db/protocol/tdap/tdapcapi.h +46 -5
- data/source/bzs/db/transactd/appModule.h +1 -1
- data/source/bzs/db/transactd/connManager.cpp +2 -0
- data/source/bzs/db/transactd/transactd.cpp +1 -0
- data/source/bzs/env/compiler.h +10 -0
- data/source/bzs/env/mbcswchrLinux.cpp +42 -6
- data/source/bzs/env/mbcswchrLinux.h +40 -12
- data/source/bzs/example/queryData.cpp +33 -4
- data/source/bzs/netsvc/client/iconnection.h +107 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +15 -1
- data/source/bzs/netsvc/client/tcpClient.h +96 -87
- data/source/bzs/netsvc/server/serverCpt.cpp +5 -6
- data/source/bzs/rtl/benchmark.cpp +2 -2
- data/source/bzs/rtl/stringBuffers.cpp +3 -3
- data/source/bzs/rtl/stringBuffers.h +2 -2
- data/source/bzs/test/tdclatl/bench_query_atl.js +92 -99
- data/source/bzs/test/tdclatl/test_query_atl.js +224 -115
- data/source/bzs/test/tdclphp/bench.php +126 -101
- data/source/bzs/test/tdclphp/transactd_Test.php +1122 -158
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +12 -14
- data/source/bzs/test/tdclrb/transactd_spec.rb +1127 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +32 -15
- data/source/bzs/test/transactdBench/scaling_bench.cpp +32 -7
- data/source/bzs/test/transactdBench/transactdBench.cpp +1 -1
- data/source/bzs/test/transactdBench/workerBase.h +46 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +15 -7
- data/source/bzs/test/transactdBench/workerTransactdImple.h +10 -18
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1487 -174
- data/source/global/ormsrcgen/main.cpp +2 -0
- data/source/global/tdclatl/Database.cpp +2 -2
- data/source/global/tdclatl/Database.h +1 -1
- data/source/global/tdclatl/FieldDefs.cpp +0 -3
- data/source/global/tdclatl/PooledDbManager.cpp +2 -2
- data/source/global/tdclatl/PooledDbManager.h +1 -1
- data/source/global/tdclatl/PreparedQuery.cpp +53 -0
- data/source/global/tdclatl/PreparedQuery.h +61 -0
- data/source/global/tdclatl/QueryBase.cpp +2 -1
- data/source/global/tdclatl/QueryBase.h +1 -1
- data/source/global/tdclatl/Record.cpp +3 -15
- data/source/global/tdclatl/Recordset.cpp +15 -10
- data/source/global/tdclatl/Recordset.h +3 -0
- data/source/global/tdclatl/Table.cpp +42 -7
- data/source/global/tdclatl/Table.h +3 -1
- data/source/global/tdclatl/activeTable.cpp +264 -76
- data/source/global/tdclatl/activeTable.h +12 -3
- data/source/global/tdclatl/tdclatl.idl +92 -10
- data/source/linux/charsetConvert.h +7 -7
- data/transactd.gemspec +14 -27
- metadata +18 -27
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/swig/php/generate.cmake.in +0 -56
- data/build/swig/php/generate.cmd.in +0 -47
- data/build/swig/php/php.swg +0 -197
- data/build/swig/php/transactd.no_yield.php +0 -4494
- data/build/swig/php/transactd.no_yield.php.git.patch +0 -685
- data/build/swig/php/transactd.no_yield.php.patch +0 -685
- data/build/swig/php/transactd.yield.php +0 -4461
- data/build/swig/php/transactd.yield.php.git.patch +0 -652
- data/build/swig/php/transactd.yield.php.patch +0 -652
- data/build/swig/ruby/generate.cmake.in +0 -35
- data/build/swig/ruby/generate.cmd.in +0 -19
- data/build/tdclc/BUILDNUMBER.txt +0 -1
- data/build/tdclcpp/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/BUILDNUMBER.txt +0 -1
- 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("
|
43
|
+
p = _T("このレコードは既に他のユーザーによりロックされています。");
|
44
44
|
break;
|
45
45
|
case STATUS_CHANGE_CONFLICT:
|
46
|
-
p = _T("
|
46
|
+
p = _T("このレコードは今、他のユーザーにより変更されました。");
|
47
47
|
break;
|
48
48
|
case STATUS_TABLE_YET_OPEN:
|
49
|
-
p = _T("
|
49
|
+
p = _T("このテーブルはまだ OPEN されていません。");
|
50
50
|
break;
|
51
51
|
case STATUS_DURING_TRANSACTION:
|
52
|
-
p = _T("
|
52
|
+
p = _T("このテーブルはまだトランザクション中です。close できません。");
|
53
53
|
break;
|
54
54
|
case STATUS_NO_ACR_UPDATE_DELETE:
|
55
|
-
p = _T("
|
55
|
+
p = _T("更新または削除アクセス権がありません。");
|
56
56
|
break;
|
57
57
|
case STATUS_NO_ACR_INSERT:
|
58
|
-
p = _T("
|
58
|
+
p = _T("追加アクセス権がありません。");
|
59
59
|
break;
|
60
60
|
case STATUS_NO_ACR_READ:
|
61
|
-
p = _T("
|
61
|
+
p = _T("読み取りアクセス権がありません。");
|
62
62
|
break;
|
63
63
|
case STATUS_CANT_ALLOC_MEMORY:
|
64
|
-
p = _T("
|
64
|
+
p = _T("メモリが確保できませんでした。");
|
65
65
|
break;
|
66
66
|
case STATUS_USE_KEYFIELD:
|
67
|
-
p = _T("
|
67
|
+
p = _T("このフィールドはキーで使用されているため削除できません。");
|
68
68
|
break;
|
69
69
|
case STATUS_TOO_MANY_TABLES:
|
70
|
-
p = _T("
|
70
|
+
p = _T("管理可能なテーブル数を超えています。");
|
71
71
|
break;
|
72
72
|
case STATUS_INVARID_PRM_KEY_NUM:
|
73
|
-
p = _T("MainKey
|
73
|
+
p = _T("MainKeyキー番号が不正です。");
|
74
74
|
break;
|
75
75
|
case STATUS_INVARID_PNT_KEY_NUM:
|
76
|
-
p = _T("ParentKey
|
76
|
+
p = _T("ParentKeyキー番号が不正です。");
|
77
77
|
break;
|
78
78
|
case STATUS_INVARID_REP_KEY_NUM:
|
79
|
-
p = _T("ReplicaKey
|
79
|
+
p = _T("ReplicaKeyキー番号が不正です。");
|
80
80
|
break;
|
81
81
|
case STATUS_INVARID_FIELD_IDX:
|
82
|
-
p = _T("
|
82
|
+
p = _T("フィールドインデックスが有効範囲にありません。");
|
83
83
|
break;
|
84
84
|
case STATUS_ALREADY_DELETED:
|
85
|
-
p = _T("
|
85
|
+
p = _T("このアイテムは削除されています。");
|
86
86
|
break;
|
87
87
|
case STATUS_LMITS_MAX_TABLES:
|
88
|
-
p = _T("
|
88
|
+
p = _T("オープンできるテーブルの最大数を超えています。");
|
89
89
|
break;
|
90
90
|
case STATUS_DB_YET_OPEN:
|
91
|
-
p = _T("
|
91
|
+
p = _T("データベースがオープンされていません。");
|
92
92
|
break;
|
93
93
|
case STATUS_TABLENAME_NOTFOUND:
|
94
|
-
p = _T("
|
94
|
+
p = _T("指定したテーブル名が見つかりません。");
|
95
95
|
break;
|
96
96
|
case STATUS_DIFFERENT_DBVERSION:
|
97
|
-
p = _T("
|
97
|
+
p = _T("データベースのバージョンが違うか、破損しています。");
|
98
98
|
break;
|
99
99
|
case STATUS_DUPLICATE_FIELDNAME:
|
100
|
-
p = _T("
|
100
|
+
p = _T("フィールド名が重複しています。");
|
101
101
|
break;
|
102
102
|
case STATUS_INVALID_TABLE_IDX:
|
103
|
-
p = _T("
|
103
|
+
p = _T("定義されないテーブル番号です。");
|
104
104
|
break;
|
105
105
|
case STATUS_AUTH_DENIED:
|
106
|
-
p = _T("
|
106
|
+
p = _T("ユーザー名またはパスワードが不正です。");
|
107
107
|
break;
|
108
108
|
case STATUS_TOO_MANY_FIELDS:
|
109
|
-
p = _T("
|
109
|
+
p = _T("管理可能なフィールド数を超えています。");
|
110
110
|
break;
|
111
111
|
case STATUS_FILTERSTRING_ERROR:
|
112
|
-
p = _T("
|
112
|
+
p = _T("フィルタ文字列に誤りがあります。");
|
113
113
|
break;
|
114
114
|
case STATUS_INVALID_FIELDLENGTH:
|
115
|
-
p = _T("
|
115
|
+
p = _T("フィールド長が不正です。");
|
116
116
|
break;
|
117
117
|
case STATUS_INVALID_KEYTYPE:
|
118
|
-
p = _T("
|
118
|
+
p = _T("使用できないキータイプが指定されています。");
|
119
119
|
break;
|
120
120
|
case STATUS_LVAR_NOTE_NOT_LAST:
|
121
|
-
p = _T("Note
|
121
|
+
p = _T("Note及びLvarタイプはフィールドの一番最後でなければなりません")
|
122
122
|
_T("B");
|
123
123
|
break;
|
124
124
|
case STATUS_INVALID_VARIABLETABLE:
|
125
|
-
p = _T("
|
126
|
-
_T("varbinary
|
125
|
+
p = _T("可変長テーブルの最後のフィールドはNote Lvar ")
|
126
|
+
_T("varbinaryタイプが必要です。");
|
127
127
|
break;
|
128
128
|
case STATUS_NODEF_FOR_CONVERT:
|
129
|
-
p = _T("
|
129
|
+
p = _T("コンバート元定義がありません。");
|
130
130
|
break;
|
131
131
|
case STATUS_TRD_NEED_VARLENGTH:
|
132
|
-
p = _T("
|
132
|
+
p = _T("可変長テーブルの指定が必要です。");
|
133
133
|
break;
|
134
134
|
case STATUS_TOO_LONG_OWNERNAME:
|
135
|
-
p = _T("
|
135
|
+
p = _T("オーナーネームが長すぎます。");
|
136
136
|
break;
|
137
137
|
case STATUS_CANT_DEL_FOR_REL:
|
138
|
-
p = _T("
|
138
|
+
p = _T("参照整合性のため削除できません。");
|
139
139
|
break;
|
140
140
|
case STATUS_NO_AUTOINC_SPACE:
|
141
|
-
p = _T("AutoIncEx
|
141
|
+
p = _T("AutoIncExのスペースがありません。");
|
142
142
|
break;
|
143
143
|
case STATUS_INVALID_RECLEN:
|
144
|
-
p = _T("
|
144
|
+
p = _T("レコード長定義が不正か、テーブルがオープンされていません。");
|
145
145
|
break;
|
146
146
|
case STATUS_INVALID_FIELDVALUE:
|
147
|
-
p = _T("
|
147
|
+
p = _T("フィールドの値が不正です。");
|
148
148
|
break;
|
149
149
|
case STATUS_INVALID_VALLEN:
|
150
|
-
p = _T("
|
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("
|
156
|
+
p = _T("キー値が重複しているため登録できません。");
|
157
157
|
break;
|
158
158
|
case STATUS_REQUESTER_DEACTIVE:
|
159
|
-
p = _T("
|
160
|
-
_T("Service
|
159
|
+
p = _T("データベースエンジンをロードできません。\r\nTerminal ")
|
160
|
+
_T("Service及び、WindowsXPのユーザー切り替え")
|
161
161
|
_T
|
162
|
-
("
|
162
|
+
("において、同時に多数のユーザーが利用するには、Pervasive.SQL 2000i Server以上のインストールが必要です。");
|
163
163
|
break;
|
164
164
|
case STATUS_ACCESS_DENIED:
|
165
|
-
p = _T("
|
166
|
-
_T("
|
165
|
+
p = _T("更新のためのアクセス権がありません。\r\nファイルはリードオンリ")
|
166
|
+
_T("ーかパスワードが正しくありません。");
|
167
167
|
break;
|
168
168
|
case STATUS_CANT_CREATE:
|
169
|
-
p = _T("
|
170
|
-
_T("
|
169
|
+
p = _T("データベースの作成に失敗しました。既にデータベースが存在してい")
|
170
|
+
_T("ないか確認してください。");
|
171
171
|
break;
|
172
172
|
default:
|
173
|
-
_stprintf_s(buf, 256, _T("
|
174
|
-
_T("
|
175
|
-
_T("
|
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[
|
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,
|
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[
|
799
|
-
_ltot_s(data, buf,
|
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[
|
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[
|
888
|
-
_stprintf_s(buf,
|
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
|
-
|
1574
|
-
|
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,
|
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
|
-
|
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
|
|
@@ -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
|
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
|
-
|
66
|
-
|
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
|
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],
|
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
|
94
|
-
return field(ptr((short)index), m_fns[(short)index],
|
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(),
|
182
|
+
return field(NULL, dummyFd(), m_fns);
|
98
183
|
}
|
99
184
|
|
100
185
|
inline field operator[](const _TCHAR* name) const
|
101
186
|
{
|
102
|
-
|
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
|
-
|
192
|
+
short index = m_fns->indexByName(name);
|
193
|
+
return operator[](index);
|
109
194
|
}
|
110
195
|
|
111
|
-
inline size_t size() const { return m_fns
|
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
|
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
|
208
|
+
return m_fns->indexByName(name);
|
124
209
|
}
|
125
210
|
|
126
|
-
inline const fielddefs* fieldDefs() const { return
|
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
|
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(
|
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(
|
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(
|
243
|
+
: fieldsBase((*tb).m_fddefs), m_tb(*tb)
|
157
244
|
{
|
158
245
|
}
|
159
246
|
|