transactd 2.2.0 → 2.3.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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +6 -6
  3. data/README +20 -18
  4. data/README-JA +19 -17
  5. data/RELEASE_NOTE +144 -0
  6. data/RELEASE_NOTE-JA +153 -0
  7. data/bin/common/tdclc_32_2_3.dll +0 -0
  8. data/bin/common/tdclc_64_2_3.dll +0 -0
  9. data/build/common/get_ruby_path.cmake +1 -1
  10. data/build/swig/ruby/ruby.swg +10 -9
  11. data/build/swig/ruby/tdclrb_wrap.cpp +1416 -561
  12. data/build/swig/tdcl.i +30 -3
  13. data/build/tdclc/tdclc.cbproj +1 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/BUILDNUMBER.txt +1 -0
  16. data/build/tdclcpp/tdclcpp.rc +4 -4
  17. data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
  18. data/build/tdclrb/BUILDNUMBER.txt +1 -0
  19. data/build/tdclrb/tdclrb.rc +4 -4
  20. data/source/bzs/db/engine/mysql/database.cpp +85 -41
  21. data/source/bzs/db/engine/mysql/database.h +35 -5
  22. data/source/bzs/db/engine/mysql/mysqlInternal.h +189 -37
  23. data/source/bzs/db/engine/mysql/mysqlThd.cpp +21 -21
  24. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +11 -0
  25. data/source/bzs/db/protocol/tdap/client/activeTable.h +1 -1
  26. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +11 -4
  27. data/source/bzs/db/protocol/tdap/client/client.h +30 -1
  28. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +2 -1
  29. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +35 -5
  30. data/source/bzs/db/protocol/tdap/client/field.cpp +100 -51
  31. data/source/bzs/db/protocol/tdap/client/field.h +7 -7
  32. data/source/bzs/db/protocol/tdap/client/filter.h +20 -6
  33. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +337 -58
  34. data/source/bzs/db/protocol/tdap/client/groupQuery.h +56 -13
  35. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +83 -5
  36. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
  37. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +2 -2
  38. data/source/bzs/db/protocol/tdap/client/nsTable.h +2 -1
  39. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +20 -6
  40. data/source/bzs/db/protocol/tdap/client/recordset.cpp +7 -0
  41. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +8 -4
  42. data/source/bzs/db/protocol/tdap/client/request.h +11 -1
  43. data/source/bzs/db/protocol/tdap/client/serializer.cpp +40 -2
  44. data/source/bzs/db/protocol/tdap/client/serializer.h +4 -2
  45. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +1 -0
  46. data/source/bzs/db/protocol/tdap/client/stringConverter.h +4 -4
  47. data/source/bzs/db/protocol/tdap/client/table.cpp +124 -71
  48. data/source/bzs/db/protocol/tdap/client/table.h +8 -7
  49. data/source/bzs/db/protocol/tdap/client/trdormapi.h +33 -1
  50. data/source/bzs/db/protocol/tdap/fieldComp.h +1 -1
  51. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +3 -1
  52. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +20 -4
  53. data/source/bzs/db/protocol/tdap/mysql/request.h +14 -0
  54. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +132 -69
  55. data/source/bzs/db/protocol/tdap/tdapRequest.h +18 -4
  56. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +32 -22
  57. data/source/bzs/db/protocol/tdap/tdapSchema.h +69 -4
  58. data/source/bzs/db/protocol/tdap/tdapcapi.h +13 -5
  59. data/source/bzs/db/protocol/tdap/uri.h +4 -4
  60. data/source/bzs/db/transactd/transactd.cpp +6 -5
  61. data/source/bzs/env/crosscompile.cpp +17 -0
  62. data/source/bzs/env/crosscompile.h +4 -1
  63. data/source/bzs/env/mbcswchrLinux.cpp +3 -0
  64. data/source/bzs/example/deleteRecords.cpp +13 -0
  65. data/source/bzs/example/deleteRecords_c.cpp +8 -1
  66. data/source/bzs/example/insertRecords.cpp +14 -0
  67. data/source/bzs/example/insertRecords_c.cpp +8 -1
  68. data/source/bzs/example/ormap_c.cpp +8 -1
  69. data/source/bzs/example/queryData.cpp +92 -2
  70. data/source/bzs/example/queryData.h +3 -1
  71. data/source/bzs/example/readRecords.cpp +13 -0
  72. data/source/bzs/example/readRecords_c.cpp +8 -1
  73. data/source/bzs/example/updateRecords.cpp +13 -0
  74. data/source/bzs/example/updateRecords_c.cpp +8 -1
  75. data/source/bzs/example/update_with_transaction.cpp +13 -0
  76. data/source/bzs/example/update_with_transaction_c.cpp +8 -1
  77. data/source/bzs/example/useORMRecord.cpp +9 -3
  78. data/source/bzs/netsvc/client/iconnection.h +8 -0
  79. data/source/bzs/netsvc/client/tcpClient.cpp +61 -16
  80. data/source/bzs/netsvc/client/tcpClient.h +430 -214
  81. data/source/bzs/netsvc/server/serverPipe.cpp +2 -2
  82. data/source/bzs/test/tdclphp/transactd_Test.php +115 -19
  83. data/source/bzs/test/tdclphp/transactd_blob_Test.php +33 -5
  84. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +21 -3
  85. data/source/bzs/test/tdclphp/transactd_pool_Test.php +17 -3
  86. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +26 -8
  87. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +13 -6
  88. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +14 -8
  89. data/source/bzs/test/tdclrb/transactd_spec.rb +117 -27
  90. data/source/bzs/test/transactdBench/scaling_bench.cpp +5 -5
  91. data/source/bzs/test/transactdBench/workerBase.h +2 -2
  92. data/source/bzs/test/trdclengn/test_trdclengn.cpp +898 -51
  93. data/source/global/tdclatl/Database.cpp +12 -0
  94. data/source/global/tdclatl/Database.h +4 -0
  95. data/source/global/tdclatl/FieldDef.cpp +19 -0
  96. data/source/global/tdclatl/FieldDef.h +4 -0
  97. data/source/global/tdclatl/FieldDefs.cpp +14 -16
  98. data/source/global/tdclatl/GroupQuery.cpp +21 -16
  99. data/source/global/tdclatl/GroupQuery.h +1 -1
  100. data/source/global/tdclatl/QueryBase.cpp +14 -0
  101. data/source/global/tdclatl/QueryBase.h +2 -0
  102. data/source/global/tdclatl/Record.cpp +41 -10
  103. data/source/global/tdclatl/Record.h +1 -1
  104. data/source/global/tdclatl/Recordset.cpp +117 -31
  105. data/source/global/tdclatl/Recordset.h +6 -5
  106. data/source/global/tdclatl/Table.cpp +24 -28
  107. data/source/global/tdclatl/Table.h +3 -4
  108. data/source/global/tdclatl/activeTable.cpp +149 -103
  109. data/source/global/tdclatl/activeTable.h +1 -1
  110. data/source/global/tdclatl/tdclatl.idl +38 -18
  111. data/transactd.gemspec +1 -1
  112. metadata +8 -4
  113. data/bin/common/tdclc_32_2_2.dll +0 -0
  114. data/bin/common/tdclc_64_2_2.dll +0 -0
