transactd 3.5.0 → 3.6.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.
- checksums.yaml +4 -4
- data/bin/common/{tdclc_32_3_5.dll → tdclc_32_3_6.dll} +0 -0
- data/bin/common/tdclc_64_3_6.dll +0 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +12524 -24430
- data/build/swig/tdcl.i +5 -0
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +210 -184
- data/source/bzs/db/engine/mysql/database.h +276 -105
- data/source/bzs/db/engine/mysql/mysqlInternal.h +37 -0
- data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +1 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +4 -4
- data/source/bzs/db/protocol/tdap/client/activeTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +1 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +7 -4
- data/source/bzs/db/protocol/tdap/client/database.h +6 -1
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +2 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +21 -9
- data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +10 -2
- data/source/bzs/db/protocol/tdap/client/field.cpp +29 -5
- data/source/bzs/db/protocol/tdap/client/field.h +3 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +5 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +1 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +9 -2
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +8 -4
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +18 -5
- data/source/bzs/db/protocol/tdap/client/memRecord.h +2 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +46 -13
- data/source/bzs/db/protocol/tdap/client/nsTable.h +5 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +5 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +1 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +6 -2
- data/source/bzs/db/protocol/tdap/client/request.h +46 -38
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +2 -3
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +29 -13
- data/source/bzs/db/protocol/tdap/client/table.cpp +60 -10
- data/source/bzs/db/protocol/tdap/client/table.h +4 -1
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +18 -1
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +10 -4
- data/source/bzs/db/protocol/tdap/fieldComp.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +1 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +11 -4
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +2 -1
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +52 -94
- data/source/bzs/db/protocol/tdap/mysql/request.h +20 -13
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +92 -60
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +4 -4
- data/source/bzs/db/protocol/tdap/tdapRequest.h +11 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +83 -34
- data/source/bzs/db/protocol/tdap/tdapSchema.h +5 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +7 -3
- data/source/bzs/example/ormap_c.cpp +2 -2
- data/source/bzs/netsvc/server/serverPipe.cpp +35 -1
- data/source/bzs/test/tdclatl/test_v3.js +48 -1
- data/source/bzs/test/tdclphp/bench.php +89 -76
- data/source/bzs/test/tdclphp/transactd_Test.php +691 -687
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +46 -43
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +46 -43
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +33 -33
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +29 -25
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +653 -183
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +40 -4
- data/source/bzs/test/tdclrb/transactd_fetch_spec.rb +785 -0
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +21 -1
- data/source/bzs/test/tdclrb/transactd_setget_spec.rb +450 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +14 -2
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +1192 -11
- data/source/bzs/test/trdclengn/testField.h +522 -1
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +37 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +62 -4
- data/source/global/tdclatl/RecordsetQuery.cpp +2 -1
- data/source/global/tdclatl/RecordsetQuery.h +1 -1
- data/source/global/tdclatl/Table.cpp +17 -0
- data/source/global/tdclatl/Table.h +3 -1
- data/source/global/tdclatl/tdclatl.idl +7 -2
- data/transactd.gemspec +1 -1
- metadata +7 -5
- data/bin/common/tdclc_64_3_5.dll +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?php
|
|
2
2
|
/* ================================================================
|
|
3
|
-
Copyright (C) 2013 BizStation Corp All rights reserved.
|
|
3
|
+
Copyright (C) 2013,2016 BizStation Corp All rights reserved.
|
|
4
4
|
|
|
5
5
|
This program is free software; you can redistribute it and/or
|
|
6
6
|
modify it under the terms of the GNU General Public License
|
|
@@ -13,26 +13,45 @@
|
|
|
13
13
|
GNU General Public License for more details.
|
|
14
14
|
|
|
15
15
|
You should have received a copy of the GNU General Public License
|
|
16
|
-
along with this program; if not, write to the Free Software
|
|
17
|
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
16
|
+
along with this program; if not, write to the Free Software
|
|
17
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
18
18
|
02111-1307, USA.
|
|
19
19
|
================================================================ */
|
|
20
|
-
mb_internal_encoding('UTF-8');
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
use BizStation\Transactd as Bz;
|
|
21
|
+
require("transactd.php");
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
use BizStation\Transactd\Transactd;
|
|
24
|
+
use BizStation\Transactd\PooledDbManager;
|
|
25
|
+
use BizStation\Transactd\ConnectParams;
|
|
26
|
+
use BizStation\Transactd\Tabledef;
|
|
27
|
+
use BizStation\Transactd\Database;
|
|
28
|
+
use BizStation\Transactd\BtrVersions;
|
|
29
|
+
use BizStation\Transactd\Nstable;
|
|
30
|
+
use BizStation\Transactd\Table;
|
|
31
|
+
use BizStation\Transactd\QueryBase;
|
|
32
|
+
use BizStation\Transactd\Query;
|
|
33
|
+
use BizStation\Transactd\RecordsetQuery;
|
|
34
|
+
use BizStation\Transactd\GroupQuery;
|
|
35
|
+
use BizStation\Transactd\FieldNames;
|
|
36
|
+
use BizStation\Transactd\ActiveTable;
|
|
37
|
+
use BizStation\Transactd\Sum;
|
|
38
|
+
use BizStation\Transactd\Count;
|
|
39
|
+
use BizStation\Transactd\Avg;
|
|
40
|
+
use BizStation\Transactd\Min;
|
|
41
|
+
use BizStation\Transactd\Max;
|
|
42
|
+
use BizStation\Transactd\Last;
|
|
43
|
+
use BizStation\Transactd\First;
|
|
44
|
+
use BizStation\Transactd\Recordset;
|
|
45
|
+
|
|
46
|
+
Transactd::setFieldValueMode(Transactd::FIELD_VALUE_MODE_VALUE);
|
|
26
47
|
|
|
27
48
|
function getHost()
|
|
28
49
|
{
|
|
29
50
|
$host = getenv('TRANSACTD_PHPUNIT_HOST');
|
|
30
|
-
if (strlen($host) == 0)
|
|
31
|
-
{
|
|
51
|
+
if (strlen($host) == 0) {
|
|
32
52
|
$host = '127.0.0.1/';
|
|
33
53
|
}
|
|
34
|
-
if ($host[strlen($host) - 1] != '/')
|
|
35
|
-
{
|
|
54
|
+
if ($host[strlen($host) - 1] != '/') {
|
|
36
55
|
$host = $host . '/';
|
|
37
56
|
}
|
|
38
57
|
return $host;
|
|
@@ -67,7 +86,7 @@ define("TEST_COUNT", 20000);
|
|
|
67
86
|
define("FIVE_PERCENT_OF_TEST_COUNT", TEST_COUNT / 20);
|
|
68
87
|
|
|
69
88
|
// multi thread test if `php_pthreads` exists.
|
|
70
|
-
if(class_exists('Thread')){
|
|
89
|
+
if (class_exists('Thread')) {
|
|
71
90
|
class SeekLessThanWorker extends Thread
|
|
72
91
|
{
|
|
73
92
|
public function __construct()
|
|
@@ -76,10 +95,10 @@ if(class_exists('Thread')){
|
|
|
76
95
|
}
|
|
77
96
|
public function run()
|
|
78
97
|
{
|
|
79
|
-
$dbm = new
|
|
98
|
+
$dbm = new PooledDbManager(new ConnectParams(URL));
|
|
80
99
|
$tb = $dbm->table('user');
|
|
81
100
|
$tb->setFV(FDI_ID, 300000);
|
|
82
|
-
$tb->seekLessThan(false,
|
|
101
|
+
$tb->seekLessThan(false, Transactd::ROW_LOCK_X);
|
|
83
102
|
$this->value = $tb->getFVint(FDI_ID);
|
|
84
103
|
$tb->unlock();
|
|
85
104
|
$tb->close();
|
|
@@ -92,7 +111,7 @@ if(class_exists('Thread')){
|
|
|
92
111
|
}
|
|
93
112
|
}
|
|
94
113
|
|
|
95
|
-
class
|
|
114
|
+
class TransactdTest extends PHPUnit_Framework_TestCase
|
|
96
115
|
{
|
|
97
116
|
private function dropDatabase($db)
|
|
98
117
|
{
|
|
@@ -104,8 +123,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
104
123
|
private function createDatabase($db)
|
|
105
124
|
{
|
|
106
125
|
$db->create(URL);
|
|
107
|
-
if ($db->stat() ==
|
|
108
|
-
{
|
|
126
|
+
if ($db->stat() == Transactd::STATUS_TABLE_EXISTS_ERROR) {
|
|
109
127
|
$this->dropDatabase($db);
|
|
110
128
|
$db->create(URL);
|
|
111
129
|
}
|
|
@@ -113,23 +131,23 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
113
131
|
}
|
|
114
132
|
private function openDatabase($db)
|
|
115
133
|
{
|
|
116
|
-
$db->open(URL,
|
|
134
|
+
$db->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
117
135
|
$this->assertEquals($db->stat(), 0);
|
|
118
136
|
}
|
|
119
137
|
private function createTable($db)
|
|
120
138
|
{
|
|
121
139
|
$this->openDatabase($db);
|
|
122
140
|
$dbdef = $db->dbDef();
|
|
123
|
-
$this->assertNotEquals($dbdef,
|
|
124
|
-
$td = new
|
|
141
|
+
$this->assertNotEquals($dbdef, null);
|
|
142
|
+
$td = new Tabledef();
|
|
125
143
|
// Set table schema codepage to UTF-8
|
|
126
144
|
// - codepage for field NAME and tableNAME
|
|
127
|
-
$td->schemaCodePage =
|
|
145
|
+
$td->schemaCodePage = Transactd::CP_UTF8;
|
|
128
146
|
$td->setTableName(TABLENAME);
|
|
129
147
|
$td->setFileName(TABLENAME . '.dat');
|
|
130
148
|
// Set table default charaset index
|
|
131
149
|
// - default charset for field VALUE
|
|
132
|
-
$td->charsetIndex =
|
|
150
|
+
$td->charsetIndex = Transactd::charsetIndex(Transactd::CP_UTF8);
|
|
133
151
|
$tableid = 1;
|
|
134
152
|
$td->id = $tableid;
|
|
135
153
|
$td->pageSize = 2048;
|
|
@@ -138,7 +156,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
138
156
|
|
|
139
157
|
$fd = $dbdef->insertField($tableid, 0);
|
|
140
158
|
$fd->setName('id');
|
|
141
|
-
$fd->type =
|
|
159
|
+
$fd->type = Transactd::ft_integer;
|
|
142
160
|
$fd->len = 4;
|
|
143
161
|
$dbdef->updateTableDef($tableid);
|
|
144
162
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -148,7 +166,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
148
166
|
$fd->len = 33;
|
|
149
167
|
|
|
150
168
|
//test padChar only string or wstring
|
|
151
|
-
$fd->type =
|
|
169
|
+
$fd->type = Transactd::ft_string;
|
|
152
170
|
$fd->setPadCharSettings(true, false);
|
|
153
171
|
$this->assertEquals($fd->isUsePadChar(), true);
|
|
154
172
|
$this->assertEquals($fd->isTrimPadChar(), false);
|
|
@@ -156,23 +174,23 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
156
174
|
$this->assertEquals($fd->isUsePadChar(), false);
|
|
157
175
|
$this->assertEquals($fd->isTrimPadChar(), true);
|
|
158
176
|
|
|
159
|
-
$fd->type =
|
|
177
|
+
$fd->type = Transactd::ft_zstring;
|
|
160
178
|
$dbdef->updateTableDef($tableid);
|
|
161
179
|
$this->assertEquals($dbdef->stat(), 0);
|
|
162
180
|
// Set field charset index
|
|
163
181
|
// - charset for each field VALUE
|
|
164
|
-
// $fd->setCharsetIndex(
|
|
165
|
-
|
|
182
|
+
// $fd->setCharsetIndex(Transactd::charsetIndex(Transactd::CP_UTF8))
|
|
183
|
+
|
|
166
184
|
$fd = $dbdef->insertField($tableid, 2);
|
|
167
185
|
$fd->setName('select');
|
|
168
|
-
$fd->type =
|
|
186
|
+
$fd->type = Transactd::ft_integer;
|
|
169
187
|
$fd->len = 4;
|
|
170
188
|
$dbdef->updateTableDef($tableid);
|
|
171
189
|
$this->assertEquals($dbdef->stat(), 0);
|
|
172
190
|
|
|
173
191
|
$fd = $dbdef->insertField($tableid, 3);
|
|
174
192
|
$fd->setName('in');
|
|
175
|
-
$fd->type =
|
|
193
|
+
$fd->type = Transactd::ft_integer;
|
|
176
194
|
$fd->len = 4;
|
|
177
195
|
$dbdef->updateTableDef($tableid);
|
|
178
196
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -186,8 +204,8 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
186
204
|
$this->assertEquals($dbdef->stat(), 0);
|
|
187
205
|
|
|
188
206
|
// group table
|
|
189
|
-
$td = new
|
|
190
|
-
$td->schemaCodePage =
|
|
207
|
+
$td = new Tabledef();
|
|
208
|
+
$td->schemaCodePage = Transactd::CP_UTF8;
|
|
191
209
|
$td->setTableName('group');
|
|
192
210
|
$td->setFileName('group.dat');
|
|
193
211
|
$tableid = 2;
|
|
@@ -198,14 +216,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
198
216
|
|
|
199
217
|
$fd = $dbdef->insertField($tableid, 0);
|
|
200
218
|
$fd->setName('id');
|
|
201
|
-
$fd->type =
|
|
219
|
+
$fd->type = Transactd::ft_integer;
|
|
202
220
|
$fd->len = 4;
|
|
203
221
|
$dbdef->updateTableDef($tableid);
|
|
204
222
|
$this->assertEquals($dbdef->stat(), 0);
|
|
205
223
|
|
|
206
224
|
$fd = $dbdef->insertField($tableid, 1);
|
|
207
225
|
$fd->setName('name');
|
|
208
|
-
$fd->type =
|
|
226
|
+
$fd->type = Transactd::ft_zstring;
|
|
209
227
|
$fd->len = 33;
|
|
210
228
|
$dbdef->updateTableDef($tableid);
|
|
211
229
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -221,7 +239,6 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
221
239
|
$dbdef->updateTableDef($tableid);
|
|
222
240
|
$this->assertEquals($dbdef->stat(), 0);
|
|
223
241
|
$this->assertEquals($dbdef->validateTableDef($tableid), 0);
|
|
224
|
-
|
|
225
242
|
}
|
|
226
243
|
private function openTable($db)
|
|
227
244
|
{
|
|
@@ -235,38 +252,38 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
235
252
|
|
|
236
253
|
public function testCreateDatabase()
|
|
237
254
|
{
|
|
238
|
-
$db = new
|
|
255
|
+
$db = new Database();
|
|
239
256
|
$this->createDatabase($db);
|
|
240
257
|
}
|
|
241
258
|
public function testCreateTable()
|
|
242
259
|
{
|
|
243
|
-
$db = new
|
|
260
|
+
$db = new Database();
|
|
244
261
|
$this->createTable($db);
|
|
245
262
|
}
|
|
246
263
|
// open database, not call close explicitly
|
|
247
264
|
public function testOpenDatabase()
|
|
248
265
|
{
|
|
249
|
-
$db = new
|
|
266
|
+
$db = new Database();
|
|
250
267
|
$db->open(URL);
|
|
251
268
|
}
|
|
252
269
|
// open database, call close explicitly
|
|
253
270
|
public function testCloseDatabase()
|
|
254
271
|
{
|
|
255
|
-
$db = new
|
|
272
|
+
$db = new Database();
|
|
256
273
|
$db->open(URL);
|
|
257
274
|
$db->close();
|
|
258
275
|
}
|
|
259
276
|
// open database, open table, not call close explicitly
|
|
260
277
|
public function testOpenA()
|
|
261
278
|
{
|
|
262
|
-
$db = new
|
|
279
|
+
$db = new Database();
|
|
263
280
|
$db->open(URL);
|
|
264
|
-
$
|
|
281
|
+
$this->openTable($db);
|
|
265
282
|
}
|
|
266
283
|
// open database, open table, call close explicitly
|
|
267
284
|
public function testOpenB()
|
|
268
285
|
{
|
|
269
|
-
$db = new
|
|
286
|
+
$db = new Database();
|
|
270
287
|
$db->open(URL);
|
|
271
288
|
$tb = $this->openTable($db);
|
|
272
289
|
$tb->close();
|
|
@@ -275,7 +292,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
275
292
|
// open database, open table, call database::close explicitly
|
|
276
293
|
public function testOpenC()
|
|
277
294
|
{
|
|
278
|
-
$db = new
|
|
295
|
+
$db = new Database();
|
|
279
296
|
$db->open(URL);
|
|
280
297
|
$tb = $this->openTable($db);
|
|
281
298
|
$db->close();
|
|
@@ -283,7 +300,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
283
300
|
// open database, open table, call table::close explicitly
|
|
284
301
|
public function testOpenD()
|
|
285
302
|
{
|
|
286
|
-
$db = new
|
|
303
|
+
$db = new Database();
|
|
287
304
|
$db->open(URL);
|
|
288
305
|
$tb = $this->openTable($db);
|
|
289
306
|
$tb->close();
|
|
@@ -291,14 +308,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
291
308
|
// open database, open table, call table::release explicitly
|
|
292
309
|
public function testOpenE()
|
|
293
310
|
{
|
|
294
|
-
$db = new
|
|
311
|
+
$db = new Database();
|
|
295
312
|
$db->open(URL);
|
|
296
313
|
$tb = $this->openTable($db);
|
|
297
314
|
$tb->release();
|
|
298
315
|
}
|
|
299
316
|
public function testClone()
|
|
300
317
|
{
|
|
301
|
-
$db = new
|
|
318
|
+
$db = new Database();
|
|
302
319
|
$db->open(URL);
|
|
303
320
|
$this->assertEquals($db->stat(), 0);
|
|
304
321
|
$this->assertEquals($db->isOpened(), true);
|
|
@@ -315,54 +332,55 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
315
332
|
}
|
|
316
333
|
public function testVersion()
|
|
317
334
|
{
|
|
318
|
-
$db = new
|
|
335
|
+
$db = new Database();
|
|
319
336
|
$db->connect(URL_HOST);
|
|
320
337
|
$this->assertEquals($db->stat(), 0);
|
|
321
|
-
$vv = new
|
|
338
|
+
$vv = new BtrVersions();
|
|
322
339
|
$db->getBtrVersion($vv);
|
|
323
340
|
$this->assertEquals($db->stat(), 0);
|
|
324
341
|
$client_ver = $vv->version(0);
|
|
325
342
|
$server_ver = $vv->version(1);
|
|
326
343
|
$engine_ver = $vv->version(2);
|
|
327
|
-
$this->assertEquals($client_ver->majorVersion,
|
|
328
|
-
$this->assertEquals($client_ver->minorVersion,
|
|
344
|
+
$this->assertEquals($client_ver->majorVersion, Transactd::CPP_INTERFACE_VER_MAJOR);
|
|
345
|
+
$this->assertEquals($client_ver->minorVersion, Transactd::CPP_INTERFACE_VER_MINOR);
|
|
329
346
|
$this->assertEquals(chr($client_ver->type), 'N');
|
|
330
347
|
$my5x = ($server_ver->majorVersion == 5) && ($server_ver->minorVersion >= 5);
|
|
331
348
|
$maria10 = ($server_ver->majorVersion == 10) && ($server_ver->minorVersion <= 1);
|
|
332
349
|
$this->assertTrue($my5x || $maria10);
|
|
333
350
|
$tmp = (chr($server_ver->type) == 'M') || (chr($server_ver->type) == 'A');
|
|
334
351
|
$this->assertTrue($tmp);
|
|
335
|
-
$this->assertEquals($engine_ver->majorVersion,
|
|
336
|
-
$this->assertEquals($engine_ver->minorVersion,
|
|
352
|
+
$this->assertEquals($engine_ver->majorVersion, Transactd::TRANSACTD_VER_MAJOR);
|
|
353
|
+
$this->assertEquals($engine_ver->minorVersion, Transactd::TRANSACTD_VER_MINOR);
|
|
337
354
|
$this->assertEquals(chr($engine_ver->type), 'T');
|
|
338
355
|
}
|
|
339
356
|
public function testReadDatabaseDirectory()
|
|
340
357
|
{
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
358
|
+
$db = new Database();
|
|
359
|
+
$tb = $this->openTable($db);
|
|
360
|
+
$this->assertNotEquals($tb, null);
|
|
361
|
+
$s = $db->readDatabaseDirectory();
|
|
362
|
+
$this->assertNotEquals($s, '');
|
|
346
363
|
}
|
|
347
364
|
public function testGetFileName()
|
|
348
365
|
{
|
|
349
366
|
$s = '';
|
|
350
|
-
if (PHP_OS == 'WIN32' || PHP_OS == 'WINNT')
|
|
351
|
-
|
|
352
|
-
else
|
|
353
|
-
|
|
367
|
+
if (PHP_OS == 'WIN32' || PHP_OS == 'WINNT') {
|
|
368
|
+
$s = Nstable::getFileName('test\abcdefghijklnmopqrstuvwxyz1234567890.txt');
|
|
369
|
+
} else {
|
|
370
|
+
$s = Nstable::getFileName('test/abcdefghijklnmopqrstuvwxyz1234567890.txt');
|
|
371
|
+
}
|
|
354
372
|
$this->assertEquals($s, 'abcdefghijklnmopqrstuvwxyz1234567890.txt');
|
|
355
373
|
}
|
|
356
374
|
public function testGetDirURI()
|
|
357
375
|
{
|
|
358
|
-
|
|
359
|
-
|
|
376
|
+
$s = Nstable::getDirURI('tdap://localhost/test?dbfile=test.bdf');
|
|
377
|
+
$this->assertEquals($s, 'tdap://localhost/test?dbfile=');
|
|
360
378
|
}
|
|
361
379
|
public function testInsert()
|
|
362
380
|
{
|
|
363
|
-
$db = new
|
|
381
|
+
$db = new Database();
|
|
364
382
|
$tb = $this->openTable($db);
|
|
365
|
-
$this->assertNotEquals($tb,
|
|
383
|
+
$this->assertNotEquals($tb, null);
|
|
366
384
|
$this->assertEquals($tb->recordCount(), 0);
|
|
367
385
|
$tb->clearBuffer();
|
|
368
386
|
$tb->setFV(FDI_ID, 1);
|
|
@@ -375,13 +393,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
375
393
|
$db->beginTrn();
|
|
376
394
|
$n = 1;
|
|
377
395
|
$tb->seekLast();
|
|
378
|
-
if ($tb->stat() == 0)
|
|
379
|
-
{
|
|
396
|
+
if ($tb->stat() == 0) {
|
|
380
397
|
$n = $tb->getFVint(FDI_ID) + 1;
|
|
381
398
|
}
|
|
382
399
|
$tb->beginBulkInsert(BULKBUFSIZE);
|
|
383
|
-
for ($i = $n; $i <= (TEST_COUNT + $n); $i++)
|
|
384
|
-
{
|
|
400
|
+
for ($i = $n; $i <= (TEST_COUNT + $n); $i++) {
|
|
385
401
|
$tb->clearBuffer();
|
|
386
402
|
$tb->setFV(FDI_ID, $i);
|
|
387
403
|
$tb->setFV(FDI_NAME, "" . $i);
|
|
@@ -393,21 +409,21 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
393
409
|
}
|
|
394
410
|
public function testFind()
|
|
395
411
|
{
|
|
396
|
-
$db = new
|
|
412
|
+
$db = new Database();
|
|
397
413
|
$tb = $this->openTable($db);
|
|
398
|
-
$this->assertNotEquals($tb,
|
|
414
|
+
$this->assertNotEquals($tb, null);
|
|
399
415
|
$tb->setKeyNum(0);
|
|
400
416
|
$tb->clearBuffer();
|
|
401
417
|
$tb->setFilter('id >= 10 and id < ' . TEST_COUNT, 1, 0);
|
|
402
418
|
$v = 10;
|
|
403
419
|
$tb->setFV(FDI_ID, $v);
|
|
404
|
-
$tb->find(
|
|
420
|
+
$tb->find(Table::findForword);
|
|
405
421
|
$i = $v;
|
|
406
|
-
while ($i < TEST_COUNT)
|
|
407
|
-
{
|
|
422
|
+
while ($i < TEST_COUNT) {
|
|
408
423
|
$this->assertEquals($tb->stat(), 0);
|
|
409
|
-
if ($tb->stat() != 0)
|
|
424
|
+
if ($tb->stat() != 0) {
|
|
410
425
|
break;
|
|
426
|
+
}
|
|
411
427
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
412
428
|
$tb->findNext(true); // 11 - 19
|
|
413
429
|
$i = $i + 1;
|
|
@@ -416,13 +432,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
416
432
|
$tb->clearBuffer();
|
|
417
433
|
$v = TEST_COUNT - 1;
|
|
418
434
|
$tb->setFV(FDI_ID, $v);
|
|
419
|
-
$tb->find(
|
|
435
|
+
$tb->find(Table::findBackForword);
|
|
420
436
|
$i = $v;
|
|
421
|
-
while ($i >= 10)
|
|
422
|
-
{
|
|
437
|
+
while ($i >= 10) {
|
|
423
438
|
$this->assertEquals($tb->stat(), 0);
|
|
424
|
-
if ($tb->stat() != 0)
|
|
439
|
+
if ($tb->stat() != 0) {
|
|
425
440
|
break;
|
|
441
|
+
}
|
|
426
442
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
427
443
|
$tb->findPrev(true); // 11 - 19
|
|
428
444
|
$i = $i - 1;
|
|
@@ -431,14 +447,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
431
447
|
$tb->clearBuffer();
|
|
432
448
|
$v = TEST_COUNT;
|
|
433
449
|
$tb->setFV(FDI_ID, $v);
|
|
434
|
-
$tb->find(
|
|
435
|
-
$this->assertEquals($tb->stat(),
|
|
450
|
+
$tb->find(Table::findForword);
|
|
451
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_EOF);
|
|
436
452
|
}
|
|
437
453
|
public function testFindNext()
|
|
438
454
|
{
|
|
439
|
-
$db = new
|
|
455
|
+
$db = new Database();
|
|
440
456
|
$tb = $this->openTable($db);
|
|
441
|
-
$this->assertNotEquals($tb,
|
|
457
|
+
$this->assertNotEquals($tb, null);
|
|
442
458
|
$tb->setKeyNum(0);
|
|
443
459
|
$tb->clearBuffer();
|
|
444
460
|
$tb->setFilter('id >= 10 and id < ' . TEST_COUNT, 1, 0);
|
|
@@ -446,23 +462,23 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
446
462
|
$tb->setFV(FDI_ID, $v);
|
|
447
463
|
$tb->seekGreater(true);
|
|
448
464
|
$this->assertEquals($tb->getFVint(FDI_ID), $v);
|
|
449
|
-
for ($i = $v + 1; $i <= (TEST_COUNT - 1); $i++)
|
|
450
|
-
{
|
|
465
|
+
for ($i = $v + 1; $i <= (TEST_COUNT - 1); $i++) {
|
|
451
466
|
$tb->findNext(true); // 11 - 19
|
|
452
|
-
if ($tb->stat() != 0)
|
|
467
|
+
if ($tb->stat() != 0) {
|
|
453
468
|
break;
|
|
469
|
+
}
|
|
454
470
|
$this->assertEquals($tb->stat(), 0);
|
|
455
471
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
456
472
|
}
|
|
457
473
|
}
|
|
458
474
|
public function testFindIn()
|
|
459
475
|
{
|
|
460
|
-
$db = new
|
|
476
|
+
$db = new Database();
|
|
461
477
|
$tb = $this->openTable($db);
|
|
462
|
-
$this->assertNotEquals($tb,
|
|
478
|
+
$this->assertNotEquals($tb, null);
|
|
463
479
|
$tb->setKeyNum(0);
|
|
464
480
|
$tb->clearBuffer();
|
|
465
|
-
$q = new
|
|
481
|
+
$q = new Query();
|
|
466
482
|
$q->addSeekKeyValue('10', true);
|
|
467
483
|
$q->addSeekKeyValue('300000');
|
|
468
484
|
$q->addSeekKeyValue('50');
|
|
@@ -476,7 +492,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
476
492
|
$this->assertEquals($tb->stat(), 0);
|
|
477
493
|
$this->assertEquals($tb->getFVint(FDI_ID), 10);
|
|
478
494
|
$tb->findNext();
|
|
479
|
-
$this->assertEquals($tb->stat(),
|
|
495
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_NOT_FOUND_TI);
|
|
480
496
|
|
|
481
497
|
$msg = $tb->keyValueDescription();
|
|
482
498
|
$this->assertEquals($msg, "table:user\nstat:4\nid = 300000\n");
|
|
@@ -484,7 +500,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
484
500
|
$tb->findNext();
|
|
485
501
|
$this->assertEquals($tb->getFVint(FDI_ID), 50);
|
|
486
502
|
$tb->findNext();
|
|
487
|
-
$this->assertEquals($tb->stat(),
|
|
503
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_NOT_FOUND_TI);
|
|
488
504
|
|
|
489
505
|
$msg = $tb->keyValueDescription();
|
|
490
506
|
$this->assertEquals($msg, "table:user\nstat:4\nid = -1\n");
|
|
@@ -494,11 +510,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
494
510
|
$tb->findNext();
|
|
495
511
|
$this->assertEquals($tb->getFVint(FDI_ID), 5000);
|
|
496
512
|
$tb->findNext();
|
|
497
|
-
$this->assertEquals($tb->stat(),
|
|
513
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_EOF);
|
|
498
514
|
|
|
499
515
|
// Many params
|
|
500
|
-
for($i = 1; $i <= 10000; $i++)
|
|
501
|
-
{
|
|
516
|
+
for ($i = 1; $i <= 10000; $i++) {
|
|
502
517
|
$q->addSeekKeyValue(strval($i), ($i == 1)); // reset
|
|
503
518
|
}
|
|
504
519
|
$tb->setQuery($q);
|
|
@@ -506,13 +521,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
506
521
|
|
|
507
522
|
$tb->find();
|
|
508
523
|
$i = 0;
|
|
509
|
-
while($tb->stat() == 0)
|
|
510
|
-
{
|
|
524
|
+
while ($tb->stat() == 0) {
|
|
511
525
|
$i++;
|
|
512
526
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
513
527
|
$tb->findNext(true);
|
|
514
528
|
}
|
|
515
|
-
$this->assertEquals($tb->stat(),
|
|
529
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_EOF);
|
|
516
530
|
$this->assertEquals($i, 10000);
|
|
517
531
|
|
|
518
532
|
//LogicalCountLimit
|
|
@@ -521,20 +535,19 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
521
535
|
|
|
522
536
|
$tb->find();
|
|
523
537
|
$i = 0;
|
|
524
|
-
while ($tb->stat() == 0)
|
|
525
|
-
{
|
|
538
|
+
while ($tb->stat() == 0) {
|
|
526
539
|
$i++;
|
|
527
540
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
528
541
|
$tb->findNext(true);
|
|
529
542
|
}
|
|
530
|
-
$this->assertEquals($tb->stat(),
|
|
543
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_EOF);
|
|
531
544
|
$this->assertEquals($i, 10000);
|
|
532
545
|
}
|
|
533
546
|
public function testGetPercentage()
|
|
534
547
|
{
|
|
535
|
-
$db = new
|
|
548
|
+
$db = new Database();
|
|
536
549
|
$tb = $this->openTable($db);
|
|
537
|
-
$this->assertNotEquals($tb,
|
|
550
|
+
$this->assertNotEquals($tb, null);
|
|
538
551
|
$tb->clearBuffer();
|
|
539
552
|
$vv = TEST_COUNT / 2 + 1;
|
|
540
553
|
$tb->setFV(FDI_ID, $vv);
|
|
@@ -545,9 +558,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
545
558
|
}
|
|
546
559
|
public function testMovePercentage()
|
|
547
560
|
{
|
|
548
|
-
$db = new
|
|
561
|
+
$db = new Database();
|
|
549
562
|
$tb = $this->openTable($db);
|
|
550
|
-
$this->assertNotEquals($tb,
|
|
563
|
+
$this->assertNotEquals($tb, null);
|
|
551
564
|
$tb->clearBuffer();
|
|
552
565
|
$tb->seekByPercentage(5000); // 50%
|
|
553
566
|
$this->assertEquals($tb->stat(), 0);
|
|
@@ -558,12 +571,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
558
571
|
|
|
559
572
|
public function testGetEqual()
|
|
560
573
|
{
|
|
561
|
-
$db = new
|
|
574
|
+
$db = new Database();
|
|
562
575
|
$tb = $this->openTable($db);
|
|
563
|
-
$this->assertNotEquals($tb,
|
|
576
|
+
$this->assertNotEquals($tb, null);
|
|
564
577
|
$db->beginSnapshot();
|
|
565
|
-
for ($i = 2; $i <= (TEST_COUNT + 1); $i++)
|
|
566
|
-
{
|
|
578
|
+
for ($i = 2; $i <= (TEST_COUNT + 1); $i++) {
|
|
567
579
|
$tb->clearBuffer();
|
|
568
580
|
$tb->setFV(FDI_ID, $i);
|
|
569
581
|
$tb->seek();
|
|
@@ -573,41 +585,41 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
573
585
|
}
|
|
574
586
|
public function testGetNext()
|
|
575
587
|
{
|
|
576
|
-
$db = new
|
|
588
|
+
$db = new Database();
|
|
577
589
|
$tb = $this->openTable($db);
|
|
578
|
-
$this->assertNotEquals($tb,
|
|
590
|
+
$this->assertNotEquals($tb, null);
|
|
579
591
|
$db->beginSnapshot();
|
|
580
592
|
$vv = 2;
|
|
581
593
|
$tb->clearBuffer();
|
|
582
594
|
$tb->setFV(FDI_ID, $vv);
|
|
583
595
|
$tb->seek();
|
|
584
596
|
$this->assertEquals($tb->getFVint(FDI_ID), $vv);
|
|
585
|
-
for ($i = 3; $i <= (TEST_COUNT + 1); $i++)
|
|
586
|
-
{
|
|
597
|
+
for ($i = 3; $i <= (TEST_COUNT + 1); $i++) {
|
|
587
598
|
$tb->seekNext();
|
|
588
599
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
589
|
-
if ($i != $tb->getFVint(FDI_ID))
|
|
600
|
+
if ($i != $tb->getFVint(FDI_ID)) {
|
|
590
601
|
break;
|
|
602
|
+
}
|
|
591
603
|
}
|
|
592
604
|
$db->endSnapshot();
|
|
593
605
|
}
|
|
594
606
|
public function testGetPrevious()
|
|
595
607
|
{
|
|
596
|
-
$db = new
|
|
608
|
+
$db = new Database();
|
|
597
609
|
$tb = $this->openTable($db);
|
|
598
|
-
$this->assertNotEquals($tb,
|
|
610
|
+
$this->assertNotEquals($tb, null);
|
|
599
611
|
$db->beginSnapshot();
|
|
600
612
|
$vv = TEST_COUNT + 1;
|
|
601
613
|
$tb->clearBuffer();
|
|
602
614
|
$tb->setFV(FDI_ID, $vv);
|
|
603
615
|
$tb->seek();
|
|
604
616
|
$this->assertEquals($tb->getFVint(FDI_ID), $vv);
|
|
605
|
-
for ($i = TEST_COUNT; $i >= 2; $i--)
|
|
606
|
-
{
|
|
617
|
+
for ($i = TEST_COUNT; $i >= 2; $i--) {
|
|
607
618
|
$tb->seekPrev();
|
|
608
619
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
609
|
-
if ($i != $tb->getFVint(FDI_ID))
|
|
620
|
+
if ($i != $tb->getFVint(FDI_ID)) {
|
|
610
621
|
break;
|
|
622
|
+
}
|
|
611
623
|
}
|
|
612
624
|
$tb->seekPrev();
|
|
613
625
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'kosaka');
|
|
@@ -618,21 +630,21 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
618
630
|
$tb->setFV(FDI_ID, $vv);
|
|
619
631
|
$tb->seek();
|
|
620
632
|
$this->assertEquals($tb->getFVint(FDI_ID), $vv);
|
|
621
|
-
for ($i = TEST_COUNT; $i > 1; $i--)
|
|
622
|
-
{
|
|
633
|
+
for ($i = TEST_COUNT; $i > 1; $i--) {
|
|
623
634
|
$tb->seekPrev();
|
|
624
635
|
$this->assertEquals($tb->getFVint(FDI_ID), $i);
|
|
625
|
-
if ($i != $tb->getFVint(FDI_ID))
|
|
636
|
+
if ($i != $tb->getFVint(FDI_ID)) {
|
|
626
637
|
break;
|
|
638
|
+
}
|
|
627
639
|
}
|
|
628
640
|
$tb->seekPrev();
|
|
629
641
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'kosaka');
|
|
630
642
|
}
|
|
631
643
|
public function testGetGreater()
|
|
632
644
|
{
|
|
633
|
-
$db = new
|
|
645
|
+
$db = new Database();
|
|
634
646
|
$tb = $this->openTable($db);
|
|
635
|
-
$this->assertNotEquals($tb,
|
|
647
|
+
$this->assertNotEquals($tb, null);
|
|
636
648
|
$vv = TEST_COUNT * 3 / 4;
|
|
637
649
|
$tb->clearBuffer();
|
|
638
650
|
$tb->setFV(FDI_ID, $vv);
|
|
@@ -650,9 +662,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
650
662
|
}
|
|
651
663
|
public function testGetLessThan()
|
|
652
664
|
{
|
|
653
|
-
$db = new
|
|
665
|
+
$db = new Database();
|
|
654
666
|
$tb = $this->openTable($db);
|
|
655
|
-
$this->assertNotEquals($tb,
|
|
667
|
+
$this->assertNotEquals($tb, null);
|
|
656
668
|
$vv = TEST_COUNT * 3 / 4;
|
|
657
669
|
$tb->clearBuffer();
|
|
658
670
|
$tb->setFV(FDI_ID, $vv);
|
|
@@ -670,27 +682,27 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
670
682
|
}
|
|
671
683
|
public function testGetFirst()
|
|
672
684
|
{
|
|
673
|
-
$db = new
|
|
685
|
+
$db = new Database();
|
|
674
686
|
$tb = $this->openTable($db);
|
|
675
|
-
$this->assertNotEquals($tb,
|
|
687
|
+
$this->assertNotEquals($tb, null);
|
|
676
688
|
$tb->clearBuffer();
|
|
677
689
|
$tb->seekFirst();
|
|
678
690
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'kosaka');
|
|
679
691
|
}
|
|
680
692
|
public function testGetLast()
|
|
681
693
|
{
|
|
682
|
-
$db = new
|
|
694
|
+
$db = new Database();
|
|
683
695
|
$tb = $this->openTable($db);
|
|
684
|
-
$this->assertNotEquals($tb,
|
|
696
|
+
$this->assertNotEquals($tb, null);
|
|
685
697
|
$tb->clearBuffer();
|
|
686
698
|
$tb->seekLast();
|
|
687
699
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '' . (TEST_COUNT + 2));
|
|
688
700
|
}
|
|
689
701
|
public function testMovePosition()
|
|
690
702
|
{
|
|
691
|
-
$db = new
|
|
703
|
+
$db = new Database();
|
|
692
704
|
$tb = $this->openTable($db);
|
|
693
|
-
$this->assertNotEquals($tb,
|
|
705
|
+
$this->assertNotEquals($tb, null);
|
|
694
706
|
$vv = TEST_COUNT * 3 / 4;
|
|
695
707
|
$tb->clearBuffer();
|
|
696
708
|
$tb->setFV(FDI_ID, $vv);
|
|
@@ -711,9 +723,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
711
723
|
}
|
|
712
724
|
public function testUpdate()
|
|
713
725
|
{
|
|
714
|
-
$db = new
|
|
726
|
+
$db = new Database();
|
|
715
727
|
$tb = $this->openTable($db);
|
|
716
|
-
$this->assertNotEquals($tb,
|
|
728
|
+
$this->assertNotEquals($tb, null);
|
|
717
729
|
$db->beginTrn();
|
|
718
730
|
// test of ncc
|
|
719
731
|
$v = 5;
|
|
@@ -723,7 +735,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
723
735
|
$this->assertEquals($tb->stat(), 0);
|
|
724
736
|
$v = TEST_COUNT + TEST_COUNT / 2;
|
|
725
737
|
$tb->setFV(FDI_ID, $v);
|
|
726
|
-
$tb->update(
|
|
738
|
+
$tb->update(Table::changeCurrentNcc); // 5 . 30000 cur 5
|
|
727
739
|
$this->assertEquals($tb->stat(), 0);
|
|
728
740
|
$tb->seekNext(); // next 5
|
|
729
741
|
$this->assertEquals($tb->getFVint(FDI_ID), 6);
|
|
@@ -733,14 +745,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
733
745
|
$this->assertEquals($tb->getFVint(FDI_ID), $v);
|
|
734
746
|
$v = 5;
|
|
735
747
|
$tb->setFV(FDI_ID, $v);
|
|
736
|
-
$tb->update(
|
|
748
|
+
$tb->update(Table::changeCurrentCc); // 19999 . 5 cur 5
|
|
737
749
|
$this->assertEquals($tb->stat(), 0);
|
|
738
750
|
$tb->seekNext();
|
|
739
751
|
$this->assertEquals($tb->stat(), 0);
|
|
740
752
|
$this->assertEquals($tb->getFVint(FDI_ID), 6);
|
|
741
753
|
$v = TEST_COUNT - 1;
|
|
742
754
|
$tb->setFV(FDI_ID, $v);
|
|
743
|
-
$tb->update(
|
|
755
|
+
$tb->update(Table::changeCurrentCc); // 6 . 19999 cur 19999
|
|
744
756
|
$tb->seekPrev(); // prev 19999
|
|
745
757
|
$this->assertEquals($tb->getFVint(FDI_ID), $v -1);
|
|
746
758
|
$v = 10;
|
|
@@ -750,8 +762,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
750
762
|
$this->assertEquals($tb->stat(), 0);
|
|
751
763
|
$tb->seekNext();
|
|
752
764
|
$this->assertEquals($tb->getFVint(FDI_ID), 11);
|
|
753
|
-
for ($i = 10; $i <= (TEST_COUNT - 2); $i++)
|
|
754
|
-
{
|
|
765
|
+
for ($i = 10; $i <= (TEST_COUNT - 2); $i++) {
|
|
755
766
|
$tb->clearBuffer();
|
|
756
767
|
$tb->setFV(FDI_ID, $i);
|
|
757
768
|
$tb->seek();
|
|
@@ -766,7 +777,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
766
777
|
$v = 8;
|
|
767
778
|
$tb->setFV(FDI_ID, $v);
|
|
768
779
|
$tb->setFV(FDI_NAME, 'ABC');
|
|
769
|
-
$tb->update(
|
|
780
|
+
$tb->update(Table::changeInKey);
|
|
770
781
|
$this->assertEquals($tb->stat(), 0);
|
|
771
782
|
$tb->clearBuffer();
|
|
772
783
|
$tb->setFV(FDI_ID, $v);
|
|
@@ -775,27 +786,27 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
775
786
|
}
|
|
776
787
|
public function testSnapshot()
|
|
777
788
|
{
|
|
778
|
-
$db = new
|
|
789
|
+
$db = new Database();
|
|
779
790
|
$tb = $this->openTable($db);
|
|
780
|
-
$this->assertNotEquals($tb,
|
|
791
|
+
$this->assertNotEquals($tb, null);
|
|
781
792
|
$tbg = $db->openTable('group');
|
|
782
793
|
$this->assertEquals($db->stat(), 0);
|
|
783
|
-
$this->assertNotEquals($tbg,
|
|
784
|
-
$db2 = new
|
|
794
|
+
$this->assertNotEquals($tbg, null);
|
|
795
|
+
$db2 = new Database();
|
|
785
796
|
$this->assertEquals($db2->stat(), 0);
|
|
786
797
|
$db2->connect(URL_DB, true);
|
|
787
798
|
$tb2 = $this->openTable($db2);
|
|
788
|
-
$this->assertNotEquals($tb2,
|
|
799
|
+
$this->assertNotEquals($tb2, null);
|
|
789
800
|
$tbg2 = $db2->openTable('group');
|
|
790
801
|
$this->assertEquals($db2->stat(), 0);
|
|
791
|
-
$this->assertNotEquals($tbg2,
|
|
802
|
+
$this->assertNotEquals($tbg2, null);
|
|
792
803
|
|
|
793
804
|
// No locking repeatable read
|
|
794
805
|
// ----------------------------------------------------
|
|
795
806
|
$db->beginSnapshot(); // CONSISTENT_READ is default
|
|
796
807
|
$this->assertEquals($db->stat(), 0);
|
|
797
808
|
$db->beginTrn();
|
|
798
|
-
$this->assertEquals($db->stat(),
|
|
809
|
+
$this->assertEquals($db->stat(), Transactd::STATUS_ALREADY_INSNAPSHOT);
|
|
799
810
|
|
|
800
811
|
$tb->setKeyNum(0);
|
|
801
812
|
$tb->seekFirst();
|
|
@@ -805,7 +816,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
805
816
|
$this->assertEquals($tb->stat(), 0);
|
|
806
817
|
$this->assertEquals($tb->getFVint(FDI_ID), 2);
|
|
807
818
|
$tbg->seekFirst();
|
|
808
|
-
$this->assertEquals($tbg->stat(),
|
|
819
|
+
$this->assertEquals($tbg->stat(), Transactd::STATUS_EOF);
|
|
809
820
|
$this->assertEquals($tbg->recordCount(false), 0);
|
|
810
821
|
|
|
811
822
|
// Change data on 2 tables by another connection
|
|
@@ -827,17 +838,17 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
827
838
|
$this->assertEquals($secondValue, $firstValue, "$firstValue != $secondValue");
|
|
828
839
|
|
|
829
840
|
$tbg->seekFirst();
|
|
830
|
-
$this->assertEquals($tbg->stat(),
|
|
841
|
+
$this->assertEquals($tbg->stat(), Transactd::STATUS_EOF);
|
|
831
842
|
$this->assertEquals($tbg->recordCount(false), 0);
|
|
832
843
|
|
|
833
844
|
// in-snapshot update
|
|
834
845
|
$tb->update();
|
|
835
|
-
$this->assertEquals($tb->stat(),
|
|
846
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_INVALID_LOCKTYPE);
|
|
836
847
|
|
|
837
848
|
// in-snapshot insert
|
|
838
849
|
$tb->setFV(FDI_ID, 0);
|
|
839
850
|
$tb->insert();
|
|
840
|
-
$this->assertEquals($tb->stat(),
|
|
851
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_INVALID_LOCKTYPE);
|
|
841
852
|
|
|
842
853
|
// phantom read
|
|
843
854
|
$tb2->setFV(FDI_ID, 29999);
|
|
@@ -845,7 +856,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
845
856
|
$this->assertEquals($tb2->stat(), 0);
|
|
846
857
|
$tb->setFV(FDI_ID, 29999);
|
|
847
858
|
$tb->seek();
|
|
848
|
-
$this->assertEquals($tb->stat(),
|
|
859
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_NOT_FOUND_TI);
|
|
849
860
|
|
|
850
861
|
// clean up
|
|
851
862
|
$tb2->setFV(FDI_ID, 29999);
|
|
@@ -866,7 +877,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
866
877
|
$this->assertEquals($tbg->recordCount(false), 1);
|
|
867
878
|
|
|
868
879
|
// gap lock
|
|
869
|
-
$db->beginSnapshot(
|
|
880
|
+
$db->beginSnapshot(Transactd::MULTILOCK_GAP_SHARE);
|
|
870
881
|
$tb->seekLast(); // id = 30000
|
|
871
882
|
$this->assertEquals($tb->stat(), 0);
|
|
872
883
|
$tb->seekPrev(); // id = 20002
|
|
@@ -876,12 +887,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
876
887
|
|
|
877
888
|
$tb2->setFV(FDI_ID, 29999);
|
|
878
889
|
$tb2->insert();
|
|
879
|
-
$this->assertEquals($tb2->stat(),
|
|
890
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
880
891
|
|
|
881
892
|
$db->endSnapshot();
|
|
882
893
|
|
|
883
894
|
// gap lock
|
|
884
|
-
$db->beginSnapshot(
|
|
895
|
+
$db->beginSnapshot(Transactd::MULTILOCK_NOGAP_SHARE);
|
|
885
896
|
$tb->seekLast(); // id = 30000
|
|
886
897
|
$this->assertEquals($tb->stat(), 0);
|
|
887
898
|
$tb->seekPrev(); // id = 20002
|
|
@@ -890,24 +901,24 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
890
901
|
$this->assertEquals($tb->stat(), 0);
|
|
891
902
|
|
|
892
903
|
$tb2->setFV(FDI_ID, 20002);
|
|
893
|
-
$tb2->seek(
|
|
894
|
-
$this->assertEquals($tb2->stat(),
|
|
904
|
+
$tb2->seek(Transactd::ROW_LOCK_X);
|
|
905
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
895
906
|
|
|
896
|
-
$tb2->seekLast(
|
|
897
|
-
$this->assertEquals($tb2->stat(),
|
|
907
|
+
$tb2->seekLast(Transactd::ROW_LOCK_X);
|
|
908
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
898
909
|
|
|
899
910
|
$db->endSnapshot();
|
|
900
911
|
}
|
|
901
912
|
public function testConflict()
|
|
902
913
|
{
|
|
903
|
-
$db = new
|
|
914
|
+
$db = new Database();
|
|
904
915
|
$tb = $this->openTable($db);
|
|
905
|
-
$db2 = new
|
|
916
|
+
$db2 = new Database();
|
|
906
917
|
$db2->connect(URL_DB, true);
|
|
907
918
|
$this->assertEquals($db2->stat(), 0);
|
|
908
|
-
$this->assertNotEquals($tb,
|
|
919
|
+
$this->assertNotEquals($tb, null);
|
|
909
920
|
$tb2 = $this->openTable($db2);
|
|
910
|
-
$this->assertNotEquals($tb2,
|
|
921
|
+
$this->assertNotEquals($tb2, null);
|
|
911
922
|
$tb->setKeyNum(0);
|
|
912
923
|
$tb->seekFirst();
|
|
913
924
|
$this->assertEquals($tb->stat(), 0);
|
|
@@ -925,7 +936,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
925
936
|
// Change same record data by original connection
|
|
926
937
|
$tb->setFV(FDI_ID, $tb->getFVint(FDI_ID) - 8);
|
|
927
938
|
$tb->update();
|
|
928
|
-
$this->assertEquals($tb->stat(),
|
|
939
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_CHANGE_CONFLICT);
|
|
929
940
|
// ----------------------------------------------------
|
|
930
941
|
// Change Non index field
|
|
931
942
|
// ----------------------------------------------------
|
|
@@ -941,7 +952,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
941
952
|
// Change same record data by original connection
|
|
942
953
|
$tb->setFV(FDI_NAME, $tb->getFVint(FDI_NAME) - 8);
|
|
943
954
|
$tb->update();
|
|
944
|
-
$this->assertEquals($tb->stat(),
|
|
955
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_CHANGE_CONFLICT);
|
|
945
956
|
// ----------------------------------------------------
|
|
946
957
|
$tb2->release();
|
|
947
958
|
$tb->release();
|
|
@@ -951,20 +962,20 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
951
962
|
// isoration Level ISO_REPEATABLE_READ
|
|
952
963
|
public function testTransactionLockRepeatable()
|
|
953
964
|
{
|
|
954
|
-
$db = new
|
|
965
|
+
$db = new Database();
|
|
955
966
|
$tb = $this->openTable($db);
|
|
956
|
-
$this->assertNotEquals($tb,
|
|
957
|
-
$db2 = new
|
|
967
|
+
$this->assertNotEquals($tb, null);
|
|
968
|
+
$db2 = new Database();
|
|
958
969
|
$db2->connect(URL_DB, true);
|
|
959
970
|
$this->assertEquals($db2->stat(), 0);
|
|
960
971
|
$tb2 = $this->openTable($db2);
|
|
961
|
-
$this->assertNotEquals($tb2,
|
|
972
|
+
$this->assertNotEquals($tb2, null);
|
|
962
973
|
|
|
963
|
-
$db->beginTrn(
|
|
974
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
964
975
|
$this->assertEquals($db->stat(), 0);
|
|
965
976
|
// Test Invalid operation
|
|
966
977
|
$db->beginSnapshot();
|
|
967
|
-
$this->assertEquals($db->stat(),
|
|
978
|
+
$this->assertEquals($db->stat(), Transactd::STATUS_ALREADY_INTRANSACTION);
|
|
968
979
|
|
|
969
980
|
// ------------------------------------------------------
|
|
970
981
|
// Test Read with lock
|
|
@@ -976,7 +987,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
976
987
|
// Add lock(X) the second record
|
|
977
988
|
$tb->seekNext();
|
|
978
989
|
|
|
979
|
-
// No transaction user can read allways. Use consistent_read
|
|
990
|
+
// No transaction user can read allways. Use consistent_read
|
|
980
991
|
$tb2->seekFirst();
|
|
981
992
|
$this->assertEquals($tb2->stat(), 0);
|
|
982
993
|
|
|
@@ -989,7 +1000,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
989
1000
|
|
|
990
1001
|
// Try lock(X)
|
|
991
1002
|
$tb2->seekFirst();
|
|
992
|
-
$this->assertEquals($tb2->stat(),
|
|
1003
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
993
1004
|
$db2->endTrn();
|
|
994
1005
|
$db->endTrn();
|
|
995
1006
|
|
|
@@ -997,14 +1008,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
997
1008
|
// Test single record lock and Transaction lock
|
|
998
1009
|
// ------------------------------------------------------
|
|
999
1010
|
// lock(X) non-transaction
|
|
1000
|
-
$tb2->seekFirst(
|
|
1011
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1001
1012
|
|
|
1002
|
-
$db->beginTrn(
|
|
1013
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1003
1014
|
$this->assertEquals($db->stat(), 0);
|
|
1004
1015
|
|
|
1005
1016
|
// Try lock(X)
|
|
1006
1017
|
$tb->seekFirst();
|
|
1007
|
-
$this->assertEquals($tb->stat(),
|
|
1018
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1008
1019
|
|
|
1009
1020
|
// Remove lock(X)
|
|
1010
1021
|
$tb2->seekFirst();
|
|
@@ -1030,14 +1041,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1030
1041
|
|
|
1031
1042
|
// try lock(X)
|
|
1032
1043
|
$tb2->seekFirst();
|
|
1033
|
-
$this->assertEquals($tb2->stat(),
|
|
1044
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1034
1045
|
|
|
1035
1046
|
// Try unlock updated record. Can not unlock updated record.
|
|
1036
1047
|
$tb->unlock();
|
|
1037
1048
|
|
|
1038
1049
|
// try lock(X)
|
|
1039
1050
|
$tb2->seekFirst();
|
|
1040
|
-
$this->assertEquals($tb2->stat(),
|
|
1051
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1041
1052
|
|
|
1042
1053
|
$db2->endTrn();
|
|
1043
1054
|
$db->endTrn();
|
|
@@ -1045,7 +1056,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1045
1056
|
// ----------------------------------------------------
|
|
1046
1057
|
// Test phantom read
|
|
1047
1058
|
// ----------------------------------------------------
|
|
1048
|
-
$db->beginTrn(
|
|
1059
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1049
1060
|
$this->assertEquals($db->stat(), 0);
|
|
1050
1061
|
|
|
1051
1062
|
// read last row
|
|
@@ -1058,7 +1069,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1058
1069
|
// insert test row
|
|
1059
1070
|
$tb2->setFV(FDI_ID, 29999);
|
|
1060
1071
|
$tb2->insert(); // Can not insert by gap lock
|
|
1061
|
-
$this->assertEquals($tb2->stat(),
|
|
1072
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1062
1073
|
|
|
1063
1074
|
$tb->seekLast();
|
|
1064
1075
|
$this->assertEquals($tb->stat(), 0);
|
|
@@ -1070,29 +1081,29 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1070
1081
|
// ----------------------------------------------------
|
|
1071
1082
|
// Test use shared lock option
|
|
1072
1083
|
// ----------------------------------------------------
|
|
1073
|
-
$db->beginTrn(
|
|
1084
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1074
1085
|
$this->assertEquals(0, $db->stat());
|
|
1075
1086
|
|
|
1076
|
-
$db2->beginTrn(
|
|
1087
|
+
$db2->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1077
1088
|
$this->assertEquals(0, $db2->stat());
|
|
1078
1089
|
|
|
1079
|
-
$tb->seekLast(
|
|
1090
|
+
$tb->seekLast(Transactd::ROW_LOCK_S);
|
|
1080
1091
|
$this->assertEquals(0, $tb->stat());
|
|
1081
|
-
$tb2->seekLast(
|
|
1092
|
+
$tb2->seekLast(Transactd::ROW_LOCK_S);
|
|
1082
1093
|
$this->assertEquals(0, $tb2->stat());
|
|
1083
1094
|
|
|
1084
1095
|
$tb->seekPrev(); // Lock(X)
|
|
1085
1096
|
$this->assertEquals(0, $tb->stat());
|
|
1086
1097
|
|
|
1087
|
-
$tb2->seekPrev(
|
|
1088
|
-
$this->assertEquals(
|
|
1098
|
+
$tb2->seekPrev(Transactd::ROW_LOCK_S);
|
|
1099
|
+
$this->assertEquals(Transactd::STATUS_LOCK_ERROR, $tb2->stat());
|
|
1089
1100
|
|
|
1090
|
-
$tb->seekPrev(
|
|
1101
|
+
$tb->seekPrev(Transactd::ROW_LOCK_S);
|
|
1091
1102
|
$this->assertEquals(0, $tb->stat());
|
|
1092
1103
|
$id = $tb->getFVint(FDI_ID);
|
|
1093
1104
|
|
|
1094
1105
|
$tb2->setFV(FDI_ID, $id);
|
|
1095
|
-
$tb2->seek(
|
|
1106
|
+
$tb2->seek(Transactd::ROW_LOCK_S);
|
|
1096
1107
|
$this->assertEquals(0, $tb2->stat());
|
|
1097
1108
|
|
|
1098
1109
|
$db2->endTrn();
|
|
@@ -1101,7 +1112,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1101
1112
|
// ----------------------------------------------------
|
|
1102
1113
|
// Test Abort
|
|
1103
1114
|
// ----------------------------------------------------
|
|
1104
|
-
$db->beginTrn(
|
|
1115
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1105
1116
|
$this->assertEquals($db->stat(), 0);
|
|
1106
1117
|
|
|
1107
1118
|
// lock(X)
|
|
@@ -1122,55 +1133,55 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1122
1133
|
// ----------------------------------------------------
|
|
1123
1134
|
// Test Query and locks Multi record lock
|
|
1124
1135
|
// ----------------------------------------------------
|
|
1125
|
-
$db->beginTrn(
|
|
1136
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1126
1137
|
$this->assertEquals($db->stat(), 0);
|
|
1127
1138
|
|
|
1128
1139
|
// Test find records are lock.
|
|
1129
|
-
$q = new
|
|
1140
|
+
$q = new Query();
|
|
1130
1141
|
$q->where('id', '<=', 15)->and_('id', '<>', 13)->reject(0xFFFF);
|
|
1131
1142
|
$tb->setQuery($q);
|
|
1132
1143
|
$tb->setFV(FDI_ID, 12);
|
|
1133
1144
|
$tb->find();
|
|
1134
|
-
while ($tb->stat() == 0)
|
|
1145
|
+
while ($tb->stat() == 0) {
|
|
1135
1146
|
$tb->findNext();
|
|
1147
|
+
}
|
|
1136
1148
|
$this->assertEquals($tb->getFVint(FDI_ID), 15);
|
|
1137
1149
|
|
|
1138
1150
|
// all records locked
|
|
1139
|
-
for ($i = 12; $i <= 16; $i++)
|
|
1140
|
-
{
|
|
1151
|
+
for ($i = 12; $i <= 16; $i++) {
|
|
1141
1152
|
$tb2->setFV(FDI_ID, $i);
|
|
1142
|
-
$tb2->seek(
|
|
1143
|
-
$this->assertEquals($tb2->stat(),
|
|
1153
|
+
$tb2->seek(Transactd::ROW_LOCK_X);
|
|
1154
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1144
1155
|
}
|
|
1145
1156
|
$db->endTrn();
|
|
1146
1157
|
}
|
|
1147
1158
|
public function testTransactionLockReadCommited()
|
|
1148
1159
|
{
|
|
1149
|
-
$db = new
|
|
1160
|
+
$db = new Database();
|
|
1150
1161
|
$tb = $this->openTable($db);
|
|
1151
|
-
$this->assertNotEquals($tb,
|
|
1152
|
-
$db2 = new
|
|
1162
|
+
$this->assertNotEquals($tb, null);
|
|
1163
|
+
$db2 = new Database();
|
|
1153
1164
|
$db2->connect(URL_DB, true);
|
|
1154
1165
|
$this->assertEquals($db2->stat(), 0);
|
|
1155
1166
|
$tb2 = $this->openTable($db2);
|
|
1156
|
-
$this->assertNotEquals($tb2,
|
|
1167
|
+
$this->assertNotEquals($tb2, null);
|
|
1157
1168
|
|
|
1158
1169
|
// ------------------------------------------------------
|
|
1159
1170
|
// Test single record lock Transaction and read
|
|
1160
1171
|
// ------------------------------------------------------
|
|
1161
|
-
$db->beginTrn(
|
|
1172
|
+
$db->beginTrn(Transactd::SINGLELOCK_READ_COMMITED);
|
|
1162
1173
|
$this->assertEquals($db->stat(), 0);
|
|
1163
1174
|
// Test Invalid operation
|
|
1164
1175
|
$db->beginSnapshot();
|
|
1165
|
-
$this->assertEquals($db->stat(),
|
|
1176
|
+
$this->assertEquals($db->stat(), Transactd::STATUS_ALREADY_INTRANSACTION);
|
|
1166
1177
|
|
|
1167
1178
|
$tb->setKeyNum(0);
|
|
1168
1179
|
$tb->seekFirst(); // lock(X)
|
|
1169
1180
|
$this->assertEquals($tb->stat(), 0);
|
|
1170
1181
|
|
|
1171
1182
|
// Try lock(X)
|
|
1172
|
-
$tb2->seekFirst(
|
|
1173
|
-
$this->assertEquals($tb2->stat(),
|
|
1183
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1184
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1174
1185
|
|
|
1175
1186
|
// consistent read
|
|
1176
1187
|
$tb2->seekFirst();
|
|
@@ -1190,7 +1201,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1190
1201
|
$this->assertEquals($tb2->stat(), 0);
|
|
1191
1202
|
// Try lock(X) whith lock(IX)
|
|
1192
1203
|
$tb2->update();
|
|
1193
|
-
$this->assertEquals($tb2->stat(),
|
|
1204
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1194
1205
|
|
|
1195
1206
|
// ------------------------------------------------------
|
|
1196
1207
|
// Test single record lock Transaction and Transaction lock
|
|
@@ -1201,14 +1212,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1201
1212
|
$this->assertEquals($tb2->stat(), 0);
|
|
1202
1213
|
// Try lock(X)
|
|
1203
1214
|
$tb2->seekNext();
|
|
1204
|
-
$this->assertEquals($tb2->stat(),
|
|
1215
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1205
1216
|
$db2->endTrn();
|
|
1206
1217
|
$db->endTrn();
|
|
1207
1218
|
|
|
1208
1219
|
// ------------------------------------------------------
|
|
1209
1220
|
// Test multi record lock Transaction and non-transaction read
|
|
1210
1221
|
// ------------------------------------------------------
|
|
1211
|
-
$db->beginTrn(
|
|
1222
|
+
$db->beginTrn(Transactd::MULTILOCK_READ_COMMITED);
|
|
1212
1223
|
$this->assertEquals($db->stat(), 0);
|
|
1213
1224
|
|
|
1214
1225
|
// lock(X) the first record
|
|
@@ -1218,7 +1229,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1218
1229
|
// Add lock(X) the second record
|
|
1219
1230
|
$tb->seekNext();
|
|
1220
1231
|
|
|
1221
|
-
// No transaction user read can read allways. Use consistent_read
|
|
1232
|
+
// No transaction user read can read allways. Use consistent_read
|
|
1222
1233
|
$tb2->seekFirst();
|
|
1223
1234
|
$this->assertEquals($tb2->stat(), 0);
|
|
1224
1235
|
|
|
@@ -1229,12 +1240,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1229
1240
|
// Test unlock
|
|
1230
1241
|
// ------------------------------------------------------
|
|
1231
1242
|
$tb2->seekFirst();
|
|
1232
|
-
$tb2->seekNext(
|
|
1233
|
-
$this->assertEquals($tb2->stat(),
|
|
1243
|
+
$tb2->seekNext(Transactd::ROW_LOCK_X);
|
|
1244
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1234
1245
|
|
|
1235
1246
|
$tb->unlock();
|
|
1236
1247
|
// retry seekNext. Before operation is failed but do not lost currency.
|
|
1237
|
-
$tb2->seekNext(
|
|
1248
|
+
$tb2->seekNext(Transactd::ROW_LOCK_X);
|
|
1238
1249
|
$this->assertEquals($tb2->stat(), 0);
|
|
1239
1250
|
$tb2->seekNext();
|
|
1240
1251
|
// ------------------------------------------------------
|
|
@@ -1249,8 +1260,8 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1249
1260
|
$tb->unlock(); // Can not unlock updated record
|
|
1250
1261
|
$this->assertEquals($tb->stat(), 0);
|
|
1251
1262
|
$tb2->seekFirst();
|
|
1252
|
-
$tb2->seekNext(
|
|
1253
|
-
$this->assertEquals($tb2->stat(),
|
|
1263
|
+
$tb2->seekNext(Transactd::ROW_LOCK_X);
|
|
1264
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1254
1265
|
|
|
1255
1266
|
// ------------------------------------------------------
|
|
1256
1267
|
// Test multi record lock Transaction and Transaction
|
|
@@ -1260,7 +1271,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1260
1271
|
|
|
1261
1272
|
// Try lock(X)
|
|
1262
1273
|
$tb2->seekFirst();
|
|
1263
|
-
$this->assertEquals($tb2->stat(),
|
|
1274
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1264
1275
|
$db2->endTrn();
|
|
1265
1276
|
$db->endTrn();
|
|
1266
1277
|
|
|
@@ -1268,14 +1279,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1268
1279
|
// Test multi record lock Transaction and non-transaction record lock
|
|
1269
1280
|
// ------------------------------------------------------
|
|
1270
1281
|
// lock(X) non-transaction
|
|
1271
|
-
$tb2->seekFirst(
|
|
1282
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1272
1283
|
|
|
1273
|
-
$db->beginTrn(
|
|
1284
|
+
$db->beginTrn(Transactd::SINGLELOCK_READ_COMMITED);
|
|
1274
1285
|
$this->assertEquals($db->stat(), 0);
|
|
1275
1286
|
|
|
1276
1287
|
// Try lock(X)
|
|
1277
1288
|
$tb->seekFirst();
|
|
1278
|
-
$this->assertEquals($tb->stat(),
|
|
1289
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1279
1290
|
|
|
1280
1291
|
// Remove lock(X)
|
|
1281
1292
|
$tb2->seekFirst();
|
|
@@ -1292,17 +1303,17 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1292
1303
|
// move from first record.
|
|
1293
1304
|
$tb->seekNext();
|
|
1294
1305
|
|
|
1295
|
-
// No transaction read can read allways. Use consistent_read
|
|
1306
|
+
// No transaction read can read allways. Use consistent_read
|
|
1296
1307
|
$tb2->seekFirst();
|
|
1297
1308
|
$this->assertEquals($tb2->stat(), 0);
|
|
1298
1309
|
$tb2->update();
|
|
1299
|
-
$this->assertEquals($tb2->stat(),
|
|
1310
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1300
1311
|
|
|
1301
1312
|
$db->endTrn();
|
|
1302
1313
|
// ------------------------------------------------------
|
|
1303
1314
|
// Test phantom read
|
|
1304
1315
|
// ------------------------------------------------------
|
|
1305
|
-
$db->beginTrn(
|
|
1316
|
+
$db->beginTrn(Transactd::MULTILOCK_READ_COMMITED);
|
|
1306
1317
|
$this->assertEquals($db->stat(), 0);
|
|
1307
1318
|
|
|
1308
1319
|
// read last row
|
|
@@ -1331,29 +1342,29 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1331
1342
|
// ------------------------------------------------------
|
|
1332
1343
|
// Test use shared lock option
|
|
1333
1344
|
// ------------------------------------------------------
|
|
1334
|
-
$db->beginTrn(
|
|
1345
|
+
$db->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1335
1346
|
$this->assertEquals($db->stat(), 0);
|
|
1336
1347
|
|
|
1337
|
-
$db2->beginTrn(
|
|
1348
|
+
$db2->beginTrn(Transactd::MULTILOCK_REPEATABLE_READ);
|
|
1338
1349
|
$this->assertEquals($db2->stat(), 0);
|
|
1339
1350
|
|
|
1340
|
-
$tb->seekLast(
|
|
1351
|
+
$tb->seekLast(Transactd::ROW_LOCK_S);
|
|
1341
1352
|
$this->assertEquals($tb->stat(), 0);
|
|
1342
|
-
$tb2->seekLast(
|
|
1353
|
+
$tb2->seekLast(Transactd::ROW_LOCK_S);
|
|
1343
1354
|
$this->assertEquals($tb2->stat(), 0);
|
|
1344
1355
|
|
|
1345
1356
|
$tb->seekPrev(); // Lock(X)
|
|
1346
1357
|
$this->assertEquals($tb->stat(), 0);
|
|
1347
1358
|
|
|
1348
|
-
$tb2->seekPrev(
|
|
1349
|
-
$this->assertEquals($tb2->stat(),
|
|
1359
|
+
$tb2->seekPrev(Transactd::ROW_LOCK_S);
|
|
1360
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1350
1361
|
|
|
1351
|
-
$tb->seekPrev(
|
|
1362
|
+
$tb->seekPrev(Transactd::ROW_LOCK_S);
|
|
1352
1363
|
$this->assertEquals($tb->stat(), 0);
|
|
1353
1364
|
$id = $tb->getFVint(FDI_ID);
|
|
1354
1365
|
|
|
1355
1366
|
$tb2->setFV(FDI_ID, $id);
|
|
1356
|
-
$tb2->seek(
|
|
1367
|
+
$tb2->seek(Transactd::ROW_LOCK_S);
|
|
1357
1368
|
$this->assertEquals($tb2->stat(), 0);
|
|
1358
1369
|
|
|
1359
1370
|
$db2->endTrn();
|
|
@@ -1362,7 +1373,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1362
1373
|
// ------------------------------------------------------
|
|
1363
1374
|
// Abort test
|
|
1364
1375
|
// ------------------------------------------------------
|
|
1365
|
-
$db->beginTrn(
|
|
1376
|
+
$db->beginTrn(Transactd::SINGLELOCK_READ_COMMITED);
|
|
1366
1377
|
$this->assertEquals($db->stat(), 0);
|
|
1367
1378
|
|
|
1368
1379
|
$tb->seekFirst();
|
|
@@ -1380,28 +1391,29 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1380
1391
|
// ------------------------------------------------------
|
|
1381
1392
|
// Test Query and locks Single record lock
|
|
1382
1393
|
// ------------------------------------------------------
|
|
1383
|
-
$db->beginTrn(
|
|
1394
|
+
$db->beginTrn(Transactd::SINGLELOCK_READ_COMMITED);
|
|
1384
1395
|
$this->assertEquals($db->stat(), 0);
|
|
1385
1396
|
|
|
1386
1397
|
// Test find last record locked
|
|
1387
|
-
$q = new
|
|
1398
|
+
$q = new Query();
|
|
1388
1399
|
$q->where('id', '<=', '100');
|
|
1389
1400
|
$tb->setQuery($q);
|
|
1390
1401
|
$tb->setFV(FDI_ID, 1);
|
|
1391
1402
|
$tb->find();
|
|
1392
|
-
while ($tb->stat() == 0)
|
|
1403
|
+
while ($tb->stat() == 0) {
|
|
1393
1404
|
$tb->findNext();
|
|
1405
|
+
}
|
|
1394
1406
|
$this->assertEquals($tb->getFVint(FDI_ID), 100);
|
|
1395
1407
|
|
|
1396
1408
|
// find read last is record of id = 101.
|
|
1397
|
-
// Would be difficult to identify the last
|
|
1409
|
+
// Would be difficult to identify the last
|
|
1398
1410
|
// access to records at SINGLELOCK_READ_COMMITED.
|
|
1399
1411
|
// No match records are unlocked.
|
|
1400
1412
|
$tb2->setFV(FDI_ID, 100);
|
|
1401
|
-
$tb2->seek(
|
|
1413
|
+
$tb2->seek(Transactd::ROW_LOCK_X);
|
|
1402
1414
|
$this->assertEquals(0, $tb2->stat());
|
|
1403
1415
|
$tb2->setFV(FDI_ID, 101);
|
|
1404
|
-
$tb2->seek(
|
|
1416
|
+
$tb2->seek(Transactd::ROW_LOCK_X);
|
|
1405
1417
|
$this->assertEquals($tb2->stat(), 0);
|
|
1406
1418
|
$tb2->unlock();
|
|
1407
1419
|
$db->endTrn();
|
|
@@ -1409,7 +1421,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1409
1421
|
// ------------------------------------------------------
|
|
1410
1422
|
// Test Query and locks Multi record lock
|
|
1411
1423
|
// ------------------------------------------------------
|
|
1412
|
-
$db->beginTrn(
|
|
1424
|
+
$db->beginTrn(Transactd::MULTILOCK_READ_COMMITED);
|
|
1413
1425
|
$this->assertEquals($db->stat(), 0);
|
|
1414
1426
|
|
|
1415
1427
|
// Test find records are lock.
|
|
@@ -1417,77 +1429,79 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1417
1429
|
$tb->setQuery($q);
|
|
1418
1430
|
$tb->setFV(FDI_ID, 12);
|
|
1419
1431
|
$tb->find();
|
|
1420
|
-
while ($tb->stat() == 0)
|
|
1432
|
+
while ($tb->stat() == 0) {
|
|
1421
1433
|
$tb->findNext();
|
|
1434
|
+
}
|
|
1422
1435
|
$this->assertEquals($tb->getFVint(FDI_ID), 15);
|
|
1423
1436
|
|
|
1424
|
-
for ($i = 12; $i <= 16; $i++)
|
|
1425
|
-
{
|
|
1437
|
+
for ($i = 12; $i <= 16; $i++) {
|
|
1426
1438
|
$tb2->setFV(FDI_ID, $i);
|
|
1427
|
-
$tb2->seek(
|
|
1428
|
-
if (($i == 16) || ($i == 13))
|
|
1439
|
+
$tb2->seek(Transactd::ROW_LOCK_X);
|
|
1440
|
+
if (($i == 16) || ($i == 13)) {
|
|
1429
1441
|
$this->assertEquals($tb2->stat(), 0);
|
|
1430
|
-
else
|
|
1431
|
-
$this->assertEquals($tb2->stat(),
|
|
1442
|
+
} else {
|
|
1443
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1444
|
+
}
|
|
1432
1445
|
}
|
|
1433
1446
|
$db->endTrn();
|
|
1434
1447
|
}
|
|
1435
1448
|
public function testRecordLock()
|
|
1436
1449
|
{
|
|
1437
|
-
$db = new
|
|
1450
|
+
$db = new Database();
|
|
1438
1451
|
$tb = $this->openTable($db);
|
|
1439
|
-
$this->assertNotEquals($tb,
|
|
1440
|
-
$db2 = new
|
|
1452
|
+
$this->assertNotEquals($tb, null);
|
|
1453
|
+
$db2 = new Database();
|
|
1441
1454
|
$db2->connect(URL_DB, true);
|
|
1442
1455
|
$this->assertEquals($db2->stat(), 0);
|
|
1443
1456
|
$tb2 = $this->openTable($db2);
|
|
1444
|
-
$this->assertNotEquals($tb2,
|
|
1457
|
+
$this->assertNotEquals($tb2, null);
|
|
1445
1458
|
|
|
1446
1459
|
$tb->setKeyNum(0);
|
|
1447
1460
|
$tb2->setKeyNum(0);
|
|
1448
1461
|
|
|
1449
1462
|
// Single record lock
|
|
1450
|
-
$tb->seekFirst(
|
|
1463
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X); // lock(X)
|
|
1451
1464
|
$this->assertEquals($tb->stat(), 0);
|
|
1452
1465
|
$tb2->seekFirst(); // Use consistent_read
|
|
1453
1466
|
$this->assertEquals($tb2->stat(), 0);
|
|
1454
1467
|
|
|
1455
|
-
$tb2->seekFirst(
|
|
1456
|
-
$this->assertEquals($tb2->stat(),
|
|
1468
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X); // Try lock(X) single
|
|
1469
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1457
1470
|
|
|
1458
1471
|
// try consistent_read. Check ended that before auto transaction
|
|
1459
1472
|
$tb2->seekFirst();
|
|
1460
1473
|
$this->assertEquals($tb2->stat(), 0);
|
|
1461
1474
|
|
|
1462
|
-
$tb2->seekNext(
|
|
1475
|
+
$tb2->seekNext(Transactd::ROW_LOCK_X); // lock(X) second
|
|
1463
1476
|
$this->assertEquals($tb2->stat(), 0);
|
|
1464
1477
|
|
|
1465
|
-
$tb2->seekNext(
|
|
1478
|
+
$tb2->seekNext(Transactd::ROW_LOCK_X); // lock(X) third, second lock freed
|
|
1466
1479
|
$this->assertEquals($tb2->stat(), 0);
|
|
1467
1480
|
|
|
1468
1481
|
$tb->seekNext(); // nobody lock second. But REPEATABLE_READ tb2 lock all(no unlock)
|
|
1469
|
-
if ($db->trxIsolationServer() ==
|
|
1470
|
-
$this->assertEquals($tb->stat(),
|
|
1471
|
-
else
|
|
1482
|
+
if ($db->trxIsolationServer() == Transactd::SRV_ISO_REPEATABLE_READ) {
|
|
1483
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1484
|
+
} else {
|
|
1472
1485
|
$this->assertEquals($tb->stat(), 0);
|
|
1473
|
-
|
|
1474
|
-
$
|
|
1486
|
+
}
|
|
1487
|
+
$tb->seekNext(Transactd::ROW_LOCK_X); // Try lock(X) third
|
|
1488
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1475
1489
|
|
|
1476
1490
|
// Update test change third with lock(X)
|
|
1477
1491
|
$tb2->setFV(FDI_NAME, 'The 3rd');
|
|
1478
1492
|
$tb2->update(); // auto trn commit and unlock all locks
|
|
1479
1493
|
$this->assertEquals($tb2->stat(), 0);
|
|
1480
|
-
$tb2->seekNext(
|
|
1494
|
+
$tb2->seekNext(Transactd::ROW_LOCK_X); // lock(X) 4th
|
|
1481
1495
|
$this->assertEquals($tb2->stat(), 0);
|
|
1482
1496
|
$tb2->setFV(FDI_NAME, 'The 4th');
|
|
1483
1497
|
$tb2->update(); // auto trn commit and unlock all locks
|
|
1484
|
-
|
|
1498
|
+
|
|
1485
1499
|
// Test unlock all locks, after update
|
|
1486
|
-
$tb->seekFirst(
|
|
1500
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X); // lock(X) first
|
|
1487
1501
|
$this->assertEquals($tb2->stat(), 0);
|
|
1488
|
-
$tb->seekNext(
|
|
1502
|
+
$tb->seekNext(Transactd::ROW_LOCK_X); // lock(X) second
|
|
1489
1503
|
$this->assertEquals($tb2->stat(), 0);
|
|
1490
|
-
$tb->seekNext(
|
|
1504
|
+
$tb->seekNext(Transactd::ROW_LOCK_X); // lock(X) third
|
|
1491
1505
|
$this->assertEquals($tb2->stat(), 0);
|
|
1492
1506
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'The 3rd');
|
|
1493
1507
|
|
|
@@ -1505,94 +1519,94 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1505
1519
|
|
|
1506
1520
|
// --------- Unlock test ---------------------------
|
|
1507
1521
|
// 1 unlock()
|
|
1508
|
-
$tb->seekFirst(
|
|
1522
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1509
1523
|
$this->assertEquals($tb->stat(), 0);
|
|
1510
1524
|
|
|
1511
1525
|
$tb->unlock();
|
|
1512
1526
|
|
|
1513
|
-
$tb2->seekFirst(
|
|
1527
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1514
1528
|
$this->assertEquals($tb2->stat(), 0);
|
|
1515
1529
|
$tb2->unlock();
|
|
1516
1530
|
|
|
1517
1531
|
// 2 auto tran ended
|
|
1518
1532
|
$tb3 = $this->openTable($db2);
|
|
1519
|
-
$tb2->seekFirst(
|
|
1533
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1520
1534
|
$this->assertEquals($tb2->stat(), 0);
|
|
1521
1535
|
|
|
1522
1536
|
$tb3->seekLast(); //This operation is another table handle, then auto tran ended
|
|
1523
1537
|
$this->assertEquals($tb3->stat(), 0);
|
|
1524
1538
|
|
|
1525
|
-
$tb->seekFirst(
|
|
1539
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1526
1540
|
$this->assertEquals($tb->stat(), 0);
|
|
1527
1541
|
$tb->unlock();
|
|
1528
1542
|
|
|
1529
1543
|
// begin trn
|
|
1530
|
-
$tb3->seekFirst(
|
|
1544
|
+
$tb3->seekFirst(Transactd::ROW_LOCK_X);
|
|
1531
1545
|
$this->assertEquals($tb3->stat(), 0);
|
|
1532
1546
|
|
|
1533
|
-
$tb->seekFirst(
|
|
1534
|
-
$this->assertEquals($tb->stat(),
|
|
1547
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1548
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1535
1549
|
$db2->beginTrn();
|
|
1536
1550
|
|
|
1537
|
-
$tb->seekFirst(
|
|
1551
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1538
1552
|
$this->assertEquals($tb->stat(), 0);
|
|
1539
1553
|
$db2->endTrn();
|
|
1540
1554
|
$tb->unlock();
|
|
1541
1555
|
// begin snapshot
|
|
1542
|
-
$tb3->seekFirst(
|
|
1556
|
+
$tb3->seekFirst(Transactd::ROW_LOCK_X);
|
|
1543
1557
|
$this->assertEquals($tb3->stat(), 0);
|
|
1544
1558
|
|
|
1545
|
-
$tb->seekFirst(
|
|
1546
|
-
$this->assertEquals($tb->stat(),
|
|
1559
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1560
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1547
1561
|
$db2->beginSnapshot();
|
|
1548
|
-
$tb->seekFirst(
|
|
1562
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1549
1563
|
$this->assertEquals($tb->stat(), 0);
|
|
1550
1564
|
$db2->endSnapshot();
|
|
1551
1565
|
$tb->unlock();
|
|
1552
1566
|
// close Table
|
|
1553
|
-
$tb->seekFirst(
|
|
1567
|
+
$tb->seekFirst(Transactd::ROW_LOCK_X);
|
|
1554
1568
|
$this->assertEquals($tb->stat(), 0);
|
|
1555
1569
|
|
|
1556
|
-
$tb2->seekFirst(
|
|
1557
|
-
$this->assertEquals($tb2->stat(),
|
|
1570
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1571
|
+
$this->assertEquals($tb2->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1558
1572
|
$tb->release();
|
|
1559
|
-
$tb2->seekFirst(
|
|
1573
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_X);
|
|
1560
1574
|
$this->assertEquals($tb2->stat(), 0);
|
|
1561
1575
|
$tb2->unlock();
|
|
1562
1576
|
// --------- End Unlock test -----------------------
|
|
1563
|
-
|
|
1577
|
+
|
|
1564
1578
|
// --------- Invalid lock type test ----------------
|
|
1565
|
-
$tb2->seekFirst(
|
|
1566
|
-
$this->assertEquals(
|
|
1579
|
+
$tb2->seekFirst(Transactd::ROW_LOCK_S);
|
|
1580
|
+
$this->assertEquals(Transactd::STATUS_INVALID_LOCKTYPE, $tb2->stat());
|
|
1567
1581
|
}
|
|
1568
1582
|
private function isMySQL5_7($db)
|
|
1569
1583
|
{
|
|
1570
|
-
$vv = new
|
|
1584
|
+
$vv = new BtrVersions();
|
|
1571
1585
|
$db->getBtrVersion($vv);
|
|
1572
1586
|
$server_ver = $vv->version(1);
|
|
1573
|
-
return ($db->stat() == 0) &&
|
|
1587
|
+
return ($db->stat() == 0) &&
|
|
1574
1588
|
((5 == $server_ver->majorVersion) &&
|
|
1575
1589
|
(7 == $server_ver->minorVersion));
|
|
1576
1590
|
}
|
|
1577
1591
|
public function testExclusive()
|
|
1578
1592
|
{
|
|
1579
1593
|
// db mode exclusive
|
|
1580
|
-
$db = new
|
|
1594
|
+
$db = new Database();
|
|
1581
1595
|
// ------------------------------------------------------
|
|
1582
1596
|
// database WRITE EXCLUSIVE
|
|
1583
1597
|
// ------------------------------------------------------
|
|
1584
|
-
$db->open(URL,
|
|
1598
|
+
$db->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_EXCLUSIVE);
|
|
1585
1599
|
$this->assertEquals($db->stat(), 0);
|
|
1586
1600
|
$tb = $db->openTable(TABLENAME);
|
|
1587
1601
|
$this->assertEquals($db->stat(), 0);
|
|
1588
1602
|
|
|
1589
1603
|
// Can not open database from other connections.
|
|
1590
|
-
$db2 = new
|
|
1604
|
+
$db2 = new Database();
|
|
1591
1605
|
$db2->connect(URL_DB, true);
|
|
1592
1606
|
$this->assertEquals($db2->stat(), 0);
|
|
1593
|
-
$db2->open(URL,
|
|
1607
|
+
$db2->open(URL, Transactd::TYPE_SCHEMA_BDF);
|
|
1594
1608
|
// database open error. Check database::stat()
|
|
1595
|
-
$this->assertEquals($db2->stat(),
|
|
1609
|
+
$this->assertEquals($db2->stat(), Transactd::STATUS_CANNOT_LOCK_TABLE);
|
|
1596
1610
|
$tb->close();
|
|
1597
1611
|
$db->close();
|
|
1598
1612
|
$db2->close();
|
|
@@ -1600,15 +1614,15 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1600
1614
|
// ------------------------------------------------------
|
|
1601
1615
|
// database READ EXCLUSIVE
|
|
1602
1616
|
// ------------------------------------------------------
|
|
1603
|
-
$db->open(URL,
|
|
1617
|
+
$db->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_READONLY_EXCLUSIVE);
|
|
1604
1618
|
$this->assertEquals($db->stat(), 0);
|
|
1605
|
-
$tb = $db->openTable(TABLENAME,
|
|
1619
|
+
$tb = $db->openTable(TABLENAME, Transactd::TD_OPEN_READONLY_EXCLUSIVE);
|
|
1606
1620
|
$this->assertEquals($db->stat(), 0);
|
|
1607
1621
|
|
|
1608
1622
|
$mysql5_7 = $this->isMySQL5_7($db);
|
|
1609
1623
|
|
|
1610
1624
|
// Read only open
|
|
1611
|
-
$db2->open(URL,
|
|
1625
|
+
$db2->open(URL, Transactd::TYPE_SCHEMA_BDF);
|
|
1612
1626
|
$this->assertEquals($db2->stat(), 0);
|
|
1613
1627
|
$db2->close();
|
|
1614
1628
|
|
|
@@ -1616,22 +1630,23 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1616
1630
|
// Since MySQL 5.7 : D_OPEN_READONLY_EXCLUSIVE + TD_OPEN_NORMAL is fail,
|
|
1617
1631
|
// It's correct.
|
|
1618
1632
|
//
|
|
1619
|
-
|
|
1633
|
+
|
|
1620
1634
|
$db2->connect(URL_DB, true);
|
|
1621
|
-
$db2->open(URL,
|
|
1622
|
-
if ($mysql5_7 == true)
|
|
1623
|
-
|
|
1624
|
-
else
|
|
1625
|
-
|
|
1635
|
+
$db2->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
1636
|
+
if ($mysql5_7 == true) {
|
|
1637
|
+
$this->assertEquals($db2->stat(), Transactd::STATUS_CANNOT_LOCK_TABLE);
|
|
1638
|
+
} else {
|
|
1639
|
+
$this->assertEquals($db2->stat(), 0);
|
|
1640
|
+
}
|
|
1626
1641
|
$db2->close();
|
|
1627
1642
|
|
|
1628
1643
|
// Write Exclusive open
|
|
1629
|
-
$db2->open(URL,
|
|
1630
|
-
$this->assertEquals($db2->stat(),
|
|
1644
|
+
$db2->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_EXCLUSIVE);
|
|
1645
|
+
$this->assertEquals($db2->stat(), Transactd::STATUS_CANNOT_LOCK_TABLE);
|
|
1631
1646
|
$db2->close();
|
|
1632
1647
|
|
|
1633
1648
|
// Read Exclusive open
|
|
1634
|
-
$db2->open(URL,
|
|
1649
|
+
$db2->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_READONLY_EXCLUSIVE);
|
|
1635
1650
|
$this->assertEquals($db2->stat(), 0);
|
|
1636
1651
|
$db2->close();
|
|
1637
1652
|
$tb->close();
|
|
@@ -1640,21 +1655,20 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1640
1655
|
// ------------------------------------------------------
|
|
1641
1656
|
// Normal and Exclusive open tables mix use
|
|
1642
1657
|
// ------------------------------------------------------
|
|
1643
|
-
$db->open(URL,
|
|
1658
|
+
$db->open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
1644
1659
|
$this->assertEquals($db->stat(), 0);
|
|
1645
|
-
$tb = $db->openTable(TABLENAME,
|
|
1660
|
+
$tb = $db->openTable(TABLENAME, Transactd::TD_OPEN_NORMAL);
|
|
1646
1661
|
$this->assertEquals($db->stat(), 0);
|
|
1647
|
-
$db2->open(URL,
|
|
1662
|
+
$db2->open(URL, Transactd::TYPE_SCHEMA_BDF);
|
|
1648
1663
|
$this->assertEquals($db2->stat(), 0);
|
|
1649
1664
|
|
|
1650
|
-
$tb2 = $db->openTable('group',
|
|
1665
|
+
$tb2 = $db->openTable('group', Transactd::TD_OPEN_EXCLUSIVE);
|
|
1651
1666
|
$this->assertEquals($db->stat(), 0);
|
|
1652
1667
|
|
|
1653
1668
|
// Check tb2 Exclusive
|
|
1654
|
-
$tb3 = $db2->openTable('group',
|
|
1655
|
-
$this->assertEquals($db2->stat(),
|
|
1656
|
-
for ($i = 1; $i < 5; $i++)
|
|
1657
|
-
{
|
|
1669
|
+
$tb3 = $db2->openTable('group', Transactd::TD_OPEN_NORMAL);
|
|
1670
|
+
$this->assertEquals($db2->stat(), Transactd::STATUS_CANNOT_LOCK_TABLE);
|
|
1671
|
+
for ($i = 1; $i < 5; $i++) {
|
|
1658
1672
|
$tb2->setFV(FDI_ID, $i + 1);
|
|
1659
1673
|
$tb2->setFV(FDI_NAME, $i + 1);
|
|
1660
1674
|
$tb2->insert();
|
|
@@ -1695,11 +1709,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1695
1709
|
// ------------------------------------------------------
|
|
1696
1710
|
// Normal and Exclusive open tables mix transaction
|
|
1697
1711
|
// ------------------------------------------------------
|
|
1698
|
-
$tb2 = $db->openTable('group',
|
|
1712
|
+
$tb2 = $db->openTable('group', Transactd::TD_OPEN_EXCLUSIVE);
|
|
1699
1713
|
$this->assertEquals($db->stat(), 0);
|
|
1700
1714
|
// Check tb2 Exclusive
|
|
1701
|
-
$tb3 = $db2->openTable('group',
|
|
1702
|
-
$this->assertEquals($db2->stat(),
|
|
1715
|
+
$tb3 = $db2->openTable('group', Transactd::TD_OPEN_NORMAL);
|
|
1716
|
+
$this->assertEquals($db2->stat(), Transactd::STATUS_CANNOT_LOCK_TABLE);
|
|
1703
1717
|
|
|
1704
1718
|
$db->beginTrn();
|
|
1705
1719
|
$tb->seekFirst();
|
|
@@ -1731,14 +1745,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1731
1745
|
}
|
|
1732
1746
|
public function testMultiDatabase()
|
|
1733
1747
|
{
|
|
1734
|
-
$db = new
|
|
1748
|
+
$db = new Database();
|
|
1735
1749
|
$tb = $this->openTable($db);
|
|
1736
|
-
$this->assertNotEquals($tb,
|
|
1737
|
-
$db2 = new
|
|
1750
|
+
$this->assertNotEquals($tb, null);
|
|
1751
|
+
$db2 = new Database();
|
|
1738
1752
|
$this->openDatabase($db2);
|
|
1739
1753
|
$tb2 = $db2->openTable('group');
|
|
1740
1754
|
$this->assertEquals($db2->stat(), 0);
|
|
1741
|
-
$this->assertNotEquals($tb2,
|
|
1755
|
+
$this->assertNotEquals($tb2, null);
|
|
1742
1756
|
|
|
1743
1757
|
$db->beginTrn();
|
|
1744
1758
|
$db2->beginTrn();
|
|
@@ -1764,18 +1778,17 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1764
1778
|
}
|
|
1765
1779
|
public function testMissingUpdate()
|
|
1766
1780
|
{
|
|
1767
|
-
if(! class_exists('Thread'))
|
|
1768
|
-
{
|
|
1781
|
+
if (! class_exists('Thread')) {
|
|
1769
1782
|
echo(' * class Thread not found! * ');
|
|
1770
1783
|
return;
|
|
1771
1784
|
}
|
|
1772
|
-
$db = new
|
|
1785
|
+
$db = new Database();
|
|
1773
1786
|
$tb = $this->openTable($db);
|
|
1774
|
-
|
|
1787
|
+
PooledDbManager::setMaxConnections(3);
|
|
1775
1788
|
// Lock last record and insert to next of it
|
|
1776
1789
|
/*$w = new SeekLessThanWorker();
|
|
1777
1790
|
$tb->setFV(FDI_ID, 300000);
|
|
1778
|
-
$tb->seekLessThan(false,
|
|
1791
|
+
$tb->seekLessThan(false, Transactd::ROW_LOCK_X);
|
|
1779
1792
|
$this->assertEquals($tb->stat(), 0);
|
|
1780
1793
|
if ($tb->stat() == 0)
|
|
1781
1794
|
{
|
|
@@ -1788,11 +1801,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1788
1801
|
$this->assertEquals($tb->stat(), 0);
|
|
1789
1802
|
$w->join();
|
|
1790
1803
|
$v2 = $w->getResult();
|
|
1791
|
-
|
|
1792
|
-
if ($db->trxIsolationServer() ==
|
|
1804
|
+
|
|
1805
|
+
if ($db->trxIsolationServer() == Transactd::SRV_ISO_REPEATABLE_READ)
|
|
1793
1806
|
{ // $tb can not insert because $tb2 got gap lock with SRV_ISO_REPEATABLE_READ.
|
|
1794
1807
|
// It is deadlock!
|
|
1795
|
-
$this->assertEquals($tb->stat(),
|
|
1808
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_LOCK_ERROR);
|
|
1796
1809
|
}
|
|
1797
1810
|
else
|
|
1798
1811
|
{ // When SRV_ISO_READ_COMMITED set, $tb2 get lock after $tb->insert.
|
|
@@ -1810,10 +1823,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1810
1823
|
// Lock last record and delete it
|
|
1811
1824
|
$w = new SeekLessThanWorker();
|
|
1812
1825
|
$tb->setFV(FDI_ID, 300000);
|
|
1813
|
-
$tb->seekLessThan(false,
|
|
1826
|
+
$tb->seekLessThan(false, Transactd::ROW_LOCK_X);
|
|
1814
1827
|
$this->assertEquals($tb->stat(), 0);
|
|
1815
|
-
if ($tb->stat() == 0)
|
|
1816
|
-
{
|
|
1828
|
+
if ($tb->stat() == 0) {
|
|
1817
1829
|
// Get lock(X) same record in parallel.
|
|
1818
1830
|
$w->start();
|
|
1819
1831
|
usleep(5000);
|
|
@@ -1824,13 +1836,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1824
1836
|
$v2 = $w->getResult();
|
|
1825
1837
|
$this->assertNotEquals($v, $v2);
|
|
1826
1838
|
}
|
|
1827
|
-
(new
|
|
1839
|
+
(new PooledDbManager())->reset(0);
|
|
1828
1840
|
}
|
|
1829
1841
|
public function testInsert2()
|
|
1830
1842
|
{
|
|
1831
|
-
$db = new
|
|
1843
|
+
$db = new Database();
|
|
1832
1844
|
$tb = $this->openTable($db);
|
|
1833
|
-
$this->assertNotEquals($tb,
|
|
1845
|
+
$this->assertNotEquals($tb, null);
|
|
1834
1846
|
$v = TEST_COUNT * 2;
|
|
1835
1847
|
$db->beginTrn();
|
|
1836
1848
|
$tb->clearBuffer();
|
|
@@ -1848,19 +1860,21 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1848
1860
|
}
|
|
1849
1861
|
public function testDelete()
|
|
1850
1862
|
{
|
|
1851
|
-
$db = new
|
|
1863
|
+
$db = new Database();
|
|
1852
1864
|
$tb = $this->openTable($db);
|
|
1853
|
-
$this->assertNotEquals($tb,
|
|
1865
|
+
$this->assertNotEquals($tb, null);
|
|
1854
1866
|
$expected_count = 20002;
|
|
1855
|
-
if(! class_exists('Thread'))
|
|
1856
|
-
|
|
1867
|
+
if (! class_exists('Thread')) {
|
|
1868
|
+
$expected_count = $expected_count + 1;
|
|
1869
|
+
}
|
|
1857
1870
|
// estimate count
|
|
1858
1871
|
$count = $tb->recordCount(true);
|
|
1859
1872
|
$this->assertEquals($tb->stat(), 0);
|
|
1860
1873
|
$is_valid_count = (abs($count - $expected_count) < 10000);
|
|
1861
1874
|
$this->assertTrue($is_valid_count);
|
|
1862
|
-
if (! $is_valid_count)
|
|
1863
|
-
|
|
1875
|
+
if (! $is_valid_count) {
|
|
1876
|
+
print("true record count = " . $expected_count . " and estimate recordCount count = " . $count);
|
|
1877
|
+
}
|
|
1864
1878
|
$this->assertEquals($tb->recordCount(false), $expected_count); // true count
|
|
1865
1879
|
$this->assertEquals($tb->stat(), 0);
|
|
1866
1880
|
$vv = TEST_COUNT * 3 / 4 + 1;
|
|
@@ -1881,11 +1895,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1881
1895
|
$tb->clearBuffer();
|
|
1882
1896
|
$tb->setFV(FDI_ID, $vv);
|
|
1883
1897
|
$tb->seek();
|
|
1884
|
-
$this->assertEquals($tb->stat(),
|
|
1898
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_NOT_FOUND_TI);
|
|
1885
1899
|
$db->beginTrn();
|
|
1886
1900
|
$tb->stepFirst();
|
|
1887
|
-
while ($tb->stat() == 0)
|
|
1888
|
-
{
|
|
1901
|
+
while ($tb->stat() == 0) {
|
|
1889
1902
|
$tb->del();
|
|
1890
1903
|
$this->assertEquals($tb->stat(), 0);
|
|
1891
1904
|
$tb->stepNext();
|
|
@@ -1896,9 +1909,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1896
1909
|
}
|
|
1897
1910
|
public function testSetOwner()
|
|
1898
1911
|
{
|
|
1899
|
-
$db = new
|
|
1912
|
+
$db = new Database();
|
|
1900
1913
|
$tb = $this->openTable($db);
|
|
1901
|
-
$this->assertNotEquals($tb,
|
|
1914
|
+
$this->assertNotEquals($tb, null);
|
|
1902
1915
|
$tb->setOwnerName("ABCDEFG");
|
|
1903
1916
|
$this->assertEquals($tb->stat(), 0);
|
|
1904
1917
|
$tb->clearOwnerName();
|
|
@@ -1906,26 +1919,25 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1906
1919
|
}
|
|
1907
1920
|
public function testDropIndex()
|
|
1908
1921
|
{
|
|
1909
|
-
$db = new
|
|
1922
|
+
$db = new Database();
|
|
1910
1923
|
$tb = $this->openTable($db);
|
|
1911
|
-
$this->assertNotEquals($tb,
|
|
1924
|
+
$this->assertNotEquals($tb, null);
|
|
1912
1925
|
$tb->dropIndex(false);
|
|
1913
1926
|
$this->assertEquals($tb->stat(), 0);
|
|
1914
1927
|
}
|
|
1915
1928
|
public function testDropDatabase()
|
|
1916
1929
|
{
|
|
1917
|
-
$db = new
|
|
1930
|
+
$db = new Database();
|
|
1918
1931
|
$this->dropDatabase($db);
|
|
1919
1932
|
}
|
|
1920
1933
|
public function testLogin()
|
|
1921
1934
|
{
|
|
1922
|
-
$db = new
|
|
1935
|
+
$db = new Database();
|
|
1923
1936
|
$db->connect(URL_HOST);
|
|
1924
1937
|
$this->assertEquals($db->stat(), 0);
|
|
1925
|
-
if ($db->stat() == 0)
|
|
1926
|
-
{
|
|
1938
|
+
if ($db->stat() == 0) {
|
|
1927
1939
|
// second connection
|
|
1928
|
-
$db2 = new
|
|
1940
|
+
$db2 = new Database();
|
|
1929
1941
|
$db2->connect(URL_HOST, true);
|
|
1930
1942
|
$this->assertEquals($db2->stat(), 0);
|
|
1931
1943
|
unset($db2);
|
|
@@ -1934,11 +1946,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1934
1946
|
}
|
|
1935
1947
|
// invalid host name
|
|
1936
1948
|
$db->connect(PROTOCOL . 'localhost123/');
|
|
1937
|
-
$is_valid_stat = ($db->stat() ==
|
|
1938
|
-
($db->stat() ==
|
|
1949
|
+
$is_valid_stat = ($db->stat() == Transactd::ERROR_TD_INVALID_CLINETHOST) ||
|
|
1950
|
+
($db->stat() == Transactd::ERROR_TD_HOSTNAME_NOT_FOUND);
|
|
1939
1951
|
$this->assertTrue($is_valid_stat);
|
|
1940
|
-
if (! $is_valid_stat)
|
|
1952
|
+
if (! $is_valid_stat) {
|
|
1941
1953
|
print('bad host $db->stat() = ' . $db->stat());
|
|
1954
|
+
}
|
|
1942
1955
|
$this->createDatabase($db);
|
|
1943
1956
|
$this->createTable($db);
|
|
1944
1957
|
$db->close();
|
|
@@ -1946,8 +1959,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1946
1959
|
// true database name
|
|
1947
1960
|
$db->connect(URL_DB);
|
|
1948
1961
|
$this->assertEquals($db->stat(), 0);
|
|
1949
|
-
if ($db->stat() == 0)
|
|
1950
|
-
{
|
|
1962
|
+
if ($db->stat() == 0) {
|
|
1951
1963
|
$db->disconnect();
|
|
1952
1964
|
$this->assertEquals($db->stat(), 0);
|
|
1953
1965
|
}
|
|
@@ -1956,15 +1968,15 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1956
1968
|
$db->disconnect();
|
|
1957
1969
|
$this->assertEquals($db->stat(), 1);
|
|
1958
1970
|
$db->connect(URL_DB);
|
|
1959
|
-
$this->assertEquals($db->stat(),
|
|
1971
|
+
$this->assertEquals($db->stat(), Transactd::ERROR_NO_DATABASE);
|
|
1960
1972
|
$db->disconnect();
|
|
1961
1973
|
$this->assertEquals($db->stat(), 1);
|
|
1962
1974
|
}
|
|
1963
1975
|
|
|
1964
1976
|
//-----------------------------------------------------
|
|
1965
1977
|
// transactd var tables
|
|
1966
|
-
//-----------------------------------------------------
|
|
1967
|
-
|
|
1978
|
+
//-----------------------------------------------------
|
|
1979
|
+
|
|
1968
1980
|
private function isWindows()
|
|
1969
1981
|
{
|
|
1970
1982
|
return (strtolower(substr(PHP_OS, 0, 3)) == 'win');
|
|
@@ -1972,16 +1984,16 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1972
1984
|
private function isUtf16leSupport($db)
|
|
1973
1985
|
{
|
|
1974
1986
|
// CHARSET_UTF16LE supported on MySQL 5.6 or later
|
|
1975
|
-
$vv = new
|
|
1987
|
+
$vv = new BtrVersions();
|
|
1976
1988
|
$db->getBtrVersion($vv);
|
|
1977
1989
|
$server_ver = $vv->version(1);
|
|
1978
|
-
if ('M' == chr($server_ver->type) || 'A' == chr($server_ver->type))
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1990
|
+
if ('M' == chr($server_ver->type) || 'A' == chr($server_ver->type)) {
|
|
1991
|
+
if ($server_ver->majorVersion <= 4) {
|
|
1992
|
+
return false;
|
|
1993
|
+
} elseif ($server_ver->majorVersion == 5 && $server_ver->minorVersion <= 5) {
|
|
1994
|
+
return false;
|
|
1995
|
+
}
|
|
1996
|
+
return true;
|
|
1985
1997
|
}
|
|
1986
1998
|
return false;
|
|
1987
1999
|
}
|
|
@@ -1989,8 +2001,8 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
1989
2001
|
{
|
|
1990
2002
|
// create table
|
|
1991
2003
|
$dbdef = $db->dbDef();
|
|
1992
|
-
$this->assertNotEquals($dbdef,
|
|
1993
|
-
$td = new
|
|
2004
|
+
$this->assertNotEquals($dbdef, null);
|
|
2005
|
+
$td = new Tabledef();
|
|
1994
2006
|
$td->setTableName($name);
|
|
1995
2007
|
$td->setFileName($name . '.dat');
|
|
1996
2008
|
$td->id = $id;
|
|
@@ -2004,7 +2016,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2004
2016
|
// id
|
|
2005
2017
|
$fd = $dbdef->insertField($id, 0);
|
|
2006
2018
|
$fd->setName('id');
|
|
2007
|
-
$fd->type =
|
|
2019
|
+
$fd->type = Transactd::ft_integer;
|
|
2008
2020
|
$fd->len = 4;
|
|
2009
2021
|
$dbdef->updateTableDef($id);
|
|
2010
2022
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -2012,25 +2024,28 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2012
2024
|
$fd = $dbdef->insertField($id, 1);
|
|
2013
2025
|
$fd->setName('name');
|
|
2014
2026
|
$fd->type = $fieldType;
|
|
2015
|
-
if ($fieldType ==
|
|
2016
|
-
$fd->len = 1 +
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2027
|
+
if ($fieldType == Transactd::ft_mywvarchar) {
|
|
2028
|
+
$fd->len = 1 + Transactd::charsize(Transactd::CHARSET_UTF16LE) * 3;
|
|
2029
|
+
} // max 3 char len byte
|
|
2030
|
+
elseif ($fieldType == Transactd::ft_mywvarbinary) {
|
|
2031
|
+
$fd->len = 1 + Transactd::charsize(Transactd::CHARSET_UTF16LE) * 3;
|
|
2032
|
+
} // max 6 char len byte
|
|
2033
|
+
elseif ($fieldType == Transactd::ft_myvarchar) {
|
|
2034
|
+
if ($charset == Transactd::CHARSET_CP932) {
|
|
2035
|
+
$fd->len = 1 + Transactd::charsize(Transactd::CHARSET_CP932) * 3;
|
|
2036
|
+
} // max 6 char len byte
|
|
2037
|
+
elseif ($charset == Transactd::CHARSET_UTF8B4) {
|
|
2038
|
+
$fd->len = 1 + Transactd::charsize(Transactd::CHARSET_UTF8B4) * 3;
|
|
2039
|
+
} // max 6 char len byte
|
|
2040
|
+
} else {
|
|
2041
|
+
$fd->len = 7;
|
|
2042
|
+
} // max 6 char len byte
|
|
2028
2043
|
$dbdef->updateTableDef($id);
|
|
2029
2044
|
$this->assertEquals($dbdef->stat(), 0);
|
|
2030
2045
|
// groupid
|
|
2031
2046
|
$fd = $dbdef->insertField($id, 2);
|
|
2032
2047
|
$fd->setName('groupid');
|
|
2033
|
-
$fd->type =
|
|
2048
|
+
$fd->type = Transactd::ft_integer;
|
|
2034
2049
|
$fd->len = 4;
|
|
2035
2050
|
$dbdef->updateTableDef($id);
|
|
2036
2051
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -2057,33 +2072,31 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2057
2072
|
$dbdef->updateTableDef($id);
|
|
2058
2073
|
$this->assertEquals($dbdef->stat(), 0);
|
|
2059
2074
|
// open
|
|
2060
|
-
$
|
|
2075
|
+
$db->openTable($id);
|
|
2061
2076
|
$this->assertEquals($db->stat(), 0);
|
|
2062
2077
|
}
|
|
2063
2078
|
|
|
2064
2079
|
public function testCreateDatabaseVar()
|
|
2065
2080
|
{
|
|
2066
|
-
$db = new
|
|
2081
|
+
$db = new Database();
|
|
2067
2082
|
$db->create(URL_VAR);
|
|
2068
|
-
if ($db->stat() ==
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
$db->create(URL_VAR);
|
|
2083
|
+
if ($db->stat() == Transactd::STATUS_TABLE_EXISTS_ERROR) {
|
|
2084
|
+
$this->testDropDatabaseVar();
|
|
2085
|
+
$db->create(URL_VAR);
|
|
2072
2086
|
}
|
|
2073
2087
|
$this->assertEquals($db->stat(), 0);
|
|
2074
|
-
if (0 == $db->stat())
|
|
2075
|
-
|
|
2076
|
-
$db->open(URL_VAR, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_NORMAL);
|
|
2088
|
+
if (0 == $db->stat()) {
|
|
2089
|
+
$db->open(URL_VAR, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
2077
2090
|
$this->assertEquals($db->stat(), 0);
|
|
2078
2091
|
}
|
|
2079
|
-
if (0 == $db->stat())
|
|
2080
|
-
|
|
2081
|
-
$this->createVarTable($db,
|
|
2082
|
-
$this->
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
$this->createVarTable($db, 4, 'user4',
|
|
2086
|
-
$this->createVarTable($db, 5, 'user5',
|
|
2092
|
+
if (0 == $db->stat()) {
|
|
2093
|
+
$this->createVarTable($db, 1, 'user1', Transactd::ft_myvarchar, Transactd::CHARSET_CP932);
|
|
2094
|
+
$this->createVarTable($db, 2, 'user2', Transactd::ft_myvarbinary, Transactd::CHARSET_CP932);
|
|
2095
|
+
if ($this->isUtf16leSupport($db)) {
|
|
2096
|
+
$this->createVarTable($db, 3, 'user3', Transactd::ft_mywvarchar, Transactd::CHARSET_CP932);
|
|
2097
|
+
}
|
|
2098
|
+
$this->createVarTable($db, 4, 'user4', Transactd::ft_mywvarbinary, Transactd::CHARSET_CP932);
|
|
2099
|
+
$this->createVarTable($db, 5, 'user5', Transactd::ft_myvarchar, Transactd::CHARSET_UTF8B4);
|
|
2087
2100
|
$db->close();
|
|
2088
2101
|
$db->open(URL_VAR);
|
|
2089
2102
|
$this->assertEquals($db->stat(), 0);
|
|
@@ -2101,7 +2114,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2101
2114
|
//else
|
|
2102
2115
|
//{
|
|
2103
2116
|
$tb->setFV(FDI_GROUP, '68');
|
|
2104
|
-
|
|
2117
|
+
$this->assertEquals($tb->getFVstr(FDI_GROUP), '68');
|
|
2105
2118
|
//}
|
|
2106
2119
|
//if ($this->isWindows())
|
|
2107
2120
|
//{
|
|
@@ -2141,10 +2154,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2141
2154
|
// Set Ansi Get Wide
|
|
2142
2155
|
// too long string
|
|
2143
2156
|
$tb->setFV(FDI_NAME, '1234567');
|
|
2144
|
-
if ($varCharField)
|
|
2157
|
+
if ($varCharField) {
|
|
2145
2158
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '123');
|
|
2146
|
-
else
|
|
2159
|
+
} else {
|
|
2147
2160
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '123456');
|
|
2161
|
+
}
|
|
2148
2162
|
//if ($this->isWindows())
|
|
2149
2163
|
// $this->assertEquals($tb->getFVWstr(FDI_GROUP), '68');
|
|
2150
2164
|
//else
|
|
@@ -2157,24 +2171,22 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2157
2171
|
//else
|
|
2158
2172
|
$this->assertEquals($tb->getFVstr(FDI_GROUP), '68');
|
|
2159
2173
|
// too long kanji
|
|
2160
|
-
if ($unicodeField)
|
|
2161
|
-
|
|
2162
|
-
if ($this->isWindows())
|
|
2163
|
-
{
|
|
2174
|
+
if ($unicodeField) {
|
|
2175
|
+
if ($this->isWindows()) {
|
|
2164
2176
|
$tb->setFV(FDI_NAME, 'あいうえお𩸽'); // hiragana 'aiueo' kanji 'hokke'
|
|
2165
|
-
if ($varCharField)
|
|
2177
|
+
if ($varCharField) {
|
|
2166
2178
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'あいう');
|
|
2167
|
-
else
|
|
2179
|
+
} else {
|
|
2168
2180
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'あいうえお');
|
|
2181
|
+
}
|
|
2169
2182
|
}
|
|
2170
|
-
}
|
|
2171
|
-
else
|
|
2172
|
-
{
|
|
2183
|
+
} else {
|
|
2173
2184
|
$tb->setFV(FDI_NAME, '0松本市'); // numeric '0' kanji 'matumostoshi'
|
|
2174
2185
|
$is_valid_value = ($tb->getFVstr(FDI_NAME) == '0松本');
|
|
2175
2186
|
$this->assertTrue($is_valid_value);
|
|
2176
|
-
if (! $is_valid_value)
|
|
2187
|
+
if (! $is_valid_value) {
|
|
2177
2188
|
print_r($tb->getFVstr(FDI_NAME));
|
|
2189
|
+
}
|
|
2178
2190
|
}
|
|
2179
2191
|
$this->assertEquals($tb->getFVstr(FDI_GROUP), '68');
|
|
2180
2192
|
//// Set Wide Get Ansi
|
|
@@ -2210,29 +2222,27 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2210
2222
|
// Set Ansi Get Ansi
|
|
2211
2223
|
// too long string
|
|
2212
2224
|
$tb->setFV(FDI_NAME, '1234567');
|
|
2213
|
-
if ($varCharField)
|
|
2225
|
+
if ($varCharField) {
|
|
2214
2226
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '123');
|
|
2215
|
-
else
|
|
2227
|
+
} else {
|
|
2216
2228
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '123456');
|
|
2229
|
+
}
|
|
2217
2230
|
$this->assertEquals($tb->getFVstr(FDI_GROUP), '68');
|
|
2218
2231
|
// short string
|
|
2219
2232
|
$tb->setFV(FDI_NAME, '13 ');
|
|
2220
2233
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '13 ');
|
|
2221
2234
|
$this->assertEquals($tb->getFVstr(FDI_GROUP), '68');
|
|
2222
2235
|
// too long lanji
|
|
2223
|
-
if ($unicodeField)
|
|
2224
|
-
|
|
2225
|
-
if ($this->isWindows())
|
|
2226
|
-
{
|
|
2236
|
+
if ($unicodeField) {
|
|
2237
|
+
if ($this->isWindows()) {
|
|
2227
2238
|
$tb->setFV(FDI_NAME, 'あいうえお𩸽'); // hiragana 'aiueo' kanji 'hokke'
|
|
2228
|
-
if ($varCharField)
|
|
2239
|
+
if ($varCharField) {
|
|
2229
2240
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'あいう');
|
|
2230
|
-
else
|
|
2241
|
+
} else {
|
|
2231
2242
|
$this->assertEquals($tb->getFVstr(FDI_NAME), 'あいうえお');
|
|
2243
|
+
}
|
|
2232
2244
|
}
|
|
2233
|
-
}
|
|
2234
|
-
else
|
|
2235
|
-
{
|
|
2245
|
+
} else {
|
|
2236
2246
|
$tb->setFV(FDI_NAME, '0松本市'); // numeric '0' kanji 'matumostoshi'
|
|
2237
2247
|
$this->assertEquals($tb->getFVstr(FDI_NAME), '0松本');
|
|
2238
2248
|
}
|
|
@@ -2240,7 +2250,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2240
2250
|
}
|
|
2241
2251
|
public function testVarField()
|
|
2242
2252
|
{
|
|
2243
|
-
$db = new
|
|
2253
|
+
$db = new Database();
|
|
2244
2254
|
$db->open(URL_VAR);
|
|
2245
2255
|
$this->assertEquals($db->stat(), 0);
|
|
2246
2256
|
$tb = $db->openTable('user1');
|
|
@@ -2253,8 +2263,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2253
2263
|
// acp varbinary
|
|
2254
2264
|
$this->setGetVar($tb, false, false);
|
|
2255
2265
|
$tb->close();
|
|
2256
|
-
if ($this->isUtf16leSupport($db))
|
|
2257
|
-
{
|
|
2266
|
+
if ($this->isUtf16leSupport($db)) {
|
|
2258
2267
|
$tb = $db->openTable('user3');
|
|
2259
2268
|
$this->assertEquals($db->stat(), 0);
|
|
2260
2269
|
// unicode varchar
|
|
@@ -2276,54 +2285,57 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2276
2285
|
{
|
|
2277
2286
|
$tb = $db->openTable($name);
|
|
2278
2287
|
$this->assertEquals($db->stat(), 0);
|
|
2279
|
-
if ($bulk)
|
|
2288
|
+
if ($bulk) {
|
|
2280
2289
|
$tb->beginBulkInsert(BULKBUFSIZE);
|
|
2281
|
-
|
|
2282
|
-
{
|
|
2290
|
+
}
|
|
2291
|
+
for ($i = $startid; $i <= $endid; $i++) {
|
|
2283
2292
|
$tb->clearBuffer();
|
|
2284
2293
|
$tb->setFV(FDI_ID, $i);
|
|
2285
2294
|
$tb->setFV(FDI_NAME, $str . $i);
|
|
2286
2295
|
$tb->setFV(FDI_GROUP, "" . ($i + 10));
|
|
2287
2296
|
$tb->insert();
|
|
2288
2297
|
}
|
|
2289
|
-
if ($bulk)
|
|
2298
|
+
if ($bulk) {
|
|
2290
2299
|
$tb->commitBulkInsert();
|
|
2300
|
+
}
|
|
2291
2301
|
$this->assertEquals($tb->stat(), 0);
|
|
2292
2302
|
}
|
|
2293
2303
|
public function testVarInsert()
|
|
2294
2304
|
{
|
|
2295
|
-
$db = new
|
|
2305
|
+
$db = new Database();
|
|
2296
2306
|
$startid = 1;
|
|
2297
2307
|
$bulk = false;
|
|
2298
2308
|
$str = '漢字文字のテスト'; // too long kanji
|
|
2299
2309
|
$str2 = '123';
|
|
2300
2310
|
$db->open(URL_VAR);
|
|
2301
2311
|
$this->assertEquals($db->stat(), 0);
|
|
2302
|
-
if (0 == $db->stat())
|
|
2303
|
-
{
|
|
2312
|
+
if (0 == $db->stat()) {
|
|
2304
2313
|
$utf16leSupport = $this->isUtf16leSupport($db);
|
|
2305
|
-
$this->doVarInsert($db, 'user1',
|
|
2306
|
-
$this->doVarInsert($db, 'user2',
|
|
2307
|
-
if ($utf16leSupport)
|
|
2308
|
-
$this->doVarInsert($db, 'user3',
|
|
2309
|
-
|
|
2310
|
-
$this->doVarInsert($db, '
|
|
2314
|
+
$this->doVarInsert($db, 'user1', Transactd::CP_ACP, $str, $startid, $startid, $bulk);
|
|
2315
|
+
$this->doVarInsert($db, 'user2', Transactd::CP_ACP, $str, $startid, $startid, $bulk);
|
|
2316
|
+
if ($utf16leSupport) {
|
|
2317
|
+
$this->doVarInsert($db, 'user3', Transactd::CP_ACP, $str, $startid, $startid, $bulk);
|
|
2318
|
+
}
|
|
2319
|
+
$this->doVarInsert($db, 'user4', Transactd::CP_ACP, $str, $startid, $startid, $bulk);
|
|
2320
|
+
$this->doVarInsert($db, 'user5', Transactd::CP_UTF8, $str, $startid, $startid, $bulk);
|
|
2311
2321
|
$startid = $startid + 1;
|
|
2312
|
-
$this->doVarInsert($db, 'user1',
|
|
2313
|
-
$this->doVarInsert($db, 'user2',
|
|
2314
|
-
if ($utf16leSupport)
|
|
2315
|
-
$this->doVarInsert($db, 'user3',
|
|
2316
|
-
|
|
2317
|
-
$this->doVarInsert($db, '
|
|
2322
|
+
$this->doVarInsert($db, 'user1', Transactd::CP_ACP, $str2, $startid, $startid, $bulk);
|
|
2323
|
+
$this->doVarInsert($db, 'user2', Transactd::CP_ACP, $str2, $startid, $startid, $bulk);
|
|
2324
|
+
if ($utf16leSupport) {
|
|
2325
|
+
$this->doVarInsert($db, 'user3', Transactd::CP_ACP, $str2, $startid, $startid, $bulk);
|
|
2326
|
+
}
|
|
2327
|
+
$this->doVarInsert($db, 'user4', Transactd::CP_ACP, $str2, $startid, $startid, $bulk);
|
|
2328
|
+
$this->doVarInsert($db, 'user5', Transactd::CP_UTF8, $str2, $startid, $startid, $bulk);
|
|
2318
2329
|
$startid = $startid + 1;
|
|
2319
2330
|
$bulk = true;
|
|
2320
2331
|
$endid = 1000;
|
|
2321
|
-
$this->doVarInsert($db, 'user1',
|
|
2322
|
-
$this->doVarInsert($db, 'user2',
|
|
2323
|
-
if ($utf16leSupport)
|
|
2324
|
-
$this->doVarInsert($db, 'user3',
|
|
2325
|
-
|
|
2326
|
-
$this->doVarInsert($db, '
|
|
2332
|
+
$this->doVarInsert($db, 'user1', Transactd::CP_ACP, '', $startid, $endid, $bulk);
|
|
2333
|
+
$this->doVarInsert($db, 'user2', Transactd::CP_ACP, '', $startid, $endid, $bulk);
|
|
2334
|
+
if ($utf16leSupport) {
|
|
2335
|
+
$this->doVarInsert($db, 'user3', Transactd::CP_ACP, '', $startid, $endid, $bulk);
|
|
2336
|
+
}
|
|
2337
|
+
$this->doVarInsert($db, 'user4', Transactd::CP_ACP, '', $startid, $endid, $bulk);
|
|
2338
|
+
$this->doVarInsert($db, 'user5', Transactd::CP_UTF8, '', $startid, $endid, $bulk);
|
|
2327
2339
|
}
|
|
2328
2340
|
$db->close();
|
|
2329
2341
|
}
|
|
@@ -2333,12 +2345,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2333
2345
|
$this->assertEquals($db->stat(), 0);
|
|
2334
2346
|
$tb->clearBuffer();
|
|
2335
2347
|
$tb->setKeyNum($ky);
|
|
2336
|
-
if ($ky == 0)
|
|
2337
|
-
{
|
|
2348
|
+
if ($ky == 0) {
|
|
2338
2349
|
$tb->setFV(FDI_ID, $num);
|
|
2339
|
-
}
|
|
2340
|
-
else
|
|
2341
|
-
{
|
|
2350
|
+
} else {
|
|
2342
2351
|
$v = $num + 10;
|
|
2343
2352
|
$tb->setFV(FDI_NAME, $str);
|
|
2344
2353
|
$tb->setFV(FDI_GROUP, $v);
|
|
@@ -2353,40 +2362,42 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2353
2362
|
}
|
|
2354
2363
|
public function testVarRead()
|
|
2355
2364
|
{
|
|
2356
|
-
$db = new
|
|
2365
|
+
$db = new Database();
|
|
2357
2366
|
$str = '漢字文';
|
|
2358
2367
|
$str3 = '漢字文字のテ';
|
|
2359
2368
|
$str2 ='123';
|
|
2360
2369
|
$str4 ='1232';
|
|
2361
2370
|
$db->open(URL_VAR);
|
|
2362
2371
|
$this->assertEquals($db->stat(), 0);
|
|
2363
|
-
if (0 == $db->stat())
|
|
2364
|
-
{
|
|
2372
|
+
if (0 == $db->stat()) {
|
|
2365
2373
|
$utf16leSupport = $this->isUtf16leSupport($db);
|
|
2366
2374
|
$num = 1;
|
|
2367
2375
|
$ky = 0;
|
|
2368
2376
|
// too long string
|
|
2369
|
-
$this->doVarRead($db, 'user1',
|
|
2370
|
-
$this->doVarRead($db, 'user2',
|
|
2371
|
-
if ($utf16leSupport)
|
|
2372
|
-
$this->doVarRead($db, 'user3',
|
|
2373
|
-
|
|
2374
|
-
$this->doVarRead($db, '
|
|
2377
|
+
$this->doVarRead($db, 'user1', Transactd::CP_ACP, $str, $num, $ky);
|
|
2378
|
+
$this->doVarRead($db, 'user2', Transactd::CP_ACP, $str, $num, $ky);
|
|
2379
|
+
if ($utf16leSupport) {
|
|
2380
|
+
$this->doVarRead($db, 'user3', Transactd::CP_ACP, $str, $num, $ky);
|
|
2381
|
+
}
|
|
2382
|
+
$this->doVarRead($db, 'user4', Transactd::CP_ACP, $str3, $num, $ky);
|
|
2383
|
+
$this->doVarRead($db, 'user5', Transactd::CP_UTF8, $str, $num, $ky);
|
|
2375
2384
|
// short string
|
|
2376
2385
|
$num = $num + 1;
|
|
2377
|
-
$this->doVarRead($db, 'user1',
|
|
2378
|
-
$this->doVarRead($db, 'user2',
|
|
2379
|
-
if ($utf16leSupport)
|
|
2380
|
-
$this->doVarRead($db, 'user3',
|
|
2381
|
-
|
|
2382
|
-
$this->doVarRead($db, '
|
|
2386
|
+
$this->doVarRead($db, 'user1', Transactd::CP_ACP, $str2, $num, $ky);
|
|
2387
|
+
$this->doVarRead($db, 'user2', Transactd::CP_ACP, $str4, $num, $ky);
|
|
2388
|
+
if ($utf16leSupport) {
|
|
2389
|
+
$this->doVarRead($db, 'user3', Transactd::CP_ACP, $str2, $num, $ky);
|
|
2390
|
+
}
|
|
2391
|
+
$this->doVarRead($db, 'user4', Transactd::CP_ACP, $str4, $num, $ky);
|
|
2392
|
+
$this->doVarRead($db, 'user5', Transactd::CP_UTF8, $str2, $num, $ky);
|
|
2383
2393
|
$ky = 1;
|
|
2384
|
-
$this->doVarRead($db, 'user1',
|
|
2385
|
-
$this->doVarRead($db, 'user2',
|
|
2386
|
-
if ($utf16leSupport)
|
|
2387
|
-
$this->doVarRead($db, 'user3',
|
|
2388
|
-
|
|
2389
|
-
$this->doVarRead($db, '
|
|
2394
|
+
$this->doVarRead($db, 'user1', Transactd::CP_ACP, '120', 120, $ky);
|
|
2395
|
+
$this->doVarRead($db, 'user2', Transactd::CP_ACP, '120', 120, $ky);
|
|
2396
|
+
if ($utf16leSupport) {
|
|
2397
|
+
$this->doVarRead($db, 'user3', Transactd::CP_ACP, '120', 120, $ky);
|
|
2398
|
+
}
|
|
2399
|
+
$this->doVarRead($db, 'user4', Transactd::CP_ACP, '120', 120, $ky);
|
|
2400
|
+
$this->doVarRead($db, 'user5', Transactd::CP_UTF8, '120', 120, $ky);
|
|
2390
2401
|
}
|
|
2391
2402
|
$db->close();
|
|
2392
2403
|
}
|
|
@@ -2396,16 +2407,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2396
2407
|
$this->assertEquals($db->stat(), 0);
|
|
2397
2408
|
$tb->clearBuffer();
|
|
2398
2409
|
$tb->setKeyNum($ky);
|
|
2399
|
-
if ($ky == 0)
|
|
2400
|
-
{
|
|
2410
|
+
if ($ky == 0) {
|
|
2401
2411
|
$buf = 'id > ' . $num . ' and id <= ' . ($num + 10);
|
|
2402
2412
|
$tb->setFilter($buf, 0, 10);
|
|
2403
2413
|
// find forword
|
|
2404
2414
|
$tb->setFV(FDI_ID, $num);
|
|
2405
2415
|
$tb->seekGreater(true);
|
|
2406
2416
|
$this->assertEquals($tb->stat(), 0);
|
|
2407
|
-
for ($i = ($num + 1); $i <= ($num + 10); $i++)
|
|
2408
|
-
{
|
|
2417
|
+
for ($i = ($num + 1); $i <= ($num + 10); $i++) {
|
|
2409
2418
|
$tb->findNext();
|
|
2410
2419
|
$this->assertEquals($tb->stat(), 0);
|
|
2411
2420
|
// test read of var field
|
|
@@ -2420,8 +2429,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2420
2429
|
$tb->seekLessThan(true);
|
|
2421
2430
|
$this->assertEquals($tb->stat(), 0);
|
|
2422
2431
|
$this->assertEquals($tb->getFVint(FDI_ID), $v);
|
|
2423
|
-
for ($i = $num + 10; $i <= $num + 1; $i--)
|
|
2424
|
-
{
|
|
2432
|
+
for ($i = $num + 10; $i <= $num + 1; $i--) {
|
|
2425
2433
|
$tb->findPrev(false);
|
|
2426
2434
|
$this->assertEquals($tb->stat(), 0);
|
|
2427
2435
|
// test read of var field
|
|
@@ -2431,9 +2439,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2431
2439
|
}
|
|
2432
2440
|
// test record count
|
|
2433
2441
|
$this->assertEquals($tb->recordCount(), 10);
|
|
2434
|
-
}
|
|
2435
|
-
else
|
|
2436
|
-
{
|
|
2442
|
+
} else {
|
|
2437
2443
|
$v = $num + 10;
|
|
2438
2444
|
$tb->setFV(FDI_NAME, $str);
|
|
2439
2445
|
$tb->setFV(FDI_GROUP, $v);
|
|
@@ -2441,48 +2447,47 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2441
2447
|
}
|
|
2442
2448
|
public function testFilterVar()
|
|
2443
2449
|
{
|
|
2444
|
-
$db = new
|
|
2450
|
+
$db = new Database();
|
|
2445
2451
|
$db->open(URL_VAR);
|
|
2446
2452
|
$this->assertEquals($db->stat(), 0);
|
|
2447
|
-
if (0 == $db->stat())
|
|
2448
|
-
{
|
|
2453
|
+
if (0 == $db->stat()) {
|
|
2449
2454
|
$str = '漢字文';
|
|
2450
2455
|
$str3 = '漢字文字のテ';
|
|
2451
|
-
$str2 = '123';
|
|
2452
|
-
$str4 = '1232';
|
|
2453
2456
|
$utf16leSupport = $this->isUtf16leSupport($db);
|
|
2454
2457
|
$num = 10;
|
|
2455
2458
|
$ky = 0;
|
|
2456
|
-
$this->doVarFilter($db, 'user1',
|
|
2457
|
-
$this->doVarFilter($db, 'user2',
|
|
2458
|
-
if ($utf16leSupport)
|
|
2459
|
-
$this->doVarFilter($db, 'user3',
|
|
2460
|
-
|
|
2461
|
-
$this->doVarFilter($db, '
|
|
2459
|
+
$this->doVarFilter($db, 'user1', Transactd::CP_ACP, $str, $num, $ky);
|
|
2460
|
+
$this->doVarFilter($db, 'user2', Transactd::CP_ACP, $str, $num, $ky);
|
|
2461
|
+
if ($utf16leSupport) {
|
|
2462
|
+
$this->doVarFilter($db, 'user3', Transactd::CP_ACP, $str, $num, $ky);
|
|
2463
|
+
}
|
|
2464
|
+
$this->doVarFilter($db, 'user4', Transactd::CP_ACP, $str3, $num, $ky);
|
|
2465
|
+
$this->doVarFilter($db, 'user5', Transactd::CP_UTF8, $str, $num, $ky);
|
|
2462
2466
|
//if (UNICODE)
|
|
2463
2467
|
//{
|
|
2464
2468
|
// // short string
|
|
2465
2469
|
// $num = $num + 1;
|
|
2466
|
-
// $this->doVarFilter($db, 'user1',
|
|
2467
|
-
// $this->doVarFilter($db, 'user2',
|
|
2470
|
+
// $this->doVarFilter($db, 'user1', Transactd::CP_ACP, $str2, $num, $ky);
|
|
2471
|
+
// $this->doVarFilter($db, 'user2', Transactd::CP_ACP, $str4, $num, $ky);
|
|
2468
2472
|
// if ($utf16leSupport)
|
|
2469
|
-
// $this->doVarFilter($db, 'user3',
|
|
2470
|
-
// $this->doVarFilter($db, 'user4',
|
|
2471
|
-
// $this->doVarFilter($db, 'user5',
|
|
2473
|
+
// $this->doVarFilter($db, 'user3', Transactd::CP_ACP, $str2, $num, $ky);
|
|
2474
|
+
// $this->doVarFilter($db, 'user4', Transactd::CP_ACP, $str4, $num, $ky);
|
|
2475
|
+
// $this->doVarFilter($db, 'user5', Transactd::CP_UTF8, $str2, $num, $ky);
|
|
2472
2476
|
//}
|
|
2473
2477
|
$ky = 1;
|
|
2474
|
-
$this->doVarFilter($db, 'user1',
|
|
2475
|
-
$this->doVarFilter($db, 'user2',
|
|
2476
|
-
if ($utf16leSupport)
|
|
2477
|
-
$this->doVarFilter($db, 'user3',
|
|
2478
|
-
|
|
2479
|
-
$this->doVarFilter($db, '
|
|
2478
|
+
$this->doVarFilter($db, 'user1', Transactd::CP_ACP, '120', 120, $ky);
|
|
2479
|
+
$this->doVarFilter($db, 'user2', Transactd::CP_ACP, '120', 120, $ky);
|
|
2480
|
+
if ($utf16leSupport) {
|
|
2481
|
+
$this->doVarFilter($db, 'user3', Transactd::CP_ACP, '120', 120, $ky);
|
|
2482
|
+
}
|
|
2483
|
+
$this->doVarFilter($db, 'user4', Transactd::CP_ACP, '120', 120, $ky);
|
|
2484
|
+
$this->doVarFilter($db, 'user5', Transactd::CP_UTF8, '120', 120, $ky);
|
|
2480
2485
|
}
|
|
2481
2486
|
$db->close();
|
|
2482
2487
|
}
|
|
2483
2488
|
public function testDropDatabaseVar()
|
|
2484
2489
|
{
|
|
2485
|
-
$db = new
|
|
2490
|
+
$db = new Database();
|
|
2486
2491
|
$db->open(URL_VAR);
|
|
2487
2492
|
$this->assertEquals($db->stat(), 0);
|
|
2488
2493
|
$db->drop();
|
|
@@ -2495,17 +2500,19 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2495
2500
|
//-----------------------------------------------------
|
|
2496
2501
|
private function varLenBytes($fd)
|
|
2497
2502
|
{
|
|
2498
|
-
if ((($fd->type >= ft_myvarchar) && ($fd->type <= ft_mywvarbinary)) || $fd->type == ft_lstring)
|
|
2499
|
-
return $fd->len < 256 ? 1 : 2;
|
|
2500
|
-
|
|
2501
|
-
return 2;
|
|
2503
|
+
if ((($fd->type >= ft_myvarchar) && ($fd->type <= ft_mywvarbinary)) || $fd->type == ft_lstring) {
|
|
2504
|
+
return $fd->len < 256 ? 1 : 2;
|
|
2505
|
+
} elseif ($fd->type == ft_lvar) {
|
|
2506
|
+
return 2;
|
|
2507
|
+
}
|
|
2502
2508
|
return 0;
|
|
2503
2509
|
}
|
|
2504
2510
|
|
|
2505
2511
|
private function blobLenBytes($fd)
|
|
2506
2512
|
{
|
|
2507
|
-
if (($fd->type== ft_myblob) || ($fd->type == ft_mytext))
|
|
2508
|
-
return $fd->len - 8;
|
|
2513
|
+
if (($fd->type== ft_myblob) || ($fd->type == ft_mytext)) {
|
|
2514
|
+
return $fd->len - 8;
|
|
2515
|
+
}
|
|
2509
2516
|
return 0;
|
|
2510
2517
|
}
|
|
2511
2518
|
|
|
@@ -2513,18 +2520,18 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2513
2520
|
{
|
|
2514
2521
|
// create table
|
|
2515
2522
|
$dbdef = $db->dbDef();
|
|
2516
|
-
$td = new
|
|
2523
|
+
$td = new Tabledef();
|
|
2517
2524
|
$td->setTableName($name);
|
|
2518
2525
|
$td->setFileName($name . '.dat');
|
|
2519
2526
|
$td->id = $id;
|
|
2520
2527
|
$td->pageSize = 2048;
|
|
2521
|
-
$td->charsetIndex =
|
|
2522
|
-
// $td->charsetIndex =
|
|
2528
|
+
$td->charsetIndex = Transactd::CHARSET_UTF8B4;
|
|
2529
|
+
// $td->charsetIndex = Transactd::CHARSET_CP932;
|
|
2523
2530
|
$dbdef->insertTable($td);
|
|
2524
2531
|
$this->assertEquals($dbdef->stat(), 0);
|
|
2525
2532
|
$fd = $dbdef->insertField($id, 0);
|
|
2526
2533
|
$fd->setName('id');
|
|
2527
|
-
$fd->type =
|
|
2534
|
+
$fd->type = Transactd::ft_integer;
|
|
2528
2535
|
$fd->len = 4;
|
|
2529
2536
|
$dbdef->updateTableDef($id);
|
|
2530
2537
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -2532,13 +2539,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2532
2539
|
$fd->setName('name');
|
|
2533
2540
|
$fd->type = $type;
|
|
2534
2541
|
$fd->len = 44;
|
|
2535
|
-
if ($this->varLenBytes($fd) != 0)
|
|
2536
|
-
{
|
|
2542
|
+
if ($this->varLenBytes($fd) != 0) {
|
|
2537
2543
|
$fd->len = $this->varLenBytes($fd) + 44;
|
|
2538
2544
|
$fd->keylen = $fd->len;
|
|
2539
2545
|
}
|
|
2540
|
-
if ($this->blobLenBytes($fd) != 0)
|
|
2541
|
-
$fd->len = 12;
|
|
2546
|
+
if ($this->blobLenBytes($fd) != 0) {
|
|
2547
|
+
$fd->len = 12;
|
|
2548
|
+
} // 8+4
|
|
2542
2549
|
$fd->keylen = $fd->len;
|
|
2543
2550
|
$dbdef->updateTableDef($id);
|
|
2544
2551
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -2546,13 +2553,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2546
2553
|
$fd->setName('namew');
|
|
2547
2554
|
$fd->type = $type2;
|
|
2548
2555
|
$fd->len = 44;
|
|
2549
|
-
if ($this->varLenBytes($fd) != 0)
|
|
2550
|
-
{
|
|
2556
|
+
if ($this->varLenBytes($fd) != 0) {
|
|
2551
2557
|
$fd->len = $this->varLenBytes($fd) + 44;
|
|
2552
2558
|
$fd->keylen = $fd->len;
|
|
2553
2559
|
}
|
|
2554
|
-
if ($this->blobLenBytes($fd) != 0)
|
|
2555
|
-
$fd->len = 12;
|
|
2560
|
+
if ($this->blobLenBytes($fd) != 0) {
|
|
2561
|
+
$fd->len = 12;
|
|
2562
|
+
} // 8+4
|
|
2556
2563
|
$fd->keylen = $fd->len;
|
|
2557
2564
|
$dbdef->updateTableDef($id);
|
|
2558
2565
|
$this->assertEquals($dbdef->stat(), 0);
|
|
@@ -2674,7 +2681,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2674
2681
|
$this->assertEquals($tb->getFVstr(FDI_NAMEW), 'おめでとうございます。');
|
|
2675
2682
|
|
|
2676
2683
|
$tb->findNext();
|
|
2677
|
-
$this->assertEquals($tb->stat(),
|
|
2684
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_EOF);
|
|
2678
2685
|
|
|
2679
2686
|
$tb->clearBuffer();
|
|
2680
2687
|
$tb->seekLast();
|
|
@@ -2691,7 +2698,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2691
2698
|
$this->assertEquals($tb->getFVstr(FDI_NAMEW), 'A123456');
|
|
2692
2699
|
|
|
2693
2700
|
$tb->findPrev();
|
|
2694
|
-
$this->assertEquals($tb->stat(),
|
|
2701
|
+
$this->assertEquals($tb->stat(), Transactd::STATUS_EOF);
|
|
2695
2702
|
|
|
2696
2703
|
$tb->setFilter("name = 'あい'", 0, 10);
|
|
2697
2704
|
$this->assertEquals($tb->recordCount(), 0);
|
|
@@ -2745,28 +2752,28 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2745
2752
|
|
|
2746
2753
|
public function testStringFilter()
|
|
2747
2754
|
{
|
|
2748
|
-
$db = new
|
|
2755
|
+
$db = new Database();
|
|
2749
2756
|
$db->create(URL_SF);
|
|
2750
|
-
if ($db->stat() ==
|
|
2751
|
-
{
|
|
2757
|
+
if ($db->stat() == Transactd::STATUS_TABLE_EXISTS_ERROR) {
|
|
2752
2758
|
$this->testDropDatabaseStringFilter();
|
|
2753
2759
|
$db->create(URL_SF);
|
|
2754
2760
|
}
|
|
2755
2761
|
$this->assertEquals($db->stat(), 0);
|
|
2756
|
-
$db->open(URL_SF,
|
|
2762
|
+
$db->open(URL_SF, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
2757
2763
|
$this->assertEquals($db->stat(), 0);
|
|
2758
|
-
$this->doTestStringFilter($db, 1, 'zstring',
|
|
2759
|
-
if ($this->isUtf16leSupport($db))
|
|
2760
|
-
$this->doTestStringFilter($db, 2, 'myvarchar',
|
|
2761
|
-
else
|
|
2762
|
-
$this->doTestStringFilter($db, 2, 'myvarchar',
|
|
2763
|
-
|
|
2764
|
+
$this->doTestStringFilter($db, 1, 'zstring', Transactd::ft_zstring, Transactd::ft_wzstring);
|
|
2765
|
+
if ($this->isUtf16leSupport($db)) {
|
|
2766
|
+
$this->doTestStringFilter($db, 2, 'myvarchar', Transactd::ft_myvarchar, Transactd::ft_mywvarchar);
|
|
2767
|
+
} else {
|
|
2768
|
+
$this->doTestStringFilter($db, 2, 'myvarchar', Transactd::ft_myvarchar, Transactd::ft_myvarchar);
|
|
2769
|
+
}
|
|
2770
|
+
$this->doTestStringFilter($db, 3, 'mytext', Transactd::ft_mytext, Transactd::ft_myblob);
|
|
2764
2771
|
$db->close();
|
|
2765
2772
|
}
|
|
2766
2773
|
|
|
2767
2774
|
public function testDropDatabaseStringFilter()
|
|
2768
2775
|
{
|
|
2769
|
-
$db = new
|
|
2776
|
+
$db = new Database();
|
|
2770
2777
|
$db->open(URL_SF);
|
|
2771
2778
|
$this->assertEquals($db->stat(), 0);
|
|
2772
2779
|
$db->drop();
|
|
@@ -2776,7 +2783,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2776
2783
|
|
|
2777
2784
|
public function testQuery()
|
|
2778
2785
|
{
|
|
2779
|
-
$q = new
|
|
2786
|
+
$q = new Query();
|
|
2780
2787
|
$q->queryString("id = 0 and name = 'Abc efg'");
|
|
2781
2788
|
$this->assertEquals($q->toString(), "id = '0' and name = 'Abc efg'");
|
|
2782
2789
|
|
|
@@ -2895,40 +2902,40 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2895
2902
|
|
|
2896
2903
|
//-----------------------------------------------------
|
|
2897
2904
|
// ActiveTable
|
|
2898
|
-
//-----------------------------------------------------
|
|
2899
|
-
|
|
2905
|
+
//-----------------------------------------------------
|
|
2906
|
+
|
|
2900
2907
|
private function createQTuser($db)
|
|
2901
2908
|
{
|
|
2902
2909
|
$dbdef = $db->dbDef();
|
|
2903
|
-
$td = new
|
|
2910
|
+
$td = new Tabledef();
|
|
2904
2911
|
$td->setTableName('user');
|
|
2905
2912
|
$td->setFileName('user.dat');
|
|
2906
2913
|
$id = 1;
|
|
2907
2914
|
$td->id = $id;
|
|
2908
2915
|
$td->pageSize = 2048;
|
|
2909
|
-
$td->schemaCodePage =
|
|
2910
|
-
$td->charsetIndex =
|
|
2916
|
+
$td->schemaCodePage = Transactd::CP_UTF8;
|
|
2917
|
+
$td->charsetIndex = Transactd::CHARSET_UTF8;
|
|
2911
2918
|
$dbdef->insertTable($td);
|
|
2912
2919
|
$this->assertEquals($dbdef->stat(), 0);
|
|
2913
2920
|
// id field
|
|
2914
2921
|
$fd = $dbdef->insertField($id, 0);
|
|
2915
2922
|
$fd->setName('id');
|
|
2916
|
-
$fd->type =
|
|
2923
|
+
$fd->type = Transactd::ft_autoinc;
|
|
2917
2924
|
$fd->len = 4;
|
|
2918
2925
|
// 名前 field
|
|
2919
2926
|
$fd = $dbdef->insertField($id, 1);
|
|
2920
2927
|
$fd->setName('名前');
|
|
2921
|
-
$fd->type =
|
|
2928
|
+
$fd->type = Transactd::ft_myvarchar;
|
|
2922
2929
|
$fd->setLenByCharnum(20);
|
|
2923
2930
|
// group field
|
|
2924
2931
|
$fd = $dbdef->insertField($id, 2);
|
|
2925
2932
|
$fd->setName('group');
|
|
2926
|
-
$fd->type =
|
|
2933
|
+
$fd->type = Transactd::ft_integer;
|
|
2927
2934
|
$fd->len = 4;
|
|
2928
2935
|
// tel field
|
|
2929
2936
|
$fd = $dbdef->insertField($id, 3);
|
|
2930
2937
|
$fd->setName('tel');
|
|
2931
|
-
$fd->type =
|
|
2938
|
+
$fd->type = Transactd::ft_myvarchar;
|
|
2932
2939
|
$fd->setLenByCharnum(20);
|
|
2933
2940
|
// key 0 (primary) id
|
|
2934
2941
|
$kd = $dbdef->insertKey($id, 0);
|
|
@@ -2956,25 +2963,25 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2956
2963
|
private function createQTgroups($db)
|
|
2957
2964
|
{
|
|
2958
2965
|
$dbdef = $db->dbDef();
|
|
2959
|
-
$td = new
|
|
2966
|
+
$td = new Tabledef();
|
|
2960
2967
|
$td->setTableName('groups');
|
|
2961
2968
|
$td->setFileName('groups.dat');
|
|
2962
2969
|
$id = 2;
|
|
2963
2970
|
$td->id = $id;
|
|
2964
2971
|
$td->pageSize = 2048;
|
|
2965
|
-
$td->schemaCodePage =
|
|
2966
|
-
$td->charsetIndex =
|
|
2972
|
+
$td->schemaCodePage = Transactd::CP_UTF8;
|
|
2973
|
+
$td->charsetIndex = Transactd::CHARSET_UTF8;
|
|
2967
2974
|
$dbdef->insertTable($td);
|
|
2968
2975
|
$this->assertEquals($dbdef->stat(), 0);
|
|
2969
2976
|
// code field
|
|
2970
2977
|
$fd = $dbdef->insertField($id, 0);
|
|
2971
2978
|
$fd->setName('code');
|
|
2972
|
-
$fd->type =
|
|
2979
|
+
$fd->type = Transactd::ft_integer;
|
|
2973
2980
|
$fd->len = 4;
|
|
2974
2981
|
// name field
|
|
2975
2982
|
$fd = $dbdef->insertField($id, 1);
|
|
2976
2983
|
$fd->setName('name');
|
|
2977
|
-
$fd->type =
|
|
2984
|
+
$fd->type = Transactd::ft_myvarbinary;
|
|
2978
2985
|
$fd->len = 33;
|
|
2979
2986
|
// key 0 (primary) code
|
|
2980
2987
|
$kd = $dbdef->insertKey($id, 0);
|
|
@@ -2988,37 +2995,37 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
2988
2995
|
$dbdef->updateTableDef($id);
|
|
2989
2996
|
$this->assertEquals($dbdef->stat(), 0);
|
|
2990
2997
|
// open test
|
|
2991
|
-
$
|
|
2998
|
+
$db->openTable($id);
|
|
2992
2999
|
$this->assertEquals($db->stat(), 0);
|
|
2993
3000
|
return true;
|
|
2994
3001
|
}
|
|
2995
3002
|
private function createQTextention($db)
|
|
2996
3003
|
{
|
|
2997
3004
|
$dbdef = $db->dbDef();
|
|
2998
|
-
$td = new
|
|
3005
|
+
$td = new Tabledef();
|
|
2999
3006
|
$td->setTableName('extention');
|
|
3000
3007
|
$td->setFileName('extention.dat');
|
|
3001
3008
|
$id = 3;
|
|
3002
3009
|
$td->id = $id;
|
|
3003
3010
|
$td->pageSize = 2048;
|
|
3004
|
-
$td->schemaCodePage =
|
|
3005
|
-
$td->charsetIndex =
|
|
3011
|
+
$td->schemaCodePage = Transactd::CP_UTF8;
|
|
3012
|
+
$td->charsetIndex = Transactd::CHARSET_UTF8;
|
|
3006
3013
|
$dbdef->insertTable($td);
|
|
3007
3014
|
$this->assertEquals($dbdef->stat(), 0);
|
|
3008
3015
|
// id field
|
|
3009
3016
|
$fd = $dbdef->insertField($id, 0);
|
|
3010
3017
|
$fd->setName('id');
|
|
3011
|
-
$fd->type =
|
|
3018
|
+
$fd->type = Transactd::ft_integer;
|
|
3012
3019
|
$fd->len = 4;
|
|
3013
3020
|
// comment field
|
|
3014
3021
|
$fd = $dbdef->insertField($id, 1);
|
|
3015
3022
|
$fd->setName('comment');
|
|
3016
|
-
$fd->type =
|
|
3023
|
+
$fd->type = Transactd::ft_myvarchar;
|
|
3017
3024
|
$fd->setLenByCharnum(60);
|
|
3018
3025
|
// blob field
|
|
3019
3026
|
$fd = $dbdef->insertField($id, 2);
|
|
3020
3027
|
$fd->setName('blob');
|
|
3021
|
-
$fd->type =
|
|
3028
|
+
$fd->type = Transactd::ft_myblob;
|
|
3022
3029
|
$fd->len = 10;
|
|
3023
3030
|
// key 0 (primary) id
|
|
3024
3031
|
$kd = $dbdef->insertKey($id, 0);
|
|
@@ -3039,12 +3046,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3039
3046
|
private function insertQT($db, $maxId)
|
|
3040
3047
|
{
|
|
3041
3048
|
// insert user data
|
|
3042
|
-
$tb = $db->openTable('user',
|
|
3049
|
+
$tb = $db->openTable('user', Transactd::TD_OPEN_NORMAL);
|
|
3043
3050
|
$this->assertEquals($db->stat(), 0);
|
|
3044
3051
|
$db->beginTrn();
|
|
3045
3052
|
$tb->clearBuffer();
|
|
3046
|
-
for ($i = 1; $i <= $maxId; $i++)
|
|
3047
|
-
{
|
|
3053
|
+
for ($i = 1; $i <= $maxId; $i++) {
|
|
3048
3054
|
$tb->setFV(0, $i);
|
|
3049
3055
|
$tb->setFV(1, "$i user");
|
|
3050
3056
|
$tb->setFV('group', (($i - 1) % 5) + 1);
|
|
@@ -3054,12 +3060,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3054
3060
|
$db->endTrn();
|
|
3055
3061
|
$tb->close();
|
|
3056
3062
|
// insert groups data
|
|
3057
|
-
$tb = $db->openTable('groups',
|
|
3063
|
+
$tb = $db->openTable('groups', Transactd::TD_OPEN_NORMAL);
|
|
3058
3064
|
$this->assertEquals($db->stat(), 0);
|
|
3059
3065
|
$db->beginTrn();
|
|
3060
3066
|
$tb->clearBuffer();
|
|
3061
|
-
for ($i = 1; $i <= 100; $i++)
|
|
3062
|
-
{
|
|
3067
|
+
for ($i = 1; $i <= 100; $i++) {
|
|
3063
3068
|
$tb->setFV(0, $i);
|
|
3064
3069
|
$tb->setFV(1, "$i group");
|
|
3065
3070
|
$tb->insert();
|
|
@@ -3068,12 +3073,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3068
3073
|
$db->endTrn();
|
|
3069
3074
|
$tb->close();
|
|
3070
3075
|
// insert extention data
|
|
3071
|
-
$tb = $db->openTable('extention',
|
|
3076
|
+
$tb = $db->openTable('extention', Transactd::TD_OPEN_NORMAL);
|
|
3072
3077
|
$this->assertEquals($db->stat(), 0);
|
|
3073
3078
|
$db->beginTrn();
|
|
3074
3079
|
$tb->clearBuffer();
|
|
3075
|
-
for ($i = 1; $i <= $maxId; $i++)
|
|
3076
|
-
{
|
|
3080
|
+
for ($i = 1; $i <= $maxId; $i++) {
|
|
3077
3081
|
$tb->setFV(0, $i);
|
|
3078
3082
|
$tb->setFV(1, "$i comment");
|
|
3079
3083
|
$tb->setFV(2, "$i blob");
|
|
@@ -3085,19 +3089,19 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3085
3089
|
|
|
3086
3090
|
public function testCreateQueryTest()
|
|
3087
3091
|
{
|
|
3088
|
-
$db = new
|
|
3092
|
+
$db = new Database();
|
|
3089
3093
|
// check database existence
|
|
3090
|
-
$db->open(URL_QT,
|
|
3091
|
-
if ($db->stat() !== 0)
|
|
3094
|
+
$db->open(URL_QT, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
3095
|
+
if ($db->stat() !== 0) {
|
|
3092
3096
|
echo("\nDatabase " . DBNAME_QT . " not found");
|
|
3093
|
-
else
|
|
3094
|
-
{
|
|
3097
|
+
} else {
|
|
3095
3098
|
$def = $db->dbDef();
|
|
3096
3099
|
$td = $def->tableDefs(3);
|
|
3097
|
-
if ($td !=
|
|
3100
|
+
if ($td != null && $td->fieldCount === 3) {
|
|
3098
3101
|
$tb = $db->openTable('extention');
|
|
3099
|
-
if ($db->stat() === 0 && $tb->recordCount(false) === TEST_COUNT)
|
|
3102
|
+
if ($db->stat() === 0 && $tb->recordCount(false) === TEST_COUNT) {
|
|
3100
3103
|
return;
|
|
3104
|
+
}
|
|
3101
3105
|
$tb->close();
|
|
3102
3106
|
}
|
|
3103
3107
|
$db->drop();
|
|
@@ -3105,7 +3109,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3105
3109
|
echo("\nCreate database " . DBNAME_QT . "\n");
|
|
3106
3110
|
$db->create(URL_QT);
|
|
3107
3111
|
$this->assertEquals($db->stat(), 0);
|
|
3108
|
-
$db->open(URL_QT,
|
|
3112
|
+
$db->open(URL_QT, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL);
|
|
3109
3113
|
$this->assertEquals($db->stat(), 0);
|
|
3110
3114
|
// create tables
|
|
3111
3115
|
$this->createQTuser($db);
|
|
@@ -3116,36 +3120,35 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3116
3120
|
}
|
|
3117
3121
|
public function testNewDelete()
|
|
3118
3122
|
{
|
|
3119
|
-
$db = new
|
|
3123
|
+
$db = new Database();
|
|
3120
3124
|
$db->open(URL_QT);
|
|
3121
|
-
for ($i = 0; $i < 500; $i++)
|
|
3122
|
-
|
|
3123
|
-
$
|
|
3124
|
-
$
|
|
3125
|
-
$
|
|
3126
|
-
$f = new Bz\fieldNames();
|
|
3125
|
+
for ($i = 0; $i < 500; $i++) {
|
|
3126
|
+
$q = new Query();
|
|
3127
|
+
$rq = new RecordsetQuery();
|
|
3128
|
+
$gq = new GroupQuery();
|
|
3129
|
+
$f = new FieldNames();
|
|
3127
3130
|
$f->addValue('abc');
|
|
3128
|
-
$atu = new
|
|
3131
|
+
$atu = new ActiveTable($db, 'user');
|
|
3129
3132
|
$atu->index(0);
|
|
3130
|
-
$atg = new
|
|
3133
|
+
$atg = new ActiveTable($db, 'groups');
|
|
3131
3134
|
$atg->index(0);
|
|
3132
|
-
$fns = new
|
|
3135
|
+
$fns = new FieldNames();
|
|
3133
3136
|
$fns->addValue('a');
|
|
3134
|
-
$s = new
|
|
3135
|
-
$s = new
|
|
3136
|
-
$s = new
|
|
3137
|
-
$s = new
|
|
3138
|
-
$s = new
|
|
3139
|
-
$rs = new
|
|
3137
|
+
$s = new Sum($fns);
|
|
3138
|
+
$s = new Count('a');
|
|
3139
|
+
$s = new Avg($fns);
|
|
3140
|
+
$s = new Min($fns);
|
|
3141
|
+
$s = new Max($fns);
|
|
3142
|
+
$rs = new Recordset();
|
|
3140
3143
|
}
|
|
3141
3144
|
}
|
|
3142
3145
|
public function testLoop()
|
|
3143
3146
|
{
|
|
3144
|
-
$db = new
|
|
3147
|
+
$db = new Database();
|
|
3145
3148
|
$db->open(URL_QT);
|
|
3146
3149
|
$this->assertEquals($db->stat(), 0);
|
|
3147
|
-
$atu = new
|
|
3148
|
-
$q = new
|
|
3150
|
+
$atu = new ActiveTable($db, 'user');
|
|
3151
|
+
$q = new Query();
|
|
3149
3152
|
|
|
3150
3153
|
$atu->alias('名前', 'name');
|
|
3151
3154
|
$q->where('id', '<=', 15000);
|
|
@@ -3155,37 +3158,32 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3155
3158
|
//
|
|
3156
3159
|
$fds = $rs->fielddefs();
|
|
3157
3160
|
// for
|
|
3158
|
-
for ($field_id = 0; $field_id < count($fds); $field_id++)
|
|
3159
|
-
{
|
|
3161
|
+
for ($field_id = 0; $field_id < count($fds); $field_id++) {
|
|
3160
3162
|
$field_name = $fds[$field_id]->name();
|
|
3161
3163
|
//echo("$field_id : $field_name\n");
|
|
3162
3164
|
}
|
|
3163
3165
|
// foreach
|
|
3164
3166
|
$field_id = 0;
|
|
3165
|
-
foreach ($fds as $fd)
|
|
3166
|
-
{
|
|
3167
|
+
foreach ($fds as $fd) {
|
|
3167
3168
|
$field_name = $fd->name();
|
|
3168
3169
|
//echo("$field_id : $field_name\n");
|
|
3169
3170
|
$field_id++;
|
|
3170
3171
|
}
|
|
3171
3172
|
// foreach KeyValue
|
|
3172
|
-
foreach ($fds as $field_id => $fd)
|
|
3173
|
-
{
|
|
3173
|
+
foreach ($fds as $field_id => $fd) {
|
|
3174
3174
|
$field_name = $fd->name();
|
|
3175
3175
|
//echo("$field_id : $field_name\n");
|
|
3176
3176
|
}
|
|
3177
3177
|
// generator
|
|
3178
3178
|
$field_id = 0;
|
|
3179
|
-
foreach ($fds->range() as $fd)
|
|
3180
|
-
{
|
|
3179
|
+
foreach ($fds->range() as $fd) {
|
|
3181
3180
|
$field_name = $fd->name();
|
|
3182
3181
|
//echo("$field_id : $field_name\n");
|
|
3183
3182
|
$field_id++;
|
|
3184
3183
|
}
|
|
3185
3184
|
// generator with range
|
|
3186
3185
|
$field_id = 1;
|
|
3187
|
-
foreach ($fds->range(1, 2) as $fd)
|
|
3188
|
-
{
|
|
3186
|
+
foreach ($fds->range(1, 2) as $fd) {
|
|
3189
3187
|
$field_name = $fd->name();
|
|
3190
3188
|
//echo("$field_id : $field_name\n");
|
|
3191
3189
|
$field_id++;
|
|
@@ -3194,46 +3192,53 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3194
3192
|
// loop Recordset and Record
|
|
3195
3193
|
//
|
|
3196
3194
|
// for
|
|
3197
|
-
for ($row_id = 0; $row_id < count($rs); $row_id++)
|
|
3198
|
-
|
|
3199
|
-
$record = $rs[$row_id];
|
|
3195
|
+
for ($row_id = 0; $row_id < count($rs); $row_id++) {
|
|
3196
|
+
$record = $rs->getRecord($row_id);
|
|
3200
3197
|
// for loop Record
|
|
3201
3198
|
for ($field_id = 0; $field_id < count($record); $field_id++) {
|
|
3202
3199
|
$field_name = $fds[$field_id]->name();
|
|
3203
3200
|
$field_value = $record[$field_id];
|
|
3201
|
+
$field_value = $record[$field_name];
|
|
3204
3202
|
//if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
|
|
3205
3203
|
}
|
|
3206
3204
|
}
|
|
3207
3205
|
// foreach
|
|
3208
3206
|
$row_id = 0;
|
|
3209
|
-
|
|
3210
|
-
{
|
|
3207
|
+
$rs->fetchMode = Transactd::FETCH_RECORD_INTO;
|
|
3208
|
+
foreach ($rs as $record) {
|
|
3211
3209
|
$field_id = 0;
|
|
3212
3210
|
foreach ($record as $field_value) {
|
|
3213
3211
|
$field_name = $fds[$field_id]->name();
|
|
3212
|
+
$field_value = $record[$field_id];
|
|
3213
|
+
$field_value = $record[$field_name];
|
|
3214
3214
|
//if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
|
|
3215
3215
|
$field_id++;
|
|
3216
3216
|
}
|
|
3217
3217
|
$row_id++;
|
|
3218
3218
|
}
|
|
3219
3219
|
// foreach KeyValue
|
|
3220
|
-
foreach ($rs as $row_id => $record)
|
|
3221
|
-
{
|
|
3220
|
+
foreach ($rs as $row_id => $record) {
|
|
3222
3221
|
$field_id = 0;
|
|
3223
|
-
foreach ($record as $field_name => $field_value)
|
|
3224
|
-
{
|
|
3222
|
+
foreach ($record as $field_name => $field_value) {
|
|
3225
3223
|
//if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
|
|
3226
3224
|
$field_id++;
|
|
3227
3225
|
}
|
|
3228
3226
|
}
|
|
3229
3227
|
// generator
|
|
3230
3228
|
$row_id = 0;
|
|
3231
|
-
foreach ($rs->range() as $record)
|
|
3232
|
-
{
|
|
3229
|
+
foreach ($rs->range() as $record) {
|
|
3233
3230
|
// values generator
|
|
3234
3231
|
$field_id = 0;
|
|
3235
|
-
foreach ($record
|
|
3236
|
-
|
|
3232
|
+
foreach ($record as $field_value) {
|
|
3233
|
+
$field_name = $fds[$field_id]->name();
|
|
3234
|
+
$field_value = $record[$field_id];
|
|
3235
|
+
$field_value = $record[$field_name];
|
|
3236
|
+
//if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
|
|
3237
|
+
$field_id++;
|
|
3238
|
+
}
|
|
3239
|
+
|
|
3240
|
+
$field_id = 0;
|
|
3241
|
+
foreach ($record->values() as $field_value) {
|
|
3237
3242
|
$field_name = $fds[$field_id]->name();
|
|
3238
3243
|
//if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
|
|
3239
3244
|
$field_id++;
|
|
@@ -3242,12 +3247,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3242
3247
|
}
|
|
3243
3248
|
// generator with range
|
|
3244
3249
|
$row_id = 3;
|
|
3245
|
-
foreach ($rs->range(3, 100) as $record)
|
|
3246
|
-
{
|
|
3250
|
+
foreach ($rs->range(3, 100) as $record) {
|
|
3247
3251
|
// keys generator
|
|
3248
3252
|
$field_id = 0;
|
|
3249
|
-
foreach ($record->keys() as $field_name)
|
|
3250
|
-
{
|
|
3253
|
+
foreach ($record->keys() as $field_name) {
|
|
3251
3254
|
$field_value = $record[$field_id];
|
|
3252
3255
|
//if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
|
|
3253
3256
|
$field_id++;
|
|
@@ -3257,13 +3260,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3257
3260
|
}
|
|
3258
3261
|
public function testJoin()
|
|
3259
3262
|
{
|
|
3260
|
-
$db = new
|
|
3263
|
+
$db = new Database();
|
|
3261
3264
|
$db->open(URL_QT);
|
|
3262
3265
|
$this->assertEquals($db->stat(), 0);
|
|
3263
|
-
$atu = new
|
|
3264
|
-
$atg = new
|
|
3265
|
-
$ate = new
|
|
3266
|
-
$q = new
|
|
3266
|
+
$atu = new ActiveTable($db, 'user');
|
|
3267
|
+
$atg = new ActiveTable($db, 'groups');
|
|
3268
|
+
$ate = new ActiveTable($db, 'extention');
|
|
3269
|
+
$q = new Query();
|
|
3267
3270
|
|
|
3268
3271
|
$atu->alias('名前', 'name');
|
|
3269
3272
|
$q->select('id', 'name', 'group')->where('id', '<=', 15000);
|
|
@@ -3275,7 +3278,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3275
3278
|
$q->reset();
|
|
3276
3279
|
$this->assertEquals($q->selectCount(), 0);
|
|
3277
3280
|
|
|
3278
|
-
$q->select('comment')->optimize(
|
|
3281
|
+
$q->select('comment')->optimize(QueryBase::joinHasOneOrHasMany);
|
|
3279
3282
|
$this->assertEquals($q->selectCount(), 1);
|
|
3280
3283
|
$ate->index(0)->join($rs, $q, 'id');
|
|
3281
3284
|
$this->assertEquals($q->selectCount(), 1);
|
|
@@ -3306,8 +3309,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3306
3309
|
|
|
3307
3310
|
// orderby
|
|
3308
3311
|
$rs->orderBy('group_name');
|
|
3309
|
-
for ($i = 0; $i < 15000 / 5; $i++)
|
|
3310
|
-
{
|
|
3312
|
+
for ($i = 0; $i < 15000 / 5; $i++) {
|
|
3311
3313
|
$this->assertEquals($rs[$i]['group_name'], '1 group');
|
|
3312
3314
|
}
|
|
3313
3315
|
$this->assertEquals($rs[15000 / 5]['group_name'], '2 group');
|
|
@@ -3322,7 +3324,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3322
3324
|
$this->assertEquals($rs2->size(), 1000);
|
|
3323
3325
|
$q->reset();
|
|
3324
3326
|
$ate->index(0)->join($rs2,
|
|
3325
|
-
$q->select('comment')->optimize(
|
|
3327
|
+
$q->select('comment')->optimize(QueryBase::joinHasOneOrHasMany), 'id');
|
|
3326
3328
|
$this->assertEquals($rs2->size(), 1000);
|
|
3327
3329
|
$q->reset();
|
|
3328
3330
|
$atg->index(0)->join($rs2, $q->select('group_name'), 'group');
|
|
@@ -3335,12 +3337,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3335
3337
|
$this->assertEquals($rs->last()['id'], 16000);
|
|
3336
3338
|
|
|
3337
3339
|
// group by
|
|
3338
|
-
$gq = new
|
|
3340
|
+
$gq = new GroupQuery();
|
|
3339
3341
|
$gq->keyField('group', 'id');
|
|
3340
|
-
$count1 = new
|
|
3342
|
+
$count1 = new Count('count');
|
|
3341
3343
|
$gq->addFunction($count1);
|
|
3342
3344
|
|
|
3343
|
-
$count2 = new
|
|
3345
|
+
$count2 = new Count('group1_count');
|
|
3344
3346
|
$count2->when('group', '=', 1);
|
|
3345
3347
|
$gq->addFunction($count2);
|
|
3346
3348
|
|
|
@@ -3352,7 +3354,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3352
3354
|
$rsv = clone $rs;
|
|
3353
3355
|
$this->assertEquals($rsv->size(), 16000);
|
|
3354
3356
|
$gq->reset();
|
|
3355
|
-
$count3 = new
|
|
3357
|
+
$count3 = new Count('count3');
|
|
3356
3358
|
$gq->addFunction($count3)->keyField('group');
|
|
3357
3359
|
$this->assertEquals($gq->functionCount(), 1);
|
|
3358
3360
|
$this->assertEquals($gq->getKeyFields()->count(), 1);
|
|
@@ -3362,7 +3364,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3362
3364
|
$this->assertEquals($rsv->size(), 16000);
|
|
3363
3365
|
|
|
3364
3366
|
// having
|
|
3365
|
-
$rq = new
|
|
3367
|
+
$rq = new RecordsetQuery();
|
|
3366
3368
|
$rq->when('group1_count', '=', 1)->or_('group1_count', '=', 2);
|
|
3367
3369
|
$rsv->matchBy($rq);
|
|
3368
3370
|
$this->assertEquals($rsv->size(), 3200);
|
|
@@ -3371,7 +3373,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3371
3373
|
$this->assertEquals(isset($rsv), false);
|
|
3372
3374
|
|
|
3373
3375
|
// top
|
|
3374
|
-
$rs3 = new
|
|
3376
|
+
$rs3 = new Recordset();
|
|
3375
3377
|
$rs->top($rs3, 10);
|
|
3376
3378
|
$this->assertEquals($rs3->size(), 5);
|
|
3377
3379
|
$rs->top($rs3, 3);
|
|
@@ -3379,30 +3381,30 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3379
3381
|
$this->assertEquals($rs->size(), 5);
|
|
3380
3382
|
|
|
3381
3383
|
// query new / delete
|
|
3382
|
-
$q1 = new
|
|
3384
|
+
$q1 = new RecordsetQuery();
|
|
3383
3385
|
$q1->when('group1_count', '=', 1)->or_('group1_count', '=', 2);
|
|
3384
3386
|
unset($q1);
|
|
3385
3387
|
|
|
3386
|
-
$q2 = new
|
|
3388
|
+
$q2 = new Query();
|
|
3387
3389
|
$q2->where('group1_count', '=', 1)->or_('group1_count', '=', 2);
|
|
3388
3390
|
unset($q2);
|
|
3389
3391
|
|
|
3390
|
-
$q3 = new
|
|
3392
|
+
$q3 = new GroupQuery();
|
|
3391
3393
|
$q3->keyField('group', 'id');
|
|
3392
3394
|
unset($q3);
|
|
3393
3395
|
}
|
|
3394
3396
|
public function testPrepareJoin()
|
|
3395
3397
|
{
|
|
3396
|
-
$db = new
|
|
3398
|
+
$db = new Database();
|
|
3397
3399
|
$db->open(URL_QT);
|
|
3398
3400
|
$this->assertEquals($db->stat(), 0);
|
|
3399
3401
|
|
|
3400
|
-
$atu = new
|
|
3402
|
+
$atu = new ActiveTable($db, 'user');
|
|
3401
3403
|
$atu->alias('名前', 'name');
|
|
3402
|
-
$atg = new
|
|
3404
|
+
$atg = new ActiveTable($db, 'groups');
|
|
3403
3405
|
$atg->alias('name', 'group_name');
|
|
3404
|
-
$ate = new
|
|
3405
|
-
$q = new
|
|
3406
|
+
$ate = new ActiveTable($db, 'extention');
|
|
3407
|
+
$q = new Query();
|
|
3406
3408
|
|
|
3407
3409
|
$q->select('id', 'name', 'group')->where('id', '<=', '?');
|
|
3408
3410
|
$pq = $atu->prepare($q);
|
|
@@ -3428,7 +3430,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3428
3430
|
// Join extention::comment
|
|
3429
3431
|
$q->reset();
|
|
3430
3432
|
$this->assertEquals($q->selectCount(), 0);
|
|
3431
|
-
$q->select('comment')->optimize(
|
|
3433
|
+
$q->select('comment')->optimize(QueryBase::joinHasOneOrHasMany);
|
|
3432
3434
|
$this->assertEquals($q->selectCount(), 1);
|
|
3433
3435
|
$pq = $ate->prepare($q);
|
|
3434
3436
|
|
|
@@ -3461,28 +3463,28 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3461
3463
|
public function testServerPrepareJoin()
|
|
3462
3464
|
{
|
|
3463
3465
|
define('NO_RECORD_ID', 5);
|
|
3464
|
-
$db = new
|
|
3466
|
+
$db = new Database();
|
|
3465
3467
|
$db->open(URL_QT);
|
|
3466
3468
|
$this->assertEquals($db->stat(), 0);
|
|
3467
3469
|
|
|
3468
|
-
$atu = new
|
|
3470
|
+
$atu = new ActiveTable($db, 'user');
|
|
3469
3471
|
$atu->alias('名前', 'name');
|
|
3470
|
-
$atg = new
|
|
3472
|
+
$atg = new ActiveTable($db, 'groups');
|
|
3471
3473
|
$atg->alias('name', 'group_name');
|
|
3472
|
-
$ate = new
|
|
3473
|
-
$q = new
|
|
3474
|
+
$ate = new ActiveTable($db, 'extention', Transactd::TD_OPEN_NORMAL);
|
|
3475
|
+
$q = new Query();
|
|
3474
3476
|
|
|
3475
3477
|
$q->select('id', 'name', 'group')->where('id', '<=', '?');
|
|
3476
3478
|
$stmt1 = $atu->prepare($q, true);
|
|
3477
|
-
$this->assertNotEquals($stmt1,
|
|
3479
|
+
$this->assertNotEquals($stmt1, null);
|
|
3478
3480
|
|
|
3479
|
-
$q->reset()->select('comment')->optimize(
|
|
3481
|
+
$q->reset()->select('comment')->optimize(QueryBase::joinHasOneOrHasMany);
|
|
3480
3482
|
$stmt2 = $ate->prepare($q, true);
|
|
3481
|
-
$this->assertNotEquals($stmt2,
|
|
3483
|
+
$this->assertNotEquals($stmt2, null);
|
|
3482
3484
|
|
|
3483
3485
|
$q->reset()->select('group_name');
|
|
3484
3486
|
$stmt3 = $atg->prepare($q, true);
|
|
3485
|
-
$this->assertNotEquals($stmt3,
|
|
3487
|
+
$this->assertNotEquals($stmt3, null);
|
|
3486
3488
|
|
|
3487
3489
|
$rs = $atu->index(0)->keyValue(1)->read($stmt1, 15000);
|
|
3488
3490
|
$this->assertEquals($rs->size(), 15000);
|
|
@@ -3521,10 +3523,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3521
3523
|
$stmt1 = $atu->prepare($q, true);
|
|
3522
3524
|
$rs = $atu->keyValue(1)->read($stmt1, 15000);
|
|
3523
3525
|
$this->assertEquals($rs->size(), 15000);
|
|
3524
|
-
if ($rs->size() == 15000)
|
|
3525
|
-
|
|
3526
|
-
for ($i = 0; $i < 15000; $i++)
|
|
3526
|
+
if ($rs->size() == 15000) {
|
|
3527
|
+
for ($i = 0; $i < 15000; $i++) {
|
|
3527
3528
|
$this->assertEquals($rs[$i]['id'], $i + 1);
|
|
3529
|
+
}
|
|
3528
3530
|
}
|
|
3529
3531
|
|
|
3530
3532
|
$ate->join($rs, $stmt2, 'id');
|
|
@@ -3537,10 +3539,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3537
3539
|
$tb->setFV('id', NO_RECORD_ID);
|
|
3538
3540
|
$tb->seek();
|
|
3539
3541
|
$this->assertEquals($tb->stat(), 0);
|
|
3540
|
-
if ($tb->stat() == 0)
|
|
3542
|
+
if ($tb->stat() == 0) {
|
|
3541
3543
|
$tb->del();
|
|
3544
|
+
}
|
|
3542
3545
|
$this->assertEquals($tb->stat(), 0);
|
|
3543
|
-
$q->reset()->select('comment', 'blob')->optimize(
|
|
3546
|
+
$q->reset()->select('comment', 'blob')->optimize(QueryBase::joinHasOneOrHasMany);
|
|
3544
3547
|
$stmt2 = $ate->prepare($q, true);
|
|
3545
3548
|
|
|
3546
3549
|
// Join is remove record(s) no join target record.
|
|
@@ -3557,7 +3560,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3557
3560
|
$rs = $atu->keyValue(1)->read($stmt1, 15000);
|
|
3558
3561
|
$ate->outerJoin($rs, $stmt2, 'id');
|
|
3559
3562
|
$this->assertEquals($rs->size(), 15000);
|
|
3560
|
-
$this->assertEquals($rs
|
|
3563
|
+
$this->assertEquals($rs->getRecord(NO_RECORD_ID - 1)->isInvalidRecord(), true);
|
|
3561
3564
|
$atg->outerJoin($rs, $stmt3, 'group');
|
|
3562
3565
|
$this->assertEquals($rs->size(), 15000);
|
|
3563
3566
|
|
|
@@ -3565,14 +3568,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3565
3568
|
$this->assertEquals($rs[NO_RECORD_ID]['blob'], '' . (NO_RECORD_ID + 1) . ' blob');
|
|
3566
3569
|
|
|
3567
3570
|
// OuterJoin All Join fields
|
|
3568
|
-
$q->reset()->optimize(
|
|
3571
|
+
$q->reset()->optimize(QueryBase::joinHasOneOrHasMany)->all();
|
|
3569
3572
|
$stmt2 = $ate->prepare($q, true);
|
|
3570
3573
|
$rs->clear();
|
|
3571
3574
|
$rs = $atu->keyValue(1)->read($stmt1, 15000);
|
|
3572
3575
|
$ate->outerJoin($rs, $stmt2, 'id');
|
|
3573
3576
|
$this->assertEquals($rs->size(), 15000);
|
|
3574
|
-
$this->assertEquals($rs
|
|
3575
|
-
$this->assertEquals($rs
|
|
3577
|
+
$this->assertEquals($rs->getRecord(NO_RECORD_ID - 1)->isInvalidRecord(), true);
|
|
3578
|
+
$this->assertEquals($rs->getRecord(NO_RECORD_ID - 1)->getField('comment')->isNull(), true);
|
|
3576
3579
|
$this->assertEquals($rs[NO_RECORD_ID]['comment'], '' . (NO_RECORD_ID + 1) . ' comment');
|
|
3577
3580
|
$this->assertEquals($rs[NO_RECORD_ID]['blob'], '' . (NO_RECORD_ID + 1) . ' blob');
|
|
3578
3581
|
|
|
@@ -3580,7 +3583,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3580
3583
|
$rs2 = clone($rs);
|
|
3581
3584
|
$this->assertEquals($rs2->size(), 15000);
|
|
3582
3585
|
//$this->assertEquals($rs2[NO_RECORD_ID - 1]->isInvalidRecord(), true);
|
|
3583
|
-
$this->assertEquals($rs2
|
|
3586
|
+
$this->assertEquals($rs2->getRecord(NO_RECORD_ID - 1)->getField('comment')->isNull(), true);
|
|
3584
3587
|
$this->assertEquals($rs2[NO_RECORD_ID]['comment'], '' . (NO_RECORD_ID + 1) . ' comment');
|
|
3585
3588
|
$this->assertEquals($rs2[NO_RECORD_ID]['blob'], '' . (NO_RECORD_ID + 1) . ' blob');
|
|
3586
3589
|
|
|
@@ -3589,7 +3592,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3589
3592
|
$q->reset()->reject(0xFFFF)->limit(0)->all();
|
|
3590
3593
|
$rs = $atg->keyValue(1)->read($q);
|
|
3591
3594
|
$this->assertEquals($rs->size(), 100);
|
|
3592
|
-
$q->all()->optimize(
|
|
3595
|
+
$q->all()->optimize(QueryBase::joinHasOneOrHasMany);
|
|
3593
3596
|
$atu->index(1)->join($rs, $q, 'code');
|
|
3594
3597
|
$this->assertEquals($rs->size(), 20000);
|
|
3595
3598
|
|
|
@@ -3598,7 +3601,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3598
3601
|
$q->reset()->reject(0xFFFF)->limit(0)->all();
|
|
3599
3602
|
$rs = $atg->keyValue(1)->read($q);
|
|
3600
3603
|
$this->assertEquals($rs->size(), 100);
|
|
3601
|
-
$q->all()->optimize(
|
|
3604
|
+
$q->all()->optimize(QueryBase::joinHasOneOrHasMany);
|
|
3602
3605
|
$atu->index(1)->outerJoin($rs, $q, 'code');
|
|
3603
3606
|
$this->assertEquals($rs->size(), 20095);
|
|
3604
3607
|
|
|
@@ -3609,19 +3612,20 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3609
3612
|
$tb->setFV('blob', '5 blob');
|
|
3610
3613
|
$tb->insert();
|
|
3611
3614
|
$this->assertEquals($tb->stat(), 0);
|
|
3612
|
-
if ($tb->stat() != 0)
|
|
3615
|
+
if ($tb->stat() != 0) {
|
|
3613
3616
|
$db->drop();
|
|
3617
|
+
}
|
|
3614
3618
|
}
|
|
3615
3619
|
|
|
3616
3620
|
public function testReadMore()
|
|
3617
3621
|
{
|
|
3618
|
-
$db = new
|
|
3622
|
+
$db = new Database();
|
|
3619
3623
|
$db->open(URL_QT);
|
|
3620
3624
|
|
|
3621
3625
|
$this->assertEquals($db->stat(), 0);
|
|
3622
|
-
$atu = new
|
|
3626
|
+
$atu = new ActiveTable($db, 'user');
|
|
3623
3627
|
$atu->alias('名前', 'name');
|
|
3624
|
-
$q = new
|
|
3628
|
+
$q = new Query();
|
|
3625
3629
|
|
|
3626
3630
|
//isStopAtLimit
|
|
3627
3631
|
$this->assertEquals($q->isStopAtLimit(), 0);
|
|
@@ -3644,13 +3648,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3644
3648
|
|
|
3645
3649
|
public function testFirstLastGroupFunction()
|
|
3646
3650
|
{
|
|
3647
|
-
$db = new
|
|
3651
|
+
$db = new Database();
|
|
3648
3652
|
$db->open(URL_QT);
|
|
3649
3653
|
$this->assertEquals($db->stat(), 0);
|
|
3650
3654
|
|
|
3651
|
-
$atu = new
|
|
3655
|
+
$atu = new ActiveTable($db, 'user');
|
|
3652
3656
|
$atu->alias('名前', 'name');
|
|
3653
|
-
$q = new
|
|
3657
|
+
$q = new Query();
|
|
3654
3658
|
$q->select('id', 'name', 'group')
|
|
3655
3659
|
->where('name', '=', '1*')
|
|
3656
3660
|
->reject(70)->limit(8)->stopAtLimit(true);
|
|
@@ -3661,11 +3665,11 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3661
3665
|
$this->assertEquals($rs->size(), 8);
|
|
3662
3666
|
|
|
3663
3667
|
#grouping first and last
|
|
3664
|
-
$gq = new
|
|
3665
|
-
$target = new
|
|
3668
|
+
$gq = new GroupQuery();
|
|
3669
|
+
$target = new FieldNames();
|
|
3666
3670
|
$target->addValue('name');
|
|
3667
|
-
$last = new
|
|
3668
|
-
$first = new
|
|
3671
|
+
$last = new Last($target, 'last_rec_name');
|
|
3672
|
+
$first = new First($target, 'first_rec_name');
|
|
3669
3673
|
$gq->addFunction($last);
|
|
3670
3674
|
$gq->addFunction($first);
|
|
3671
3675
|
$rs->groupBy($gq);
|
|
@@ -3675,10 +3679,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3675
3679
|
|
|
3676
3680
|
public function testWritableRecord()
|
|
3677
3681
|
{
|
|
3678
|
-
$db = new
|
|
3682
|
+
$db = new Database();
|
|
3679
3683
|
$db->open(URL_QT);
|
|
3680
3684
|
$this->assertEquals($db->stat(), 0);
|
|
3681
|
-
$atu = new
|
|
3685
|
+
$atu = new ActiveTable($db, 'user', Transactd::TD_OPEN_NORMAL);
|
|
3682
3686
|
|
|
3683
3687
|
$rec = $atu->index(0)->getWritableRecord();
|
|
3684
3688
|
$rec['id'] = 120000;
|
|
@@ -3737,7 +3741,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3737
3741
|
{
|
|
3738
3742
|
$min_id = 5;
|
|
3739
3743
|
$max_id = 15;
|
|
3740
|
-
$db = new
|
|
3744
|
+
$db = new Database();
|
|
3741
3745
|
$db->open(URL_QT);
|
|
3742
3746
|
$this->assertEquals($db->stat(), 0);
|
|
3743
3747
|
$tb = $db->openTable('user');
|
|
@@ -3756,7 +3760,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3756
3760
|
$this->assertEquals($tb->stat(), 0);
|
|
3757
3761
|
$this->assertEquals($tb->getFVint(FDI_ID), $min_id);
|
|
3758
3762
|
|
|
3759
|
-
$q = new
|
|
3763
|
+
$q = new Query();
|
|
3760
3764
|
$q->where('id', '>=', $min_id)->and_('id', '<=', $max_id)->reject(0xFFFF);
|
|
3761
3765
|
$tb->clearBuffer();
|
|
3762
3766
|
$tb->setQuery($q->bookmarkAlso(true));
|
|
@@ -3771,8 +3775,8 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3771
3775
|
$this->assertEquals($tb->getFVint(FDI_ID), $min_id);
|
|
3772
3776
|
|
|
3773
3777
|
|
|
3774
|
-
$atu = new
|
|
3775
|
-
$qb = new
|
|
3778
|
+
$atu = new ActiveTable($db, 'user');
|
|
3779
|
+
$qb = new Query();
|
|
3776
3780
|
$len = $atu->table()->bookmarkLen();
|
|
3777
3781
|
// Hold bookmark objects to reading.
|
|
3778
3782
|
$bm1 = $tb->bookmarks(0);
|
|
@@ -3800,15 +3804,16 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3800
3804
|
|
|
3801
3805
|
$db->close();
|
|
3802
3806
|
}
|
|
3807
|
+
|
|
3803
3808
|
public function testBookmark2()
|
|
3804
3809
|
{
|
|
3805
|
-
$db = new
|
|
3810
|
+
$db = new Database();
|
|
3806
3811
|
$db->open(URL_QT);
|
|
3807
3812
|
$this->assertEquals($db->stat(), 0);
|
|
3808
|
-
$atu = new
|
|
3813
|
+
$atu = new ActiveTable($db, 'user');
|
|
3809
3814
|
|
|
3810
3815
|
$tb = $atu->table();
|
|
3811
|
-
$q = new
|
|
3816
|
+
$q = new Query();
|
|
3812
3817
|
$tb->setQuery($q->all()->bookmarkAlso(true));
|
|
3813
3818
|
$num = $tb->recordCount();
|
|
3814
3819
|
$this->assertEquals($tb->stat(), 0);
|
|
@@ -3846,6 +3851,5 @@ class transactdTest extends PHPUnit_Framework_TestCase
|
|
|
3846
3851
|
$this->assertEquals($tb->getFVint(FDI_ID), 21);
|
|
3847
3852
|
$tb->findNext();
|
|
3848
3853
|
$this->assertEquals($tb->stat(), 9);
|
|
3849
|
-
|
|
3850
3854
|
}
|
|
3851
3855
|
}
|