transactd 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +46 -67
  3. data/BUILD_WIN-JA +106 -63
  4. data/CMakeLists.txt +40 -15
  5. data/README +219 -75
  6. data/README-JA +207 -76
  7. data/README_ORMSRCGEN +118 -0
  8. data/README_ORMSRCGEN-JA +115 -0
  9. data/bin/common/tdclc_32_2_0.dll +0 -0
  10. data/bin/common/tdclc_64_2_0.dll +0 -0
  11. data/build/common/check_for_link_iconv.cmake +18 -14
  12. data/build/common/create_symlink.cmake.in +25 -0
  13. data/build/common/get_boost_libs.cmake +23 -23
  14. data/build/common/options.cmake +0 -66
  15. data/build/common/smart_install.cmake +3 -3
  16. data/build/common/transactd.rc.in +15 -5
  17. data/build/common/transactd_cl_common.cmake +37 -18
  18. data/build/common/transactd_cl_output.cmake +55 -13
  19. data/build/common/transactd_common.cmake +108 -31
  20. data/build/swig/php/generate.cmake.in +15 -17
  21. data/build/swig/php/generate.cmd.in +15 -9
  22. data/build/swig/php/php.swg +124 -82
  23. data/build/swig/php/transactd.no_yield.php +4494 -0
  24. data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
  25. data/build/swig/php/transactd.no_yield.php.patch +685 -0
  26. data/build/swig/php/transactd.yield.php +4461 -0
  27. data/build/swig/php/transactd.yield.php.git.patch +652 -0
  28. data/build/swig/php/transactd.yield.php.patch +652 -0
  29. data/build/swig/referencecounter.h +79 -0
  30. data/build/swig/ruby/ruby.swg +226 -76
  31. data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
  32. data/build/swig/ruby/without_gvl.swg +87 -0
  33. data/build/swig/tdcl.i +659 -170
  34. data/build/swig/validatablepointer.h +91 -0
  35. data/build/tdclc/CMakeLists.txt +49 -34
  36. data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
  37. data/build/tdclc/tdclc.rc +0 -0
  38. data/build/tdclcpp/CMakeLists.txt +84 -20
  39. data/build/tdclcpp/tdclcpp.rc +0 -0
  40. data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
  41. data/build/tdclrb/CMakeLists.txt +84 -66
  42. data/build/tdclrb/bldgem/extconf.rb +28 -3
  43. data/build/tdclrb/gem/helper.rb +11 -1
  44. data/build/tdclrb/gem_output.cmake +20 -16
  45. data/index_ja.html +15 -0
  46. data/source/bzs/db/IBlobBuffer.h +15 -17
  47. data/source/bzs/db/blobBuffer.h +186 -140
  48. data/source/bzs/db/blobStructs.h +37 -37
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
  50. data/source/bzs/db/engine/mysql/bookmark.h +150 -147
  51. data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
  52. data/source/bzs/db/engine/mysql/database.h +608 -370
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
  54. data/source/bzs/db/engine/mysql/dbManager.h +115 -104
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
  56. data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
  63. data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
  64. data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
  68. data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
  69. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
  70. data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
  71. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
  72. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
  73. data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
  74. data/source/bzs/db/protocol/tdap/client/client.h +361 -320
  75. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
  76. data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
  77. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
  78. data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
  79. data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
  80. data/source/bzs/db/protocol/tdap/client/database.h +141 -118
  81. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
  82. data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
  83. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
  84. data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
  85. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
  86. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
  87. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
  88. data/source/bzs/db/protocol/tdap/client/export.h +35 -0
  89. data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
  90. data/source/bzs/db/protocol/tdap/client/field.h +393 -0
  91. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
  92. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
  93. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
  94. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
  95. data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
  96. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
  97. data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
  98. data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
  99. data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
  100. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
  101. data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
  102. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
  103. data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
  104. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
  105. data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
  106. data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
  107. data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
  108. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
  109. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
  110. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
  111. data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
  112. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
  113. data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
  114. data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
  115. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
  116. data/source/bzs/db/protocol/tdap/client/request.h +227 -170
  117. data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
  118. data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
  119. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
  120. data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
  121. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
  122. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
  123. data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
  124. data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
  125. data/source/bzs/db/protocol/tdap/client/table.h +413 -87
  126. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
  127. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
  128. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
  129. data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
  130. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
  131. data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
  132. data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
  133. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
  134. data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
  135. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
  136. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
  137. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
  138. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
  139. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
  140. data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
  141. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
  142. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
  143. data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
  144. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
  145. data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
  146. data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
  147. data/source/bzs/db/transactd/appBuilderImple.h +21 -20
  148. data/source/bzs/db/transactd/appModule.cpp +350 -98
  149. data/source/bzs/db/transactd/appModule.h +31 -37
  150. data/source/bzs/db/transactd/connManager.cpp +138 -135
  151. data/source/bzs/db/transactd/connManager.h +28 -21
  152. data/source/bzs/db/transactd/connectionRecord.h +39 -39
  153. data/source/bzs/db/transactd/transactd.cpp +217 -203
  154. data/source/bzs/env/boost_bcb_link.h +131 -0
  155. data/source/bzs/env/compiler.h +136 -79
  156. data/source/bzs/env/crosscompile.cpp +57 -57
  157. data/source/bzs/env/crosscompile.h +130 -115
  158. data/source/bzs/env/fileopen.h +7 -8
  159. data/source/bzs/env/mbcswchrLinux.cpp +4 -9
  160. data/source/bzs/env/mbcswchrLinux.h +37 -34
  161. data/source/bzs/env/tcharMinGW.h +59 -0
  162. data/source/bzs/env/tstring.h +90 -95
  163. data/source/bzs/example/changeSchema.cpp +22 -23
  164. data/source/bzs/example/changeSchema_c.cpp +22 -24
  165. data/source/bzs/example/connection_pool_c.cpp +49 -104
  166. data/source/bzs/example/createDatabase.cpp +40 -47
  167. data/source/bzs/example/createDatabase_c.cpp +38 -43
  168. data/source/bzs/example/deleteRecords.cpp +10 -15
  169. data/source/bzs/example/deleteRecords_c.cpp +10 -14
  170. data/source/bzs/example/dropDatabase.cpp +3 -9
  171. data/source/bzs/example/dropDatabase_c.cpp +5 -6
  172. data/source/bzs/example/insertRecords.cpp +37 -29
  173. data/source/bzs/example/insertRecords_c.cpp +19 -25
  174. data/source/bzs/example/ormap_c.cpp +621 -0
  175. data/source/bzs/example/queryData.cpp +371 -0
  176. data/source/bzs/example/queryData.h +16 -0
  177. data/source/bzs/example/query_c.cpp +109 -0
  178. data/source/bzs/example/readRecords.cpp +27 -27
  179. data/source/bzs/example/readRecords_c.cpp +25 -23
  180. data/source/bzs/example/updateRecords.cpp +16 -21
  181. data/source/bzs/example/updateRecords_c.cpp +8 -12
  182. data/source/bzs/example/update_with_transaction.cpp +21 -24
  183. data/source/bzs/example/update_with_transaction_c.cpp +12 -15
  184. data/source/bzs/example/useORMRecord.cpp +177 -0
  185. data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
  186. data/source/bzs/netsvc/client/tcpClient.h +541 -489
  187. data/source/bzs/netsvc/server/IAppModule.h +119 -32
  188. data/source/bzs/netsvc/server/iserver.h +21 -23
  189. data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
  190. data/source/bzs/netsvc/server/serverCpt.h +41 -43
  191. data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
  192. data/source/bzs/netsvc/server/serverPipe.h +44 -45
  193. data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
  194. data/source/bzs/netsvc/server/serverTpool.h +38 -43
  195. data/source/bzs/rtl/benchmark.cpp +91 -31
  196. data/source/bzs/rtl/benchmark.h +76 -22
  197. data/source/bzs/rtl/datetime.cpp +231 -233
  198. data/source/bzs/rtl/datetime.h +16 -16
  199. data/source/bzs/rtl/debuglog.cpp +48 -51
  200. data/source/bzs/rtl/debuglog.h +55 -44
  201. data/source/bzs/rtl/exception.h +55 -48
  202. data/source/bzs/rtl/stl_uty.cpp +27 -28
  203. data/source/bzs/rtl/stl_uty.h +28 -29
  204. data/source/bzs/rtl/stringBuffers.cpp +8 -6
  205. data/source/bzs/rtl/stringBuffers.h +16 -9
  206. data/source/bzs/rtl/strtrim.cpp +90 -91
  207. data/source/bzs/rtl/strtrim.h +14 -16
  208. data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
  209. data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
  210. data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
  211. data/source/bzs/test/tdclphp/bench.php +357 -0
  212. data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
  213. data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
  214. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
  215. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
  216. data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
  217. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
  218. data/source/bzs/test/tdclrb/prepare.rb +15 -12
  219. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
  220. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
  221. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
  222. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
  223. data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
  224. data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
  225. data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
  226. data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
  227. data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
  228. data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
  229. data/source/bzs/test/transactdBench/workerBase.h +88 -0
  230. data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
  231. data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
  232. data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
  233. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
  234. data/source/global/ormsrcgen/confParam.h +80 -0
  235. data/source/global/ormsrcgen/fieldName.cpp +77 -0
  236. data/source/global/ormsrcgen/fieldName.h +43 -0
  237. data/source/global/ormsrcgen/main.cpp +196 -0
  238. data/source/global/ormsrcgen/srcgen.cpp +763 -0
  239. data/source/global/ormsrcgen/srcgen.h +72 -0
  240. data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
  241. data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
  242. data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
  243. data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
  244. data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
  245. data/source/global/ormsrcgen/template/template.cnf +38 -0
  246. data/source/global/querystmts/querystmts.cpp +237 -0
  247. data/source/global/tdclatl/ConnectParams.cpp +77 -0
  248. data/source/global/tdclatl/ConnectParams.h +70 -0
  249. data/source/global/tdclatl/Database.cpp +132 -128
  250. data/source/global/tdclatl/Database.h +60 -49
  251. data/source/global/tdclatl/DbDef.cpp +68 -64
  252. data/source/global/tdclatl/DbDef.h +36 -36
  253. data/source/global/tdclatl/Field.cpp +12 -17
  254. data/source/global/tdclatl/Field.h +15 -12
  255. data/source/global/tdclatl/FieldDef.cpp +75 -36
  256. data/source/global/tdclatl/FieldDef.h +38 -19
  257. data/source/global/tdclatl/FieldDefs.cpp +74 -0
  258. data/source/global/tdclatl/FieldDefs.h +56 -0
  259. data/source/global/tdclatl/FieldNames.cpp +99 -0
  260. data/source/global/tdclatl/FieldNames.h +66 -0
  261. data/source/global/tdclatl/Flags.cpp +75 -37
  262. data/source/global/tdclatl/Flags.h +13 -12
  263. data/source/global/tdclatl/GroupQuery.cpp +119 -0
  264. data/source/global/tdclatl/GroupQuery.h +65 -0
  265. data/source/global/tdclatl/KeyDef.cpp +15 -14
  266. data/source/global/tdclatl/KeyDef.h +20 -17
  267. data/source/global/tdclatl/KeySegment.cpp +13 -12
  268. data/source/global/tdclatl/PooledDbManager.cpp +223 -0
  269. data/source/global/tdclatl/PooledDbManager.h +76 -0
  270. data/source/global/tdclatl/QueryBase.cpp +206 -127
  271. data/source/global/tdclatl/QueryBase.h +55 -59
  272. data/source/global/tdclatl/Record.cpp +214 -0
  273. data/source/global/tdclatl/Record.h +96 -0
  274. data/source/global/tdclatl/Recordset.cpp +278 -0
  275. data/source/global/tdclatl/Recordset.h +83 -0
  276. data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
  277. data/source/global/tdclatl/RecordsetQuery.h +126 -0
  278. data/source/global/tdclatl/Table.cpp +57 -60
  279. data/source/global/tdclatl/Table.h +32 -29
  280. data/source/global/tdclatl/TableDef.cpp +63 -62
  281. data/source/global/tdclatl/TableDef.h +20 -22
  282. data/source/global/tdclatl/TdVersion.cpp +3 -3
  283. data/source/global/tdclatl/TdVersion.h +15 -11
  284. data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
  285. data/source/global/tdclatl/activeTable.cpp +355 -0
  286. data/source/global/tdclatl/activeTable.h +79 -0
  287. data/source/global/tdclatl/dllmain.cpp +4 -3
  288. data/source/global/tdclatl/dllmain.h +7 -6
  289. data/source/global/tdclatl/keySegment.h +22 -18
  290. data/source/global/tdclatl/resource.h +0 -0
  291. data/source/global/tdclatl/stdafx.h +6 -4
  292. data/source/global/tdclatl/targetver.h +0 -1
  293. data/source/global/tdclatl/tdclatl.cpp +10 -5
  294. data/source/global/tdclatl/tdclatl.idl +530 -14
  295. data/source/linux/charsetConvert.h +78 -79
  296. data/source/linux/linuxTypes.h +9 -12
  297. data/source/linux/tchar.h +168 -166
  298. data/transactd.gemspec +24 -16
  299. metadata +98 -12
  300. data/bin/common/tdclc_32_1_2.dll +0 -0
  301. data/bin/common/tdclc_64_1_2.dll +0 -0
  302. data/build/tdclc/tdclc_32.cbproj +0 -173
  303. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
  304. data/build/tdclrb/GEM_VERSION +0 -3
  305. data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
  306. data/source/bzs/example/useORM.cpp +0 -585