@@ -23,16 +23,24 @@ require 'transactd'
23
23
  require 'rbconfig'
24
24
  IS_WINDOWS = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
25
25
 
26
+ def getEnv(valuename)
27
+ return ENV[valuename] if ENV[valuename] != nil
28
+ return ''
29
+ end
30
+
26
31
  def getHost()
27
- hostname = 'localhost/'
28
- if (ENV['TRANSACTD_RSPEC_HOST'] != nil && ENV['TRANSACTD_RSPEC_HOST'] != '')
29
- hostname = ENV['TRANSACTD_RSPEC_HOST']
30
- end
32
+ hostname = getEnv('TRANSACTD_RSPEC_HOST')
33
+ hostname = '127.0.0.1/' if hostname == ''
31
34
  hostname = hostname + '/' unless (hostname =~ /\/$/)
32
35
  return hostname
33
36
  end
34
37
 
35
38
  HOSTNAME = getHost()
39
+ USERNAME = getEnv('TRANSACTD_RSPEC_USER')
40
+ USERPART = USERNAME == '' ? '' : USERNAME + '@'
41
+ PASSWORD = getEnv('TRANSACTD_RSPEC_PASS')
42
+ PASSPART = PASSWORD == '' ? '' : '&pwd=' + PASSWORD
43
+ PASSPART2 = PASSWORD == '' ? '' : '?pwd=' + PASSWORD
36
44
  DBNAME = 'test'
37
45
  DBNAME_VAR = 'testvar'
38
46
  DBNAME_SF = 'testString'
@@ -40,10 +48,12 @@ DBNAME_QT = 'querytest'
40
48
  TABLENAME = 'user'
