transactd 1.0.1-x64-mswin64-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.
- checksums.yaml +7 -0
- data/BUILD_UNIX-JA +174 -0
- data/BUILD_WIN-JA +256 -0
- data/CMakeLists.txt +96 -0
- data/COPYING +339 -0
- data/README +406 -0
- data/README-JA +424 -0
- data/bin/2.0/transactd.so +0 -0
- data/bin/common/tdclc_64_1_0.dll +0 -0
- data/bin/common/tdclcpp_vc100_64m_1_1.dll +0 -0
- data/build/common/copyifgreater.cmd +30 -0
- data/build/common/copyifgreater.js +290 -0
- data/build/common/system.cmake +122 -0
- data/build/tdclrb/bldgem/extconf.rb +123 -0
- data/build/tdclrb/gem/INSTALLLOG.win32 +9 -0
- data/build/tdclrb/gem/Makefile.win32-VS +65 -0
- data/build/tdclrb/gem/Makefile.win32-prebuilt +48 -0
- data/build/tdclrb/gem/detect.rb +31 -0
- data/build/tdclrb/gem/helper.rb +113 -0
- data/build/tdclrb/gem/transactd.rb +22 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +375 -0
- data/source/bzs/test/tdclrb/prepare.rb +226 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +172 -0
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +208 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +1536 -0
- data/transactd.gemspec +97 -0
- metadata +75 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
@echo off
|
2
|
+
@REM ===============================================================
|
3
|
+
@REM Copyright (C) 2013 BizStation Corp All rights reserved.
|
4
|
+
@REM
|
5
|
+
@REM This program is free software; you can redistribute it and/or
|
6
|
+
@REM modify it under the terms of the GNU General Public License
|
7
|
+
@REM as published by the Free Software Foundation; either version 2
|
8
|
+
@REM of the License, or (at your option) any later version.
|
9
|
+
@REM
|
10
|
+
@REM This program is distributed in the hope that it will be useful,
|
11
|
+
@REM but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
@REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
@REM GNU General Public License for more details.
|
14
|
+
@REM
|
15
|
+
@REM You should have received a copy of the GNU General Public License
|
16
|
+
@REM along with this program; if not, write to the Free Software
|
17
|
+
@REM Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
18
|
+
@REM 02111-1307, USA.
|
19
|
+
@REM ===============================================================
|
20
|
+
|
21
|
+
setlocal enabledelayedexpansion
|
22
|
+
cd "%~dp0"
|
23
|
+
|
24
|
+
set BLDMSG=buildmsg.log
|
25
|
+
set INSMSG=..\..\..\install.log
|
26
|
+
set ERRMSG=errormsg.log
|
27
|
+
|
28
|
+
@REM BUILD
|
29
|
+
echo BUILD tdcl.sln %date% %time% >> "%BLDMSG%"
|
30
|
+
msbuild tdcl.sln /p:Configuration=Release /m:2 >> "%BLDMSG%" 2>&1
|
31
|
+
if ERRORLEVEL 1 (
|
32
|
+
echo ************************************************************** 1>&2
|
33
|
+
echo EROOR MESSAGE 1>&2
|
34
|
+
echo Failed to Build. Please check log. 1>&2
|
35
|
+
echo %~dp0%BLDMSG%
|
36
|
+
echo %~dp0cmake_generate.log
|
37
|
+
echo ************************************************************** 1>&2
|
38
|
+
exit /b 1
|
39
|
+
)
|
40
|
+
|
41
|
+
if "%~1" == "install" goto :INSTALLCMD
|
42
|
+
if "%~1" == "site-install" goto :INSTALLCMD
|
43
|
+
exit /b 0
|
44
|
+
|
45
|
+
:INSTALLCMD
|
46
|
+
echo Install %date% %time% >> "%INSMSG%"
|
47
|
+
cmake -P cmake_install.cmake >> "%INSMSG%" 2>> "%ERRMSG%"
|
48
|
+
call :getsize "%ERRMSG%"
|
49
|
+
if !getsize_ret! GTR 0 (
|
50
|
+
type "%ERRMSG%" >> "%INSMSG%"
|
51
|
+
findstr /C:"Failed to Install." "%ERRMSG%" > "%ERRMSG%.tmp"
|
52
|
+
call :getsize "%ERRMSG%.tmp"
|
53
|
+
del "%ERRMSG%.tmp"
|
54
|
+
if !getsize_ret! GTR 0 (
|
55
|
+
type "%ERRMSG%" 1>&2
|
56
|
+
exit /b 1
|
57
|
+
)
|
58
|
+
)
|
59
|
+
exit /b 0
|
60
|
+
|
61
|
+
:getsize
|
62
|
+
set /a getsize_ret=%~z1
|
63
|
+
exit /b 0
|
64
|
+
|
65
|
+
endlocal
|
@@ -0,0 +1,48 @@
|
|
1
|
+
@echo off
|
2
|
+
@REM ===============================================================
|
3
|
+
@REM Copyright (C) 2013 BizStation Corp All rights reserved.
|
4
|
+
@REM
|
5
|
+
@REM This program is free software; you can redistribute it and/or
|
6
|
+
@REM modify it under the terms of the GNU General Public License
|
7
|
+
@REM as published by the Free Software Foundation; either version 2
|
8
|
+
@REM of the License, or (at your option) any later version.
|
9
|
+
@REM
|
10
|
+
@REM This program is distributed in the hope that it will be useful,
|
11
|
+
@REM but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
@REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
@REM GNU General Public License for more details.
|
14
|
+
@REM
|
15
|
+
@REM You should have received a copy of the GNU General Public License
|
16
|
+
@REM along with this program; if not, write to the Free Software
|
17
|
+
@REM Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
18
|
+
@REM 02111-1307, USA.
|
19
|
+
@REM ===============================================================
|
20
|
+
|
21
|
+
setlocal enabledelayedexpansion
|
22
|
+
|
23
|
+
if "%~1" == "install" goto :EOF
|
24
|
+
if "%~1" == "site-install" goto :EOF
|
25
|
+
|
26
|
+
set INSTALLLOG=%TRANSACTD_GEM_ROOT%\install.log
|
27
|
+
set ERRMSG=errmsg.txt
|
28
|
+
|
29
|
+
goto startpoint
|
30
|
+
|
31
|
+
:getsize
|
32
|
+
set /a getsize_ret=%~z1
|
33
|
+
exit /b 0
|
34
|
+
|
35
|
+
:startpoint
|
36
|
+
@REM UNINSTALL log
|
37
|
+
copy "%TRANSACTD_GEM_ROOT%\build\tdclrb\gem\INSTALLLOG.win32" "%INSTALLLOG%"
|
38
|
+
echo Installing transactd ruby gem >> "%INSTALLLOG%"
|
39
|
+
|
40
|
+
@REM Copy ruby files
|
41
|
+
echo *** Copy rb scripts *** >> "%INSTALLLOG%"
|
42
|
+
if not exist "%TRANSACTD_GEM_ROOT%\lib" (mkdir "%TRANSACTD_GEM_ROOT%\lib")
|
43
|
+
copy "%TRANSACTD_GEM_ROOT%\build\tdclrb\gem\*.rb" "%TRANSACTD_GEM_ROOT%\lib" >> "%INSTALLLOG%" 2>> "%ERRMSG%"
|
44
|
+
if not exist "%TRANSACTD_GEM_ROOT%\test" (mkdir "%TRANSACTD_GEM_ROOT%\test")
|
45
|
+
copy "%TRANSACTD_GEM_ROOT%\source\bzs\test\tdclrb\*.rb" "%TRANSACTD_GEM_ROOT%\test" >> "%INSTALLLOG%" 2>> "%ERRMSG%"
|
46
|
+
|
47
|
+
@REM Copy binary files
|
48
|
+
echo *** Copy common dlls to system directories *** >> "%INSTALLLOG%"
|
@@ -0,0 +1,31 @@
|
|
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 'rbconfig'
|
22
|
+
|
23
|
+
def get_binary_path
|
24
|
+
return File.join(RUBY_VERSION.match(/\d+\.\d+/)[0], 'transactd')
|
25
|
+
end
|
26
|
+
|
27
|
+
def has_binary(transactd_gem_root)
|
28
|
+
prebuilt_path = File.join(transactd_gem_root, 'bin', get_binary_path() + '.so')
|
29
|
+
common_path = File.join(transactd_gem_root, 'bin/common')
|
30
|
+
return File.exist?(prebuilt_path) && File.exist?(common_path)
|
31
|
+
end
|
@@ -0,0 +1,113 @@
|
|
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
|
+
def to_native_path(path)
|
22
|
+
return File::ALT_SEPARATOR ? path.gsub('/', File::ALT_SEPARATOR) : path
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_slash_path(path)
|
26
|
+
return File::ALT_SEPARATOR ? path.gsub(File::ALT_SEPARATOR, '/') : path
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_ruby_bitness
|
30
|
+
return ['a'].pack('P').length > 4 ? 64 : 32
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_windows_bitness
|
34
|
+
return ENV.has_key?('ProgramFiles(x86)') ? 64 : 32
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_windows_sysdir()
|
38
|
+
ruby_bitness = get_ruby_bitness()
|
39
|
+
windows_bitness = get_windows_bitness()
|
40
|
+
if windows_bitness == 32
|
41
|
+
return to_native_path(File.join(ENV['Systemroot'], 'System32/'))
|
42
|
+
else
|
43
|
+
if ruby_bitness == 32
|
44
|
+
return to_native_path(File.join(ENV['Systemroot'], 'SysWOW64/'))
|
45
|
+
else
|
46
|
+
return to_native_path(File.join(ENV['Systemroot'], 'System32/'))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_common_binary_files(transactd_gem_root)
|
52
|
+
ruby_bitness = get_ruby_bitness()
|
53
|
+
windows_bitness = get_windows_bitness()
|
54
|
+
ruby_bitness = 32 if windows_bitness == 32
|
55
|
+
bin_files = Dir.glob(File.join(transactd_gem_root, 'bin/common/tdclc_' + ruby_bitness.to_s + '_*.dll'))
|
56
|
+
bin_files += Dir.glob(File.join(transactd_gem_root, 'bin/common/tdclcpp_*_' + ruby_bitness.to_s + 'm_*.dll'))
|
57
|
+
sysdir = get_windows_sysdir()
|
58
|
+
bin_files = bin_files.map{ |i| '"' + to_native_path(i) + '" "' + sysdir + '"' }
|
59
|
+
return bin_files
|
60
|
+
end
|
61
|
+
|
62
|
+
def make_makefile_prebuilt_win32(ruby_bin_path, transactd_gem_root)
|
63
|
+
bin_files = get_common_binary_files(transactd_gem_root)
|
64
|
+
begin
|
65
|
+
mkfile_dummy = open('Makefile', 'w')
|
66
|
+
mkfile = open('nmake.cmd', 'w')
|
67
|
+
srcpath = File.join(transactd_gem_root, 'build/tdclrb/gem/Makefile.win32-prebuilt')
|
68
|
+
copycmd = File.join(transactd_gem_root, 'build/common/copyifgreater.cmd')
|
69
|
+
source = open(srcpath, 'r')
|
70
|
+
mkfile.puts '@echo off'
|
71
|
+
mkfile.puts 'set TRANSACTD_GEM_ROOT=' + to_native_path(transactd_gem_root)
|
72
|
+
mkfile.puts 'set RUBY_BIN_PATH=' + to_native_path(ruby_bin_path)
|
73
|
+
mkfile.puts 'set COPYCMD=' + to_native_path(copycmd)
|
74
|
+
mkfile.puts source.read
|
75
|
+
mkfile.puts ''
|
76
|
+
bin_files.each{ |i|
|
77
|
+
files = i.split(' ').map{ |i| i.strip.gsub!(/(^(\s|\"|)+)|((\s|\")+$)/, '')}
|
78
|
+
srcfile = (files.length > 0) ? files[0] : 'unknown error'
|
79
|
+
dstfile = (files.length > 1) ? files[1] : 'unknown error'
|
80
|
+
mkfile.puts <<EOS
|
81
|
+
call "%COPYCMD%" #{i} >> "%INSTALLLOG%" 2>> "%ERRMSG%"
|
82
|
+
call :getsize "%ERRMSG%"
|
83
|
+
if !getsize_ret! GTR 0 (
|
84
|
+
if ERRORLEVEL 1 (
|
85
|
+
echo ************************************************************** 1>&2
|
86
|
+
echo EROOR MESSAGE 1>&2
|
87
|
+
echo Failed to Install. 1>&2
|
88
|
+
echo Perhaps it require to run as Administrator, or file is in use. 1>&2
|
89
|
+
type "%ERRMSG%" 1>&2
|
90
|
+
echo ************************************************************** 1>&2
|
91
|
+
exit /b 1
|
92
|
+
) else (
|
93
|
+
echo ************************************************************** >> "%INSTALLLOG%"
|
94
|
+
echo WARNING MESSAGE >> "%INSTALLLOG%"
|
95
|
+
echo Files not copied because it could not read the version from the binary. >> "%INSTALLLOG%"
|
96
|
+
echo There is a possibility that the program does not work properly. >> "%INSTALLLOG%"
|
97
|
+
echo Please check the compatibility of following binaries. >> "%INSTALLLOG%"
|
98
|
+
type "%ERRMSG%" >> "%INSTALLLOG%"
|
99
|
+
echo ************************************************************** >> "%INSTALLLOG%"
|
100
|
+
del "%ERRMSG%"
|
101
|
+
)
|
102
|
+
)
|
103
|
+
EOS
|
104
|
+
}
|
105
|
+
mkfile.puts 'exit /b 0'
|
106
|
+
mkfile.puts 'endlocal'
|
107
|
+
$makefile_created = true
|
108
|
+
ensure
|
109
|
+
source.close
|
110
|
+
mkfile.close
|
111
|
+
mkfile_dummy.close
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,22 @@
|
|
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 File.expand_path(File.join(File.dirname(__FILE__), 'detect.rb'))
|
22
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../bin', get_binary_path()))
|
@@ -0,0 +1,375 @@
|
|
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 'date'
|
22
|
+
require 'transactd'
|
23
|
+
|
24
|
+
TYPE_SCHEMA_BDF = 0
|
25
|
+
|
26
|
+
USE_NORMAL = 0
|
27
|
+
USE_TRANS = 1
|
28
|
+
USE_BALKINS = 2
|
29
|
+
USE_SNAPSHOT = 4
|
30
|
+
|
31
|
+
FN_ID = 0
|
32
|
+
FN_NAME = 1
|
33
|
+
|
34
|
+
AUTO_CREATE_TABLE = true
|
35
|
+
PARALLEL_TRN = 1000
|
36
|
+
LOCK_SINGLE_NOWAIT = 200
|
37
|
+
TRANS_BIAS = PARALLEL_TRN + LOCK_SINGLE_NOWAIT
|
38
|
+
|
39
|
+
BULKBUFSIZE = 65535 - 1000
|
40
|
+
|
41
|
+
## --------------------------------------------------------------------------------
|
42
|
+
def showTableError(tb, description)
|
43
|
+
if (tb.stat() != 0)
|
44
|
+
puts("#{description} error #{tb.tableDef().fileName()}:No.#{tb.stat().to_s}")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
## --------------------------------------------------------------------------------
|
49
|
+
def showEnginError(db, tableName)
|
50
|
+
if (db.stat() != 0)
|
51
|
+
puts("#{tableName} error No.#{db.stat().to_s}")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
## --------------------------------------------------------------------------------
|
56
|
+
def openTable(db, tableName, mode)
|
57
|
+
tb = db.openTable(tableName, mode, AUTO_CREATE_TABLE)
|
58
|
+
showEnginError(db, tableName) if (tb == nil)
|
59
|
+
return tb
|
60
|
+
end
|
61
|
+
|
62
|
+
## --------------------------------------------------------------------------------
|
63
|
+
def createDataBase(db, uri)
|
64
|
+
db.create(uri)
|
65
|
+
return (db.stat() == 0)
|
66
|
+
end
|
67
|
+
|
68
|
+
## --------------------------------------------------------------------------------
|
69
|
+
def write(tb, start, endid)
|
70
|
+
tb.setKeyNum(0)
|
71
|
+
for i in start..(endid - 1) do
|
72
|
+
tb.clearBuffer()
|
73
|
+
tb.setFV(FN_ID, i)
|
74
|
+
tb.setFV(FN_NAME, i)
|
75
|
+
tb.insert()
|
76
|
+
if (tb.stat() != 0)
|
77
|
+
showTableError(tb, 'write')
|
78
|
+
return false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
return true
|
82
|
+
end
|
83
|
+
|
84
|
+
## --------------------------------------------------------------------------------
|
85
|
+
def deleteAll(db, tb, start, endid)
|
86
|
+
db.beginTrn(TRANS_BIAS)
|
87
|
+
tb.clearBuffer()
|
88
|
+
for i in start..(endid - 1) do
|
89
|
+
tb.setFV(FN_ID, i)
|
90
|
+
tb.seek()
|
91
|
+
if (tb.stat() == 0)
|
92
|
+
tb.del()
|
93
|
+
if (tb.stat() != 0)
|
94
|
+
showTableError(tb, 'deleteAll')
|
95
|
+
db.endTrn()
|
96
|
+
return false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
db.endTrn()
|
101
|
+
return true
|
102
|
+
end
|
103
|
+
|
104
|
+
## --------------------------------------------------------------------------------
|
105
|
+
def Inserts(db, tb, start, endid, mode, unit)
|
106
|
+
ret = true
|
107
|
+
total = endid - start
|
108
|
+
count = total / unit
|
109
|
+
st = start
|
110
|
+
en = st
|
111
|
+
while (en != endid) do
|
112
|
+
en = st + unit
|
113
|
+
db.beginTrn(TRANS_BIAS) if (mode == USE_TRANS)
|
114
|
+
tb.beginBulkInsert(BULKBUFSIZE) if (mode == USE_BALKINS)
|
115
|
+
ret = write(tb, st, en)
|
116
|
+
tb.commitBulkInsert() if (mode == USE_BALKINS)
|
117
|
+
db.endTrn() if (mode == USE_TRANS)
|
118
|
+
break if (ret == false)
|
119
|
+
st = en
|
120
|
+
end
|
121
|
+
return ret
|
122
|
+
end
|
123
|
+
|
124
|
+
## --------------------------------------------------------------------------------
|
125
|
+
def Read(db, tb, start, endid, shapshot)
|
126
|
+
ret = true
|
127
|
+
tb.clearBuffer()
|
128
|
+
db.beginSnapshot() if (shapshot == USE_SNAPSHOT)
|
129
|
+
for i in start..(endid - 1) do
|
130
|
+
tb.setFV(FN_ID, i)
|
131
|
+
tb.seek()
|
132
|
+
if ((tb.stat() != 0) || (tb.getFVlng(FN_ID) != i))
|
133
|
+
puts("GetEqual Error stat() = #{tb.stat().to_s} Value #{i.to_s} = #{tb.getFVlng(FN_ID).to_s}")
|
134
|
+
ret = false
|
135
|
+
break
|
136
|
+
end
|
137
|
+
end
|
138
|
+
db.endSnapshot() if (shapshot == USE_SNAPSHOT)
|
139
|
+
return ret
|
140
|
+
end
|
141
|
+
|
142
|
+
## --------------------------------------------------------------------------------
|
143
|
+
def Reads(db, tb, start, endid, unit, shapshot)
|
144
|
+
ret = true
|
145
|
+
total = endid - start
|
146
|
+
count = total / unit
|
147
|
+
st = start
|
148
|
+
en = st
|
149
|
+
db.beginSnapshot() if (shapshot == USE_SNAPSHOT)
|
150
|
+
tb.setKeyNum(0)
|
151
|
+
tb.setFilter('*', 1, 20)
|
152
|
+
tb.clearBuffer()
|
153
|
+
tb.setFV(FN_ID, st)
|
154
|
+
tb.find(Transactd::Table::FindForword)
|
155
|
+
while (en != endid)
|
156
|
+
en = st + unit
|
157
|
+
for i in st..(en - 1) do
|
158
|
+
if (tb.getFVlng(FN_ID) != i)
|
159
|
+
puts("findNext Error stat() = #{tb.stat().to_s} Value #{i.to_s} = #{tb.getFVlng(FN_ID).to_s}")
|
160
|
+
ret = false
|
161
|
+
break
|
162
|
+
end
|
163
|
+
tb.findNext()
|
164
|
+
end
|
165
|
+
break if (ret == false)
|
166
|
+
st = en
|
167
|
+
end
|
168
|
+
db.endSnapshot() if (shapshot == USE_SNAPSHOT)
|
169
|
+
return ret
|
170
|
+
end
|
171
|
+
|
172
|
+
## --------------------------------------------------------------------------------
|
173
|
+
def Updates(db, tb, start, endid, tran, unit)
|
174
|
+
ret = true
|
175
|
+
tb.setKeyNum(0)
|
176
|
+
total = endid - start
|
177
|
+
count = total / unit
|
178
|
+
st = start
|
179
|
+
en = st
|
180
|
+
while (en != endid)
|
181
|
+
en = st + unit
|
182
|
+
db.beginTrn(TRANS_BIAS) if (tran == USE_TRANS)
|
183
|
+
for i in st..(en - 1) do
|
184
|
+
tb.setFV(FN_ID, i)
|
185
|
+
tb.setFV(FN_NAME, "#{i + 1 + tran}")
|
186
|
+
tb.update(Transactd::Table::ChangeInKey)
|
187
|
+
if (tb.stat() != 0)
|
188
|
+
ret = false
|
189
|
+
break
|
190
|
+
end
|
191
|
+
end
|
192
|
+
db.endTrn() if (tran == USE_TRANS)
|
193
|
+
break if (ret == false)
|
194
|
+
st = en
|
195
|
+
end
|
196
|
+
return ret
|
197
|
+
end
|
198
|
+
|
199
|
+
## --------------------------------------------------------------------------------
|
200
|
+
def createTestDataBase(db, uri)
|
201
|
+
db.create(uri)
|
202
|
+
if (db.stat() != 0)
|
203
|
+
puts("createTestDataBase erorr:No.#{db.stat().to_s} #{uri}")
|
204
|
+
return false
|
205
|
+
end
|
206
|
+
if (db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', ''))
|
207
|
+
dbdef = db.dbDef()
|
208
|
+
td = Transactd::Tabledef.new()
|
209
|
+
td.setTableName('user')
|
210
|
+
td.setFileName('user.dat')
|
211
|
+
td.id = 1
|
212
|
+
# td.primaryKeyNum = -1
|
213
|
+
# td.parentKeyNum = -1
|
214
|
+
# td.replicaKeyNum = -1
|
215
|
+
td.pageSize = 2048
|
216
|
+
dbdef.insertTable(td)
|
217
|
+
|
218
|
+
fd = dbdef.insertField(td.id, 0)
|
219
|
+
fd.setName('id')
|
220
|
+
fd.type = Transactd::Ft_integer
|
221
|
+
fd.len = 4
|
222
|
+
dbdef.updateTableDef(1)
|
223
|
+
|
224
|
+
fd = dbdef.insertField(td.id, 1)
|
225
|
+
fd.setName('name')
|
226
|
+
fd.type = Transactd::Ft_myvarchar
|
227
|
+
fd.len = 100
|
228
|
+
dbdef.updateTableDef(td.id)
|
229
|
+
|
230
|
+
kd = dbdef.insertKey(td.id, 0)
|
231
|
+
kd.segment(0).fieldNum = 0
|
232
|
+
kd.segment(0).flags.bit8 = 1 # extend key type
|
233
|
+
kd.segment(0).flags.bit1 = 1 # changeable
|
234
|
+
kd.segmentCount = 1
|
235
|
+
|
236
|
+
td.primaryKeyNum = 0
|
237
|
+
dbdef.updateTableDef(td.id)
|
238
|
+
return true
|
239
|
+
else
|
240
|
+
puts("open daatabse erorr No:#{db.stat().to_s}")
|
241
|
+
end
|
242
|
+
return false
|
243
|
+
end
|
244
|
+
|
245
|
+
## --------------------------------------------------------------------------------
|
246
|
+
def printDateTime()
|
247
|
+
puts(DateTime.now.strftime('%Y/%m/%d %H:%M:%S'))
|
248
|
+
end
|
249
|
+
|
250
|
+
## --------------------------------------------------------------------------------
|
251
|
+
def printHeader(uri, count)
|
252
|
+
puts("Start Bench mark Insert Items = #{count.to_s}")
|
253
|
+
printDateTime()
|
254
|
+
puts(uri)
|
255
|
+
puts("----------------------------------------")
|
256
|
+
end
|
257
|
+
|
258
|
+
## --------------------------------------------------------------------------------
|
259
|
+
def printTail()
|
260
|
+
puts("----------------------------------------")
|
261
|
+
end
|
262
|
+
|
263
|
+
## --------------------------------------------------------------------------------
|
264
|
+
def main(argv)
|
265
|
+
if (argv.length < 4)
|
266
|
+
puts("usage: ruby bench_tdclcpp.rb databaseUri processNumber functionNumber noDeleteFlag")
|
267
|
+
puts("\t --- functionNumber list ---")
|
268
|
+
puts("\t-1: all function")
|
269
|
+
puts("\t 0: Insert")
|
270
|
+
puts("\t 1: Insert in transaction. 20rec x 1000times")
|
271
|
+
puts("\t 2: Insert by bulkmode. 20rec x 1000times")
|
272
|
+
puts("\t 3: read each record")
|
273
|
+
puts("\t 4: read each record with snapshot")
|
274
|
+
puts("\t 5: read range. 20rec x 1000times")
|
275
|
+
puts("\t 6: read range with snapshpot. 20rec x 1000times")
|
276
|
+
puts("\t 7: update")
|
277
|
+
puts("\t 8: update in transaction. 20rec x 1000times")
|
278
|
+
puts("example : ruby bench_tdclcpp.rb \"tdap://localhost/test?dbfile=test.bdf\" 0 -1 1")
|
279
|
+
return
|
280
|
+
end
|
281
|
+
uri = argv[1] # "tdap://localhost/test?dbfile=test.bdf"
|
282
|
+
procID = Integer(argv[2]) # 0
|
283
|
+
count = 20000
|
284
|
+
start = procID * count + 1
|
285
|
+
endid = start + count
|
286
|
+
exeType = Integer(argv[3]) # -1
|
287
|
+
insertBeforeNoDelete = ((argv.length > 4) && (Integer(argv[4]) != 0))
|
288
|
+
|
289
|
+
db = Transactd::Database.createObject()
|
290
|
+
if (db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', '') == false)
|
291
|
+
if (!createTestDataBase(db, uri))
|
292
|
+
db.close()
|
293
|
+
return
|
294
|
+
end
|
295
|
+
puts("CreateDataBase success.")
|
296
|
+
end
|
297
|
+
printHeader(uri, count)
|
298
|
+
|
299
|
+
if (!db.open(uri, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL, '', ''))
|
300
|
+
puts("open table erorr No:#{db.stat().to_s}")
|
301
|
+
else
|
302
|
+
tb = openTable(db, 'user', Transactd::TD_OPEN_NORMAL)
|
303
|
+
if tb == nil
|
304
|
+
puts "can not open table 'user'"
|
305
|
+
db.close()
|
306
|
+
return
|
307
|
+
end
|
308
|
+
|
309
|
+
if ((exeType == -1) || (exeType == 0))
|
310
|
+
if (insertBeforeNoDelete || deleteAll(db, tb, start, endid))
|
311
|
+
Transactd::Benchmark::start()
|
312
|
+
succeed = Inserts(db, tb, start, endid, USE_NORMAL, 1)
|
313
|
+
Transactd::Benchmark::showTimeSec(succeed, ': Insert')
|
314
|
+
else
|
315
|
+
puts("deleteAll erorr No:#{tb.stat().to_s}")
|
316
|
+
end
|
317
|
+
end
|
318
|
+
if ((exeType == -1) || (exeType == 1))
|
319
|
+
if (insertBeforeNoDelete || deleteAll(db, tb, start, endid))
|
320
|
+
Transactd::Benchmark::start()
|
321
|
+
succeed = Inserts(db, tb, start, endid, USE_TRANS, 20)
|
322
|
+
Transactd::Benchmark::showTimeSec(succeed, ': Insert in transaction. 20rec x 1000times.')
|
323
|
+
else
|
324
|
+
puts("deleteAll erorr No:#{tb.stat().to_s}")
|
325
|
+
end
|
326
|
+
end
|
327
|
+
if ((exeType == -1) || (exeType == 2))
|
328
|
+
if (insertBeforeNoDelete || deleteAll(db, tb, start, endid))
|
329
|
+
Transactd::Benchmark::start()
|
330
|
+
succeed = Inserts(db, tb, start, endid, USE_BALKINS, 20)
|
331
|
+
Transactd::Benchmark::showTimeSec(succeed, ': Insert by bulkmode. 20rec x 1000times.')
|
332
|
+
else
|
333
|
+
puts("deleteAll erorr No:#{tb.stat().to_s}")
|
334
|
+
end
|
335
|
+
end
|
336
|
+
if ((exeType == -1) || (exeType == 3))
|
337
|
+
Transactd::Benchmark::start()
|
338
|
+
succeed = Read(db, tb, start, endid, USE_NORMAL)
|
339
|
+
Transactd::Benchmark::showTimeSec(succeed, 'read each record.')
|
340
|
+
end
|
341
|
+
if ((exeType == -1) || (exeType == 4))
|
342
|
+
Transactd::Benchmark::start()
|
343
|
+
succeed = Read(db, tb, start, endid, USE_SNAPSHOT)
|
344
|
+
Transactd::Benchmark::showTimeSec(succeed, ': read each record with snapshot.')
|
345
|
+
end
|
346
|
+
if ((exeType == -1) || (exeType == 5))
|
347
|
+
Transactd::Benchmark::start()
|
348
|
+
succeed = Reads(db, tb, start, endid, 20, USE_NORMAL)
|
349
|
+
Transactd::Benchmark::showTimeSec(succeed, ': read range. 20rec x 1000times.')
|
350
|
+
end
|
351
|
+
if ((exeType == -1) || (exeType == 6))
|
352
|
+
Transactd::Benchmark::start()
|
353
|
+
succeed = Reads(db, tb, start, endid, 20, USE_SNAPSHOT)
|
354
|
+
Transactd::Benchmark::showTimeSec(succeed, ': read range with snapshpot. 20rec x 1000times.')
|
355
|
+
end
|
356
|
+
if ((exeType == -1) || (exeType == 7))
|
357
|
+
Transactd::Benchmark::start()
|
358
|
+
succeed = Updates(db, tb, start, endid, USE_NORMAL, 1)
|
359
|
+
Transactd::Benchmark::showTimeSec(succeed, ': update.')
|
360
|
+
end
|
361
|
+
if ((exeType == -1) || (exeType == 8))
|
362
|
+
Transactd::Benchmark::start()
|
363
|
+
succeed = Updates(db, tb, start, endid, USE_TRANS, 20)
|
364
|
+
Transactd::Benchmark::showTimeSec(succeed, ': update in transaction. 20rec x 1000times.')
|
365
|
+
end
|
366
|
+
end
|
367
|
+
tb.close()
|
368
|
+
db.close()
|
369
|
+
printTail()
|
370
|
+
return
|
371
|
+
end
|
372
|
+
|
373
|
+
args = ARGV
|
374
|
+
args.unshift(__FILE__)
|
375
|
+
main(args)
|