@@ -16,9 +16,6 @@
16
16
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  ================================================================= */
19
- #include <bzs/env/tstring.h>
20
- #pragma hdrstop
21
-
22
19
  #include "dbDef.h"
23
20
  #include "database.h"
24
21
  #include <bzs/rtl/strtrim.h>
@@ -42,60 +39,64 @@ namespace tdap
42
39
  namespace client
43
40
  {
44
41
 
45
- static const _TUCHAR BDFFORMAT_VERSION[] = _T("2.000.00");
46
- static const _TUCHAR ow0[11] = {46, 46, 83, 67, 46, 46, 46, 46, 93, 4, 0};
47
- static const _TUCHAR ow1[11] = {46, 46, 83, 67, 46, 46, 46, 46, 66, 5, 0};
48
- static const _TUCHAR ow2[11] = {46, 46, 83, 67, 46, 46, 46, 46, 212, 5, 0};
42
+ #define FORMAT_VERSON_BTRV_DEF 0
43
+ #define FORMAT_VERSON_CURRENT 1
44
+
45
+ static const _TCHAR BDFFORMAT_VERSION[] = _T("2.000.00");
46
+ static const _TCHAR ow0[11] = { 46, 46, 83, 67, 46, 46, 46, 46, 93, 4, 0 };
47
+ static const _TCHAR ow1[11] = { 46, 46, 83, 67, 46, 46, 46, 46, 66, 5, 0 };
48
+ static const _TCHAR ow2[11] = { 46, 46, 83, 67, 46, 46, 46, 46, -44, 5, 0 };
49
49
  using namespace bzs::rtl;
50
50
 
51
51
  class ownerNameSetter : public nstable
52
52
  {
53
- void onReadAfter(){};
54
- void writeRecordData(){};
53
+ void onReadAfter(){};
54
+ void writeRecordData(){};
55
+
55
56
  public:
56
- ownerNameSetter(nsdatabase *pbe):nstable(pbe){};
57
- using nstable::open;
57
+ ownerNameSetter(nsdatabase* pbe) : nstable(pbe){};
58
+ using nstable::open;
58
59
  };
59
60
 
60
61
  static const int BDFMAXBUFFER = 32384;
61
62
 
62
63
  struct dbdimple
63
64
  {
65
+ tabledef* tableDefs[TABLE_NUM_TMP + 1];
64
66
  char keybuf[128];
65
67
  tabledef* bdf;
66
- int bdfLen;
67
- bool noWriteMode;
68
- short deftype;
69
- _TCHAR userName[20];
70
- tabledef* tableDefs[TABLE_NUM_TMP+1];
71
- _TCHAR version[9];
68
+ void* relateData;
72
69
  ushort_td maxid;
73
70
  short tableCount;
74
- void* relateData;
75
71
  short openMode;
72
+ short deftype;
73
+ _TCHAR userName[20];
74
+ int bdfLen;
75
+ _TCHAR version[9];
76
+ bool noWriteMode;
76
77
 
77
- dbdimple() : bdf(NULL), bdfLen(BDFMAXBUFFER), noWriteMode(false), tableCount(0),
78
- relateData(NULL), openMode(1), maxid(0)
78
+ dbdimple()
79
+ : bdf(NULL), relateData(NULL), maxid(0), tableCount(0), openMode(1),
80
+ deftype(TYPE_SCHEMA_BDF), bdfLen(BDFMAXBUFFER), noWriteMode(false)
79
81
  {
80
- memset(tableDefs, 0, (TABLE_NUM_TMP+1)*sizeof(tabledef*));
82
+ memset(tableDefs, 0, (TABLE_NUM_TMP + 1) * sizeof(tabledef*));
81
83
  _tcscpy(version, (const _TCHAR*)BDFFORMAT_VERSION);
82
84
  }
83
85
  };
84
86
 
85
- dbdef::dbdef(nsdatabase *pbe, short DefType) : nstable(pbe)
87
+ dbdef::dbdef(nsdatabase* pbe, short DefType) : nstable(pbe)
86
88
  {
87
89
  m_impl = new dbdimple();
88
90
  m_impl->deftype = DefType;
89
91
  m_keybuflen = 128;
90
92
  m_keybuf = &m_impl->keybuf[0];
91
- setShared();
92
-
93
+ setShared();
93
94
  }
94
95
 
95
- dbdef::~dbdef()
96
+ dbdef::~dbdef()
96
97
  {
97
- if (m_impl->bdf)
98
- free(m_impl->bdf);
98
+ if (m_impl->bdf)
99
+ free(m_impl->bdf);
99
100
 
100
101
  for (int i = 0; i <= m_impl->tableCount; i++)
101
102
  {
@@ -107,20 +108,38 @@ dbdef::~dbdef()
107
108
  free(m_impl->tableDefs[TABLE_NUM_TMP]);
108
109
  if (m_impl->relateData)
109
110
  free(m_impl->relateData);
110
- delete m_impl;
111
+ delete m_impl;
111
112
  }
112
113
 
113
- void dbdef::setDefType(short defType) {m_impl->deftype = defType;}
114
+ void dbdef::setDefType(short defType)
115
+ {
116
+ m_impl->deftype = defType;
117
+ }
114
118
 
115
- short dbdef::tableCount() const {return m_impl->tableCount;}
119
+ short dbdef::tableCount() const
120
+ {
121
+ return m_impl->tableCount;
122
+ }
116
123
 
117
- void* dbdef::relateData() const {return m_impl->relateData;}
124
+ void* dbdef::relateData() const
125
+ {
126
+ return m_impl->relateData;
127
+ }
118
128
 
119
- short dbdef::openMode() const {return m_impl->openMode;}
129
+ short dbdef::openMode() const
130
+ {
131
+ return m_impl->openMode;
132
+ }
120
133
 
121
- int dbdef::version() const {return m_impl->version[7] - '0';};
134
+ int dbdef::version() const
135
+ {
136
+ return m_impl->version[7] - '0';
137
+ };
122
138
 
123
- void dbdef::setVersion(int v) {m_impl->version[7] = (char)v;}
139
+ void dbdef::setVersion(int v)
140
+ {
141
+ m_impl->version[7] = (char)v;
142
+ }
124
143
 
125
144
  void* dbdef::allocRelateData(int size)
126
145
  {
@@ -149,12 +168,12 @@ void dbdef::moveById(short id)
149
168
  else
150
169
  break;
151
170
  }
152
-
153
171
  }
154
172
 
155
173
  bool dbdef::resizeReadBuf(void)
156
174
  {
157
- m_impl->bdf = (tabledef*) realloc(m_impl->bdf, m_impl->bdfLen + BDFMAXBUFFER);
175
+ m_impl->bdf =
176
+ (tabledef*)realloc(m_impl->bdf, m_impl->bdfLen + BDFMAXBUFFER);
158
177
  if (m_impl->bdf == NULL)
159
178
  {
160
179
  m_stat = STATUS_CANT_ALLOC_MEMORY;
@@ -167,24 +186,24 @@ bool dbdef::resizeReadBuf(void)
167
186
  keydef* dbdef::getKeyDef(tabledef* p)
168
187
  {
169
188
  // keydefPos = size of tabledef �{ size of fielddef x number
170
- return (keydef*)((char*) p +sizeof(tabledef) + (p->fieldCount*sizeof(fielddef)));
189
+ return (keydef*)((char*)p + sizeof(tabledef) +
190
+ (p->fieldCount * sizeof(fielddef)));
171
191
  }
172
192
 
173
193
  fielddef* dbdef::getFieldDef(tabledef* p)
174
194
  {
175
195
 
176
- return (fielddef*)((char*) p +sizeof(tabledef));
196
+ return (fielddef*)((char*)p + sizeof(tabledef));
177
197
  }
178
198
 
179
199
  void dbdef::setRecordLen(short TableIndex)
180
200
  {
181
- tableDefs(TableIndex)->maxRecordLen = getRecordLen(TableIndex);
201
+ tabledef* td = tableDefs(TableIndex);
202
+ td->maxRecordLen = getRecordLen(TableIndex);
182
203
 
183
204
  // If valible length then specifing fixed length.
184
- if ((tableDefs(TableIndex)->fixedRecordLen == 0) ||
185
- (tableDefs(TableIndex)->flags.bit0 == false))
186
- tableDefs(TableIndex)->fixedRecordLen = tableDefs(TableIndex)->maxRecordLen;
187
-
205
+ if ((td->fixedRecordLen == 0) || (td->flags.bit0 == false))
206
+ td->fixedRecordLen = td->maxRecordLen;
188
207
  }
189
208
 
190
209
  void dbdef::setCodePage(tabledef* td)
@@ -205,16 +224,12 @@ void dbdef::updateTableDef(short TableIndex, bool forPsqlDdf)
205
224
  {
206
225
  m_stat = STATUS_SUCCESS;
207
226
  tabledef* td = tableDefs(TableIndex);
208
- short i = (short)(td->fieldCount - 1);
209
- short j;
210
- short ret;
211
- short Fnum;
227
+ short i, j, ret, Fnum;
212
228
  uchar_td type;
213
229
 
214
230
  td->optionFlags.bitA = false; // reset valiable type
215
231
 
216
-
217
- for (; i >= 0; --i)
232
+ for (i = 0; i < td->fieldCount; ++i)
218
233
  {
219
234
  ret = fieldNumByName(TableIndex, td->fieldDefs[i].name());
220
235
  if ((ret != -1) && (ret != i))
@@ -224,6 +239,10 @@ void dbdef::updateTableDef(short TableIndex, bool forPsqlDdf)
224
239
  }
225
240
  // Check field length.
226
241
  type = td->fieldDefs[i].type;
242
+
243
+ // reset update indicator
244
+ td->fieldDefs[i].enableFlags.bitE = false;
245
+
227
246
  ret = validLen(type, td->fieldDefs[i].len);
228
247
  if (!ret)
229
248
  {
@@ -233,26 +252,27 @@ void dbdef::updateTableDef(short TableIndex, bool forPsqlDdf)
233
252
  // Note or Lvar type must be the last of fields.
234
253
  if ((type == ft_note) || (type == ft_lvar))
235
254
  {
236
- if (i != td->fieldCount - 1) {
255
+ if (i != td->fieldCount - 1)
256
+ {
237
257
  m_stat = STATUS_LVAR_NOTE_NOT_LAST;
238
258
  return;
239
259
  }
240
260
  }
241
261
 
242
- // Check valiable type
243
- if (!td->flags.bit0 && ((type == ft_myvarchar) || (type == ft_myvarbinary) ||
244
- (type == ft_mywvarchar) || (type == ft_mywvarbinary)))
245
- td->optionFlags.bitA = true;
246
- if ((type == ft_myblob) || (type == ft_mytext))
247
- td->optionFlags.bitB = true;
248
-
249
- // If valiable length then cannot use blob.
250
- if (td->flags.bit0 && td->optionFlags.bitB)
262
+ bool flag =
263
+ (td->flags.bit0 == true) && (i == (short)(td->fieldCount - 1));
264
+ if (flag && (type != ft_myvarbinary) && (type != ft_mywvarbinary) &&
265
+ (type != ft_note) && (type != ft_lvar))
251
266
  {
252
- m_stat = STATUS_LVAR_NOTE_NOT_LAST;
267
+ m_stat = STATUS_INVALID_VARIABLETABLE;
253
268
  return;
254
269
  }
255
-
270
+ if ((type == ft_myvarchar) || (type == ft_mywvarchar) ||
271
+ (type == ft_myvarbinary) || (type == ft_mywvarbinary) ||
272
+ (type == ft_myfixedbinary))
273
+ td->optionFlags.bitA = true;
274
+ if ((type == ft_myblob) || (type == ft_mytext))
275
+ td->optionFlags.bitB = true;
256
276
  }
257
277
 
258
278
  // Check invalid key type
@@ -301,13 +321,12 @@ void dbdef::updateTableDef(short TableIndex, bool forPsqlDdf)
301
321
  m_pdata = td;
302
322
  m_buflen = totalDefLength(TableIndex);
303
323
  cacheFieldPos(td);
304
- td->formatVersion = 1;
324
+ td->formatVersion = FORMAT_VERSON_CURRENT;
305
325
  update();
306
326
  m_pdata = m_impl->bdf;
307
327
  m_buflen = m_impl->bdfLen;
308
328
  }
309
329
  }
310
-
311
330
  }
312
331
 
313
332
  void dbdef::deleteTable(short TableIndex)
@@ -332,7 +351,6 @@ void dbdef::deleteTable(short TableIndex)
332
351
  del();
333
352
  m_pdata = m_impl->bdf;
334
353
  m_buflen = m_impl->bdfLen;
335
-
336
354
  }
337
355
  }