41
49
  PROTOCOL = 'tdap://'
42
50
  BDFNAME = '?dbfile=test.bdf'
43
- URL = PROTOCOL + HOSTNAME + DBNAME + BDFNAME
44
- URL_VAR = PROTOCOL + HOSTNAME + DBNAME_VAR + BDFNAME
45
- URL_SF = PROTOCOL + HOSTNAME + DBNAME_SF + BDFNAME
46
- URL_QT = PROTOCOL + HOSTNAME + DBNAME_QT + BDFNAME
51
+ URL = PROTOCOL + USERPART + HOSTNAME + DBNAME + BDFNAME + PASSPART
52
+ URL_VAR = PROTOCOL + USERPART + HOSTNAME + DBNAME_VAR + BDFNAME + PASSPART
53
+ URL_SF = PROTOCOL + USERPART + HOSTNAME + DBNAME_SF + BDFNAME + PASSPART
54
+ URL_QT = PROTOCOL + USERPART + HOSTNAME + DBNAME_QT + BDFNAME + PASSPART
55
+ URL_HOST = PROTOCOL + USERPART + HOSTNAME + PASSPART2
56
+ URL_DB = PROTOCOL + USERPART + HOSTNAME + DBNAME + PASSPART2
47
57
  FDI_ID = 0
48
58
  FDI_NAME = 1
49
59
  FDI_GROUP = 2
@@ -97,8 +107,18 @@ def testCreateTable(db)
97
107
 
98
108
  fd = dbdef.insertField(1, 1)
99
109
  fd.setName('name')
100
- fd.type = Transactd::Ft_zstring
101
110
  fd.len = 33
111
+
112
+ #test padChar
113
+ fd.type = Transactd::Ft_string
114
+ fd.setPadCharSettings(true, false)
115
+ expect(fd.usePadChar()).to eq true;
116
+ expect(fd.trimPadChar()).to eq false;
117
+ fd.setPadCharSettings(false, true)
118
+ expect(fd.usePadChar()).to eq false;
119
+ expect(fd.trimPadChar()).to eq true;
120
+
121
+ fd.type = Transactd::Ft_zstring
102
122
  dbdef.updateTableDef(1)
103
123
  expect(dbdef.stat()).to eq 0
104
124
 
@@ -183,7 +203,7 @@ end
183
203
 
184
204
  def testVersion()
185
205
  db = Transactd::Database.new()
186
- db.connect(PROTOCOL + HOSTNAME)
206
+ db.connect(URL_HOST)
187
207
  expect(db.stat()).to eq 0
188
208
  vv = Transactd::BtrVersions.new()
189
209
  db.getBtrVersion(vv)
@@ -623,7 +643,7 @@ def testSnapshot()
623
643
  expect(db.stat()).to eq 0
624
644
  expect(tbg).not_to be nil
625
645
  db2 = Transactd::Database.new()
626
- db2.connect(PROTOCOL + HOSTNAME + DBNAME , true)
646
+ db2.connect(URL_DB, true)
627
647
  expect(db2.stat()).to eq 0
628
648
  tb2 = testOpenTable(db2)
629
649
  expect(tb2).not_to be nil
@@ -753,7 +773,7 @@ def testTransactionLockRepeatable()
753
773
  tb = testOpenTable(db)
754
774
  expect(tb).not_to be nil
755
775
  db2 = Transactd::Database.new()
756
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
776
+ db2.connect(URL_DB, true)
757
777
  expect(db2.stat()).to eq 0
758
778
  tb2 = testOpenTable(db2)
759
779
  expect(tb2).not_to be nil
@@ -984,7 +1004,7 @@ def testTransactionLockReadCommited()
984
1004
  tb = testOpenTable(db)
985
1005
  expect(tb).not_to be nil
986
1006
  db2 = Transactd::Database.new()
987
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
1007
+ db2.connect(URL_DB, true)
988
1008
  expect(db2.stat()).to eq 0
989
1009
  tb2 = testOpenTable(db2)
990
1010
  expect(tb2).not_to be nil
@@ -1249,7 +1269,7 @@ def testRecordLock()
1249
1269
  tb = testOpenTable(db)
1250
1270
  expect(tb).not_to be nil
1251
1271
  db2 = Transactd::Database.new()
1252
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
1272
+ db2.connect(URL_DB, true)
1253
1273
  expect(db2.stat()).to eq 0
1254
1274
  tb2 = testOpenTable(db2)
