transactd 1.0.1

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 (218) hide show
  1. checksums.yaml +7 -0
  2. data/BUILD_UNIX-JA +174 -0
  3. data/BUILD_WIN-JA +256 -0
  4. data/CMakeLists.txt +96 -0
  5. data/COPYING +339 -0
  6. data/README +406 -0
  7. data/README-JA +424 -0
  8. data/bin/common/tdclc_32_1_0.dll +0 -0
  9. data/bin/common/tdclc_64_1_0.dll +0 -0
  10. data/build/common/check_for_link_iconv.cmake +73 -0
  11. data/build/common/copyifgreater.cmd +30 -0
  12. data/build/common/copyifgreater.js +290 -0
  13. data/build/common/get_boost_libs.cmake +106 -0
  14. data/build/common/get_ruby_path.cmake +115 -0
  15. data/build/common/options.cmake +127 -0
  16. data/build/common/smart_install.cmake +263 -0
  17. data/build/common/system.cmake +122 -0
  18. data/build/common/transactd.rc.in +52 -0
  19. data/build/common/transactd_cl_common.cmake +101 -0
  20. data/build/common/transactd_cl_output.cmake +93 -0
  21. data/build/common/transactd_common.cmake +237 -0
  22. data/build/common/transactd_required.cmake +28 -0
  23. data/build/swig/ruby/generate.cmake.in +35 -0
  24. data/build/swig/ruby/generate.cmd.in +19 -0
  25. data/build/swig/ruby/ruby.swg +101 -0
  26. data/build/swig/tdcl.i +188 -0
  27. data/build/tdclc/BUILDNUMBER.txt +1 -0
  28. data/build/tdclc/CMakeLists.txt +170 -0
  29. data/build/tdclc/tdclc_32.cbproj +181 -0
  30. data/build/tdclc/tdclc_64.cbproj +205 -0
  31. data/build/tdclcpp/BUILDNUMBER.txt +1 -0
  32. data/build/tdclcpp/CMakeLists.txt +142 -0
  33. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +239 -0
  34. data/build/tdclcpp/tdclcpp_bcb_64.cbproj +304 -0
  35. data/build/tdclrb/BUILDNUMBER.txt +1 -0
  36. data/build/tdclrb/CMakeLists.txt +258 -0
  37. data/build/tdclrb/GEM_VERSION +3 -0
  38. data/build/tdclrb/bldgem/extconf.rb +123 -0
  39. data/build/tdclrb/gem/INSTALLLOG.win32 +9 -0
  40. data/build/tdclrb/gem/Makefile.win32-VS +65 -0
  41. data/build/tdclrb/gem/Makefile.win32-prebuilt +48 -0
  42. data/build/tdclrb/gem/detect.rb +31 -0
  43. data/build/tdclrb/gem/helper.rb +113 -0
  44. data/build/tdclrb/gem/transactd.rb +22 -0
  45. data/build/tdclrb/gem_output.cmake +44 -0
  46. data/source/bzs/db/IBlobBuffer.h +51 -0
  47. data/source/bzs/db/blobBuffer.h +177 -0
  48. data/source/bzs/db/blobStructs.h +85 -0
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +52 -0
  50. data/source/bzs/db/engine/mysql/bookmark.h +195 -0
  51. data/source/bzs/db/engine/mysql/database.cpp +1882 -0
  52. data/source/bzs/db/engine/mysql/database.h +465 -0
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +303 -0
  54. data/source/bzs/db/engine/mysql/dbManager.h +143 -0
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +75 -0
  56. data/source/bzs/db/engine/mysql/errorMessage.h +43 -0
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +158 -0
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +349 -0
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +89 -0
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +171 -0
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +169 -0
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +35 -0
  63. data/source/bzs/db/engine/mysql/percentageKey.h +260 -0
  64. data/source/bzs/db/protocol/ICommandExecuter.h +49 -0
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +689 -0
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +228 -0
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +437 -0
  68. data/source/bzs/db/protocol/tdap/btrDate.h +227 -0
  69. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +127 -0
  70. data/source/bzs/db/protocol/tdap/client/client.cpp +106 -0
  71. data/source/bzs/db/protocol/tdap/client/client.h +292 -0
  72. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +144 -0
  73. data/source/bzs/db/protocol/tdap/client/connMgr.h +82 -0
  74. data/source/bzs/db/protocol/tdap/client/database.cpp +863 -0
  75. data/source/bzs/db/protocol/tdap/client/database.h +118 -0
  76. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +100 -0
  77. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +1640 -0
  78. data/source/bzs/db/protocol/tdap/client/dbDef.h +135 -0
  79. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +434 -0
  80. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +92 -0
  81. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +98 -0
  82. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +174 -0
  83. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +91 -0
  84. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +140 -0
  85. data/source/bzs/db/protocol/tdap/client/fileDDF.h +86 -0
  86. data/source/bzs/db/protocol/tdap/client/filter.cpp +527 -0
  87. data/source/bzs/db/protocol/tdap/client/filter.h +154 -0
  88. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +137 -0
  89. data/source/bzs/db/protocol/tdap/client/indexDDF.h +84 -0
  90. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +724 -0
  91. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +123 -0
  92. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +899 -0
  93. data/source/bzs/db/protocol/tdap/client/nsTable.h +199 -0
  94. data/source/bzs/db/protocol/tdap/client/request.h +198 -0
  95. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +58 -0
  96. data/source/bzs/db/protocol/tdap/client/sharedData.h +56 -0
  97. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +574 -0
  98. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +53 -0
  99. data/source/bzs/db/protocol/tdap/client/stringConverter.h +627 -0
  100. data/source/bzs/db/protocol/tdap/client/table.cpp +2613 -0
  101. data/source/bzs/db/protocol/tdap/client/table.h +221 -0
  102. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +1096 -0
  103. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +179 -0
  104. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +40 -0
  105. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +11 -0
  106. data/source/bzs/db/protocol/tdap/myDateTime.cpp +500 -0
  107. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +184 -0
  108. data/source/bzs/db/protocol/tdap/mysql/characterset.h +60 -0
  109. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +284 -0
  110. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +53 -0
  111. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +383 -0
  112. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +106 -0
  113. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +680 -0
  114. data/source/bzs/db/protocol/tdap/mysql/request.h +202 -0
  115. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1020 -0
  116. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +141 -0
  117. data/source/bzs/db/protocol/tdap/tdapRequest.h +190 -0
  118. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +295 -0
  119. data/source/bzs/db/protocol/tdap/tdapSchema.h +558 -0
  120. data/source/bzs/db/protocol/tdap/tdapcapi.h +423 -0
  121. data/source/bzs/db/transactd/appBuilderImple.h +55 -0
  122. data/source/bzs/db/transactd/appModule.cpp +183 -0
  123. data/source/bzs/db/transactd/appModule.h +80 -0
  124. data/source/bzs/db/transactd/connManager.cpp +201 -0
  125. data/source/bzs/db/transactd/connManager.h +60 -0
  126. data/source/bzs/db/transactd/connectionRecord.h +69 -0
  127. data/source/bzs/db/transactd/transactd.cpp +325 -0
  128. data/source/bzs/env/compiler.h +135 -0
  129. data/source/bzs/env/crosscompile.cpp +130 -0
  130. data/source/bzs/env/crosscompile.h +150 -0
  131. data/source/bzs/env/fileopen.h +36 -0
  132. data/source/bzs/env/mbcswchrLinux.cpp +40 -0
  133. data/source/bzs/env/mbcswchrLinux.h +88 -0
  134. data/source/bzs/env/tstring.h +183 -0
  135. data/source/bzs/example/changeSchema.cpp +117 -0
  136. data/source/bzs/example/changeSchema_c.cpp +78 -0
  137. data/source/bzs/example/connection_pool_c.cpp +171 -0
  138. data/source/bzs/example/createDatabase.cpp +305 -0
  139. data/source/bzs/example/createDatabase_c.cpp +202 -0
  140. data/source/bzs/example/deleteRecords.cpp +87 -0
  141. data/source/bzs/example/deleteRecords_c.cpp +57 -0
  142. data/source/bzs/example/dropDatabase.cpp +59 -0
  143. data/source/bzs/example/dropDatabase_c.cpp +34 -0
  144. data/source/bzs/example/insertRecords.cpp +212 -0
  145. data/source/bzs/example/insertRecords_c.cpp +153 -0
  146. data/source/bzs/example/readRecords.cpp +141 -0
  147. data/source/bzs/example/readRecords_c.cpp +107 -0
  148. data/source/bzs/example/updateRecords.cpp +99 -0
  149. data/source/bzs/example/updateRecords_c.cpp +71 -0
  150. data/source/bzs/example/update_with_transaction.cpp +104 -0
  151. data/source/bzs/example/update_with_transaction_c.cpp +80 -0
  152. data/source/bzs/netsvc/client/tcpClient.cpp +226 -0
  153. data/source/bzs/netsvc/client/tcpClient.h +489 -0
  154. data/source/bzs/netsvc/server/IAppModule.h +94 -0
  155. data/source/bzs/netsvc/server/iserver.h +65 -0
  156. data/source/bzs/netsvc/server/serverCpt.cpp +522 -0
  157. data/source/bzs/netsvc/server/serverCpt.h +88 -0
  158. data/source/bzs/netsvc/server/serverPipe.cpp +705 -0
  159. data/source/bzs/netsvc/server/serverPipe.h +96 -0
  160. data/source/bzs/netsvc/server/serverTpool.cpp +416 -0
  161. data/source/bzs/netsvc/server/serverTpool.h +84 -0
  162. data/source/bzs/rtl/benchmark.cpp +96 -0
  163. data/source/bzs/rtl/benchmark.h +65 -0
  164. data/source/bzs/rtl/datetime.cpp +375 -0
  165. data/source/bzs/rtl/datetime.h +53 -0
  166. data/source/bzs/rtl/debuglog.cpp +106 -0
  167. data/source/bzs/rtl/debuglog.h +97 -0
  168. data/source/bzs/rtl/exception.h +116 -0
  169. data/source/bzs/rtl/stl_uty.cpp +35 -0
  170. data/source/bzs/rtl/stl_uty.h +29 -0
  171. data/source/bzs/rtl/stringBuffers.cpp +101 -0
  172. data/source/bzs/rtl/stringBuffers.h +58 -0
  173. data/source/bzs/rtl/strtrim.cpp +135 -0
  174. data/source/bzs/rtl/strtrim.h +46 -0
  175. data/source/bzs/test/tdclatl/bench_tdclatl.js +445 -0
  176. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +375 -0
  177. data/source/bzs/test/tdclrb/prepare.rb +226 -0
  178. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +172 -0
  179. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +208 -0
  180. data/source/bzs/test/tdclrb/transactd_spec.rb +1536 -0
  181. data/source/bzs/test/transactdBench/transactdBench.cpp +430 -0
  182. data/source/bzs/test/transactdBench/transactdBench2.cpp +342 -0
  183. data/source/bzs/test/trdclengn/test_trdclengn.cpp +2030 -0
  184. data/source/global/tdclatl/Database.cpp +503 -0
  185. data/source/global/tdclatl/Database.h +139 -0
  186. data/source/global/tdclatl/DbDef.cpp +242 -0
  187. data/source/global/tdclatl/DbDef.h +79 -0
  188. data/source/global/tdclatl/Field.cpp +92 -0
  189. data/source/global/tdclatl/Field.h +59 -0
  190. data/source/global/tdclatl/FieldDef.cpp +238 -0
  191. data/source/global/tdclatl/FieldDef.h +87 -0
  192. data/source/global/tdclatl/Flags.cpp +111 -0
  193. data/source/global/tdclatl/Flags.h +55 -0
  194. data/source/global/tdclatl/KeyDef.cpp +51 -0
  195. data/source/global/tdclatl/KeyDef.h +55 -0
  196. data/source/global/tdclatl/KeySegment.cpp +55 -0
  197. data/source/global/tdclatl/Table.cpp +600 -0
  198. data/source/global/tdclatl/Table.h +144 -0
  199. data/source/global/tdclatl/TableDef.cpp +291 -0
  200. data/source/global/tdclatl/TableDef.h +86 -0
  201. data/source/global/tdclatl/TdVersion.cpp +74 -0
  202. data/source/global/tdclatl/TdVersion.h +54 -0
  203. data/source/global/tdclatl/_IDatabaseEvents_CP.h +113 -0
  204. data/source/global/tdclatl/dllmain.cpp +30 -0
  205. data/source/global/tdclatl/dllmain.h +27 -0
  206. data/source/global/tdclatl/keySegment.h +57 -0
  207. data/source/global/tdclatl/resource.h +0 -0
  208. data/source/global/tdclatl/stdafx.cpp +2 -0
  209. data/source/global/tdclatl/stdafx.h +25 -0
  210. data/source/global/tdclatl/targetver.h +4 -0
  211. data/source/global/tdclatl/tdclatl.cpp +68 -0
  212. data/source/global/tdclatl/tdclatl.def +10 -0
  213. data/source/global/tdclatl/tdclatl.idl +1035 -0
  214. data/source/linux/charsetConvert.h +112 -0
  215. data/source/linux/linuxTypes.h +33 -0
  216. data/source/linux/tchar.h +428 -0
  217. data/transactd.gemspec +97 -0
  218. metadata +267 -0