338
356
  if (m_stat == STATUS_SUCCESS)
@@ -340,7 +358,6 @@ void dbdef::deleteTable(short TableIndex)
340
358
  free(tableDefs(TableIndex));
341
359
  m_impl->tableDefs[TableIndex] = NULL;
342
360
  }
343
-
344
361
  }
345
362
 
346
363
  void dbdef::renumberFieldNum(short TableIndex, short Index, short op)
@@ -389,7 +406,8 @@ bool dbdef::isUsedField(short TableIndex, short DeleteIndex)
389
406
  void dbdef::deleteField(short TableIndex, short DeleteIndex)
390
407
  {
391
408
  m_stat = STATUS_SUCCESS;
392
- if (isUsedField(TableIndex, DeleteIndex) == true) {
409
+ if (isUsedField(TableIndex, DeleteIndex) == true)
410
+ {
393
411
  m_stat = STATUS_USE_KEYFIELD;
394
412
  return;
395
413
  }
@@ -401,12 +419,12 @@ void dbdef::deleteField(short TableIndex, short DeleteIndex)
401
419
  else
402
420
  {
403
421
  memmove(&td->fieldDefs[DeleteIndex], &td->fieldDefs[DeleteIndex + 1],
404
- totalDefLength(TableIndex) + (char*)td - (char*)&(td->fieldDefs[DeleteIndex + 1]));
422
+ totalDefLength(TableIndex) + (char*)td -
423
+ (char*)&(td->fieldDefs[DeleteIndex + 1]));
405
424
  }
406
425
  td->fieldCount--;
407
426
  td->keyDefs = getKeyDef(tableDefs(TableIndex));
408
427
  updateTableDef(TableIndex);
409
-
410
428
  }