1255
1275
  expect(tb2).not_to be nil
@@ -1385,7 +1405,7 @@ def testConflict()
1385
1405
  db = Transactd::Database.new()
1386
1406
  tb = testOpenTable(db)
1387
1407
  db2 = Transactd::Database.new()
1388
- db2.connect(PROTOCOL + HOSTNAME + DBNAME , true)
1408
+ db2.connect(URL_DB, true)
1389
1409
  expect(db2.stat()).to eq 0
1390
1410
  expect(tb).not_to be nil
1391
1411
  tb2 = testOpenTable(db2)
@@ -1444,7 +1464,7 @@ def testExclusive()
1444
1464
 
1445
1465
  # Can not open database from other connections.
1446
1466
  db2 = Transactd::Database.new()
1447
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
1467
+ db2.connect(URL_DB, true)
1448
1468
  expect(db2.stat()).to eq 0
1449
1469
  db2.open(URL, Transactd::TYPE_SCHEMA_BDF)
1450
1470
  # database open error. Check database::stat()
@@ -1467,7 +1487,7 @@ def testExclusive()
1467
1487
  db2.close()
1468
1488
 
1469
1489
  # Normal open
1470
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
1490
+ db2.connect(URL_DB, true)
1471
1491
  db2.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1472
1492
  expect(db2.stat()).to eq 0
1473
1493
  db2.close()
@@ -1629,7 +1649,7 @@ def testMissingUpdate()
1629
1649
  # Get lock(X) same record in parallel.
1630
1650
  w = Thread.new {
1631
1651
  db2 = Transactd::Database.new()
1632
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
1652
+ db2.connect(URL_DB, true)
1633
1653
  expect(db2.stat()).to eq 0
1634
1654
  db2.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1635
1655
  expect(db2.stat()).to eq 0
@@ -1643,7 +1663,7 @@ def testMissingUpdate()
1643
1663
  db2.close()
1644
1664
  v2
1645
1665
  }
1646
- sleep(0.05)
1666
+ sleep(0.5)
1647
1667
  v = tb.getFVint(FDI_ID)
1648
1668
  v = v + 1
1649
1669
  tb.setFV(FDI_ID, v)
@@ -1673,7 +1693,7 @@ def testMissingUpdate()
1673
1693
  # Get lock(X) same record in parallel.
1674
1694
  w = Thread.new {
1675
1695
  db2 = Transactd::Database.new()
1676
- db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
1696
+ db2.connect(URL_DB, true)
1677
1697
  expect(db2.stat()).to eq 0
1678
1698
  db2.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1679
1699
  expect(db2.stat()).to eq 0
@@ -1688,7 +1708,7 @@ def testMissingUpdate()
1688
1708
  db2.close()
1689
1709
  v2
1690
1710
  }
1691
- sleep(0.05)
1711
+ sleep(0.5)
1692
1712
  v = tb.getFVint(FDI_ID)
1693
1713
  tb.del()
1694
1714
  v2 = w.join().value
@@ -1787,12 +1807,12 @@ end
1787
1807
 
1788
1808
  def testLogin()
1789
1809
  db = Transactd::Database.new()
1790
- db.connect(PROTOCOL + HOSTNAME)
1810
+ db.connect(URL_HOST)
1791
1811
  expect(db.stat()).to eq 0
1792
1812
  if db.stat() == 0
1793
1813
  # second connection
1794
1814
  db2 = Transactd::Database.new()
1795
- db2.connect(PROTOCOL + HOSTNAME, true)
1815
+ db2.connect(URL_HOST, true)
1796
1816
  expect(db2.stat()).to eq 0
1797
1817
  db2.disconnect()
1798
1818
  db.disconnect()
@@ -1811,7 +1831,7 @@ def testLogin()
1811
1831
  db.close()
1812
1832
  expect(db.stat()).to eq 0
1813
1833
  # true database name
1814
- db.connect(PROTOCOL + HOSTNAME + DBNAME)
1834
+ db.connect(URL_DB)
1815
1835
  expect(db.stat()).to eq 0
1816
1836
  if (db.stat() == 0)
1817
1837
  db.disconnect()
@@ -1821,7 +1841,7 @@ def testLogin()
1821
1841
  testDropDatabase(db)
1822
1842
  db.disconnect()
1823
1843
  expect(db.stat()).to eq 0
