transactd 1.0.1-x86-mswin32-100

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.
@@ -0,0 +1,226 @@
1
+ # coding : utf-8
2
+ =begin =============================================================
3
+ Copyright (C) 2013 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
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
18
+ 02111-1307, USA.
19
+ ===================================================================
20
+ =end
21
+ require 'transactd'
22
+
23
+ FN_ID = 0
24
+ FN_NAME = 1
25
+
26
+ TYPE_SCHEMA_BDF = 0
27
+ PARALLEL_TRN = 1000
28
+ LOCK_SINGLE_NOWAIT = 200
29
+ TRANS_BIAS = PARALLEL_TRN + LOCK_SINGLE_NOWAIT
30
+
31
+ def createTable(db)
32
+ dbdef = db.dbDef()
33
+ td = Transactd::Tabledef.new()
34
+ td.setTableName('user')
35
+ td.setFileName('user.dat')
36
+ td.id = 1
37
+ td.pageSize = 2048
38
+ dbdef.insertTable(td)
39
+ td = dbdef.tableDefs(td.id)
40
+
41
+ fd = dbdef.insertField(td.id, 0)
42
+ fd.setName('id')
43
+ fd.type = Transactd::Ft_integer
44
+ fd.len = 4
45
+ dbdef.updateTableDef(1)
46
+
47
+ fd = dbdef.insertField(td.id, 1)
48
+ fd.setName('name')
49
+ fd.type = Transactd::Ft_myvarchar
50
+ fd.len = 100
51
+ dbdef.updateTableDef(td.id)
52
+
53
+ kd = dbdef.insertKey(td.id, 0)
54
+ kd.segment(0).fieldNum = 0
55
+ kd.segment(0).flags.bit8 = 1 # extend key type
56
+ kd.segment(0).flags.bit1 = 1 # changeable
57
+ kd.segmentCount = 1
58
+
59
+ td.primaryKeyNum = 0
60
+ dbdef.updateTableDef(td.id)
61
+ end
62
+
63
+ ## --------------------------------------------------------------------------------
64
+ def printUsage()
65
+ puts("usage: ruby prepare.rb databaseUri functionNumber rangeStart rangeEnd gap")
66
+ puts("\t --- functionNumber list ---")
67
+ puts("\t 0: only create database and table")
68
+ puts("\t 1: delete records from rangeStart to rangeEnd with gap")
69
+ puts("\t 2: set records from rangeStart to rangeEnd with gap")
70
+ puts("\t 3: check records from rangeStart to rangeEnd with gap")
71
+ puts("example : ruby prepare.rb \"tdap://localhost/test?dbfile=test.bdf\" 1 1 1000 1")
72
+ end
73
+
74
+ ## --------------------------------------------------------------------------------
75
+ def main(argv)
76
+ if (argv.length < 3)
77
+ printUsage()
78
+ return
79
+ end
80
+ uri = argv[1]
81
+ functionNumber = Integer(argv[2])
82
+ if !([0,1,2,3].include?(functionNumber))
83
+ printUsage()
84
+ return
85
+ end
86
+ rangeStart = 0
87
+ rangeEnd = 0
88
+ gap = 0
89
+ if functionNumber > 0
90
+ if argv.length < 5
91
+ printUsage()
92
+ return
93
+ end
94
+ rangeStart = Integer(argv[3])
95
+ rangeEnd = Integer(argv[4])
96
+ if rangeStart < 0 || rangeEnd < 0
97
+ printUsage()
98
+ return
99
+ end
100
+ if rangeStart > rangeEnd
101
+ tmp = rangeStart
102
+ rangeStart = rangeEnd
103
+ rangeEnd = tmp
104
+ end
105
+ if argv.length >= 6
106
+ gap = Integer(argv[5])
107
+ end
108
+ end
109
+
110
+ db = Transactd::Database.createObject()
111
+
112
+ if !db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', '')
113
+ db.create(uri)
114
+ if db.stat() != 0
115
+ puts("create database error No #{db.stat()}")
116
+ db.close()
117
+ return
118
+ end
119
+ end
120
+
121
+ if !db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', '')
122
+ puts("open table erorr No #{db.stat().to_s}")
123
+ db.close()
124
+ return
125
+ end
126
+
127
+ tb = db.openTable('user', Transactd::TD_OPEN_NORMAL, true)
128
+ if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR || tb == nil
129
+ createTable(db)
130
+ tb = db.openTable('user', Transactd::TD_OPEN_NORMAL, true)
131
+ end
132
+
133
+ if functionNumber == 1
134
+ db.beginTrn(TRANS_BIAS)
135
+ tb.clearBuffer()
136
+ for i in rangeStart..rangeEnd do
137
+ tb.setFV(FN_ID, i)
138
+ tb.seek()
139
+ if tb.stat() == 0
140
+ tb.del()
141
+ if tb.stat() != 0
142
+ puts("delete erorr No #{tb.stat().to_s}")
143
+ db.endTrn()
144
+ tb.close()
145
+ db.close()
146
+ return false
147
+ end
148
+ elsif tb.stat() != 4
149
+ puts("delete erorr No #{tb.stat().to_s}")
150
+ db.endTrn()
151
+ tb.close()
152
+ db.close()
153
+ return false
154
+ end
155
+ end
156
+ db.endTrn()
157
+ end
158
+
159
+ if functionNumber == 2
160
+ db.beginTrn(TRANS_BIAS)
161
+ tb.clearBuffer()
162
+ for i in rangeStart..rangeEnd do
163
+ tb.setFV(FN_ID, i)
164
+ tb.seek()
165
+ if (tb.stat() == 0)
166
+ tb.setFV(FN_NAME, "#{i + gap}")
167
+ tb.update()
168
+ if (tb.stat() != 0)
169
+ puts("set erorr No #{tb.stat().to_s}")
170
+ db.endTrn()
171
+ tb.close()
172
+ db.close()
173
+ return false
174
+ end
175
+ else
176
+ tb.clearBuffer()
177
+ tb.setFV(FN_ID, i)
178
+ tb.setFV(FN_NAME, i + gap)
179
+ tb.insert()
180
+ if (tb.stat() != 0)
181
+ puts("set erorr No #{tb.stat().to_s}")
182
+ db.endTrn()
183
+ tb.close()
184
+ db.close()
185
+ return false
186
+ end
187
+ end
188
+ end
189
+ db.endTrn()
190
+ end
191
+
192
+ if functionNumber == 3
193
+ tb.clearBuffer()
194
+ tb.setFV(FN_ID, rangeStart)
195
+ tb.seekGreater(true)
196
+ for i in rangeStart..rangeEnd do
197
+ if (tb.stat() != 0)
198
+ puts("check error stat=#{tb.stat()} Expected ID #{i}")
199
+ tb.close()
200
+ db.close()
201
+ return false
202
+ end
203
+ if (tb.getFVlng(FN_ID) != i)
204
+ puts("check error stat=#{tb.stat()} Expected ID #{i} but ID #{tb.getFVlng(FN_ID)}")
205
+ tb.close()
206
+ db.close()
207
+ return false
208
+ end
209
+ if (tb.getFVstr(FN_NAME).to_s != "#{i + gap}")
210
+ puts("check error stat=#{tb.stat()} Expected Name #{i + gap} but Name #{tb.getFVstr(FN_NAME)}")
211
+ tb.close()
212
+ db.close()
213
+ return false
214
+ end
215
+ tb.seekNext()
216
+ end
217
+ end
218
+
219
+ tb.close()
220
+ db.close()
221
+ return
222
+ end
223
+
224
+ args = ARGV
225
+ args.unshift(__FILE__)
226
+ main(args)
@@ -0,0 +1,172 @@
1
+ # coding : utf-8
2
+ =begin ============================================================
3
+ Copyright (C) 2013 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
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
18
+ 02111-1307, USA.
19
+ ===================================================================
20
+ =end
21
+ require 'transactd'
22
+
23
+ describe Transactd, 'datetime' do
24
+ it 'get BtrDate' do
25
+ i_nowdate = Transactd::getNowDate() # get today as integer
26
+ s_i_nowdate = Transactd::btrdtoa(i_nowdate)
27
+ s_i_nowdate2 = Transactd::btrdtoa(i_nowdate, true)
28
+ #p i_nowdate
29
+ #p s_i_nowdate + ' ' + s_i_nowdate.encoding.to_s
30
+ #p s_i_nowdate2 + ' ' + s_i_nowdate2.encoding.to_s
31
+ nowdate = Transactd::BtrDate.new()
32
+ nowdate.i = i_nowdate # get today as BtrDate
33
+ s_nowdate = Transactd::btrdtoa(nowdate)
34
+ s_nowdate2 = Transactd::btrdtoa(nowdate, true)
35
+ cs_nowdate = Transactd::c_str(nowdate)
36
+ #p nowdate
37
+ #p s_nowdate + ' ' + s_nowdate.encoding.to_s
38
+ #p s_nowdate2 + ' ' + s_nowdate2.encoding.to_s
39
+ #p cs_nowdate + ' ' + cs_nowdate.encoding.to_s
40
+ expect(s_i_nowdate).to eq s_nowdate
41
+ expect(s_i_nowdate2).to eq s_nowdate2
42
+ expect(cs_nowdate).to eq s_nowdate
43
+ end
44
+
45
+ it 'get BtrTime' do
46
+ i_nowtime = Transactd::getNowTime() # get now time as integer
47
+ s_i_nowtime = Transactd::btrttoa(i_nowtime)
48
+ s_i_nowtime2 = Transactd::btrttoa(i_nowtime, true)
49
+ #p i_nowtime
50
+ #p s_i_nowtime + ' ' + s_i_nowtime.encoding.to_s
51
+ #p s_i_nowtime2 + ' ' + s_i_nowtime2.encoding.to_s
52
+ nowtime = Transactd::BtrTime.new()
53
+ nowtime.i = i_nowtime # get now time as BtrTime
54
+ s_nowtime = Transactd::btrttoa(nowtime)
55
+ s_nowtime2 = Transactd::btrttoa(nowtime, true)
56
+ cs_nowtime = Transactd::c_str(nowtime)
57
+ #p nowtime
58
+ #p s_nowtime + ' ' + s_nowtime.encoding.to_s
59
+ #p s_nowtime2 + ' ' + s_nowtime2.encoding.to_s
60
+ #p cs_nowtime + ' ' + cs_nowtime.encoding.to_s
61
+ expect(s_i_nowtime).to eq s_nowtime
62
+ expect(s_i_nowtime2).to eq s_nowtime2
63
+ expect(cs_nowtime).to eq s_nowtime
64
+ end
65
+
66
+ it 'get BtrDateTime' do
67
+ date = Transactd::atobtrd('2012-08-22')
68
+ s_date = Transactd::btrdtoa(date)
69
+ expect(s_date).to eq '2012/08/22'
70
+ #p date
71
+ #p s_date + ' ' + s_date.encoding.to_s
72
+ time = Transactd::atobtrt('15:37:00')
73
+ s_time = Transactd::btrttoa(time)
74
+ expect(s_time).to eq '15:37:00'
75
+ #p time
76
+ #p s_time + ' ' + s_time.encoding.to_s
77
+ datetime = Transactd::atobtrs('2012-08-22 15:37:00')
78
+ s_datetime = Transactd::btrstoa(datetime)
79
+ s_datetime2 = Transactd::btrstoa(datetime, true)
80
+ expect(s_datetime).to eq '2012/08/22 15:37:00'
81
+ expect(s_datetime2).to eq '2012-08-22T15:37:00'
82
+ #p datetime
83
+ #p s_datetime + ' ' + s_datetime.encoding.to_s
84
+ #p s_datetime2 + ' ' + s_datetime2.encoding.to_s
85
+ s_datetime_d = Transactd::btrdtoa(datetime.date)
86
+ s_datetime_t = Transactd::btrttoa(datetime.time)
87
+ expect(s_datetime_d + ' ' + s_datetime_t).to eq '2012/08/22 15:37:00'
88
+ #p s_datetime_d + ' ' + s_datetime_t
89
+ end
90
+
91
+ it 'get Bdate' do
92
+ date = Transactd::atobtrd('2012-08-22')
93
+ bdate = Transactd::Bdate.new(date.i)
94
+ bdate2 = Transactd::Bdate.new(Transactd::btrdtoa(date))
95
+ #p bdate,bdate2
96
+ btrdate = bdate.btr_date()
97
+ btrdate2 = bdate2.btr_date()
98
+ #p btrdate, btrdate2
99
+ s_bdate = bdate.c_str()
100
+ s_bdate2 = bdate2.c_str()
101
+ expect(s_bdate).to eq s_bdate2
102
+ #p s_bdate + ' ' + s_bdate.encoding.to_s
103
+ #p s_bdate2 + ' ' + s_bdate2.encoding.to_s
104
+ expect(bdate.year()).to eq 2012
105
+ expect(bdate.month()).to eq 8
106
+ expect(bdate.date()).to eq 22
107
+ expect(bdate.year_str()).to eq '2012'
108
+ expect(bdate.month_str()).to eq '8'
109
+ expect(bdate.date_str()).to eq '22'
110
+ #p bdate.year(), bdate.month(), bdate.date()
111
+ #p bdate.year_str(), bdate.month_str(), bdate.date_str()
112
+ end
113
+
114
+ it 'get BtrTimeStamp from string' do
115
+ date = Transactd::atobtrd('2012-08-22')
116
+ time = Transactd::atobtrt('15:37:00')
117
+ btrts = Transactd::BtrTimeStamp.new('2012-08-22 15:37:00')
118
+ btrts2 = Transactd::BtrTimeStamp.new(date, time)
119
+ s_btrts = btrts.toString()
120
+ s_btrts2 = btrts2.toString()
121
+ #p btrts, btrts2
122
+ #p s_btrts, s_btrts2
123
+ expect(s_btrts).to eq s_btrts2
124
+ expect(s_btrts).to eq '2012/08/22 15:37:00'
125
+ end
126
+
127
+ it 'get BtrTimeStamp from BtrDate and BtrTime' do
128
+ i_nowdate = Transactd::getNowDate()
129
+ nowdate = Transactd::BtrDate.new()
130
+ nowdate.i = i_nowdate
131
+ i_nowtime = Transactd::getNowTime()
132
+ nowtime = Transactd::BtrTime.new()
133
+ nowtime.i = i_nowtime
134
+ nowdatetime = Transactd::BtrTimeStamp.new(nowdate, nowtime)
135
+ s_nowdate = Transactd::btrdtoa(nowdate)
136
+ s_nowtime = Transactd::btrttoa(nowtime)
137
+ s_nowdatetime = nowdatetime.toString()
138
+ expect(s_nowdatetime).to eq s_nowdate + ' ' + s_nowtime
139
+ #p nowdatetime
140
+ #p s_nowdatetime + ' ' + s_nowdatetime.encoding.to_s()
141
+ #p s_nowdate + ' ' + s_nowtime
142
+ end
143
+
144
+ it 'get last year' do
145
+ i_nowdate = Transactd::getNowDate()
146
+ nowdate = Transactd::BtrDate.new()
147
+ nowdate.i = i_nowdate
148
+ nowyear_yy = nowdate.yy
149
+ i_nowtime = Transactd::getNowTime()
150
+ nowtime = Transactd::BtrTime.new()
151
+ nowtime.i = i_nowtime
152
+ nowdatetime = Transactd::BtrTimeStamp.new(nowdate, nowtime)
153
+ s_nowdatetime = nowdatetime.toString()
154
+ lastyear = nowdate
155
+ lastyear.yy = lastyear.yy - 1
156
+ lastyear_yy = lastyear.yy
157
+ s_lastyear = Transactd::btrdtoa(lastyear)
158
+ lastyeardatetime = Transactd::BtrTimeStamp.new(lastyear, nowtime)
159
+ s_lastyeardatetime = lastyeardatetime.toString()
160
+ expect(nowyear_yy - 1).to eq lastyear_yy
161
+ expect(s_nowdatetime.sub(nowyear_yy.to_s, lastyear_yy.to_s)).to eq s_lastyeardatetime
162
+ #p lastyeardatetime
163
+ #p s_lastyear + ' ' + s_lastyear.encoding.to_s()
164
+ #p s_lastyeardatetime + ' ' + s_lastyeardatetime.encoding.to_s()
165
+ end
166
+
167
+ it 'get typename' do
168
+ typename = Transactd::getTypeName(Transactd::Ft_integer)
169
+ #p typename + ' ' + typename.encoding.to_s
170
+ expect(typename).to eq 'Integer'
171
+ end
172
+ end
@@ -0,0 +1,208 @@
1
+ # coding : utf-8
2
+ =begin ============================================================
3
+ Copyright (C) 2013 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
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
18
+ 02111-1307, USA.
19
+ ===================================================================
20
+ =end
21
+ require 'transactd'
22
+
23
+ require 'rbconfig'
24
+ IS_WINDOWS = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
25
+
26
+ def getHost()
27
+ hostname = '127.0.0.1/'
28
+ if (ENV['TRANSACTD_RSPEC_HOST'] != nil && ENV['TRANSACTD_RSPEC_HOST'] != '')
29
+ hostname = ENV['TRANSACTD_RSPEC_HOST']
30
+ end
31
+ hostname = hostname + '/' unless (hostname =~ /\/$/)
32
+ return hostname
33
+ end
34
+
35
+ HOSTNAME = getHost()
36
+ URL = 'tdap://' + HOSTNAME + 'test?dbfile=test.bdf'
37
+ URL_KANJI = 'tdap://' + HOSTNAME + 'テスト?dbfile=構成.bdf'
38
+ FDI_ID = 0
39
+ FDN_ID = '番号'.encode('UTF-8')
40
+ FDI_NAME = 1
41
+ FDN_NAME = '名前'.encode('UTF-8')
42
+
43
+
44
+ TYPE_SCHEMA_BDF = 0
45
+
46
+ def testDropDatabase(db, url)
47
+ db.open(url)
48
+ expect(db.stat()).to eq 0
49
+ db.drop()
50
+ expect(db.stat()).to eq 0
51
+ end
52
+
53
+ def testCreateDatabase(db, url)
54
+ db.create(url)
55
+ if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR
56
+ testDropDatabase(db, url)
57
+ db.create(url)
58
+ end
59
+ expect(db.stat()).to eq 0
60
+ end
61
+
62
+ def testOpenDatabase(db, url)
63
+ db.open(url, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
64
+ expect(db.stat()).to eq 0
65
+ end
66
+
67
+ def testCreateTable(db, tableid, tablename)
68
+ dbdef = db.dbDef()
69
+ expect(dbdef).not_to be nil
70
+ td = Transactd::Tabledef.new()
71
+ ### Set table schema codepage to UTF-8
72
+ # - codepage for field NAME and tableNAME
73
+ td.schemaCodePage = Transactd::CP_UTF8
74
+ td.setTableName(tablename.encode('UTF-8'))
75
+ td.setFileName((tablename + '.dat').encode('UTF-8'))
76
+ ### Set table default charaset index
77
+ # - default charset for field VALUE
78
+ td.charsetIndex = Transactd::charsetIndex(Transactd::CP_UTF8)
79
+ ###
80
+ td.id = tableid
81
+ td.pageSize = 2048
82
+ dbdef.insertTable(td)
83
+ expect(dbdef.stat()).to eq 0
84
+ fd = dbdef.insertField(tableid, FDI_ID)
85
+ fd.setName(FDN_ID)
86
+ fd.type = Transactd::Ft_integer
87
+ fd.len = 4
88
+ dbdef.updateTableDef(tableid)
89
+ expect(dbdef.stat()).to eq 0
90
+ fd = dbdef.insertField(tableid, FDI_NAME)
91
+ fd.setName(FDN_NAME)
92
+ fd.type = Transactd::Ft_zstring
93
+ fd.len = 33
94
+ ### Set field charset index
95
+ # - charset for each field VALUE
96
+ # fd.setCharsetIndex(Transactd::charsetIndex(Transactd::CP_UTF8))
97
+ dbdef.updateTableDef(tableid)
98
+ expect(dbdef.stat()).to eq 0
99
+ kd = dbdef.insertKey(tableid, 0)
100
+ kd.segment(0).fieldNum = 0
101
+ kd.segment(0).flags.bit8 = 1
102
+ kd.segment(0).flags.bit1 = 1
103
+ kd.segmentCount = 1
104
+ dbdef.updateTableDef(tableid)
105
+ expect(dbdef.stat()).to eq 0
106
+ end
107
+
108
+ def testOpenTable(db, tablename)
109
+ tb = db.openTable(tablename.encode('UTF-8'))
110
+ expect(db.stat()).to eq 0
111
+ return tb
112
+ end
113
+
114
+ def testInsert(db, tablename)
115
+ tb = testOpenTable(db, tablename)
116
+ expect(tb).not_to be nil
117
+ tb.clearBuffer()
118
+ tb.setFV(FDN_ID, 1)
119
+ tb.setFV(FDN_NAME, '小坂'.encode('UTF-8'))
120
+ tb.insert()
121
+ expect(tb.stat()).to eq 0
122
+ tb.clearBuffer()
123
+ tb.setFV(FDN_ID, 2)
124
+ tb.setFV(FDN_NAME, '矢口'.encode('UTF-8'))
125
+ tb.insert()
126
+ expect(tb.stat()).to eq 0
127
+ tb.clearBuffer()
128
+ tb.setFV(FDN_ID, 3)
129
+ tb.setFV(FDN_NAME, 'ビズステーション'.encode('UTF-8'))
130
+ tb.insert()
131
+ expect(tb.stat()).to eq 0
132
+ tb.close()
133
+ end
134
+
135
+ def testGetEqual(db, tablename)
136
+ tb = testOpenTable(db, tablename)
137
+ expect(tb).not_to be nil
138
+ tb.clearBuffer()
139
+ tb.setFV(FDN_ID, 1)
140
+ tb.seek()
141
+ expect(tb.getFVstr(FDN_NAME)).to eq '小坂'.encode('UTF-8')
142
+ tb.close()
143
+ end
144
+
145
+ def testFind(db, tablename)
146
+ tb = testOpenTable(db, tablename)
147
+ expect(tb).not_to be nil
148
+ tb.setKeyNum(0)
149
+ tb.clearBuffer()
150
+ tb.setFilter('番号 >= 1 and 番号 < 3'.encode('UTF-8'), 1, 0)
151
+ tb.setFV(FDN_ID, 1)
152
+ tb.find(Transactd::Table::FindForword)
153
+ expect(tb.stat()).to eq 0
154
+ expect(tb.getFVint(FDN_ID)).to eq 1
155
+ expect(tb.getFVstr(FDN_NAME)).to eq '小坂'.encode('UTF-8')
156
+ tb.findNext(true)
157
+ expect(tb.stat()).to eq 0
158
+ expect(tb.getFVint(FDN_ID)).to eq 2
159
+ expect(tb.getFVstr(FDN_NAME)).to eq '矢口'.encode('UTF-8')
160
+ tb.findNext(true)
161
+ expect(tb.stat()).to eq Transactd::STATUS_EOF
162
+ tb.close()
163
+ end
164
+
165
+ def testWhole(db, tableid, tablename, url)
166
+ tablename = tablename.encode('UTF-8') # table name must be UTF-8
167
+ testOpenDatabase(db, url)
168
+ testCreateTable(db, tableid, tablename)
169
+ testOpenTable(db, tablename)
170
+ testInsert(db, tablename)
171
+ testGetEqual(db, tablename)
172
+ testFind(db, tablename)
173
+ end
174
+
175
+
176
+ describe Transactd do
177
+ before :each do
178
+ @db = Transactd::Database.createObject()
179
+ end
180
+ after :each do
181
+ @db.close()
182
+ @db = nil
183
+ end
184
+
185
+ it 'create database' do
186
+ testCreateDatabase(@db, URL.encode('UTF-8'))
187
+ end
188
+
189
+ it 'table which has kanji-named field' do
190
+ testWhole(@db, 1, 'kanji-field', URL.encode('UTF-8'))
191
+ end
192
+
193
+ it 'kanji-named table' do
194
+ testWhole(@db, 2, '漢字テーブル', URL)
195
+ end
196
+
197
+ it 'create kanji-named database' do
198
+ testCreateDatabase(@db, URL_KANJI.encode('UTF-8')) # URL must be UTF-8
199
+ end
200
+
201
+ it 'table which has kanji-named field' do
202
+ testWhole(@db, 1, 'kanji-field', URL_KANJI.encode('UTF-8'))
203
+ end
204
+
205
+ it 'kanji-named table' do
206
+ testWhole(@db, 2, '漢字テーブル', URL_KANJI.encode('UTF-8'))
207
+ end
208
+ end