411
429
 
412
430
  void dbdef::deleteKey(short TableIndex, short DeleteIndex)
@@ -416,14 +434,18 @@ void dbdef::deleteKey(short TableIndex, short DeleteIndex)
416
434
  if (DeleteIndex != td->keyCount - 1)
417
435
  {
418
436
  memmove(&td->keyDefs[DeleteIndex], &td->keyDefs[DeleteIndex + 1],
419
- totalDefLength(TableIndex) + (char*)td - (char*)&(td->keyDefs[DeleteIndex + 1]));
437
+ totalDefLength(TableIndex) + (char*)td -
438
+ (char*)&(td->keyDefs[DeleteIndex + 1]));
420
439
  }
421
440
  td->keyCount--;
422
- if ((td->primaryKeyNum == DeleteIndex) || (td->primaryKeyNum > td->keyCount - 1))
441
+ if ((td->primaryKeyNum == DeleteIndex) ||
442
+ (td->primaryKeyNum > td->keyCount - 1))
423
443
  td->primaryKeyNum = -1;
424
- if ((td->parentKeyNum == DeleteIndex) || (td->parentKeyNum > td->keyCount - 1))
444
+ if ((td->parentKeyNum == DeleteIndex) ||
445
+ (td->parentKeyNum > td->keyCount - 1))
425
446
  td->parentKeyNum = -1;
426
- if ((td->replicaKeyNum == DeleteIndex) || (td->replicaKeyNum > td->keyCount - 1))
447
+ if ((td->replicaKeyNum == DeleteIndex) ||
448
+ (td->replicaKeyNum > td->keyCount - 1))
427
449
  td->replicaKeyNum = -1;
428
450
 
429
451
  updateTableDef(TableIndex);
@@ -453,7 +475,8 @@ void dbdef::insertTable(tabledef* TableDef)
453
475
  m_stat = STATUS_TOO_MANY_FIELDS;
454
476
  return;
455
477
  }
456
- m_impl->tableDefs[TableDef->id] = (tabledef*)malloc(USHRT_MAX /* sizeof(tabledef) */);
478
+ m_impl->tableDefs[TableDef->id] =
479
+ (tabledef*)malloc(USHRT_MAX /* sizeof(tabledef) */);
457
480
  if (m_impl->tableDefs[TableDef->id] == NULL)
458
481
  {
459
482
  m_stat = STATUS_CANT_ALLOC_MEMORY;
@@ -468,7 +491,7 @@ void dbdef::insertTable(tabledef* TableDef)
468
491
  m_impl->tableCount = TableDef->id;
469
492
  return;
470
493
  }
471
- TableDef->formatVersion = 1;
494
+ TableDef->formatVersion = FORMAT_VERSON_CURRENT;
472
495
  if (m_impl->deftype == TYPE_SCHEMA_DDF)
473
496
  saveDDF(TableDef->id, 2);
474
497
  else
@@ -478,6 +501,8 @@ void dbdef::insertTable(tabledef* TableDef)
478
501
 
479
502
  memcpy(m_keybuf, &TableDef->id, 2);
480
503
  m_buflen = sizeof(tabledef);
504
+ if (isUseTransactd())
505
+ m_impl->bdf->varSize = m_buflen - 4;
481
506
  insert();
482
507
  m_pdata = m_impl->bdf;
483
508
  m_buflen = m_impl->bdfLen;
@@ -511,7 +536,6 @@ bool dbdef::resizeAt(short TableIndex, bool key)
511
536
  memcpy(p, def, totalDefLength(TableIndex));
512
537
  free(def);
513
538
  m_impl->tableDefs[TableIndex] = def = (tabledef*)p;
514
-
515
539
  }
516
540
  else
517
541
  {
@@ -530,13 +554,12 @@ keydef* dbdef::insertKey(short TableIndex, short InsertIndex)
530
554
  if (resizeAt(TableIndex, true) == false)
531
555
  return NULL;
532
556
 
533
-
534
557
  if (InsertIndex < tableDefs(TableIndex)->keyCount)
535
558
  {
536
559
  memmove(&tableDefs(TableIndex)->keyDefs[InsertIndex + 1],
537
- &tableDefs(TableIndex)->keyDefs[InsertIndex],
538
- totalDefLength(TableIndex) + (char*)tableDefs(TableIndex) -
539
- (char*)&(tableDefs(TableIndex)->keyDefs[InsertIndex]));
560
+ &tableDefs(TableIndex)->keyDefs[InsertIndex],
561
+ totalDefLength(TableIndex) + (char*)tableDefs(TableIndex) -
562
+ (char*)&(tableDefs(TableIndex)->keyDefs[InsertIndex]));
540
563
  }
541
564
  tableDefs(TableIndex)->keyCount++;
542
565
  memset(&(tableDefs(TableIndex)->keyDefs[InsertIndex]), 0, sizeof(keydef));
@@ -557,8 +580,10 @@ fielddef* dbdef::insertField(short TableIndex, short InsertIndex)
557
580
  if ((InsertIndex < td->fieldCount) || (td->keyCount > 0))
558
581
  {
559
582
 
560
- memmove(&(td->fieldDefs[InsertIndex + 1]), &(td->fieldDefs[InsertIndex]),
561
- totalDefLength(TableIndex) + (char*)td - (char*)&(td->fieldDefs[InsertIndex]));
583
+ memmove(&(td->fieldDefs[InsertIndex + 1]),
584
+ &(td->fieldDefs[InsertIndex]),
585
+ totalDefLength(TableIndex) + (char*)td -
586
+ (char*)&(td->fieldDefs[InsertIndex]));
562
587
  }
563
588
  td->fieldCount++;
564
589
  td->keyDefs = getKeyDef(td);
@@ -567,61 +592,85 @@ fielddef* dbdef::insertField(short TableIndex, short InsertIndex)
567
592
  setRecordLen(TableIndex);
568
593
  fielddef* fd = &(td->fieldDefs[InsertIndex]);
569
594
  fd->setCharsetIndex(td->charsetIndex);
595
+ fd->setSchemaCodePage(td->schemaCodePage);
570
596
  return fd;
571
597
  }
572
598
 
573
599
  int dbdef::totalDefLength(short TableIndex)
574
600
  {
575
- return (int)(sizeof(tabledef) + (sizeof(fielddef) * tableDefs(TableIndex)->fieldCount) +
576
- (sizeof(keydef) * tableDefs(TableIndex)->keyCount));
601
+ tabledef* td = tableDefs(TableIndex);
602
+ int len = (int)(sizeof(tabledef) + (sizeof(fielddef) * td->fieldCount) +
603
+ (sizeof(keydef) * td->keyCount));
604
+ if (isUseTransactd())
605
+ td->varSize = len - 4;
606
+ return len;
577
607
  }
578
608
 