1824
- db.connect(PROTOCOL + HOSTNAME + DBNAME)
1844
+ db.connect(URL_DB)
1825
1845
  expect(db.stat()).to eq (Transactd::ERROR_NO_DATABASE)
1826
1846
  db.disconnect()
1827
1847
  expect(db.stat()).to eq 1
@@ -2835,11 +2855,11 @@ def createQTextention(db)
2835
2855
  end
2836
2856
 
2837
2857
  def insertQT(db, maxId)
2838
- db.beginTrn()
2839
2858
  # insert user data
2840
2859
  tb = db.openTable('user', Transactd::TD_OPEN_NORMAL)
2841
2860
  expect(db.stat()).to eq 0
2842
2861
  expect(tb).not_to be nil
2862
+ db.beginTrn()
2843
2863
  tb.clearBuffer()
2844
2864
  for i in 1..maxId
2845
2865
  tb.setFV(0, i)
@@ -2848,11 +2868,13 @@ def insertQT(db, maxId)
2848
2868
  tb.insert()
2849
2869
  expect(tb.stat()).to eq 0
2850
2870
  end
2871
+ db.endTrn()
2851
2872
  tb.close()
2852
2873
  # insert groups data
2853
2874
  tb = db.openTable('groups', Transactd::TD_OPEN_NORMAL)
2854
2875
  expect(db.stat()).to eq 0
2855
2876
  expect(tb).not_to be nil
2877
+ db.beginTrn()
2856
2878
  tb.clearBuffer()
2857
2879
  for i in 1..100
2858
2880
  tb.setFV(0, i)
@@ -2860,11 +2882,13 @@ def insertQT(db, maxId)
2860
2882
  tb.insert()
2861
2883
  expect(tb.stat()).to eq 0
2862
2884
  end
2885
+ db.endTrn()
2863
2886
  tb.close()
2864
2887
  # insert extention data
2865
2888
  tb = db.openTable('extention', Transactd::TD_OPEN_NORMAL)
2866
2889
  expect(db.stat()).to eq 0
2867
2890
  expect(tb).not_to be nil
2891
+ db.beginTrn()
2868
2892
  tb.clearBuffer()
2869
2893
  for i in 1..maxId
2870
2894
  tb.setFV(0, i)
@@ -2873,8 +2897,8 @@ def insertQT(db, maxId)
2873
2897
  tb.insert()
2874
2898
  expect(tb.stat()).to eq 0
2875
2899
  end
2876
- tb.close()
2877
2900
  db.endTrn()
2901
+ tb.close()
2878
2902
  end
2879
2903
 
2880
2904
  def testCreateQueryTest()
@@ -2931,6 +2955,8 @@ def testNewDelete()
2931
2955
  a = Transactd::Avg.new(fns)
2932
2956
  mi = Transactd::Min.new(fns)
2933
2957
  ma = Transactd::Max.new(fns)
2958
+ la = Transactd::Last.new(fns)
2959
+ fa = Transactd::First.new(fns)
2934
2960
  rs = Transactd::Recordset.new()
2935
2961
  # have to explicitly release
2936
2962
  atu.release()
@@ -3284,6 +3310,64 @@ def testServerPrepareJoin()
3284
3310
  db.close()
3285
3311
  end
3286
3312
 
