transactd 1.0.1-x86-mswin32-100

Sign up to get free protection for your applications and to get access to all the features.
@@ -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