579
- inline fielddef_t_my& dbdef::convert(fielddef_t_my& fd_my, const fielddef_t_pv& fd_pv)
609
+ inline fielddef_t_my& dbdef::convert(fielddef_t_my& fd_my,
610
+ const fielddef_t_pv& fd_pv)
580
611
  {
581
- memset(&fd_my, 0, sizeof(fd_my));
582
- strcpy(fd_my.m_name, fd_pv.m_name);
583
- void* dest = (char*)&fd_my + sizeof(fd_my.m_name);
584
- const void* src = (char*)&fd_pv + sizeof(fd_pv.m_name);
585
- size_t size = sizeof(fd_my) - sizeof(fd_my.m_name);
586
- memcpy(dest, src, size);
587
- return fd_my;
612
+ memset(&fd_my, 0, sizeof(fd_my));
613
+ strcpy(fd_my.m_name, fd_pv.m_name);
614
+ void* dest = (char*)&fd_my + sizeof(fd_my.m_name);
615
+ const void* src = (char*)&fd_pv + sizeof(fd_pv.m_name);
616
+ size_t size = sizeof(fd_my) - sizeof(fd_my.m_name);
617
+ memcpy(dest, src, size);
618
+ return fd_my;
588
619
  }
589
620
 
590
- size_t getNewVersionSize(tabledef* src)
621
+ inline int fixVariableLenBug(bool isUseTransactd, tabledef* src, size_t size)
591
622
  {
592
- return src->fieldCount * sizeof(fielddef) + sizeof(tabledef)
593
- + src->keyCount * sizeof(keydef)+1;
623
+ if (isUseTransactd)
624
+ { // A Transactd server format changed to nosupport FIXED_PLUS_VARIABLELEN
625
+ if (src->pageSize + 4 == (int)size)
626
+ { // This is a chagned server
627
+ if (src->preAlloc &&
628
+ ((src->preAlloc % 512 == 0) || (src->fieldCount > 255) ||
629
+ (src->keyCount > 127) || (src->fieldCount == 0)))
630
+ {
631
+ // memmove(((char*)src)+4, ((char*)src)+6, src->pageSize-2);
632
+ memmove(((char*)src) + 2, ((char*)src) + 4, src->pageSize);
633
+ size -= 2;
634
+ }
635
+ }
636
+ }
637
+ return (int)size;
638
+ }
594
639
 
640
+ size_t getNewVersionSize(tabledef* src)
641
+ {
642
+ return src->fieldCount * sizeof(fielddef) + sizeof(tabledef) +
643
+ src->keyCount * sizeof(keydef) + 1;
595
644
  }
596
645
 
597
646
  void dbdef::tableDefCopy(tabledef* dest, tabledef* src, size_t size)
598
647
  {
599
- if (src->formatVersion == 0)
648
+
649
+ if (src->formatVersion == FORMAT_VERSON_BTRV_DEF)
600
650
  {
601
651
  size_t len = 0;
602
652
  memcpy(dest, src, sizeof(tabledef));
603
653
  len += sizeof(tabledef);
604
654
  fielddef_t_my* fd = (fielddef_t_my*)dbdef::getFieldDef(dest);
605
655
  fielddef_t_pv* src_fd = (fielddef_t_pv*)dbdef::getFieldDef(src);
606
- for (int i=0;i<dest->fieldCount;++i)
656
+ for (int i = 0; i < dest->fieldCount; ++i)
607
657
  {
608
- convert(*fd , *src_fd);
658
+ convert(*fd, *src_fd);
609
659
  len += sizeof(fielddef_t_pv);
610
660
  ++fd;
611
661
  ++src_fd;
612
662
  }
613
663
  memcpy(fd, src_fd, size - len);
614
- dest->formatVersion = 1;
664
+ dest->formatVersion = FORMAT_VERSON_CURRENT;
615
665
  }
616
666
  else
617
667
  memcpy(dest, src, size);
618
-
619
668
  }
620
669
 
621
670
  tabledef** dbdef::tableDefPtr(int index)
622
671
  {
623
- tableDefs(index);
624
- return &m_impl->tableDefs[index];
672
+ tableDefs(index);
673
+ return &m_impl->tableDefs[index];
625
674
  }
626
675
 
627
676
  #pragma warn -8004
@@ -664,8 +713,11 @@ tabledef* dbdef::tableDefs(int index)
664
713
  m_stat = 0;
665
714
  return NULL;
666
715
  }
716
+ m_datalen =
717
+ fixVariableLenBug(isUseTransactd(), (tabledef*)m_pdata, m_datalen);
667
718
 
668
- m_impl->tableDefs[index] = def = (tabledef*)malloc(getNewVersionSize((tabledef*)m_pdata));
719
+ m_impl->tableDefs[index] = def =
720
+ (tabledef*)malloc(getNewVersionSize((tabledef*)m_pdata));
669
721
 
670
722
  if (def == NULL)
671
723
  {
@@ -675,11 +727,9 @@ tabledef* dbdef::tableDefs(int index)
675
727
  tableDefCopy(def, (tabledef*)m_pdata, m_datalen);
676
728
  def->fieldDefs = getFieldDef(def);
677
729
  def->keyDefs = getKeyDef(def);
678
- def->autoIncExSpace = ((database*)nsdb())->defaultAutoIncSpace();
730
+ def->autoIncExSpace = ((database*)nsdb())->defaultAutoIncSpace();
679
731
 
680
732
  setCodePage(def);
681
-
682
-
683
733
  }
684
734
  else if (def == (tabledef*)-1)
685
735
  return NULL;
@@ -701,7 +751,7 @@ void dbdef::doOpen(const _TCHAR* FullPath, char_td mode, const _TCHAR* OnerName)
701
751
  return;
702
752
  }
703
753
 
704
- //version check
754
+ // version check
705
755
  m_impl->version[7] = '0';
706
756
  nstable::doOpen(FullPath, mode, m_impl->version);
707
757
  if (m_stat == STATUS_INVALID_OWNERNAME)
@@ -753,7 +803,7 @@ void dbdef::create(const _TCHAR* fullpath)
753
803
  createDDF(fullpath);
754
804
  return;
755
805
  }
756
- fileSpec *fs;
806
+ fileSpec* fs;
757
807
 
758
808
  fs = (fileSpec*)malloc(512);
759
809
  memset(fs, 512, 0x00);
@@ -762,17 +812,17 @@ void dbdef::create(const _TCHAR* fullpath)
762
812
  fs->indexCount = 1;
763
813
  fs->fileFlag.all = 1; // valiable length
764
814
  fs->preAlloc = 10;
765
- fs->keySpecs[0].keyPos = 1; // id
766
- fs->keySpecs[0].keyLen = 2; // short
815
+ fs->keySpecs[0].keyPos = 1; // id
816
+ fs->keySpecs[0].keyLen = 2; // short
767
817
  fs->keySpecs[0].keyFlag.all = 258; // changeable and extended key type
768
- fs->keySpecs[0].keyType = 1; // Integer
818
+ fs->keySpecs[0].keyType = 1; // Integer
769
819
  nsdb()->createTable(fs, 412, fullpath, 0);
770
820
  free(fs);
771
821
  if (nsdb()->stat() == 0)
772
822
  { // set owner name
773
823
  ownerNameSetter* bao = new ownerNameSetter(nsdb());
774
824
  bao->open(fullpath);
775
- bao->setOwnerName((const _TCHAR*) BDFFORMAT_VERSION);
825
+ bao->setOwnerName((const _TCHAR*)BDFFORMAT_VERSION);
776
826
  bao->release();
777
827
  }
778
828
  m_stat = nsdb()->stat();
@@ -788,13 +838,13 @@ ushort_td dbdef::getRecordLen(short TableIndex)
788
838
  {
789
839
  ushort_td ret = 0;
790
840
  short i;
791
- for (i = 0; i < tableDefs(TableIndex)->fieldCount; i++)
792
- ret += tableDefs(TableIndex)->fieldDefs[i].len + tableDefs(TableIndex)
793
- ->fieldDefs[i].varLenBytes();
841
+ tabledef* td = tableDefs(TableIndex);
842
+ for (i = 0; i < td->fieldCount; i++)
843
+ ret += td->fieldDefs[i].len + td->fieldDefs[i].varLenBytes();
794
844
  return ret;
795
845
  }
796
846
 
797
- ushort_td dbdef::getFieldPosition(tabledef *TableDef, short FieldNum)
847
+ ushort_td dbdef::getFieldPosition(tabledef* TableDef, short FieldNum)
798
848
  {
799
849
  short i;
800
850
  ushort_td pos = 1;
@@ -809,7 +859,7 @@ void dbdef::getFileSpec(fileSpec* fs, short TableIndex)
809
859
  keydef* KeyDef;
810
860
  short i, j, k = 0;
811
861
  short FieldNum;
812
- tabledef *TableDef = tableDefs(TableIndex);
862
+ tabledef* TableDef = tableDefs(TableIndex);
813
863
  fs->recLen = TableDef->fixedRecordLen;
814
864
  fs->pageSize = TableDef->pageSize;
815
865
  fs->indexCount = TableDef->keyCount;
@@ -843,7 +893,8 @@ void dbdef::getFileSpec(fileSpec* fs, short TableIndex)
843
893
  if (fs->fileFlag.bitA == true)
844
894
  ks->keyNo = KeyDef->keyNumber;
845
895
  else
846
- ks->keyNo = 0; ;
896
+ ks->keyNo = 0;
897
+ ;
847
898
  ks->acsNo = 0;
848
899
  k++;
849
900
  }