3313
+ def testReadMore()
3314
+ db = Transactd::Database.new()
3315
+ db.open(URL_QT)
3316
+ expect(db.stat()).to eq 0
3317
+
3318
+ atu = Transactd::ActiveTable.new(db, 'user')
3319
+ atu.alias('名前', 'name')
3320
+ q = Transactd::Query.new()
3321
+
3322
+ #isStopAtLimit
3323
+ expect(q.isStopAtLimit()).to eq false
3324
+
3325
+ q.select('id', 'name', 'group')
3326
+ .where('name', '=', '1*')
3327
+ .reject(70).limit(8).stopAtLimit(true)
3328
+ expect(q.isStopAtLimit()).to eq true
3329
+
3330
+ stmt1 = atu.prepare(q)
3331
+ expect(stmt1).not_to eq nil
3332
+ rs = atu.index(0).keyValue(18).read(stmt1)
3333
+ expect(rs.size()).to eq 2
3334
+
3335
+ #readMore
3336
+ rs2 = atu.readMore()
3337
+ expect(rs2.size()).to eq 8
3338
+ rs.unionRecordset(rs2)
3339
+ expect(rs.size()).to eq 10
3340
+ end
3341
+
3342
+ def testFirstLastGroupFunction()
3343
+ db = Transactd::Database.new()
3344
+ db.open(URL_QT)
3345
+ expect(db.stat()).to eq 0
3346
+
3347
+ atu = Transactd::ActiveTable.new(db, 'user')
3348
+ atu.alias('名前', 'name')
3349
+ q = Transactd::Query.new()
3350
+ q.select('id', 'name', 'group')
3351
+ .where('name', '=', '1*')
3352
+ .reject(70).limit(8).stopAtLimit(true)
3353
+ stmt1 = atu.prepare(q)
3354
+ expect(stmt1).not_to eq nil
3355
+ rs = atu.index(0).keyValue(0).read(stmt1)
3356
+ expect(rs.size()).to eq 8
3357
+
3358
+ #grouping first and last
3359
+ gq = Transactd::GroupQuery.new()
3360
+ target = Transactd::FieldNames.new()
3361
+ target.addValue('name');
3362
+ last = Transactd::Last.new(target, 'last_rec_name')
3363
+ first = Transactd::First.new(target, 'first_rec_name')
3364
+ gq.addFunction(last);
3365
+ gq.addFunction(first);
3366
+ rs.groupBy(gq);
3367
+ expect(rs[0]['first_rec_name']).to eq "1 user";
3368
+ expect(rs[0]['last_rec_name']).to eq "16 user";
3369
+ end
3370
+
3287
3371
  def testWirtableRecord()
3288
3372
  db = Transactd::Database.new()
3289
3373
  db.open(URL_QT)
@@ -3474,6 +3558,12 @@ describe Transactd do
3474
3558
  it 'activetable and prepare (server)' do
3475
3559
  testServerPrepareJoin()
3476
3560
  end
3561
+ it 'activetable and readMore' do
3562
+ testReadMore()
3563
+ end
3564
+ it 'Grouping and first and last' do
3565
+ testFirstLastGroupFunction()
3566
+ end
3477
3567
  it 'write with writableRecord' do
3478
3568
  testWirtableRecord()
3479
3569
  end
@@ -52,7 +52,7 @@ struct commandLineParam
52
52
  avg_count = _ttol(argv[5]);
53
53
  stressMode = (loopCount == -1) ? true : false;
54
54
  if (stressMode)
55
- loopCount = 1;
55
+ loopCount = 10;
56
56
  }
57
57
  };
58
58
 
@@ -123,7 +123,7 @@ void makeMysqlParam(bzs::test::worker::mysql::connectParam& param,
123
123
  param.port = 0;
124
124
  }
125
125
 
126
- #define BENCH_TIMER_SECONDS 1.5f
126
+ #define BENCH_TIMER_SECONDS 2.0f
127
127
  double executeWorkers(const commandLineParam& cmd, const connectParams param,
128
128
  const bzs::test::worker::mysql::connectParam& paramMysql,
129
129
  int wn)
@@ -151,11 +151,11 @@ double executeWorkers(const commandLineParam& cmd, const connectParams param,
151
151
  }
152
152
  printf("*");
153
153
  fflush(stdout);
154
- Sleep(500);
154
+ Sleep(1000);
155
155
  sync.wait(); // start all workers
156
156
  if (cmd.stressMode)
157
157
  {
158
- Sleep(200);
158
+ Sleep(500);
159
159
  g_bench_signal = BENCH_SIGNAL_GREEN;
160
160
  //Measurement interval
161
161
  Sleep((unsigned int)(BENCH_TIMER_SECONDS * 1000));
@@ -184,7 +184,7 @@ int execute(const commandLineParam& cmd, const connectParams param,
184
184
  if (cmd.stressMode)
185
185
  {
186
186
  if (t)
187
- ts.value = (__int64)(t / BENCH_TIMER_SECONDS);
187
+ ts.value = (__int64)(t / BENCH_TIMER_SECONDS) * cmd.loopCount;
188
188
  }
189
189
  else
190
190
  {
@@ -92,7 +92,7 @@ public:
92
92
  else if (g_bench_signal == BENCH_SIGNAL_BLUE)
93
93
  {
94
94
  m_bresult = bm.end();
95
- dummyWork();
95
+ //dummyWork();
96
96
  break;
97
97
  }
98
98
  }
@@ -116,7 +116,7 @@ public:
116
116
  else if (g_bench_signal == BENCH_SIGNAL_BLUE)
117
117
  {
118
118
  m_bresult = bm.end();
119
- dummyWork();
119
+ //dummyWork();
120
120
  break;
121
121
  }
122
122
  }