transactd 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +6 -6
- data/README +20 -18
- data/README-JA +19 -17
- data/RELEASE_NOTE +144 -0
- data/RELEASE_NOTE-JA +153 -0
- data/bin/common/tdclc_32_2_3.dll +0 -0
- data/bin/common/tdclc_64_2_3.dll +0 -0
- data/build/common/get_ruby_path.cmake +1 -1
- data/build/swig/ruby/ruby.swg +10 -9
- data/build/swig/ruby/tdclrb_wrap.cpp +1416 -561
- data/build/swig/tdcl.i +30 -3
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/BUILDNUMBER.txt +1 -0
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/BUILDNUMBER.txt +1 -0
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +85 -41
- data/source/bzs/db/engine/mysql/database.h +35 -5
- data/source/bzs/db/engine/mysql/mysqlInternal.h +189 -37
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +21 -21
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +11 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +11 -4
- data/source/bzs/db/protocol/tdap/client/client.h +30 -1
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +2 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +35 -5
- data/source/bzs/db/protocol/tdap/client/field.cpp +100 -51
- data/source/bzs/db/protocol/tdap/client/field.h +7 -7
- data/source/bzs/db/protocol/tdap/client/filter.h +20 -6
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +337 -58
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +56 -13
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +83 -5
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +2 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.h +2 -1
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +20 -6
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +7 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +8 -4
- data/source/bzs/db/protocol/tdap/client/request.h +11 -1
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +40 -2
- data/source/bzs/db/protocol/tdap/client/serializer.h +4 -2
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +1 -0
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +4 -4
- data/source/bzs/db/protocol/tdap/client/table.cpp +124 -71
- data/source/bzs/db/protocol/tdap/client/table.h +8 -7
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +33 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +3 -1
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +20 -4
- data/source/bzs/db/protocol/tdap/mysql/request.h +14 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +132 -69
- data/source/bzs/db/protocol/tdap/tdapRequest.h +18 -4
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +32 -22
- data/source/bzs/db/protocol/tdap/tdapSchema.h +69 -4
- data/source/bzs/db/protocol/tdap/tdapcapi.h +13 -5
- data/source/bzs/db/protocol/tdap/uri.h +4 -4
- data/source/bzs/db/transactd/transactd.cpp +6 -5
- data/source/bzs/env/crosscompile.cpp +17 -0
- data/source/bzs/env/crosscompile.h +4 -1
- data/source/bzs/env/mbcswchrLinux.cpp +3 -0
- data/source/bzs/example/deleteRecords.cpp +13 -0
- data/source/bzs/example/deleteRecords_c.cpp +8 -1
- data/source/bzs/example/insertRecords.cpp +14 -0
- data/source/bzs/example/insertRecords_c.cpp +8 -1
- data/source/bzs/example/ormap_c.cpp +8 -1
- data/source/bzs/example/queryData.cpp +92 -2
- data/source/bzs/example/queryData.h +3 -1
- data/source/bzs/example/readRecords.cpp +13 -0
- data/source/bzs/example/readRecords_c.cpp +8 -1
- data/source/bzs/example/updateRecords.cpp +13 -0
- data/source/bzs/example/updateRecords_c.cpp +8 -1
- data/source/bzs/example/update_with_transaction.cpp +13 -0
- data/source/bzs/example/update_with_transaction_c.cpp +8 -1
- data/source/bzs/example/useORMRecord.cpp +9 -3
- data/source/bzs/netsvc/client/iconnection.h +8 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +61 -16
- data/source/bzs/netsvc/client/tcpClient.h +430 -214
- data/source/bzs/netsvc/server/serverPipe.cpp +2 -2
- data/source/bzs/test/tdclphp/transactd_Test.php +115 -19
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +33 -5
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +21 -3
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +17 -3
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +26 -8
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +13 -6
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +14 -8
- data/source/bzs/test/tdclrb/transactd_spec.rb +117 -27
- data/source/bzs/test/transactdBench/scaling_bench.cpp +5 -5
- data/source/bzs/test/transactdBench/workerBase.h +2 -2
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +898 -51
- data/source/global/tdclatl/Database.cpp +12 -0
- data/source/global/tdclatl/Database.h +4 -0
- data/source/global/tdclatl/FieldDef.cpp +19 -0
- data/source/global/tdclatl/FieldDef.h +4 -0
- data/source/global/tdclatl/FieldDefs.cpp +14 -16
- data/source/global/tdclatl/GroupQuery.cpp +21 -16
- data/source/global/tdclatl/GroupQuery.h +1 -1
- data/source/global/tdclatl/QueryBase.cpp +14 -0
- data/source/global/tdclatl/QueryBase.h +2 -0
- data/source/global/tdclatl/Record.cpp +41 -10
- data/source/global/tdclatl/Record.h +1 -1
- data/source/global/tdclatl/Recordset.cpp +117 -31
- data/source/global/tdclatl/Recordset.h +6 -5
- data/source/global/tdclatl/Table.cpp +24 -28
- data/source/global/tdclatl/Table.h +3 -4
- data/source/global/tdclatl/activeTable.cpp +149 -103
- data/source/global/tdclatl/activeTable.h +1 -1
- data/source/global/tdclatl/tdclatl.idl +38 -18
- data/transactd.gemspec +1 -1
- metadata +8 -4
- data/bin/common/tdclc_32_2_2.dll +0 -0
- 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 = '
|
28
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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.
|
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(
|
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.
|
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(
|
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(
|
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(
|
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(
|
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 =
|
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
|
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(
|
154
|
+
Sleep(1000);
|
155
155
|
sync.wait(); // start all workers
|
156
156
|
if (cmd.stressMode)
|
157
157
|
{
|
158
|
-
Sleep(
|
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
|
}
|