@@ -888,21 +939,23 @@ void dbdef::renumberTable(short OldIndex, short NewIndex)
888
939
  }
889
940
  }
890
941
 
891
- void dbdef::cacheFieldPos(tabledef *TableDef)
942
+ void dbdef::cacheFieldPos(tabledef* TableDef)
892
943
  {
893
944
 
894
945
  short i;
895
946
  for (i = 0; i < TableDef->fieldCount; i++)
896
- TableDef->fieldDefs[i].pos = (ushort_td)(getFieldPosition(TableDef, i) - 1);
947
+ TableDef->fieldDefs[i].pos =
948
+ (ushort_td)(getFieldPosition(TableDef, i) - 1);
897
949
  }
898
950
 
899
951
  short dbdef::fieldNumByViewNum(short TableIndex, short index)
900
952
  {
901
953
  short i;
902
- tabledef *TableDef = tableDefs(TableIndex);
954
+ tabledef* TableDef = tableDefs(TableIndex);
903
955
  for (i = 0; i < TableDef->fieldCount; i++)
904
956
  {
905
- if ((TableDef->fieldDefs[i].viewNum == index) && (TableDef->fieldDefs[i].enableFlags.bit0))
957
+ if ((TableDef->fieldDefs[i].viewNum == index) &&
958
+ (TableDef->fieldDefs[i].enableFlags.bit0))
906
959
  return i;
907
960
  }
908
961
  return -1;
@@ -911,7 +964,7 @@ short dbdef::fieldNumByViewNum(short TableIndex, short index)
911
964
  short dbdef::findKeynumByFieldNum(short TableIndex, short index)
912
965
  {
913
966
  short i;
914
- tabledef *TableDef = tableDefs(TableIndex);
967
+ tabledef* TableDef = tableDefs(TableIndex);
915
968
 
916
969
  for (i = 0; i < TableDef->keyCount; i++)
917
970
  {
@@ -961,64 +1014,81 @@ uint_td dbdef::fieldValidLength(eFieldQuery query, uchar_td FieldType)
961
1014
  switch (FieldType)
962
1015
  {
963
1016
  case ft_string:
964
- case ft_mychar: minlen = 1;
1017
+ case ft_mychar:
1018
+ minlen = 1;
965
1019
  maxlen = 255;
966
1020
  defaultlen = 1;
967
1021
  break;
968
1022
  case ft_lstring:
969
- case ft_zstring: minlen = 2;
1023
+ case ft_zstring:
1024
+ minlen = 2;
970
1025
  maxlen = 255;
971
1026
  defaultlen = 2;
972
1027
  break;
973
1028
  case ft_myvarchar:
974
- case ft_myvarbinary: minlen = 1;
975
- maxlen = 60000;
1029
+ case ft_myvarbinary:
1030
+ minlen = 1;
1031
+ maxlen = 65535;
976
1032
  defaultlen = 2;
977
1033
  break;
978
1034
  case ft_myblob:
979
- case ft_mytext: minlen = 9;
1035
+ case ft_mytext:
1036
+ minlen = 9;
980
1037
  maxlen = 12;
981
1038
  defaultlen = 1;
982
1039
  break;
983
1040
  case ft_mywchar:
984
- case ft_wstring: minlen = 2;
1041
+ case ft_wstring:
1042
+ minlen = 2;
985
1043
  maxlen = 255;
986
1044
  defaultlen = 2;
987
1045
  break;
988
- case ft_wzstring: minlen = 3;
1046
+ case ft_wzstring:
1047
+ minlen = 3;
989
1048
  maxlen = 255;
990
1049
  defaultlen = 2;
991
1050
  break;
992
1051
  case ft_mywvarchar:
993
- case ft_mywvarbinary: minlen = 1;
994
- maxlen = 60000;
1052
+ case ft_mywvarbinary:
1053
+ minlen = 1;
1054
+ maxlen = 65535;
995
1055
  defaultlen = 3;
996
1056
  break;
997
-
998
- case ft_mydate: minlen = 3;
1057
+ case ft_myfixedbinary:
1058
+ minlen = 256;
1059
+ maxlen = 60000;
1060
+ defaultlen = 1024;
1061
+ break;
1062
+ case ft_mydate:
1063
+ minlen = 3;
999
1064
  maxlen = 3;
1000
1065
  defaultlen = 3;
1001
1066
  break;
1002
- case ft_integer: minlen = 1;
1067
+ case ft_integer:
1068
+ minlen = 1;
1003
1069
  maxlen = 8;
1004
1070
  defaultlen = 2;
1005
1071
  break;
1006
1072
  case ft_bfloat:
1007
- case ft_float: minlen = 4;
1073
+ case ft_float:
1074
+ minlen = 4;
1008
1075
  maxlen = 8;
1009
1076
  defaultlen = 4;
1010
1077
  break;
1011
1078
  case ft_date:
1012
- case ft_time: minlen = 4;
1079
+ case ft_time:
1080
+ minlen = 4;
1013
1081
  maxlen = 4;
1014
1082
  defaultlen = 4;
1015
1083
  break;
1016
- case ft_mytime: minlen = 3;
1084
+ case ft_mytime:
1085
+ minlen = 3;
1017
1086
  maxlen = 6;
1018
1087
  defaultlen = 4;
1019
1088
  break;
1020
1089
  case ft_money:
1021
- case ft_decimal: minlen = 1;
1090
+ case ft_decimal:
1091
+ minlen = 1;
1022
1092
  maxlen = 10;
1023
1093
  defaultlen = 6;
1024
1094
  if (FieldType == 5)
@@ -1026,13 +1096,15 @@ uint_td dbdef::fieldValidLength(eFieldQuery query, uchar_td FieldType)
1026
1096
  else
1027
1097
  dec = 2;
1028
1098
  break;
1029
- case ft_logical: minlen = 1;
1099
+ case ft_logical:
1100
+ minlen = 1;
1030
1101
  maxlen = 2;
1031
1102
  defaultlen = 2;
1032
1103
  break;
1033
1104
  case ft_numericsts:
1034
1105
  case ft_numericsa:
1035
- case ft_numeric: minlen = 1;
1106
+ case ft_numeric:
1107
+ minlen = 1;
1036
1108
  maxlen = 15;
1037
1109
  defaultlen = 6;
1038
1110
  dec = 0;
@@ -1040,72 +1112,84 @@ uint_td dbdef::fieldValidLength(eFieldQuery query, uchar_td FieldType)
1040
1112
  minlen = 2;
1041
1113
  break;
1042
1114
 
1043
- case ft_note: minlen = 2;
1115
+ case ft_note:
1116
+ minlen = 2;
1044
1117
  maxlen = 32761;
1045
1118
  defaultlen = 2;
1046
1119
  break;
1047
- case ft_lvar: minlen = 5;
1120
+ case ft_lvar:
1121
+ minlen = 5;
1048
1122
  maxlen = 32761;
1049
1123
  defaultlen = 5;
1050
1124
  break;
1051
- case ft_uinteger: minlen = 1;
1125
+ case ft_uinteger:
1126
+ minlen = 1;
1052
1127
  maxlen = 8;
1053
1128
  defaultlen = 2;
1054
1129
  break;
1055
1130
  case ft_autoIncUnsigned:
1056
- case ft_autoinc: minlen = 2;
1131
+ case ft_autoinc:
1132
+ minlen = 2;
1057
1133
  maxlen = 8;
1058
1134
  defaultlen = 4;
1059
1135
  break;
1060
- case ft_bit: minlen = 1;
1136
+ case ft_bit:
1137
+ minlen = 1;
1061
1138
  maxlen = 1;
1062
1139
  defaultlen = 1;
1063
1140
  break;
1064
1141
  case ft_timestamp:
1065
- case ft_currency: minlen = 8;
1142
+ case ft_currency:
1143
+ minlen = 8;
1066
1144
  maxlen = 8;
1067
1145
  defaultlen = 8;
1068
1146
  break;
1069
- case ft_mytimestamp: minlen = 4;
1147
+ case ft_mytimestamp:
1148
+ minlen = 4;
1070
1149
  maxlen = 7;
1071
1150
  defaultlen = 7;
1072
1151
  break;
1073
- case ft_mydatetime: minlen = 5;
1152
+ case ft_mydatetime:
1153
+ minlen = 5;
1074
1154
  maxlen = 8;
1075
1155
  defaultlen = 5;
1076
1156
  break;
1077
1157
 
1078
- case ft_nullindicator: minlen = 0;
1158
+ case ft_nullindicator:
1159
+ minlen = 0;
1079
1160
  maxlen = 0;
1080
1161
  defaultlen = 0;
1081
1162
  }
1082
1163
  switch (query)
1083
1164
  {
1084
- case eMinlen: return minlen;
1085
- case eMaxlen: return maxlen;
1086
- case eDefaultlen: return defaultlen;
1087
- case eDecimals: return dec;
1165
+ case eMinlen:
1166
+ return minlen;
1167
+ case eMaxlen:
1168
+ return maxlen;
1169
+ case eDefaultlen:
1170
+ return defaultlen;
1171
+ case eDecimals:
1172
+ return dec;
1088
1173
  }
1089
1174
  return 0;
1090
-
1091
1175
  }
1092
1176
 
1093
1177
  bool dbdef::validLen(uchar_td FieldType, uint_td FieldLen)
1094
1178
  { // return valid length of field by field type.
1095
- if ((FieldLen >= fieldValidLength(eMinlen, FieldType)) && (FieldLen <= fieldValidLength(eMaxlen,
1096
- FieldType)))
1179
+ if ((FieldLen >= fieldValidLength(eMinlen, FieldType)) &&
1180
+ (FieldLen <= fieldValidLength(eMaxlen, FieldType)))
1097
1181
  {
1098
1182
  if ((FieldType == ft_integer) || (FieldType == ft_uinteger))
1099
1183
  {
1100
- if ((FieldLen == 1) || (FieldLen == 2) || (FieldLen == 4) || (FieldLen == 8))
1184
+ if ((FieldLen == 1) || (FieldLen == 2) || (FieldLen == 4) ||
1185
+ (FieldLen == 8))
1101
1186
  return true;
1102
1187
  else
1103
1188
  return false;
1104
-
1105
1189
  }
1106
1190
  else if ((FieldType == ft_autoinc) || (FieldType == ft_autoIncUnsigned))
1107
1191
  {
1108
- if ((FieldLen == 2) || (FieldLen == 4)|| (FieldLen == 8))
1192
+ if ((FieldLen == 2) || (FieldLen == 4) || (FieldLen == 8))
1109
1193
  return true;
1110
1194
  else
1111
1195
  return false;
@@ -1125,8 +1209,8 @@ bool dbdef::validLen(uchar_td FieldType, uint_td FieldLen)
1125
1209
 
1126
1210
  bool dbdef::isPassKey(uchar_td FieldType)
1127
1211
  {
1128
- if (FieldType == ft_bit)
1129
- return false;
1212
+ if (FieldType == ft_autoIncUnsigned)
1213
+ return true;
1130
1214
  if (FieldType == ft_wstring)
1131
1215
  return true;
1132
1216
  if (FieldType == ft_wzstring)
@@ -1155,7 +1239,11 @@ bool dbdef::isPassKey(uchar_td FieldType)
1155
1239
  return true;
1156
1240
  if (FieldType == ft_mydatetime)
1157
1241
  return true;
1242
+ if (FieldType == ft_myfixedbinary)
1243
+ return false;
1158
1244
 
1245
+ if (FieldType == ft_bit)
1246
+ return false;
1159
1247
  if (FieldType > ft_numericsts)
1160
1248
  return false;
1161
1249
  if (FieldType == ft_note)
@@ -1165,7 +1253,10 @@ bool dbdef::isPassKey(uchar_td FieldType)
1165
1253
  return true;
1166
1254
  }
1167
1255
 
1168
- void dbdef::autoMakeSchema() {tdap(TD_AUTOMEKE_SCHEMA);}
1256
+ void dbdef::autoMakeSchema()
1257
+ {
1258
+ tdap(TD_AUTOMEKE_SCHEMA);
1259
+ }
1169
1260
 
1170
1261
  void dbdef::createDDF(const _TCHAR* fullpath)
1171
1262
  {
@@ -1201,7 +1292,6 @@ void dbdef::createDDF(const _TCHAR* fullpath)
1201
1292
  fd->release();
1202
1293
  if (id)
1203
1294
  id->release();
1204
-
1205
1295
  }
1206
1296
 
1207
1297
  void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
@@ -1213,7 +1303,7 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1213
1303
  ushort_td keyid;
1214
1304
  ushort_td segid;
1215
1305
  ushort_td pos;
1216
- const _TUCHAR* own[3];
1306
+ const _TCHAR* own[3];
1217
1307
 
1218
1308
  m_stat = STATUS_SUCCESS;
1219
1309
  tabledef* TableDef;
@@ -1228,9 +1318,9 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1228
1318
  {
1229
1319
  if (m_impl->userName[0] != 0x00)
1230
1320
  {
1231
- own[0] = (const _TUCHAR*)m_impl->userName;
1232
- own[1] = (const _TUCHAR*)m_impl->userName;
1233
- own[2] = (const _TUCHAR*)m_impl->userName;
1321
+ own[0] = (const _TCHAR*)m_impl->userName;
1322
+ own[1] = (const _TCHAR*)m_impl->userName;
1323
+ own[2] = (const _TCHAR*)m_impl->userName;
1234
1324
  }
1235
1325
  else
1236
1326
  {
@@ -1238,11 +1328,14 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1238
1328
  own[1] = ow1;
1239
1329
  own[2] = ow2;
1240
1330
  }
1241
- tb->open(((database*)nsdb())->rootDir(), (char_td)Mode, (const _TCHAR*) own[0]);
1331
+ tb->open(((database*)nsdb())->rootDir(), (char_td)Mode,
1332
+ (const _TCHAR*)own[0]);
1242
1333
  chOpen += tb->stat();
1243
- fd->open(((database*)nsdb())->rootDir(), (char_td)Mode, (const _TCHAR*)own[1]);
1334
+ fd->open(((database*)nsdb())->rootDir(), (char_td)Mode,
1335
+ (const _TCHAR*)own[1]);
1244
1336
  chOpen += fd->stat();
1245
- id->open(((database*)nsdb())->rootDir(), (char_td)Mode, (const _TCHAR*)own[2]);
1337
+ id->open(((database*)nsdb())->rootDir(), (char_td)Mode,
1338
+ (const _TCHAR*)own[2]);
1246
1339
  chOpen += id->stat();
1247
1340
  if (chOpen)
1248
1341
  {
@@ -1253,11 +1346,10 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1253
1346
  return;
1254
1347
  }
1255
1348
 
1256
- //erase all records
1349
+ // erase all records
1257
1350
  nsdb()->beginTrn(200);
1258
1351
  tb->setKeyNum(0);
1259
1352
 
1260
-
1261
1353
  tb->setStat(0);
1262
1354
  fd->setStat(0);
1263
1355
  id->setStat(0);
@@ -1272,7 +1364,7 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1272
1364
  strcpy(tb->tablename, TableDef->tableNameA());
1273
1365
  strcpy(tb->filename, TableDef->fileNameA());
1274
1366
  if (forPsqlDdf)
1275
- tb->flag = 0;//PSQL are reading flags from table files.
1367
+ tb->flag = 0; // PSQL are reading flags from table files.
1276
1368
  else
1277
1369
  tb->flag = TableDef->flags.all;
1278
1370
  if (tb->stat() == STATUS_SUCCESS)
@@ -1303,7 +1395,7 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1303
1395
  {
1304
1396
  FieldDef = &TableDef->fieldDefs[fdid];
1305
1397
  if (FieldDef->ddfid == 0)
1306
- FieldDef->ddfid = getDDFNewFieldIndex();
1398
+ FieldDef->ddfid = getDDFNewFieldIndex();
1307
1399
  fd->fieldid = FieldDef->ddfid;
1308
1400
  fd->fileid = tb->id;
1309
1401
  strcpy(fd->name, FieldDef->nameA());
@@ -1317,7 +1409,7 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1317
1409
  fd->flag = 0;
1318
1410
  fd->insert();
1319
1411
  if (fd->stat())
1320
- goto JmpErr;
1412
+ goto JmpErr;
1321
1413
  }
1322
1414
  }
1323
1415
  // delete keys.
@@ -1338,12 +1430,15 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1338
1430
  id->keyid = keyid;
1339
1431
  for (segid = 0; segid < KeyDef->segmentCount; segid++)
1340
1432
  {
1341
- id->fieldid = TableDef->fieldDefs[KeyDef->segments[segid].fieldNum].ddfid;
1342
- id->segmentnum = segid;
1343
- id->flag = KeyDef->segments[segid].flags.all;
1344
- id->insert();
1345
- if (id->stat())
1346
- goto JmpErr;
1433
+ id->fieldid =
1434
+ TableDef
1435
+ ->fieldDefs[KeyDef->segments[segid].fieldNum]
1436
+ .ddfid;
1437
+ id->segmentnum = segid;
1438
+ id->flag = KeyDef->segments[segid].flags.all;
1439
+ id->insert();
1440
+ if (id->stat())
1441
+ goto JmpErr;
1347
1442
  }
1348
1443
  }
1349
1444
  }
@@ -1363,7 +1458,6 @@ void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1363
1458
  fd->release();
1364
1459
  if (id)
1365
1460
  id->release();
1366
-
1367
1461
  }
1368
1462
 
1369
1463
  void dbdef::openDdf(const _TCHAR* dir, short Mode, const _TCHAR* OwnerName)
@@ -1419,7 +1513,7 @@ void dbdef::openDdf(const _TCHAR* dir, short Mode, const _TCHAR* OwnerName)
1419
1513
  return;
1420
1514
  }
1421
1515
 
1422
- tb->setKeyNum(1);
1516
+ tb->setKeyNum(0);
1423
1517
  tb->seekFirst();
1424
1518
  while (tb->stat() == 0)
1425
1519
  { // Inser table
@@ -1439,7 +1533,6 @@ void dbdef::openDdf(const _TCHAR* dir, short Mode, const _TCHAR* OwnerName)
1439
1533
  if (m_stat != 0)
1440
1534
  break;
1441
1535
 
1442
-
1443
1536
  fd->setKeyNum(1);
1444
1537
  fd->fileid = tb->id;
1445
1538
  fd->seekGreater(true);
@@ -1450,9 +1543,11 @@ void dbdef::openDdf(const _TCHAR* dir, short Mode, const _TCHAR* OwnerName)
1450
1543
 
1451
1544
  if (fd->type != ft_nullindicator)
1452
1545
  {
1453
- for (FieldIndex = 0; FieldIndex < tableDefs(tbid)->fieldCount; FieldIndex++)
1546
+ for (FieldIndex = 0;
1547
+ FieldIndex < tableDefs(tbid)->fieldCount; FieldIndex++)
1454
1548
  {
1455
- if (tableDefs(tbid)->fieldDefs[FieldIndex].pos > fd->pos)
1549
+ if (tableDefs(tbid)->fieldDefs[FieldIndex].pos >
1550
+ fd->pos)
1456
1551
  break;
1457
1552
  }
1458
1553
  FieldDef = insertField(tbid, FieldIndex);
@@ -1475,8 +1570,10 @@ void dbdef::openDdf(const _TCHAR* dir, short Mode, const _TCHAR* OwnerName)
1475
1570
 
1476
1571
  KeyDef = &(tableDefs(tbid)->keyDefs[id->keyid]);
1477
1572
  if (KeyDef->segmentCount < id->segmentnum + 1)
1478
- KeyDef->segmentCount = (uchar_td)(id->segmentnum + 1);
1479
- KeyDef->segments[id->segmentnum].fieldNum = (uchar_td)FieldIndex;
1573
+ KeyDef->segmentCount =
1574
+ (uchar_td)(id->segmentnum + 1);
1575
+ KeyDef->segments[id->segmentnum].fieldNum =
1576
+ (uchar_td)FieldIndex;
1480
1577
  KeyDef->segments[id->segmentnum].flags.all = id->flag;
1481
1578
  id->seekNext();
1482
1579
  }
@@ -1504,18 +1601,18 @@ void dbdef::openDdf(const _TCHAR* dir, short Mode, const _TCHAR* OwnerName)
1504
1601
  }
1505
1602
  }
