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.
- 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
|
|