iotaz 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/PERSISTENT +137 -0
- data/doc/README +470 -0
- data/examples/example01.rb +105 -0
- data/examples/example02.rb +105 -0
- data/lib/iotaz.rb +35 -0
- data/lib/iotaz/DatabaseInterfaceFactory.rb +92 -0
- data/lib/iotaz/FirebirdInterface.rb +788 -0
- data/lib/iotaz/IotazError.rb +81 -0
- data/lib/iotaz/MetaData.rb +646 -0
- data/lib/iotaz/ObjectPool.rb +299 -0
- data/lib/iotaz/Persistent.rb +155 -0
- data/lib/iotaz/Query.rb +566 -0
- data/lib/iotaz/Session.rb +379 -0
- data/lib/iotaz/WorkSet.rb +295 -0
- data/test/ActionTest.rb +31 -0
- data/test/AtomTest.rb +90 -0
- data/test/AttributeTest.rb +64 -0
- data/test/DatabaseInterfaceFactoryTest.rb +41 -0
- data/test/FirebirdInterfaceTest.rb +276 -0
- data/test/GeneratedAttributeTest.rb +124 -0
- data/test/IotazErrorTest.rb +23 -0
- data/test/IotazMetaDataTest.rb +87 -0
- data/test/ObjectPoolTest.rb +106 -0
- data/test/PersistentTest.rb +102 -0
- data/test/QueryFieldTest.rb +152 -0
- data/test/QueryRowTest.rb +42 -0
- data/test/QueryTest.rb +59 -0
- data/test/SessionTest.rb +162 -0
- data/test/UnitTest.rb +17 -0
- data/test/ValueCallbackTest.rb +44 -0
- data/test/dbinfo.rb +7 -0
- metadata +75 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rubygems'
|
5
|
+
require_gem 'iotaz'
|
6
|
+
|
7
|
+
include Iotaz
|
8
|
+
|
9
|
+
class QueryRowTest < Test::Unit::TestCase
|
10
|
+
def test01
|
11
|
+
row = QueryRow.new
|
12
|
+
|
13
|
+
assert(row.size == 0)
|
14
|
+
assert(row.columns == [])
|
15
|
+
assert(row.values == [])
|
16
|
+
|
17
|
+
row['one'] = 1
|
18
|
+
row['two'] = 2
|
19
|
+
row['three'] = 3
|
20
|
+
|
21
|
+
assert(row.size == 3)
|
22
|
+
assert(row.exists?('three'))
|
23
|
+
assert(row.exists?('four') == false)
|
24
|
+
assert(row.columns.size == 3)
|
25
|
+
assert(row.columns.include?('ONE'))
|
26
|
+
assert(row.columns.include?('TWO'))
|
27
|
+
assert(row.columns.include?('THREE'))
|
28
|
+
assert(row.values.size == 3)
|
29
|
+
assert(row.values.include?(1))
|
30
|
+
assert(row.values.include?(2))
|
31
|
+
assert(row.values.include?(3))
|
32
|
+
|
33
|
+
columns = values = 0
|
34
|
+
row.each do |column, value|
|
35
|
+
columns += 1 if ['ONE', 'TWO', 'THREE'].include?(column)
|
36
|
+
values +=1 if [1, 2, 3].include?(value)
|
37
|
+
end
|
38
|
+
|
39
|
+
assert(columns == 3)
|
40
|
+
assert(values == 3)
|
41
|
+
end
|
42
|
+
end
|
data/test/QueryTest.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rubygems'
|
5
|
+
require_gem 'iotaz'
|
6
|
+
|
7
|
+
include Iotaz
|
8
|
+
|
9
|
+
class TestClass
|
10
|
+
attr_accessor :id, :value01, :value02, :value03
|
11
|
+
|
12
|
+
def TestClass.iotaz_meta_data
|
13
|
+
IotazMetaData.scan(TestClass)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class QueryTest < Test::Unit::TestCase
|
18
|
+
def test01
|
19
|
+
query = Query.new(TestClass)
|
20
|
+
|
21
|
+
assert(query.field('id').fetched?)
|
22
|
+
assert(query.field('value01').fetched?)
|
23
|
+
assert(query.field('value02').fetched?)
|
24
|
+
assert(query.field('value03').fetched?)
|
25
|
+
|
26
|
+
query = Query.new(TestClass, 'id', 'value01', 'value03')
|
27
|
+
|
28
|
+
assert(query.field('id').fetched?)
|
29
|
+
assert(query.field('value01').fetched?)
|
30
|
+
assert(query.field('value02').fetched? == false)
|
31
|
+
assert(query.field('value03').fetched?)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test02
|
35
|
+
query = Query.new(TestClass)
|
36
|
+
|
37
|
+
sql, values = query.to_sql
|
38
|
+
assert(sql == 'select id, value01, value02, value03 from TestClass')
|
39
|
+
assert(values == [])
|
40
|
+
|
41
|
+
query.field('id').equal_to(1000)
|
42
|
+
sql, values = query.to_sql
|
43
|
+
assert(sql == 'select id, value01, value02, value03 from TestClass '\
|
44
|
+
'where id = ?')
|
45
|
+
assert(values == [1000])
|
46
|
+
|
47
|
+
query.field('value02').in(1, 3, 5, 7, 9)
|
48
|
+
sql, values = query.to_sql
|
49
|
+
assert(sql == 'select id, value01, value02, value03 from TestClass '\
|
50
|
+
'where id = ? and value02 in (1, 3, 5, 7, 9)')
|
51
|
+
assert(values == [1000])
|
52
|
+
|
53
|
+
query.field('value02').fetched = false
|
54
|
+
sql, values = query.to_sql
|
55
|
+
assert(sql == 'select id, value01, value03 from TestClass '\
|
56
|
+
'where id = ? and value02 in (1, 3, 5, 7, 9)')
|
57
|
+
assert(values == [1000])
|
58
|
+
end
|
59
|
+
end
|
data/test/SessionTest.rb
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'dbinfo'
|
5
|
+
require 'rubygems'
|
6
|
+
require_gem 'iotaz'
|
7
|
+
require_gem 'fireruby'
|
8
|
+
|
9
|
+
include Iotaz
|
10
|
+
|
11
|
+
class SessionTestClass
|
12
|
+
include Persistent
|
13
|
+
|
14
|
+
sequence_attr :id, 'id', true, 'SIMPLE_ID_SQ'
|
15
|
+
persistent_attr :text
|
16
|
+
date_attr :create_date, 'createdate'
|
17
|
+
time_attr :create_time, 'createtime'
|
18
|
+
self.table_name = 'Simple'
|
19
|
+
|
20
|
+
def initialize(text)
|
21
|
+
@text = text
|
22
|
+
end
|
23
|
+
|
24
|
+
def ==(object)
|
25
|
+
same = false
|
26
|
+
if object.instance_of?(SessionTestClass)
|
27
|
+
same = (@id == object.id && @text == object.text)
|
28
|
+
end
|
29
|
+
same
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class SessionTest < Test::Unit::TestCase
|
34
|
+
DB_FILE = './session_test.fdb'
|
35
|
+
TABLE_SQL = 'create table Simple(id integer not null primary key, '\
|
36
|
+
'text varchar(100), createdate date not null, createtime '\
|
37
|
+
'time not null)'
|
38
|
+
GENERATOR_SQL = 'create generator SIMPLE_ID_SQ'
|
39
|
+
|
40
|
+
# Set up for testing.
|
41
|
+
def setup
|
42
|
+
# Check if the database file exists.
|
43
|
+
@database = FireRuby::Database.new(DB_FILE)
|
44
|
+
if File.exist?(DB_FILE)
|
45
|
+
@database.drop(DB_USER_NAME, DB_PASSWORD)
|
46
|
+
end
|
47
|
+
Database.create(DB_FILE, DB_USER_NAME, DB_PASSWORD, 1024, nil)
|
48
|
+
|
49
|
+
@database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
|
50
|
+
cxn.execute_immediate(TABLE_SQL)
|
51
|
+
cxn.execute_immediate(GENERATOR_SQL)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Create the database interface.
|
55
|
+
configuration = {'iotaz.database' => 'firebird',
|
56
|
+
'iotaz.firebird.user' => DB_USER_NAME,
|
57
|
+
'iotaz.firebird.password' => DB_PASSWORD,
|
58
|
+
'iotaz.firebird.database' => DB_FILE,
|
59
|
+
'iotaz.firebird.connections.min' => 0}
|
60
|
+
|
61
|
+
factory = DatabaseInterfaceFactory.new(configuration)
|
62
|
+
@interface = factory.create
|
63
|
+
@terminated = false
|
64
|
+
end
|
65
|
+
|
66
|
+
# Clean up after testing.
|
67
|
+
def teardown
|
68
|
+
# Shutdown the interface.
|
69
|
+
@interface.shutdown
|
70
|
+
|
71
|
+
# Drop the database.
|
72
|
+
if File.exist?(DB_FILE)
|
73
|
+
@database.drop(DB_USER_NAME, DB_PASSWORD)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Test constructors and call backs.
|
78
|
+
def test01
|
79
|
+
session = Session.new(@interface)
|
80
|
+
session.terminate
|
81
|
+
assert(@terminated == false)
|
82
|
+
|
83
|
+
session = Session.new(@interface, self)
|
84
|
+
session.terminate
|
85
|
+
assert(@terminated == true)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Test saving, loading and deleting.
|
89
|
+
def test02
|
90
|
+
session = Session.new(@interface)
|
91
|
+
simple = SessionTestClass.new('Test Text')
|
92
|
+
|
93
|
+
session.save(simple)
|
94
|
+
assert(simple.id != nil)
|
95
|
+
assert(simple.create_date != nil)
|
96
|
+
assert(simple.create_time != nil)
|
97
|
+
|
98
|
+
object = session.load(SessionTestClass, simple.id)
|
99
|
+
assert(simple == object)
|
100
|
+
|
101
|
+
id = session.id
|
102
|
+
session.delete(simple)
|
103
|
+
begin
|
104
|
+
session.load(SessionTestClass, id)
|
105
|
+
assert(false, 'Loaded a deleted record from the database.')
|
106
|
+
rescue Exception
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Test the transactional aspect.
|
111
|
+
def test03
|
112
|
+
session = Session.new(@interface)
|
113
|
+
simple = SessionTestClass.new('Test Text')
|
114
|
+
|
115
|
+
session.start_transaction
|
116
|
+
begin
|
117
|
+
session.save(simple)
|
118
|
+
assert(simple.id != nil)
|
119
|
+
assert(simple.create_date == nil)
|
120
|
+
assert(simple.create_time == nil)
|
121
|
+
|
122
|
+
begin
|
123
|
+
object = session.load(SessionTestClass, simple.id)
|
124
|
+
assert(false, 'Fetched unsaved record from the database.')
|
125
|
+
rescue Exception
|
126
|
+
end
|
127
|
+
|
128
|
+
session.commit
|
129
|
+
assert(simple.id != nil)
|
130
|
+
assert(simple.create_date != nil)
|
131
|
+
assert(simple.create_time != nil)
|
132
|
+
rescue Exception => error
|
133
|
+
session.rollback
|
134
|
+
raise error
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# Test the query execution functionality.
|
139
|
+
def test04
|
140
|
+
session = Session.new(@interface)
|
141
|
+
|
142
|
+
session.save(SessionTestClass.new('Record One'))
|
143
|
+
session.save(SessionTestClass.new('No. Two'))
|
144
|
+
session.save(SessionTestClass.new('Record Three'))
|
145
|
+
session.save(SessionTestClass.new('No. Four'))
|
146
|
+
|
147
|
+
query = Query.new(SessionTestClass)
|
148
|
+
query.field('id').between(2, 3)
|
149
|
+
rows = session.execute(query)
|
150
|
+
|
151
|
+
assert(rows.size == 2)
|
152
|
+
rows.each do |row|
|
153
|
+
assert([2, 3].include?(row['ID']))
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
# Required to be a callback.
|
158
|
+
def terminating(session)
|
159
|
+
@terminated = true
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
data/test/UnitTest.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ActionTest'
|
4
|
+
require 'AtomTest'
|
5
|
+
require 'AttributeTest'
|
6
|
+
require 'DatabaseInterfaceFactoryTest'
|
7
|
+
require 'FirebirdInterfaceTest'
|
8
|
+
require 'GeneratedAttributeTest'
|
9
|
+
require 'IotazErrorTest'
|
10
|
+
require 'IotazMetaDataTest'
|
11
|
+
require 'ObjectPoolTest'
|
12
|
+
require 'PersistentTest'
|
13
|
+
require 'QueryFieldTest'
|
14
|
+
require 'QueryRowTest'
|
15
|
+
require 'QueryTest'
|
16
|
+
require 'SessionTest'
|
17
|
+
require 'ValueCallbackTest'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rubygems'
|
5
|
+
require_gem 'iotaz'
|
6
|
+
|
7
|
+
include Iotaz
|
8
|
+
|
9
|
+
class CallbackTestClass
|
10
|
+
def initialize(id, value)
|
11
|
+
@id = id
|
12
|
+
@value = value
|
13
|
+
end
|
14
|
+
|
15
|
+
def CallbackTestClass.iotaz_meta_data
|
16
|
+
IotazMetaData::scan(CallbackTestClass)
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_accessor :id, :value
|
20
|
+
end
|
21
|
+
|
22
|
+
class ValueCallbackTest < Test::Unit::TestCase
|
23
|
+
def setup
|
24
|
+
@attribute = Attribute.new('value')
|
25
|
+
@objects = []
|
26
|
+
|
27
|
+
@objects.push(CallbackTestClass.new(1, 1))
|
28
|
+
@objects.push(CallbackTestClass.new(2, "Two"))
|
29
|
+
@objects.push(CallbackTestClass.new(3, 3.0))
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def test01
|
34
|
+
v = ValueCallback.new(@objects[0], @attribute.name, "LA LA LA")
|
35
|
+
|
36
|
+
assert(v.object == @objects[0])
|
37
|
+
assert(v.attribute == @attribute.name)
|
38
|
+
assert(v.sql == 'LA LA LA')
|
39
|
+
assert(v.parameters == [1])
|
40
|
+
|
41
|
+
v.assign("Changed")
|
42
|
+
assert(@objects[0].value == "Changed")
|
43
|
+
end
|
44
|
+
end
|
data/test/dbinfo.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This file contains details to used for connecting to a database for testing
|
3
|
+
# purposes. If your database does not use the default user names and password
|
4
|
+
# then edit this file and change them for testing.
|
5
|
+
|
6
|
+
DB_USER_NAME = 'sysdba'
|
7
|
+
DB_PASSWORD = 'masterkey'
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.10
|
3
|
+
specification_version: 1
|
4
|
+
name: iotaz
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2005-04-08
|
8
|
+
summary: Object-relational mapping library.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: paw220470@yahoo.ie
|
12
|
+
homepage: http://rubyforge.org/projects/iotaz/
|
13
|
+
rubyforge_project:
|
14
|
+
description: "Iotaz is an object relational mapping library. At the moment the library only
|
15
|
+
supports the FireRuby library, providing access to the Firebird open source
|
16
|
+
RDBMS, but this might be extended in future."
|
17
|
+
autorequire: iotaz
|
18
|
+
default_executable:
|
19
|
+
bindir: bin
|
20
|
+
has_rdoc: true
|
21
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
22
|
+
requirements:
|
23
|
+
-
|
24
|
+
- ">"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.0
|
27
|
+
version:
|
28
|
+
platform: ruby
|
29
|
+
authors:
|
30
|
+
- Peter Wood
|
31
|
+
files:
|
32
|
+
- lib/iotaz
|
33
|
+
- lib/iotaz.rb
|
34
|
+
- lib/iotaz/DatabaseInterfaceFactory.rb
|
35
|
+
- lib/iotaz/FirebirdInterface.rb
|
36
|
+
- lib/iotaz/IotazError.rb
|
37
|
+
- lib/iotaz/MetaData.rb
|
38
|
+
- lib/iotaz/ObjectPool.rb
|
39
|
+
- lib/iotaz/Persistent.rb
|
40
|
+
- lib/iotaz/Query.rb
|
41
|
+
- lib/iotaz/Session.rb
|
42
|
+
- lib/iotaz/WorkSet.rb
|
43
|
+
- test/ActionTest.rb
|
44
|
+
- test/AtomTest.rb
|
45
|
+
- test/AttributeTest.rb
|
46
|
+
- test/DatabaseInterfaceFactoryTest.rb
|
47
|
+
- test/dbinfo.rb
|
48
|
+
- test/FirebirdInterfaceTest.rb
|
49
|
+
- test/GeneratedAttributeTest.rb
|
50
|
+
- test/IotazErrorTest.rb
|
51
|
+
- test/IotazMetaDataTest.rb
|
52
|
+
- test/ObjectPoolTest.rb
|
53
|
+
- test/PersistentTest.rb
|
54
|
+
- test/QueryFieldTest.rb
|
55
|
+
- test/QueryRowTest.rb
|
56
|
+
- test/QueryTest.rb
|
57
|
+
- test/SessionTest.rb
|
58
|
+
- test/UnitTest.rb
|
59
|
+
- test/ValueCallbackTest.rb
|
60
|
+
- doc/PERSISTENT
|
61
|
+
- doc/README
|
62
|
+
- examples/example01.rb
|
63
|
+
- examples/example02.rb
|
64
|
+
test_files:
|
65
|
+
- test/UnitTest.rb
|
66
|
+
rdoc_options:
|
67
|
+
- "--main"
|
68
|
+
- doc/README
|
69
|
+
extra_rdoc_files:
|
70
|
+
- doc/README
|
71
|
+
- doc/PERSISTENT
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
requirements: []
|
75
|
+
dependencies: []
|