1506
1603
 
1507
-
1508
1604
  for (short i = tableDefs(tbid)->fieldCount - 1; i >= 0; i--)
1509
1605
  {
1510
1606
  short pos = tableDefs(tbid)->fieldDefs[i].pos;
1511
1607
  short startPos = 0;
1512
1608
  if (i > 0)
1513
1609
  startPos = tableDefs(tbid)->fieldDefs[i - 1].pos +
1514
- tableDefs(tbid)->fieldDefs[i - 1].len;
1610
+ tableDefs(tbid)->fieldDefs[i - 1].len;
1515
1611
  if (tableDefs(tbid)->fieldDefs[i].len && (startPos != pos))
1516
1612
  {
1517
1613
  FieldDef = insertField(tbid, i);
1518
- sprintf_s((char*)FieldDef->nameA(), FIELD_NAME_SIZE, "NIS%d", i + 1);
1614
+ sprintf_s((char*)FieldDef->nameA(), FIELD_NAME_SIZE,
1615
+ "NIS%d", i + 1);
1519
1616
 
1520
1617
  FieldDef->type = ft_nullindicator;
1521
1618
  FieldDef->len = 1;
@@ -1569,7 +1666,7 @@ ushort_td dbdef::getDDFNewFieldIndex()
1569
1666
  for (j = 0; j < tableDefs(i)->fieldCount; j++)
1570
1667
  {
1571
1668
  if (tableDefs(i)->fieldDefs[j].ddfid > m_impl->maxid)
1572
- m_impl->maxid = tableDefs(i)->fieldDefs[j].ddfid;
1669
+ m_impl->maxid = tableDefs(i)->fieldDefs[j].ddfid;
1573
1670
  }
1574
1671
  }
1575
1672
  }
