transactd 1.2.0 → 2.0.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.
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
@@ -0,0 +1,763 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include "srcgen.h"
20
+ #include <iostream>
21
+ #include <fstream>
22
+ #include <boost/algorithm/string.hpp>
23
+
24
+ using namespace std;
25
+ #pragma package(smart_init)
26
+
27
+ #define LF "\n"
28
+ #define MAP_CLASS_SUFFIX "_map"
29
+
30
+ bool loadFromFile(const string& filename, string& reval)
31
+ {
32
+ ifstream ifs(filename.c_str());
33
+ if (ifs.fail())
34
+ {
35
+ cerr << "File not exist.\n";
36
+ return false;
37
+ }
38
+ string s;
39
+ while (getline(ifs, s))
40
+ {
41
+ if (s.size() && s[s.size() - 1] == '\r')
42
+ s.erase(s.size() - 1);
43
+ reval += s + LF;
44
+ }
45
+ return true;
46
+ }
47
+
48
+ bool saveToFile(const string& filename, const string& val)
49
+ {
50
+ ofstream ofs(filename.c_str());
51
+ if (ofs.fail())
52
+ {
53
+ cerr << "Output file is not created.\n";
54
+ return false;
55
+ }
56
+ ofs << val << LF;
57
+ return true;
58
+ }
59
+
60
+ string intReadMenbaName(fielddef* fd)
61
+ {
62
+ switch (fd->len)
63
+ {
64
+ case 1:
65
+ return "i8()";
66
+ case 2:
67
+ return "i16()";
68
+ case 3:
69
+ return "i()";
70
+ case 4:
71
+ return "i()";
72
+ }
73
+ return "i64()";
74
+ }
75
+
76
+ cppSrcGen::cppSrcGen(const tabledef* tabledef, conf_parmas& pm)
77
+ : m_tabledef(tabledef), m_pm(pm)
78
+ {
79
+ }
80
+
81
+ void cppSrcGen::replace(string& source, const char* convTgtStr,
82
+ const string& replaceStr)
83
+ {
84
+ size_t pos = 0;
85
+ while ((pos = source.find(convTgtStr, pos)) != string::npos)
86
+ {
87
+ source.replace(pos, strlen(convTgtStr), replaceStr);
88
+ pos += replaceStr.size();
89
+ }
90
+ }
91
+
92
+ string cppSrcGen::membaNameGet(string s)
93
+ {
94
+ char v[2] = { 0 };
95
+ if ((s.size() > 0) && (m_pm.setPrefix == "get"))
96
+ {
97
+ v[0] = s[0] - 32;
98
+ s.replace(0, 1, v);
99
+ }
100
+ return m_pm.getPrefix + s;
101
+ }
102
+
103
+ string cppSrcGen::membaNameSet(string s)
104
+ {
105
+ char v[2] = { 0 };
106
+
107
+ if ((s.size() > 0) && (m_pm.setPrefix == "set"))
108
+ {
109
+ v[0] = s[0] - 32;
110
+ s.replace(0, 1, v);
111
+ }
112
+ return m_pm.setPrefix + s;
113
+ }
114
+
115
+ string cppSrcGen::membaName(fielddef* fielddef)
116
+ {
117
+ string s = m_fnames.getName(fielddef->nameA());
118
+ char v[2] = { 0 };
119
+ if ((s.size() > 0) && ((s[0] >= 'A') && (s[0] <= 'Z')))
120
+ {
121
+ v[0] = s[0] + 32;
122
+ s.replace(0, 1, v);
123
+ }
124
+ return s;
125
+ }
126
+
127
+ string cppSrcGen::makeFdiMembaString()
128
+ {
129
+ string retVal;
130
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
131
+ {
132
+ fielddef* fd = &m_tabledef->fieldDefs[i];
133
+ retVal = retVal + "\tshort " + membaName(fd) + ";" LF;
134
+ }
135
+ return retVal;
136
+ }
137
+
138
+ int cppSrcGen::typeNum(int type)
139
+ {
140
+ int t = type;
141
+ if (t == ft_autoinc)
142
+ t = 1;
143
+ if (t == ft_autoIncUnsigned)
144
+ t = 1;
145
+ else if (t == ft_logical)
146
+ t = 1;
147
+ else if (t == ft_uinteger)
148
+ t = 1;
149
+ else if (t == ft_currency)
150
+ t = 1;
151
+ else if ((t == ft_note) || (t == ft_zstring) || (t == ft_wzstring) ||
152
+ (t == ft_myvarchar) || (t == ft_mywvarchar) ||
153
+ (t == ft_myvarbinary) || (t == ft_mywvarbinary) ||
154
+ (t == ft_mytext) || (t == ft_guid) || (t == ft_lstring))
155
+ t = 0;
156
+ else if (t == ft_float)
157
+ t = 2;
158
+ else if ((t == ft_date) || (t == ft_mydate))
159
+ t = 3;
160
+ else if ((t == ft_time) || (t == ft_mytime))
161
+ t = 4;
162
+ else if ((t == ft_datetime) || (t == ft_mydatetime))
163
+ t = 30;
164
+ else if ((t == ft_lvar) || (t == ft_blob) || (t == ft_myblob))
165
+ t = ft_lvar;
166
+ return t;
167
+ }
168
+
169
+ string cppSrcGen::typeName(int t, int len)
170
+ {
171
+ if ((t == 0) && (len == 1))
172
+ return "char";
173
+ else if (t == 0)
174
+ return "string";
175
+ else if ((t == 1) && (len == 4))
176
+ return "int";
177
+ else if ((t == 1) && (len == 2))
178
+ return "short";
179
+ else if ((t == 1) && (len == 1))
180
+ return "char";
181
+ else if ((t == 1) && (len == 8))
182
+ return "__int64";
183
+ else if ((t == 2) && (len == 4))
184
+ return "float";
185
+ else if ((t == 2) && (len == 8))
186
+ return "double";
187
+ else if (t == 3)
188
+ return "btrDate";
189
+ else if (t == 4)
190
+ return "btrTime";
191
+ return "";
192
+ }
193
+
194
+ const char* cppSrcGen::typeString(int type, int size)
195
+ {
196
+ switch (type)
197
+ {
198
+ case ft_string:
199
+ case ft_note:
200
+ case ft_mychar:
201
+ if (size == 1)
202
+ return "char";
203
+ return "_tstring";
204
+ case ft_wstring:
205
+ case ft_mywchar:
206
+ if (size == 2)
207
+ return "wchar_t";
208
+ return "_tstring";
209
+ case ft_autoinc:
210
+ case ft_integer:
211
+ if (size == 1)
212
+ return "char";
213
+ else if (size == 2)
214
+ return "short";
215
+ else if ((size == 3) || (size == 4))
216
+ return "int";
217
+ else if (size == 8)
218
+ return "__int64";
219
+ THROW_BZS_ERROR_WITH_MSG(_T("Invalid int size"));
220
+ case ft_currency:
221
+ case ft_float:
222
+ if (size == 4)
223
+ return "float";
224
+ else if (size == 8)
225
+ return "double";
226
+ THROW_BZS_ERROR_WITH_MSG(_T("Invalid float size"));
227
+ case ft_date:
228
+ case ft_mydate:
229
+ return "td::btrDate";
230
+ case ft_time:
231
+ case ft_mytime:
232
+ return "td::btrTime";
233
+ case ft_datetime:
234
+ case ft_timestamp:
235
+ return "td::btrDateTime";
236
+ case ft_logical:
237
+ return "char";
238
+ case ft_zstring:
239
+ case ft_wzstring:
240
+ case ft_myvarchar:
241
+ case ft_mywvarchar:
242
+ case ft_myvarbinary:
243
+ case ft_mywvarbinary:
244
+ case ft_mytext:
245
+ case ft_guid:
246
+ case ft_lstring:
247
+ return "_tstring";
248
+ case ft_uinteger:
249
+ case ft_autoIncUnsigned:
250
+ if (size == 1)
251
+ return "unsigned char";
252
+ else if (size == 2)
253
+ return "unsigned short";
254
+ else if ((size == 3) || (size == 4))
255
+ return "unsigned int";
256
+ else if (size == 8)
257
+ return "unsigned __int64";
258
+ THROW_BZS_ERROR_WITH_MSG(_T("Invalid uint size"));
259
+ case ft_lvar:
260
+ case ft_myblob:
261
+ return "void*";
262
+ case ft_numericsts:
263
+ case ft_numericsa:
264
+ case ft_decimal:
265
+ case ft_mydatetime:
266
+ case ft_mytimestamp:
267
+ THROW_BZS_ERROR_WITH_MSG(_T("non support type"));
268
+ default:
269
+ THROW_BZS_ERROR_WITH_MSG(_T("invalid field type"));
270
+ }
271
+ }
272
+
273
+ void removeEndchar(string& s)
274
+ {
275
+ while (s.size() && ((s[s.size() - 1] == '\t') || (s[s.size() - 1] == ',') ||
276
+ (s[s.size() - 1] == '\n') || (s[s.size() - 1] == '\r')))
277
+ s.erase(s.end() - 1);
278
+ }
279
+
280
+ string cppSrcGen::makeDataMembaInitString()
281
+ {
282
+ string retVal;
283
+ string retVal2;
284
+ int n = 0;
285
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
286
+ {
287
+ fielddef* fd = &m_tabledef->fieldDefs[i];
288
+ int t = typeNum(fd->type);
289
+ string ts = typeString(fd->type, fd->len);
290
+ string name = membaName(fd);
291
+ if ((t != ft_date) && (t != ft_time) && (t != ft_datetime))
292
+ {
293
+ if ((t != ft_string) || (fd->len == 1))
294
+ {
295
+ retVal = retVal + name + "(0),";
296
+ if ((++n % 4) == 0)
297
+ retVal += LF "\t\t";
298
+ }
299
+ }
300
+ if ((t == ft_time) || (t == ft_date))
301
+ retVal2 = retVal2 + "\t\t" + name + ".i = 0;" LF;
302
+ else if (t == ft_datetime)
303
+ retVal2 = retVal2 + "\t\t" + name + ".i64 = 0;" LF;
304
+ }
305
+ removeEndchar(retVal);
306
+ retVal2 = "\t{" LF + retVal2 + "\t}" LF;
307
+ return retVal + LF + retVal2;
308
+ }
309
+
310
+ string cppSrcGen::makeDataMembaString()
311
+ {
312
+ string retVal;
313
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
314
+ {
315
+ fielddef* fd = &m_tabledef->fieldDefs[i];
316
+ string ts = typeString(fd->type, fd->len);
317
+ int t = typeNum(fd->type);
318
+ if (t == ft_lvar)
319
+ ts = "vector<char>";
320
+ string name = membaName(fd);
321
+ retVal = retVal + "\t" + ts + " " + name + ";" LF;
322
+ }
323
+ return retVal;
324
+ }
325
+
326
+ string cppSrcGen::makeDataMembaFuncString()
327
+ {
328
+ string retVal1;
329
+ string retVal2;
330
+
331
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
332
+ {
333
+ fielddef* fd = &m_tabledef->fieldDefs[i];
334
+ int t = typeNum(fd->type);
335
+ string ts = typeString(fd->type, fd->len);
336
+ string name = membaName(fd);
337
+ string tmp;
338
+ string tmp2;
339
+ if ((typeNum(fd->type) == 0) && (fd->len != 1))
340
+ {
341
+ tmp = "const _TCHAR* " + m_pm.dataClassName + "::" +
342
+ membaNameGet(name) + "()const" LF "{" LF "\treturn m_impl->" +
343
+ name + ".c_str();" LF "}" LF;
344
+ tmp2 = "void " + m_pm.dataClassName + "::" + membaNameSet(name) +
345
+ "(const _TCHAR* v)" LF "{" LF "\tm_impl->" + name +
346
+ " = v;" LF "}" LF;
347
+ }
348
+ else if ((t == ft_time) || (t == ft_date))
349
+ {
350
+ tmp = string("const ") + ts + "& " + m_pm.dataClassName + "::" +
351
+ membaNameGet(name) +
352
+ "() const" LF "{" LF "\treturn m_impl->" + name + ";" LF
353
+ "}" LF;
354
+ tmp2 = "void " + m_pm.dataClassName + "::" + membaNameSet(name) +
355
+ "(int v)" LF "{" LF "\tm_impl->" + name + ".i = v;" LF
356
+ "}" LF;
357
+ }
358
+ else if (t == ft_datetime)
359
+ {
360
+ tmp = string("const ") + ts + "& " + m_pm.dataClassName + "::" +
361
+ membaNameGet(name) +
362
+ "() const" LF "{" LF "\treturn m_impl->" + name + ";" LF
363
+ "}" LF;
364
+ tmp2 = "void " + m_pm.dataClassName + "::" + membaNameSet(name) +
365
+ "(__int64 v)" LF "{" LF "\tm_impl->" + name + ".i64 = v;" LF
366
+ "}" LF;
367
+ }
368
+ else if (t == ft_lvar)
369
+ {
370
+ tmp = string() + ts + string(" ") + m_pm.dataClassName + "::" +
371
+ membaNameGet(name) + "(unsigned int& size) const" LF "{" LF
372
+ "\tsize=m_impl->" +
373
+ name + ".size();" LF "\treturn &(m_impl->" + name + "[0]);" LF
374
+ "}" LF;
375
+ tmp2 = "void " + m_pm.dataClassName + "::" + membaNameSet(name) +
376
+ "(" + ts + " v, unsigned int size)" LF "{" LF "\tm_impl->" +
377
+ name + ".reserve(size);" LF "\tmemcpy(&m_impl->" + name +
378
+ "[0], v , size);" LF "}";
379
+ }
380
+ else
381
+ {
382
+ tmp = string() + ts + string(" ") + m_pm.dataClassName + "::" +
383
+ membaNameGet(name) +
384
+ "() const" LF "{" LF "\treturn m_impl->" + name + ";" LF
385
+ "}" LF;
386
+ tmp2 = "void " + m_pm.dataClassName + "::" + membaNameSet(name) +
387
+ "(" + ts + " v)" LF "{" LF "\tm_impl->" + name + " = v;" LF
388
+ "}" LF;
389
+ }
390
+ retVal1 = retVal1 + tmp + LF;
391
+ retVal2 = retVal2 + tmp2 + LF;
392
+ }
393
+ return retVal1 + retVal2;
394
+ }
395
+
396
+ string cppSrcGen::makeDataMembaFuncDecString()
397
+ {
398
+
399
+ string retVal1;
400
+ string retVal2;
401
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
402
+ {
403
+ fielddef* fd = &m_tabledef->fieldDefs[i];
404
+ int t = typeNum(fd->type);
405
+ string ts = typeString(fd->type, fd->len);
406
+ string name = membaName(fd);
407
+ string tmp;
408
+ string tmp2;
409
+ if ((t == 0) && (fd->len != 1))
410
+ {
411
+ tmp = "const _TCHAR* " + membaNameGet(name) + "()const;" LF;
412
+ tmp2 = "void " + membaNameSet(name) + "(const _TCHAR* v);" LF;
413
+ }
414
+ else if ((t == ft_time) || (t == ft_date))
415
+ {
416
+ tmp = string("const ") + ts + "& " + membaNameGet(name) +
417
+ "() const;" LF;
418
+ tmp2 = "void " + membaNameSet(name) + "(int v);" LF;
419
+ }
420
+ else if (t == ft_datetime)
421
+ {
422
+ tmp = string("const ") + ts + "& " + membaNameGet(name) +
423
+ "() const;" LF;
424
+ tmp2 = "void " + membaNameSet(name) + "(__int64 v);" LF;
425
+ }
426
+ else if (t == ft_lvar)
427
+ {
428
+
429
+ tmp = ts + " " + membaNameGet(name) +
430
+ "(unsigned int& size) const;" LF;
431
+ tmp2 = "void " + membaNameSet(name) +
432
+ "(void* v, unsigned int size);" LF;
433
+ }
434
+ else
435
+ {
436
+ tmp = ts + string(" ") + membaNameGet(name) + "() const;" LF;
437
+ tmp2 = "void " + membaNameSet(name) + "(" + ts + " v);" LF;
438
+ }
439
+ retVal1 = retVal1 + "\t" + tmp;
440
+ retVal2 = retVal2 + "\t" + tmp2;
441
+ }
442
+ return retVal1 + retVal2;
443
+ }
444
+
445
+ string cppSrcGen::makeFdiResolverString()
446
+ {
447
+ string retVal;
448
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
449
+ {
450
+ fielddef* fd = &m_tabledef->fieldDefs[i];
451
+ string name = membaName(fd);
452
+ retVal = retVal + "\t" + name + " = tb->fieldNumByName(_T(\"" +
453
+ m_tabledef->fieldDefs[i].nameA() + "\"));" LF;
454
+ }
455
+ removeEndchar(retVal);
456
+ return retVal;
457
+ }
458
+
459
+ string cppSrcGen::makeMapReadStringLine(int i)
460
+ {
461
+
462
+ fielddef* fd = &m_tabledef->fieldDefs[i];
463
+ string name = membaName(fd);
464
+
465
+ int t = typeNum(fd->type);
466
+ int n = fd->len;
467
+ string retVal = "\tm." + membaNameSet(name) + "(fds[m_fdi." + name + "].";
468
+ char tmp[30];
469
+ if ((t == ft_string) && (n == 1))
470
+ retVal += string("i8()");
471
+ else if (t == ft_string)
472
+ retVal += string("c_str()");
473
+ else if ((t == ft_float) && (n == 4))
474
+ retVal += string("f()");
475
+ else if ((t == ft_float) && (n == 8))
476
+ retVal += string("d()");
477
+ else if ((t == ft_integer) || (t == ft_date) || (t == ft_time))
478
+ retVal += intReadMenbaName(fd);
479
+ else if (t == ft_lvar)
480
+ {
481
+ retVal.insert(1, "unsigned int size;" LF "\t");
482
+ retVal += string("getBin(size), size");
483
+ }
484
+ else
485
+ {
486
+ _ltoa_s(t, tmp, 30, 10);
487
+ retVal = string("unknown type:") + tmp;
488
+ }
489
+ retVal += string(");" LF);
490
+ return retVal;
491
+ }
492
+
493
+ string cppSrcGen::makeMapReadString()
494
+ {
495
+ string retVal;
496
+
497
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
498
+ retVal = retVal + makeMapReadStringLine(i);
499
+ removeEndchar(retVal);
500
+ return retVal;
501
+ }
502
+
503
+ string cppSrcGen::makeMapWriteStringLine(int index)
504
+ {
505
+ fielddef* fd = &m_tabledef->fieldDefs[index];
506
+ string name = membaName(fd);
507
+ int t = typeNum(fd->type);
508
+
509
+ string s = "\tfds[m_fdi." + name + "] = m." + membaNameGet(name) + "()";
510
+ if ((t == ft_time) || (t == ft_date))
511
+ s += string(".i");
512
+ else if (t == ft_datetime)
513
+ s += string(".i64");
514
+ else if (t == ft_lvar)
515
+ {
516
+ s = "\t{" LF "\t\tunsigned int size;" LF;
517
+ s += "\t\tvoid* p = m." + membaNameGet(name) + "(size);" LF;
518
+ s += "\t\tfds[m_fdi." + name + "].setBin(p, size);" LF "\t}";
519
+ }
520
+ s += string(";" LF);
521
+ return s;
522
+ }
523
+
524
+ string cppSrcGen::makeMapWriteString()
525
+ {
526
+ string retVal;
527
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
528
+ retVal = retVal + makeMapWriteStringLine(i);
529
+ removeEndchar(retVal);
530
+ return retVal;
531
+ }
532
+
533
+ string cppSrcGen::makeMapKeyCompString()
534
+ {
535
+ string ret;
536
+ if ((m_tabledef->primaryKeyNum >= 0) &&
537
+ (m_tabledef->primaryKeyNum < m_tabledef->keyCount))
538
+ {
539
+ keydef* kd = &m_tabledef->keyDefs[m_tabledef->primaryKeyNum];
540
+ string idt = "\t";
541
+ size_t pos = 0;
542
+ string tostr = "";
543
+ string tostrend = "";
544
+ for (int i = 0; i < kd->segmentCount; i++)
545
+ {
546
+ fielddef* fd = &(m_tabledef->fieldDefs[kd->segments[i].fieldNum]);
547
+
548
+ string s = membaName(fd) + "()";
549
+ int t = typeNum(fd->type);
550
+ if (t == 0 && (fd->len > 1))
551
+ {
552
+ tostr = "std::string(";
553
+ tostrend = ")";
554
+ }
555
+ else
556
+ {
557
+ tostr = "";
558
+ tostrend = "";
559
+ }
560
+ if ((t == ft_time) || (t == ft_date))
561
+ s += string(".i");
562
+ else if (t == ft_datetime)
563
+ s += string(".i64");
564
+ string tmp;
565
+ size_t size = 0;
566
+ if (i != kd->segmentCount - 1)
567
+ {
568
+ tmp = idt + "if (" + tostr + "l." + s + tostrend + " == " +
569
+ tostr + "r." + s + tostrend + ")" LF + idt + "{" LF;
570
+ size = tmp.size();
571
+ if (i == 0)
572
+ tmp += idt + "}" LF;
573
+ else
574
+ tmp += idt + "}" LF + idt + "else" LF "\t";
575
+ }
576
+ tmp += idt + "return (" + tostr + "l." + s + tostrend + " < " +
577
+ tostr + "r." + s + tostrend + ");" LF;
578
+ ret.insert(pos, tmp);
579
+ idt += "\t";
580
+ pos += size;
581
+ }
582
+ }
583
+ else
584
+ ret = "\t return true;" LF;
585
+ removeEndchar(ret);
586
+ return ret;
587
+ }
588
+
589
+ string cppSrcGen::makeMapKeyValueString()
590
+ {
591
+ string s = "\tswitch (keyNum)" LF "\t{" LF;
592
+ char buf[20];
593
+
594
+ for (int j = 0; j < m_tabledef->keyCount; ++j)
595
+ {
596
+ _ltoa_s(j, buf, 20, 10);
597
+ s += "\tcase " + string(buf) + ":" LF;
598
+ for (int i = 0; i < m_tabledef->keyDefs[j].segmentCount; i++)
599
+ s += "\t" + makeMapWriteStringLine(
600
+ m_tabledef->keyDefs[j].segments[i].fieldNum);
601
+ s += "\t\tbreak;" LF;
602
+ }
603
+ s += "\t}" LF;
604
+ removeEndchar(s);
605
+ return s;
606
+ }
607
+
608
+ string cppSrcGen::makeMapAutoIncString()
609
+ {
610
+ string retVal;
611
+ for (int i = 0; i < m_tabledef->fieldCount; i++)
612
+ {
613
+ fielddef* fd = &(m_tabledef->fieldDefs[i]);
614
+ if ((fd->type == ft_autoinc) || (fd->type == ft_autoIncUnsigned))
615
+ {
616
+ string name = membaName(fd);
617
+ retVal = retVal + "\tm." + membaNameSet(name) + "(fds[m_fdi." +
618
+ name + "]." + intReadMenbaName(fd) + ");" LF;
619
+ }
620
+ }
621
+ removeEndchar(retVal);
622
+ return retVal;
623
+ }
624
+
625
+ string cppSrcGen::makeMapKeyEnumString()
626
+ {
627
+ string s = "\t";
628
+ for (int j = 0; j < m_tabledef->keyCount; ++j)
629
+ {
630
+ const keydef& kd = m_tabledef->keyDefs[j];
631
+ int n = std::min<int>(4, kd.segmentCount);
632
+ for (int i = 0; i < n; ++i)
633
+ {
634
+ fielddef* fd = &(m_tabledef->fieldDefs[kd.segments[i].fieldNum]);
635
+ s += membaName(fd) + "_";
636
+ }
637
+ s.erase(s.end() - 1);
638
+ s += string("," LF "\t\t");
639
+ }
640
+ removeEndchar(s);
641
+ return s;
642
+ }
643
+
644
+ string cppSrcGen::makeFileName(bool data, bool header)
645
+ {
646
+ string s = m_pm.dataClassName;
647
+ if (!data)
648
+ s += string(MAP_CLASS_SUFFIX);
649
+ if (header)
650
+ return m_pm.saveDir + PSEPARATOR_A + s + ".h";
651
+ else
652
+ return m_pm.saveDir + PSEPARATOR_A + s + ".cpp";
653
+ }
654
+
655
+ string cppSrcGen::makeNameSpaceBegin(const vector<string>& list)
656
+ {
657
+ vector<string>::const_iterator it = list.begin();
658
+ string s;
659
+ while (it != list.end())
660
+ s += string("namespace ") + *it++ + LF "{" LF;
661
+ return s;
662
+ }
663
+
664
+ string cppSrcGen::makeNameSpaceEnd(const vector<string>& list)
665
+ {
666
+ vector<string>::const_iterator it = list.begin();
667
+ string s;
668
+ while (it != list.end())
669
+ s.insert(0, string("}//") + "namespace " + *it++ + LF);
670
+ return s;
671
+ }
672
+
673
+ string cppSrcGen::makeIncludeGurdeString(bool data)
674
+ {
675
+ const vector<string>& list =
676
+ data ? m_pm.name_spaces() : m_pm.name_spaces_map();
677
+
678
+ vector<string>::const_iterator it = list.begin();
679
+ string s;
680
+ while (it != list.end())
681
+ s += *it++ + string("_");
682
+ s += m_pm.dataClassName;
683
+ boost::algorithm::to_upper(s);
684
+ return s;
685
+ }
686
+
687
+ bool cppSrcGen::doMake(const string templeHeader, const string templeCpp,
688
+ bool data)
689
+ {
690
+ // header
691
+ {
692
+ string hd;
693
+ loadFromFile(templeHeader, hd);
694
+ replace(hd, "%className%", m_pm.dataClassName);
695
+ replace(hd, "%extern%", m_pm.externWord);
696
+ replace(hd, "%includegurde%", makeIncludeGurdeString(data));
697
+ if (data)
698
+ {
699
+ replace(hd, "%dataClassMembaFuncDec%",
700
+ makeDataMembaFuncDecString());
701
+ replace(hd, "%nameSpaceBegin%",
702
+ makeNameSpaceBegin(m_pm.name_spaces()));
703
+ replace(hd, "%nameSpaceEnd%", makeNameSpaceEnd(m_pm.name_spaces()));
704
+ }
705
+ else
706
+ {
707
+ replace(hd, "%keyEnum%", makeMapKeyEnumString());
708
+ replace(hd, "%tableName%", string(m_tabledef->tableNameA()));
709
+ replace(hd, "%fdiMemba%", makeFdiMembaString());
710
+ replace(hd, "%nameSpaceMapBegin%",
711
+ makeNameSpaceBegin(m_pm.name_spaces_map()));
712
+ replace(hd, "%nameSpaceMapEnd%",
713
+ makeNameSpaceEnd(m_pm.name_spaces_map()));
714
+ }
715
+ saveToFile(makeFileName(data, true), hd);
716
+ }
717
+
718
+ // cpp
719
+ {
720
+
721
+ string cpp;
722
+ loadFromFile(templeCpp, cpp);
723
+ replace(cpp, "%className%", m_pm.dataClassName);
724
+ if (data)
725
+ {
726
+ replace(cpp, "%datamemba%", makeDataMembaString());
727
+ replace(cpp, "%menbaInit%", makeDataMembaInitString());
728
+ replace(cpp, "%dataClassMembaFunc%", makeDataMembaFuncString());
729
+ replace(cpp, "%nameSpaceBegin%",
730
+ makeNameSpaceBegin(m_pm.name_spaces()));
731
+ replace(cpp, "%nameSpaceEnd%",
732
+ makeNameSpaceEnd(m_pm.name_spaces()));
733
+ }
734
+ else
735
+ {
736
+ replace(cpp, "%fdiResolver%", makeFdiResolverString());
737
+ replace(cpp, "%read%", makeMapReadString());
738
+ replace(cpp, "%writeKeyValue%", makeMapKeyValueString());
739
+ replace(cpp, "%write%", makeMapWriteString());
740
+ replace(cpp, "%autoinc%", makeMapAutoIncString());
741
+ replace(cpp, "%keyComp%", makeMapKeyCompString());
742
+ replace(cpp, "%nameSpaceMapBegin%",
743
+ makeNameSpaceBegin(m_pm.name_spaces_map()));
744
+ replace(cpp, "%nameSpaceMapEnd%",
745
+ makeNameSpaceEnd(m_pm.name_spaces_map()));
746
+ }
747
+ saveToFile(makeFileName(data, false), cpp);
748
+ }
749
+ return true;
750
+ }
751
+
752
+ void cppSrcGen::make()
753
+ {
754
+
755
+ if (m_pm.fieldRenameList != "")
756
+ m_fnames.loadFromFile(m_pm.fieldRenameList);
757
+ if (m_pm.dataClassName == "")
758
+ m_pm.dataClassName = m_fnames.getName(m_tabledef->tableNameA());
759
+ if (m_pm.file[0] != "")
760
+ doMake(m_pm.file[0] + ".h", m_pm.file[0] + ".cpp", true);
761
+ if (m_pm.file[1] != "")
762
+ doMake(m_pm.file[1] + ".h", m_pm.file[1] + ".cpp", false);
763
+ }