@@ -0,0 +1,375 @@
1
+ # coding : utf-8
2
+ =begin =============================================================
3
+ Copyright (C) 2013 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18
+ 02111-1307, USA.
19
+ ===================================================================
20
+ =end
21
+ require 'date'
22
+ require 'transactd'
23
+
24
+ TYPE_SCHEMA_BDF = 0
25
+
26
+ USE_NORMAL = 0
27
+ USE_TRANS = 1
28
+ USE_BALKINS = 2
29
+ USE_SNAPSHOT = 4
30
+
31
+ FN_ID = 0
32
+ FN_NAME = 1
33
+
34
+ AUTO_CREATE_TABLE = true
35
+ PARALLEL_TRN = 1000
36
+ LOCK_SINGLE_NOWAIT = 200
37
+ TRANS_BIAS = PARALLEL_TRN + LOCK_SINGLE_NOWAIT
38
+
39
+ BULKBUFSIZE = 65535 - 1000
40
+
41
+ ## --------------------------------------------------------------------------------
42
+ def showTableError(tb, description)
43
+ if (tb.stat() != 0)
44
+ puts("#{description} error #{tb.tableDef().fileName()}:No.#{tb.stat().to_s}")
45
+ end
46
+ end
47
+
48
+ ## --------------------------------------------------------------------------------
49
+ def showEnginError(db, tableName)
50
+ if (db.stat() != 0)
51
+ puts("#{tableName} error No.#{db.stat().to_s}")
52
+ end
53
+ end
54
+
55
+ ## --------------------------------------------------------------------------------
56
+ def openTable(db, tableName, mode)
57
+ tb = db.openTable(tableName, mode, AUTO_CREATE_TABLE)
58
+ showEnginError(db, tableName) if (tb == nil)
59
+ return tb
60
+ end
61
+
62
+ ## --------------------------------------------------------------------------------
63
+ def createDataBase(db, uri)
64
+ db.create(uri)
65
+ return (db.stat() == 0)
66
+ end
67
+
68
+ ## --------------------------------------------------------------------------------
69
+ def write(tb, start, endid)
70
+ tb.setKeyNum(0)
71
+ for i in start..(endid - 1) do
72
+ tb.clearBuffer()
73
+ tb.setFV(FN_ID, i)
74
+ tb.setFV(FN_NAME, i)
75
+ tb.insert()
76
+ if (tb.stat() != 0)
77
+ showTableError(tb, 'write')
78
+ return false
79
+ end
80
+ end
81
+ return true
82
+ end
83
+
84
+ ## --------------------------------------------------------------------------------
85
+ def deleteAll(db, tb, start, endid)
86
+ db.beginTrn(TRANS_BIAS)
87
+ tb.clearBuffer()
88
+ for i in start..(endid - 1) do
89
+ tb.setFV(FN_ID, i)
90
+ tb.seek()
91
+ if (tb.stat() == 0)
92
+ tb.del()
93
+ if (tb.stat() != 0)
94
+ showTableError(tb, 'deleteAll')
95
+ db.endTrn()
96
+ return false
97
+ end
98
+ end
99
+ end
100
+ db.endTrn()
101
+ return true
102
+ end
103
+
104
+ ## --------------------------------------------------------------------------------
105
+ def Inserts(db, tb, start, endid, mode, unit)
106
+ ret = true
107
+ total = endid - start
108
+ count = total / unit
109
+ st = start
110
+ en = st
111
+ while (en != endid) do
112
+ en = st + unit
113
+ db.beginTrn(TRANS_BIAS) if (mode == USE_TRANS)
114
+ tb.beginBulkInsert(BULKBUFSIZE) if (mode == USE_BALKINS)
115
+ ret = write(tb, st, en)
116
+ tb.commitBulkInsert() if (mode == USE_BALKINS)
117
+ db.endTrn() if (mode == USE_TRANS)
118
+ break if (ret == false)
119
+ st = en
120
+ end
121
+ return ret
122
+ end
123
+
124
+ ## --------------------------------------------------------------------------------
125
+ def Read(db, tb, start, endid, shapshot)
126
+ ret = true
127
+ tb.clearBuffer()
128
+ db.beginSnapshot() if (shapshot == USE_SNAPSHOT)
129
+ for i in start..(endid - 1) do
130
+ tb.setFV(FN_ID, i)
131
+ tb.seek()
132
+ if ((tb.stat() != 0) || (tb.getFVlng(FN_ID) != i))
133
+ puts("GetEqual Error stat() = #{tb.stat().to_s} Value #{i.to_s} = #{tb.getFVlng(FN_ID).to_s}")
134
+ ret = false
135
+ break
136
+ end
137
+ end
138
+ db.endSnapshot() if (shapshot == USE_SNAPSHOT)
139
+ return ret
140
+ end
141
+
142
+ ## --------------------------------------------------------------------------------
143
+ def Reads(db, tb, start, endid, unit, shapshot)
144
+ ret = true
145
+ total = endid - start
146
+ count = total / unit
147
+ st = start
148
+ en = st
149
+ db.beginSnapshot() if (shapshot == USE_SNAPSHOT)
150
+ tb.setKeyNum(0)
151
+ tb.setFilter('*', 1, 20)
152
+ tb.clearBuffer()
153
+ tb.setFV(FN_ID, st)
154
+ tb.find(Transactd::Table::FindForword)
155
+ while (en != endid)
156
+ en = st + unit
157
+ for i in st..(en - 1) do
158
+ if (tb.getFVlng(FN_ID) != i)
159
+ puts("findNext Error stat() = #{tb.stat().to_s} Value #{i.to_s} = #{tb.getFVlng(FN_ID).to_s}")
160
+ ret = false
161
+ break
162
+ end
163
+ tb.findNext()
164
+ end
165
+ break if (ret == false)
166
+ st = en
167
+ end
168
+ db.endSnapshot() if (shapshot == USE_SNAPSHOT)
169
+ return ret
170
+ end
171
+
172
+ ## --------------------------------------------------------------------------------
173
+ def Updates(db, tb, start, endid, tran, unit)
174
+ ret = true
175
+ tb.setKeyNum(0)
176
+ total = endid - start
177
+ count = total / unit
178
+ st = start
179
+ en = st
180
+ while (en != endid)
181
+ en = st + unit
182
+ db.beginTrn(TRANS_BIAS) if (tran == USE_TRANS)
183
+ for i in st..(en - 1) do
184
+ tb.setFV(FN_ID, i)
185
+ tb.setFV(FN_NAME, "#{i + 1 + tran}")
186
+ tb.update(Transactd::Table::ChangeInKey)
187
+ if (tb.stat() != 0)
188
+ ret = false
189
+ break
190
+ end
191
+ end
192
+ db.endTrn() if (tran == USE_TRANS)
193
+ break if (ret == false)
194
+ st = en
195
+ end
196
+ return ret
197
+ end
198
+
199
+ ## --------------------------------------------------------------------------------
200
+ def createTestDataBase(db, uri)
201
+ db.create(uri)
202
+ if (db.stat() != 0)
203
+ puts("createTestDataBase erorr:No.#{db.stat().to_s} #{uri}")
204
+ return false
205
+ end
206
+ if (db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', ''))
207
+ dbdef = db.dbDef()
208
+ td = Transactd::Tabledef.new()
209
+ td.setTableName('user')
210
+ td.setFileName('user.dat')
211
+ td.id = 1
212
+ # td.primaryKeyNum = -1
213
+ # td.parentKeyNum = -1
214
+ # td.replicaKeyNum = -1
215
+ td.pageSize = 2048
216
+ dbdef.insertTable(td)
217
+
218
+ fd = dbdef.insertField(td.id, 0)
219
+ fd.setName('id')
220
+ fd.type = Transactd::Ft_integer
221
+ fd.len = 4
222
+ dbdef.updateTableDef(1)
223
+
224
+ fd = dbdef.insertField(td.id, 1)
225
+ fd.setName('name')
226
+ fd.type = Transactd::Ft_myvarchar
227
+ fd.len = 100
228
+ dbdef.updateTableDef(td.id)
229
+
230
+ kd = dbdef.insertKey(td.id, 0)
231
+ kd.segment(0).fieldNum = 0
232
+ kd.segment(0).flags.bit8 = 1 # extend key type
233
+ kd.segment(0).flags.bit1 = 1 # changeable
234
+ kd.segmentCount = 1
235
+
236
+ td.primaryKeyNum = 0
237
+ dbdef.updateTableDef(td.id)
238
+ return true
239
+ else
240
+ puts("open daatabse erorr No:#{db.stat().to_s}")
241
+ end
242
+ return false
243
+ end
244
+
245
+ ## --------------------------------------------------------------------------------
246
+ def printDateTime()
247
+ puts(DateTime.now.strftime('%Y/%m/%d %H:%M:%S'))
248
+ end
249
+
250
+ ## --------------------------------------------------------------------------------
251
+ def printHeader(uri, count)
252
+ puts("Start Bench mark Insert Items = #{count.to_s}")
253
+ printDateTime()
254
+ puts(uri)
255
+ puts("----------------------------------------")
256
+ end
257
+
258
+ ## --------------------------------------------------------------------------------
259
+ def printTail()
260
+ puts("----------------------------------------")
261
+ end
262
+
263
+ ## --------------------------------------------------------------------------------
264
+ def main(argv)
265
+ if (argv.length < 4)
266
+ puts("usage: ruby bench_tdclcpp.rb databaseUri processNumber functionNumber noDeleteFlag")
267
+ puts("\t --- functionNumber list ---")
268
+ puts("\t-1: all function")
269
+ puts("\t 0: Insert")
270
+ puts("\t 1: Insert in transaction. 20rec x 1000times")
271
+ puts("\t 2: Insert by bulkmode. 20rec x 1000times")
272
+ puts("\t 3: read each record")
273
+ puts("\t 4: read each record with snapshot")
274
+ puts("\t 5: read range. 20rec x 1000times")
275
+ puts("\t 6: read range with snapshpot. 20rec x 1000times")
276
+ puts("\t 7: update")
277
+ puts("\t 8: update in transaction. 20rec x 1000times")
278
+ puts("example : ruby bench_tdclcpp.rb \"tdap://localhost/test?dbfile=test.bdf\" 0 -1 1")
279
+ return
280
+ end
281
+ uri = argv[1] # "tdap://localhost/test?dbfile=test.bdf"
282
+ procID = Integer(argv[2]) # 0
283
+ count = 20000
284
+ start = procID * count + 1
285
+ endid = start + count
286
+ exeType = Integer(argv[3]) # -1
287
+ insertBeforeNoDelete = ((argv.length > 4) && (Integer(argv[4]) != 0))
288
+
289
+ db = Transactd::Database.createObject()
290
+ if (db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', '') == false)
291
+ if (!createTestDataBase(db, uri))
292
+ db.close()
293
+ return
294
+ end
295
+ puts("CreateDataBase success.")
296
+ end
297
+ printHeader(uri, count)
298
+
299
+ if (!db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', ''))
300
+ puts("open table erorr No:#{db.stat().to_s}")
301
+ else
302
+ tb = openTable(db, 'user', Transactd::TD_OPEN_NORMAL)
303
+ if tb == nil
304
+ puts "can not open table 'user'"
305
+ db.close()
306
+ return
307
+ end
308
+
309
+ if ((exeType == -1) || (exeType == 0))
310
+ if (insertBeforeNoDelete || deleteAll(db, tb, start, endid))
311
+ Transactd::Benchmark::start()
312
+ succeed = Inserts(db, tb, start, endid, USE_NORMAL, 1)
313
+ Transactd::Benchmark::showTimeSec(succeed, ': Insert')
314
+ else
315
+ puts("deleteAll erorr No:#{tb.stat().to_s}")
316
+ end
317
+ end
318
+ if ((exeType == -1) || (exeType == 1))
319
+ if (insertBeforeNoDelete || deleteAll(db, tb, start, endid))
320
+ Transactd::Benchmark::start()
321
+ succeed = Inserts(db, tb, start, endid, USE_TRANS, 20)
322
+ Transactd::Benchmark::showTimeSec(succeed, ': Insert in transaction. 20rec x 1000times.')
323
+ else
324
+ puts("deleteAll erorr No:#{tb.stat().to_s}")
325
+ end
326
+ end
327
+ if ((exeType == -1) || (exeType == 2))
328
+ if (insertBeforeNoDelete || deleteAll(db, tb, start, endid))
329
+ Transactd::Benchmark::start()
330
+ succeed = Inserts(db, tb, start, endid, USE_BALKINS, 20)
331
+ Transactd::Benchmark::showTimeSec(succeed, ': Insert by bulkmode. 20rec x 1000times.')
332
+ else
333
+ puts("deleteAll erorr No:#{tb.stat().to_s}")
334
+ end
335
+ end
336
+ if ((exeType == -1) || (exeType == 3))
337
+ Transactd::Benchmark::start()
338
+ succeed = Read(db, tb, start, endid, USE_NORMAL)
339
+ Transactd::Benchmark::showTimeSec(succeed, 'read each record.')
340
+ end
341
+ if ((exeType == -1) || (exeType == 4))
342
+ Transactd::Benchmark::start()
343
+ succeed = Read(db, tb, start, endid, USE_SNAPSHOT)
344
+ Transactd::Benchmark::showTimeSec(succeed, ': read each record with snapshot.')
345
+ end
346
+ if ((exeType == -1) || (exeType == 5))
347
+ Transactd::Benchmark::start()
348
+ succeed = Reads(db, tb, start, endid, 20, USE_NORMAL)
349
+ Transactd::Benchmark::showTimeSec(succeed, ': read range. 20rec x 1000times.')
350
+ end
351
+ if ((exeType == -1) || (exeType == 6))
352
+ Transactd::Benchmark::start()
353
+ succeed = Reads(db, tb, start, endid, 20, USE_SNAPSHOT)
354
+ Transactd::Benchmark::showTimeSec(succeed, ': read range with snapshpot. 20rec x 1000times.')
355
+ end
356
+ if ((exeType == -1) || (exeType == 7))
357
+ Transactd::Benchmark::start()
358
+ succeed = Updates(db, tb, start, endid, USE_NORMAL, 1)
359
+ Transactd::Benchmark::showTimeSec(succeed, ': update.')
360
+ end
361
+ if ((exeType == -1) || (exeType == 8))
362
+ Transactd::Benchmark::start()
363
+ succeed = Updates(db, tb, start, endid, USE_TRANS, 20)
364
+ Transactd::Benchmark::showTimeSec(succeed, ': update in transaction. 20rec x 1000times.')
365
+ end
366
+ end
367
+ tb.close()
368
+ db.close()
369
+ printTail()
370
+ return
371
+ end
372
+
373
+ args = ARGV
374
+ args.unshift(__FILE__)
375
+ main(args)
@@ -0,0 +1,226 @@
1
+ # coding : utf-8
2
+ =begin =============================================================
3
+ Copyright (C) 2013 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18
+ 02111-1307, USA.
19
+ ===================================================================
20
+ =end
21
+ require 'transactd'
22
+
23
+ FN_ID = 0
24
+ FN_NAME = 1
25
+
26
+ TYPE_SCHEMA_BDF = 0
27
+ PARALLEL_TRN = 1000
28
+ LOCK_SINGLE_NOWAIT = 200
29
+ TRANS_BIAS = PARALLEL_TRN + LOCK_SINGLE_NOWAIT
30
+
31
+ def createTable(db)
32
+ dbdef = db.dbDef()
33
+ td = Transactd::Tabledef.new()
34
+ td.setTableName('user')
35
+ td.setFileName('user.dat')
36
+ td.id = 1
37
+ td.pageSize = 2048
38
+ dbdef.insertTable(td)
39
+ td = dbdef.tableDefs(td.id)
40
+
41
+ fd = dbdef.insertField(td.id, 0)
42
+ fd.setName('id')
43
+ fd.type = Transactd::Ft_integer
44
+ fd.len = 4
45
+ dbdef.updateTableDef(1)
46
+
47
+ fd = dbdef.insertField(td.id, 1)
48
+ fd.setName('name')
49
+ fd.type = Transactd::Ft_myvarchar
50
+ fd.len = 100
51
+ dbdef.updateTableDef(td.id)
52
+
53
+ kd = dbdef.insertKey(td.id, 0)
54
+ kd.segment(0).fieldNum = 0
55
+ kd.segment(0).flags.bit8 = 1 # extend key type
56
+ kd.segment(0).flags.bit1 = 1 # changeable
57
+ kd.segmentCount = 1
58
+
59
+ td.primaryKeyNum = 0
60
+ dbdef.updateTableDef(td.id)
61
+ end
62
+
63
+ ## --------------------------------------------------------------------------------
64
+ def printUsage()
65
+ puts("usage: ruby prepare.rb databaseUri functionNumber rangeStart rangeEnd gap")
66
+ puts("\t --- functionNumber list ---")
67
+ puts("\t 0: only create database and table")
68
+ puts("\t 1: delete records from rangeStart to rangeEnd with gap")
69
+ puts("\t 2: set records from rangeStart to rangeEnd with gap")
70
+ puts("\t 3: check records from rangeStart to rangeEnd with gap")
71
+ puts("example : ruby prepare.rb \"tdap://localhost/test?dbfile=test.bdf\" 1 1 1000 1")
72
+ end
73
+
74
+ ## --------------------------------------------------------------------------------
75
+ def main(argv)
76
+ if (argv.length < 3)
77
+ printUsage()
78
+ return
79
+ end
80
+ uri = argv[1]
81
+ functionNumber = Integer(argv[2])
82
+ if !([0,1,2,3].include?(functionNumber))
83
+ printUsage()
84
+ return
85
+ end
86
+ rangeStart = 0
87
+ rangeEnd = 0
88
+ gap = 0
89
+ if functionNumber > 0
90
+ if argv.length < 5
91
+ printUsage()
92
+ return
93
+ end
94
+ rangeStart = Integer(argv[3])
95
+ rangeEnd = Integer(argv[4])
96
+ if rangeStart < 0 || rangeEnd < 0
97
+ printUsage()
98
+ return
99
+ end
100
+ if rangeStart > rangeEnd
101
+ tmp = rangeStart
102
+ rangeStart = rangeEnd
103
+ rangeEnd = tmp
104
+ end
105
+ if argv.length >= 6
106
+ gap = Integer(argv[5])
107
+ end
108
+ end
109
+
110
+ db = Transactd::Database.createObject()
111
+
112
+ if !db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', '')
113
+ db.create(uri)
114
+ if db.stat() != 0
115
+ puts("create database error No #{db.stat()}")
116
+ db.close()
117
+ return
118
+ end
119
+ end
120
+
121
+ if !db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', '')
122
+ puts("open table erorr No #{db.stat().to_s}")
123
+ db.close()
124
+ return
125
+ end
126
+
127
+ tb = db.openTable('user', Transactd::TD_OPEN_NORMAL, true)
128
+ if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR || tb == nil
129
+ createTable(db)
130
+ tb = db.openTable('user', Transactd::TD_OPEN_NORMAL, true)
131
+ end
132
+
133
+ if functionNumber == 1
134
+ db.beginTrn(TRANS_BIAS)
135
+ tb.clearBuffer()
136
+ for i in rangeStart..rangeEnd do
137
+ tb.setFV(FN_ID, i)
138
+ tb.seek()
139
+ if tb.stat() == 0
140
+ tb.del()
141
+ if tb.stat() != 0
142
+ puts("delete erorr No #{tb.stat().to_s}")
143
+ db.endTrn()
144
+ tb.close()
145
+ db.close()
146
+ return false
147
+ end
148
+ elsif tb.stat() != 4
149
+ puts("delete erorr No #{tb.stat().to_s}")
150
+ db.endTrn()
151
+ tb.close()
152
+ db.close()
153
+ return false
154
+ end
155
+ end
156
+ db.endTrn()
157
+ end
158
+
159
+ if functionNumber == 2
160
+ db.beginTrn(TRANS_BIAS)
161
+ tb.clearBuffer()
162
+ for i in rangeStart..rangeEnd do
163
+ tb.setFV(FN_ID, i)
164
+ tb.seek()
165
+ if (tb.stat() == 0)
166
+ tb.setFV(FN_NAME, "#{i + gap}")
167
+ tb.update()
168
+ if (tb.stat() != 0)
169
+ puts("set erorr No #{tb.stat().to_s}")
170
+ db.endTrn()
171
+ tb.close()
172
+ db.close()
173
+ return false
174
+ end
175
+ else
176
+ tb.clearBuffer()
177
+ tb.setFV(FN_ID, i)
178
+ tb.setFV(FN_NAME, i + gap)
179
+ tb.insert()
180
+ if (tb.stat() != 0)
181
+ puts("set erorr No #{tb.stat().to_s}")
182
+ db.endTrn()
183
+ tb.close()
184
+ db.close()
185
+ return false
186
+ end
187
+ end
188
+ end
189
+ db.endTrn()
190
+ end
191
+
192
+ if functionNumber == 3
193
+ tb.clearBuffer()
194
+ tb.setFV(FN_ID, rangeStart)
195
+ tb.seekGreater(true)
196
+ for i in rangeStart..rangeEnd do
197
+ if (tb.stat() != 0)
198
+ puts("check error stat=#{tb.stat()} Expected ID #{i}")
199
+ tb.close()
200
+ db.close()
201
+ return false
202
+ end
203
+ if (tb.getFVlng(FN_ID) != i)
204
+ puts("check error stat=#{tb.stat()} Expected ID #{i} but ID #{tb.getFVlng(FN_ID)}")
205
+ tb.close()
206
+ db.close()
207
+ return false
208
+ end
209
+ if (tb.getFVstr(FN_NAME).to_s != "#{i + gap}")
210
+ puts("check error stat=#{tb.stat()} Expected Name #{i + gap} but Name #{tb.getFVstr(FN_NAME)}")
211
+ tb.close()
212
+ db.close()
213
+ return false
214
+ end
215
+ tb.seekNext()
216
+ end
217
+ end
218
+
219
+ tb.close()
220
+ db.close()
221
+ return
222
+ end
223
+
224
+ args = ARGV
225
+ args.unshift(__FILE__)
226
+ main(args)