@@ -1596,9 +1693,10 @@ void dbdef::pushBackup(short TableIndex)
1596
1693
 
1597
1694
  blen = totalDefLength(TableIndex);
1598
1695
  if (!tableDefs(TABLE_NUM_TMP))
1599
- m_impl->tableDefs[TABLE_NUM_TMP] = (tabledef*) malloc(blen);
1696
+ m_impl->tableDefs[TABLE_NUM_TMP] = (tabledef*)malloc(blen);
1600
1697
  else
1601
- m_impl->tableDefs[TABLE_NUM_TMP] = (tabledef*)realloc(tableDefs(TABLE_NUM_TMP), blen);
1698
+ m_impl->tableDefs[TABLE_NUM_TMP] =
1699
+ (tabledef*)realloc(tableDefs(TABLE_NUM_TMP), blen);
1602
1700
  if (!tableDefs(TABLE_NUM_TMP))
1603
1701
  {
1604
1702
  m_stat = STATUS_CANT_ALLOC_MEMORY;
@@ -1618,30 +1716,45 @@ bool dbdef::compAsBackup(short TableIndex)
1618
1716
  int len2 = totalDefLength(TableIndex);
1619
1717
  if (len != len2)
1620
1718
  return true;
1621
- else if (memcmp(tableDefs(TABLE_NUM_TMP), tableDefs(TableIndex), len) != 0)
1719
+ tabledef* tds = tableDefs(TableIndex);
1720
+ tabledef* tdo = tableDefs(TABLE_NUM_TMP);
1721
+
1722
+ if (memcmp(tds, tdo, ((char*)(&(tdo->fieldDefs))) - ((char*)tdo)))
1622
1723
  return true;
1724
+
1725
+ for (int i = 0; i < tds->fieldCount; i++)
1726
+ {
1727
+ if (memcmp(&tds->fieldDefs[i], &tdo->fieldDefs[i], sizeof(fielddef)))
1728
+ return true;
1729
+ }
1730
+ for (int i = 0; i < tds->keyCount; i++)
1731
+ {
1732
+ if (memcmp(&tds->keyDefs[i], &tdo->keyDefs[i], sizeof(keydef)))
1733
+ return true;
1734
+ }
1623
1735
  return false;
1624
1736
  }
1625
1737
 
1626
1738
  void dbdef::popBackup(short TableIndex)
1627
1739
  {
1628
1740
  int len = totalDefLength(TABLE_NUM_TMP);
1629
- m_impl->tableDefs[TableIndex] = (tabledef*)realloc(tableDefs(TableIndex), len);
1741
+ m_impl->tableDefs[TableIndex] =
1742
+ (tabledef*)realloc(tableDefs(TableIndex), len);
1630
1743
  memcpy(tableDefs(TableIndex), tableDefs(TABLE_NUM_TMP), len);
1631
1744
  tableDefs(TableIndex)->fieldDefs = getFieldDef(tableDefs(TableIndex));
1632
1745
  tableDefs(TableIndex)->keyDefs = getKeyDef(tableDefs(TableIndex));
1633
1746
 
1634
1747
  updateTableDef(TableIndex);
1635
1748
  }
1749
+
1636
1750
  void dbdef::reopen(char_td mode)
1637
1751
  {
1638
1752
  close();
1639
1753
  open(uri(), mode, NULL);
1640
1754
  }
1641
1755
 
1642
-
1643
- }// namespace client
1644
- }// namespace tdap
1645
- }// namespace protocol
1646
- }// namespace db
1647
- }// namespace bzs
1756
+ } // namespace client
1757
+ } // namespace tdap
1758
+ } // namespace protocol
1759
+ } // namespace db
1760
+ } // namespace bzs