rubyfb 0.5.2-x86-mswin32-60
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.
- data/CHANGELOG +6 -0
- data/LICENSE +411 -0
- data/Manifest +75 -0
- data/README +460 -0
- data/Rakefile +21 -0
- data/examples/example01.rb +65 -0
- data/ext/AddUser.c +464 -0
- data/ext/AddUser.h +37 -0
- data/ext/Backup.c +783 -0
- data/ext/Backup.h +37 -0
- data/ext/Blob.c +421 -0
- data/ext/Blob.h +65 -0
- data/ext/Common.c +54 -0
- data/ext/Common.h +37 -0
- data/ext/Connection.c +863 -0
- data/ext/Connection.h +50 -0
- data/ext/DataArea.c +274 -0
- data/ext/DataArea.h +38 -0
- data/ext/Database.c +449 -0
- data/ext/Database.h +48 -0
- data/ext/FireRuby.c +240 -0
- data/ext/FireRuby.h +50 -0
- data/ext/FireRubyException.c +268 -0
- data/ext/FireRubyException.h +51 -0
- data/ext/Generator.c +689 -0
- data/ext/Generator.h +53 -0
- data/ext/RemoveUser.c +212 -0
- data/ext/RemoveUser.h +37 -0
- data/ext/Restore.c +855 -0
- data/ext/Restore.h +37 -0
- data/ext/ResultSet.c +810 -0
- data/ext/ResultSet.h +60 -0
- data/ext/Row.c +965 -0
- data/ext/Row.h +55 -0
- data/ext/ServiceManager.c +316 -0
- data/ext/ServiceManager.h +48 -0
- data/ext/Services.c +124 -0
- data/ext/Services.h +42 -0
- data/ext/Statement.c +785 -0
- data/ext/Statement.h +62 -0
- data/ext/Transaction.c +684 -0
- data/ext/Transaction.h +50 -0
- data/ext/TypeMap.c +1182 -0
- data/ext/TypeMap.h +51 -0
- data/ext/extconf.rb +30 -0
- data/lib/SQLType.rb +224 -0
- data/lib/active_record/connection_adapters/rubyfb_adapter.rb +805 -0
- data/lib/mkdoc +1 -0
- data/lib/rubyfb.rb +2 -0
- data/lib/rubyfb_lib.so +0 -0
- data/lib/src.rb +1800 -0
- data/mswin32fb/fbclient_ms.lib +0 -0
- data/mswin32fb/ibase.h +2555 -0
- data/mswin32fb/iberror.h +1741 -0
- data/rubyfb.gemspec +31 -0
- data/test/AddRemoveUserTest.rb +56 -0
- data/test/BackupRestoreTest.rb +99 -0
- data/test/BlobTest.rb +57 -0
- data/test/CharacterSetTest.rb +63 -0
- data/test/ConnectionTest.rb +111 -0
- data/test/DDLTest.rb +54 -0
- data/test/DatabaseTest.rb +83 -0
- data/test/GeneratorTest.rb +50 -0
- data/test/KeyTest.rb +140 -0
- data/test/ResultSetTest.rb +162 -0
- data/test/RoleTest.rb +73 -0
- data/test/RowCountTest.rb +65 -0
- data/test/RowTest.rb +203 -0
- data/test/SQLTest.rb +182 -0
- data/test/SQLTypeTest.rb +101 -0
- data/test/ServiceManagerTest.rb +29 -0
- data/test/StatementTest.rb +135 -0
- data/test/TestSetup.rb +11 -0
- data/test/TransactionTest.rb +112 -0
- data/test/TypeTest.rb +92 -0
- data/test/UnitTest.rb +65 -0
- metadata +143 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'TestSetup'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'fireruby'
|
7
|
+
|
8
|
+
include FireRuby
|
9
|
+
|
10
|
+
class RowCountTest < Test::Unit::TestCase
|
11
|
+
CURDIR = "#{Dir.getwd}"
|
12
|
+
DB_FILE = "#{CURDIR}#{File::SEPARATOR}row_count_test.fdb"
|
13
|
+
|
14
|
+
def setup
|
15
|
+
puts "#{self.class.name} started." if TEST_LOGGING
|
16
|
+
# Create the database for use in testing.
|
17
|
+
if File.exist?(DB_FILE)
|
18
|
+
Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
|
19
|
+
end
|
20
|
+
@database = Database.create(DB_FILE, DB_USER_NAME, DB_PASSWORD)
|
21
|
+
|
22
|
+
# Create the test table.
|
23
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
24
|
+
cxn.execute_immediate('create table test(id integer)')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def teardown
|
30
|
+
if File.exist?(DB_FILE)
|
31
|
+
@database.drop(DB_USER_NAME, DB_PASSWORD)
|
32
|
+
end
|
33
|
+
puts "#{self.class.name} finished." if TEST_LOGGING
|
34
|
+
end
|
35
|
+
|
36
|
+
def test01
|
37
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
38
|
+
cxn.start_transaction do |tx|
|
39
|
+
assert(cxn.execute_immediate('insert into test values (1000)') == 1)
|
40
|
+
assert(cxn.execute_immediate('insert into test values (1000)') == 1)
|
41
|
+
assert(cxn.execute('insert into test values (2000)', tx) == 1)
|
42
|
+
assert(cxn.execute('insert into test values (2000)', tx) == 1)
|
43
|
+
assert(tx.execute('insert into test values (3000)') == 1)
|
44
|
+
assert(tx.execute('insert into test values (3000)') == 1)
|
45
|
+
assert(tx.execute('insert into test values (4000)') == 1)
|
46
|
+
assert(tx.execute('insert into test values (4000)') == 1)
|
47
|
+
|
48
|
+
assert(cxn.execute_immediate('update test set id = 10000 where '\
|
49
|
+
'id = 1000') == 2)
|
50
|
+
assert(cxn.execute('update test set id = 20000 where id = 2000',
|
51
|
+
tx) == 2)
|
52
|
+
assert(tx.execute('update test set id = 30000 where id = 3000') == 2)
|
53
|
+
|
54
|
+
s = Statement.new(cxn, tx, 'update test set id = 40000 where id = ?',
|
55
|
+
3)
|
56
|
+
assert(s.execute_for([4000]) == 2)
|
57
|
+
|
58
|
+
|
59
|
+
assert(cxn.execute_immediate('delete from test where id = 10000') == 2)
|
60
|
+
assert(cxn.execute('delete from test where id = 20000', tx) == 2)
|
61
|
+
assert(tx.execute('delete from test where id = 30000') == 2)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/test/RowTest.rb
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'TestSetup'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'fireruby'
|
7
|
+
|
8
|
+
include FireRuby
|
9
|
+
|
10
|
+
class RowTest < Test::Unit::TestCase
|
11
|
+
CURDIR = "#{Dir.getwd}"
|
12
|
+
DB_FILE = "#{CURDIR}#{File::SEPARATOR}row_unit_test.fdb"
|
13
|
+
|
14
|
+
def setup
|
15
|
+
puts "#{self.class.name} started." if TEST_LOGGING
|
16
|
+
if File::exist?(DB_FILE)
|
17
|
+
Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
|
18
|
+
end
|
19
|
+
|
20
|
+
database = Database::create(DB_FILE, DB_USER_NAME, DB_PASSWORD)
|
21
|
+
@connection = database.connect(DB_USER_NAME, DB_PASSWORD)
|
22
|
+
@transaction = @connection.start_transaction
|
23
|
+
@results = ResultSet.new(@connection, @transaction,
|
24
|
+
'SELECT * FROM RDB$FIELDS', 3, nil)
|
25
|
+
@empty = [[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
26
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
27
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
28
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
29
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
30
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
31
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
32
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
33
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
34
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
35
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
36
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
37
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER],
|
38
|
+
[0, SQLType::INTEGER], [0, SQLType::INTEGER]]
|
39
|
+
|
40
|
+
@connection.start_transaction do |tx|
|
41
|
+
tx.execute('create table rowtest (COL01 integer, COL02 varchar(10), '\
|
42
|
+
'COL03 integer)')
|
43
|
+
tx.execute('create table all_types (col01 bigint, col02 blob, '\
|
44
|
+
'col03 char(100), col04 date, col05 decimal(5,2), '\
|
45
|
+
'col06 double precision, col07 float, col08 integer, '\
|
46
|
+
'col09 numeric(10,3), col10 smallint, col11 time, '\
|
47
|
+
'col12 timestamp, col13 varchar(23))')
|
48
|
+
end
|
49
|
+
@connection.start_transaction do |tx|
|
50
|
+
tx.execute("insert into rowtest values (1, 'Two', 3)")
|
51
|
+
|
52
|
+
stmt = Statement.new(@connection, tx,
|
53
|
+
"insert into all_types values(?, ?, ?, ?, ?, ?, "\
|
54
|
+
"?, ?, ?, ?, ?, ?, ?)",
|
55
|
+
3)
|
56
|
+
#stmt.execute_for([nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil])
|
57
|
+
stmt.execute_for([100000, nil, 'La la la', Date.new(2005, 10, 29),
|
58
|
+
10.23, 100.751, 56.25, 12345, 19863.21, 123,
|
59
|
+
Time.new, Time.new, 'The End!'])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def teardown
|
64
|
+
@results.close
|
65
|
+
@transaction.rollback
|
66
|
+
@connection.close
|
67
|
+
if File::exist?(DB_FILE)
|
68
|
+
Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
|
69
|
+
end
|
70
|
+
puts "#{self.class.name} finished." if TEST_LOGGING
|
71
|
+
end
|
72
|
+
|
73
|
+
def test01
|
74
|
+
row = Row.new(@results, @empty, 100)
|
75
|
+
|
76
|
+
assert(row.column_count == 28)
|
77
|
+
assert(row.number == 100)
|
78
|
+
assert(row.column_name(0) == 'RDB$FIELD_NAME')
|
79
|
+
assert(row.column_alias(10) == 'RDB$FIELD_TYPE')
|
80
|
+
assert(row[0] == 0)
|
81
|
+
assert(row['RDB$FIELD_TYPE'] == 0)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test02
|
85
|
+
sql = 'select COL01 one, COL02 two, COL03 three from rowtest'
|
86
|
+
rows = @connection.execute_immediate(sql)
|
87
|
+
data = rows.fetch
|
88
|
+
|
89
|
+
count = 0
|
90
|
+
data.each do |name, value|
|
91
|
+
assert(['ONE', 'TWO', 'THREE'].include?(name))
|
92
|
+
assert([1, 'Two', 3].include?(value))
|
93
|
+
count += 1
|
94
|
+
end
|
95
|
+
assert(count == 3)
|
96
|
+
|
97
|
+
count = 0
|
98
|
+
data.each_key do |name|
|
99
|
+
assert(['ONE', 'TWO', 'THREE'].include?(name))
|
100
|
+
count += 1
|
101
|
+
end
|
102
|
+
assert(count == 3)
|
103
|
+
|
104
|
+
count = 0
|
105
|
+
data.each_value do |value|
|
106
|
+
assert([1, 'Two', 3].include?(value))
|
107
|
+
count += 1
|
108
|
+
end
|
109
|
+
assert(count == 3)
|
110
|
+
|
111
|
+
assert(data.fetch('TWO') == 'Two')
|
112
|
+
assert(data.fetch('FOUR', 'LALALA') == 'LALALA')
|
113
|
+
assert(data.fetch('ZERO') {'NOT FOUND'} == 'NOT FOUND')
|
114
|
+
begin
|
115
|
+
data.fetch('FIVE')
|
116
|
+
assert(false, 'Row#fetch succeeded for non-existent column name.')
|
117
|
+
rescue IndexError
|
118
|
+
end
|
119
|
+
|
120
|
+
assert(data.has_key?('ONE'))
|
121
|
+
assert(data.has_key?('TEN') == false)
|
122
|
+
|
123
|
+
assert(data.has_column?('COL02'))
|
124
|
+
assert(data.has_column?('COL22') == false)
|
125
|
+
|
126
|
+
assert(data.has_alias?('TWO'))
|
127
|
+
assert(data.has_alias?('FOUR') == false)
|
128
|
+
|
129
|
+
assert(data.has_value?(3))
|
130
|
+
assert(data.has_value?('LALALA') == false)
|
131
|
+
|
132
|
+
assert(data.keys.size == 3)
|
133
|
+
data.keys.each do |name|
|
134
|
+
assert(['ONE', 'TWO', 'THREE'].include?(name))
|
135
|
+
end
|
136
|
+
|
137
|
+
assert(data.names.size == 3)
|
138
|
+
data.names.each do |name|
|
139
|
+
assert(['COL01', 'COL02', 'COL03'].include?(name))
|
140
|
+
end
|
141
|
+
|
142
|
+
assert(data.aliases.size == 3)
|
143
|
+
data.aliases.each do |name|
|
144
|
+
assert(['ONE', 'TWO', 'THREE'].include?(name))
|
145
|
+
end
|
146
|
+
|
147
|
+
assert(data.values.size == 3)
|
148
|
+
data.values.each do |value|
|
149
|
+
assert([1, 'Two', 3].include?(value))
|
150
|
+
end
|
151
|
+
|
152
|
+
array = data.select {|name, value| name == 'TWO'}
|
153
|
+
assert(array.size == 1)
|
154
|
+
assert(array[0][0] == 'TWO')
|
155
|
+
assert(array[0][1] == 'Two')
|
156
|
+
|
157
|
+
array = data.to_a
|
158
|
+
assert(array.size == 3)
|
159
|
+
assert(array.include?(['ONE', 1]))
|
160
|
+
assert(array.include?(['TWO', 'Two']))
|
161
|
+
assert(array.include?(['THREE', 3]))
|
162
|
+
|
163
|
+
hash = data.to_hash
|
164
|
+
assert(hash.length == 3)
|
165
|
+
assert(hash['ONE'] == 1)
|
166
|
+
assert(hash['TWO'] == 'Two')
|
167
|
+
assert(hash['THREE'] == 3)
|
168
|
+
|
169
|
+
array = data.values_at('TEN', 'TWO', 'THREE')
|
170
|
+
assert(array.size == 3)
|
171
|
+
assert(array.include?('Two'))
|
172
|
+
assert(array.include?(3))
|
173
|
+
assert(array.include?(nil))
|
174
|
+
|
175
|
+
rows.close
|
176
|
+
end
|
177
|
+
|
178
|
+
def test03
|
179
|
+
results = nil
|
180
|
+
row = nil
|
181
|
+
|
182
|
+
begin
|
183
|
+
results = @connection.execute_immediate('select * from all_types')
|
184
|
+
row = results.fetch
|
185
|
+
|
186
|
+
assert(row.get_base_type(0) == SQLType::BIGINT)
|
187
|
+
assert(row.get_base_type(1) == SQLType::BLOB)
|
188
|
+
assert(row.get_base_type(2) == SQLType::CHAR)
|
189
|
+
assert(row.get_base_type(3) == SQLType::DATE)
|
190
|
+
assert(row.get_base_type(4) == SQLType::DECIMAL)
|
191
|
+
assert(row.get_base_type(5) == SQLType::DOUBLE)
|
192
|
+
assert(row.get_base_type(6) == SQLType::FLOAT)
|
193
|
+
assert(row.get_base_type(7) == SQLType::INTEGER)
|
194
|
+
assert(row.get_base_type(8) == SQLType::NUMERIC)
|
195
|
+
assert(row.get_base_type(9) == SQLType::SMALLINT)
|
196
|
+
assert(row.get_base_type(10) == SQLType::TIME)
|
197
|
+
assert(row.get_base_type(11) == SQLType::TIMESTAMP)
|
198
|
+
assert(row.get_base_type(12) == SQLType::VARCHAR)
|
199
|
+
ensure
|
200
|
+
results.close if results != nil
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
data/test/SQLTest.rb
ADDED
@@ -0,0 +1,182 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'TestSetup'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'fireruby'
|
7
|
+
|
8
|
+
include FireRuby
|
9
|
+
|
10
|
+
class SQLTest < Test::Unit::TestCase
|
11
|
+
CURDIR = "#{Dir.getwd}"
|
12
|
+
DB_FILE = "#{CURDIR}#{File::SEPARATOR}sql_unit_test.fdb"
|
13
|
+
ITERATIONS = 100
|
14
|
+
|
15
|
+
INSERT_SQL = "INSERT INTO TEST_TABLE VALUES(?, ?, ?, ?, ?, ?)"
|
16
|
+
|
17
|
+
def setup
|
18
|
+
puts "#{self.class.name} started." if TEST_LOGGING
|
19
|
+
if File::exist?(DB_FILE)
|
20
|
+
Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
|
21
|
+
end
|
22
|
+
@database = Database::create(DB_FILE, DB_USER_NAME, DB_PASSWORD)
|
23
|
+
@connections = []
|
24
|
+
@transactions = []
|
25
|
+
|
26
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
27
|
+
cxn.execute_immediate('CREATE TABLE TEST_TABLE (TESTID INTEGER '\
|
28
|
+
'NOT NULL PRIMARY KEY, TESTTEXT VARCHAR(100), '\
|
29
|
+
'TESTFLOAT NUMERIC(8,2), TESTDATE DATE, TESTTIME '\
|
30
|
+
'TIME, TESTSTAMP TIMESTAMP)')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def teardown
|
35
|
+
@transactions.each do |tx|
|
36
|
+
tx.rollback if tx.active?
|
37
|
+
end
|
38
|
+
|
39
|
+
@connections.each do |cxn|
|
40
|
+
cxn.close if cxn.open?
|
41
|
+
end
|
42
|
+
|
43
|
+
if File::exist?(DB_FILE)
|
44
|
+
Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
|
45
|
+
end
|
46
|
+
puts "#{self.class.name} finished." if TEST_LOGGING
|
47
|
+
end
|
48
|
+
|
49
|
+
def test01
|
50
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
51
|
+
cxn.start_transaction do |tx|
|
52
|
+
s = Statement.new(cxn, tx, INSERT_SQL, 3)
|
53
|
+
f = 0.0
|
54
|
+
t = Time.new
|
55
|
+
|
56
|
+
1.upto(ITERATIONS) do |i|
|
57
|
+
f += 0.321
|
58
|
+
t = Time.at(t.to_i + 5)
|
59
|
+
s.execute_for([i, i.to_s, f, t, nil, t])
|
60
|
+
end
|
61
|
+
|
62
|
+
s.close
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
@connections.push(@database.connect(DB_USER_NAME, DB_PASSWORD))
|
67
|
+
@connections[0].start_transaction do |tx|
|
68
|
+
r = tx.execute("SELECT COUNT(*) FROM TEST_TABLE")
|
69
|
+
assert(r.fetch[0] == ITERATIONS)
|
70
|
+
r.close
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test02
|
75
|
+
f = 0.0
|
76
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
77
|
+
1.upto(20) do |i|
|
78
|
+
f += i
|
79
|
+
sql = "INSERT INTO TEST_TABLE VALUES (#{i}, "\
|
80
|
+
"#{f.to_s}, #{f}, NULL, NULL, 'NOW')"
|
81
|
+
cxn.execute_immediate(sql)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
@connections.push(@database.connect(DB_USER_NAME, DB_PASSWORD))
|
86
|
+
@transactions.push(@connections[0].start_transaction)
|
87
|
+
r = @transactions[0].execute("SELECT COUNT(*) FROM TEST_TABLE")
|
88
|
+
assert(r.fetch[0] == 20)
|
89
|
+
r.close
|
90
|
+
|
91
|
+
r = @transactions[0].execute("SELECT * FROM TEST_TABLE WHERE TESTID IN "\
|
92
|
+
"(2, 4, 6, 8, 10) ORDER BY TESTID ASCENDING")
|
93
|
+
a = r.fetch
|
94
|
+
assert(a[0] == 2)
|
95
|
+
assert(a[1] == '3.0')
|
96
|
+
assert(a[2] == 3.0)
|
97
|
+
assert(a[3] == nil)
|
98
|
+
assert(a[4] == nil)
|
99
|
+
|
100
|
+
a = r.fetch
|
101
|
+
assert(a[0] == 4)
|
102
|
+
assert(a[1] == '10.0')
|
103
|
+
assert(a[2] == 10.0)
|
104
|
+
assert(a[3] == nil)
|
105
|
+
assert(a[4] == nil)
|
106
|
+
|
107
|
+
a = r.fetch
|
108
|
+
assert(a[0] == 6)
|
109
|
+
assert(a[1] == '21.0')
|
110
|
+
assert(a[2] == 21.0)
|
111
|
+
assert(a[3] == nil)
|
112
|
+
assert(a[4] == nil)
|
113
|
+
|
114
|
+
a = r.fetch
|
115
|
+
assert(a[0] == 8)
|
116
|
+
assert(a[1] == '36.0')
|
117
|
+
assert(a[2] == 36.0)
|
118
|
+
assert(a[3] == nil)
|
119
|
+
assert(a[4] == nil)
|
120
|
+
|
121
|
+
a = r.fetch
|
122
|
+
assert(a[0] == 10)
|
123
|
+
assert(a[1] == '55.0')
|
124
|
+
assert(a[2] == 55.0)
|
125
|
+
assert(a[3] == nil)
|
126
|
+
assert(a[4] == nil)
|
127
|
+
|
128
|
+
r.close
|
129
|
+
|
130
|
+
@transactions[0].commit
|
131
|
+
|
132
|
+
@connections[0].start_transaction do |tx|
|
133
|
+
s = Statement.new(@connections[0], tx,
|
134
|
+
"UPDATE TEST_TABLE SET TESTSTAMP = NULL", 3)
|
135
|
+
s.execute()
|
136
|
+
s.close
|
137
|
+
|
138
|
+
r = tx.execute("SELECT TESTSTAMP FROM TEST_TABLE")
|
139
|
+
total = 0
|
140
|
+
r.each do |row|
|
141
|
+
assert(row[0] == nil)
|
142
|
+
total = total + 1
|
143
|
+
end
|
144
|
+
assert(total == 20)
|
145
|
+
r.close
|
146
|
+
end
|
147
|
+
|
148
|
+
a = []
|
149
|
+
t = nil
|
150
|
+
@connections[0].start_transaction do |tx|
|
151
|
+
# Perform an insert via a parameterized statement.
|
152
|
+
s = Statement.new(@connections[0], tx,
|
153
|
+
"INSERT INTO TEST_TABLE (TESTID, TESTTEXT, "\
|
154
|
+
"TESTFLOAT, TESTSTAMP) VALUES(?, ?, ?, ?)", 3)
|
155
|
+
t = Time.new
|
156
|
+
s.execute_for([25000, 'La la la', 3.14, t])
|
157
|
+
s.close
|
158
|
+
|
159
|
+
# Fetch the record and check the data.
|
160
|
+
r = tx.execute("SELECT TESTTEXT, TESTFLOAT, TESTSTAMP FROM "\
|
161
|
+
"TEST_TABLE WHERE TESTID = 25000")
|
162
|
+
a = r.fetch
|
163
|
+
r.close
|
164
|
+
end
|
165
|
+
assert(a[0] == 'La la la')
|
166
|
+
assert(a[1] == 3.14)
|
167
|
+
assert(a[2].to_i == t.to_i)
|
168
|
+
|
169
|
+
@connections[0].execute_immediate("DELETE FROM TEST_TABLE WHERE TESTID "\
|
170
|
+
"IN (1, 3, 5, 7, 9, 12, 14, 16, 18, 20)")
|
171
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
172
|
+
a = []
|
173
|
+
cxn.start_transaction do |tx|
|
174
|
+
r = tx.execute("SELECT COUNT(*) FROM TEST_TABLE")
|
175
|
+
a = r.fetch
|
176
|
+
r.close
|
177
|
+
end
|
178
|
+
assert(a[0] == 11)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|