iotaz 0.1.0
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/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: []
|