sldb 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/README +257 -0
- data/README.tmpl +30 -0
- data/VERSION +1 -0
- data/gemspec.rb +23 -0
- data/gen_readme.rb +26 -0
- data/install.rb +206 -0
- data/lib/sldb-0.1.0.rb +1302 -0
- data/lib/sldb.rb +1302 -0
- data/sample/a.rb +22 -0
- data/sample/b.rb +29 -0
- data/sample/c.rb +35 -0
- data/sample/d.rb +37 -0
- data/sample/e.rb +19 -0
- data/white_box/test.rb +49 -0
- metadata +55 -0
data/sample/a.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'sldb'
|
2
|
+
|
3
|
+
#
|
4
|
+
# use the factory method to specify your database class
|
5
|
+
#
|
6
|
+
DB =
|
7
|
+
SLDB::class {
|
8
|
+
schema 'create table t ( a, b, c )'
|
9
|
+
path 'sldb'
|
10
|
+
}
|
11
|
+
|
12
|
+
#
|
13
|
+
# create and instance and use it - it will be created and initialized with the
|
14
|
+
# schema on the first use
|
15
|
+
#
|
16
|
+
db = DB::new
|
17
|
+
|
18
|
+
db.transaction do
|
19
|
+
db.execute 'insert into t values (0,1,2)'
|
20
|
+
db.execute('select * from t'){|tuple| p tuple}
|
21
|
+
end
|
22
|
+
|
data/sample/b.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'csv'
|
2
|
+
require 'sldb'
|
3
|
+
|
4
|
+
DB = SLDB::class :schema => 'create table t ( a, b, c )'
|
5
|
+
db = DB::new 'sldb'
|
6
|
+
|
7
|
+
#
|
8
|
+
# sldb uses arrayfields so many operations are natural since tuples are arrays,
|
9
|
+
# yet can be indexed by field
|
10
|
+
#
|
11
|
+
db.transaction do
|
12
|
+
db.execute "insert into t values ( 'A', 'B', 'C' )"
|
13
|
+
db.execute('select * from t') do |tuple|
|
14
|
+
puts "tuple => #{ tuple.inspect }"
|
15
|
+
tuple.fields.each{|f| puts " tuple[#{ f }] => #{ tuple[f] }"}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
puts
|
20
|
+
|
21
|
+
#
|
22
|
+
# csv generation is an example of something which is much more natural with
|
23
|
+
# arrays
|
24
|
+
#
|
25
|
+
CSV::generate('csv') do |csv|
|
26
|
+
db.ro_transaction{db.execute('select * from t'){|t| csv << t}}
|
27
|
+
end
|
28
|
+
puts(IO::read('csv'))
|
29
|
+
|
data/sample/c.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'sldb'
|
3
|
+
|
4
|
+
DB = SLDB::new {
|
5
|
+
schema <<-sql
|
6
|
+
create table t0 ( a, b, c);
|
7
|
+
create table t1 ( x, y, z);
|
8
|
+
sql
|
9
|
+
|
10
|
+
path 'sldb'
|
11
|
+
}
|
12
|
+
|
13
|
+
db = DB::new
|
14
|
+
|
15
|
+
#
|
16
|
+
# many utility methods exist to make working with the databases easier
|
17
|
+
#
|
18
|
+
db.transaction do
|
19
|
+
db.tablenames.each do |tablename|
|
20
|
+
tuple = db.tuple_for tablename
|
21
|
+
tuple.fields.each{|f| tuple[f] = db.timestamp 'local' => true}
|
22
|
+
values = db.quote tuple
|
23
|
+
sql = "insert into #{ tablename } values (#{ values.join ',' })"
|
24
|
+
db.execute sql
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
db.read_only_transaction do
|
29
|
+
db.tablenames.each do |tablename|
|
30
|
+
db.execute("select * from #{ tablename }") do |t|
|
31
|
+
t.map!{|f| db.stamptime f, 'local' => true}
|
32
|
+
y t.to_hash
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/sample/d.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'sldb'
|
3
|
+
|
4
|
+
DB = SLDB::new { schema 'create table t ( tid, time )'; path 'sldb' }
|
5
|
+
db = DB::new
|
6
|
+
|
7
|
+
#
|
8
|
+
# multi-processed/multi-threaded applications may simoultaneously access the db
|
9
|
+
#
|
10
|
+
|
11
|
+
4.times do
|
12
|
+
unless fork
|
13
|
+
pid = $$
|
14
|
+
threads = []
|
15
|
+
2.times do |i|
|
16
|
+
threads <<
|
17
|
+
Thread::new(i, db) do |tid, db|
|
18
|
+
sleep rand
|
19
|
+
tuple = db.tuple_for 't'
|
20
|
+
tuple['tid'] = "#{ pid }:#{ tid }"
|
21
|
+
tuple['time'] = Time::now.to_f
|
22
|
+
values = db.quote tuple
|
23
|
+
db.transaction{db.execute "insert into t values(#{ values.join ',' })"}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
threads.each{|t| t.join}
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
4.times{ Process::wait }
|
32
|
+
|
33
|
+
report = Hash::new{|h,k| h[k] = []}
|
34
|
+
|
35
|
+
db.transaction{db.execute("select * from t"){|t| report['t'] << t.to_hash}}
|
36
|
+
|
37
|
+
y report
|
data/sample/e.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'sldb'
|
2
|
+
|
3
|
+
#
|
4
|
+
# the SLDB factory method handles - as a special case - a pathname being passed
|
5
|
+
# in as meaning : create the class AND give me and instance of it which allows
|
6
|
+
# connecting to dbs even when the schema is unknown
|
7
|
+
#
|
8
|
+
|
9
|
+
dbklass = SLDB::new 'schema' => 'create table t ( answer )',
|
10
|
+
'path' => 'sldb'
|
11
|
+
db = dbklass::new
|
12
|
+
db.transaction{ db.execute 'insert into t values ( 42 )' }
|
13
|
+
|
14
|
+
fork do
|
15
|
+
db = SLDB::new 'sldb' # here we don't know schema
|
16
|
+
db.transaction{ db.execute('select * from t'){|t| puts t['answer']}}
|
17
|
+
end
|
18
|
+
|
19
|
+
Process::wait
|
data/white_box/test.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
$VERBOSE=nil
|
2
|
+
$:.unshift 'lib'
|
3
|
+
|
4
|
+
require 'yaml'
|
5
|
+
require 'sldb'
|
6
|
+
|
7
|
+
DB = SLDB::new { schema 'create table t ( tid, time )'; path 'sldb' }
|
8
|
+
db = DB::new
|
9
|
+
|
10
|
+
loop do
|
11
|
+
|
12
|
+
#
|
13
|
+
# multi-processed/multi-threaded applications may simoultaneously access the db
|
14
|
+
#
|
15
|
+
|
16
|
+
4.times do
|
17
|
+
unless fork
|
18
|
+
pid = $$
|
19
|
+
threads = []
|
20
|
+
2.times do |i|
|
21
|
+
threads <<
|
22
|
+
Thread::new(i, db) do |tid, db|
|
23
|
+
sleep rand
|
24
|
+
tuple = db.tuple_for 't'
|
25
|
+
tuple['tid'] = "#{ pid }:#{ tid }"
|
26
|
+
tuple['time'] = Time::now.to_f
|
27
|
+
values = db.quote tuple
|
28
|
+
db.transaction{db.execute "insert into t values(#{ values.join ',' })"}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
threads.each{|t| t.join}
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
4.times{ Process::wait }
|
37
|
+
|
38
|
+
tuples = nil
|
39
|
+
|
40
|
+
db.transaction{
|
41
|
+
tuples = db.execute("select * from t")
|
42
|
+
if tuples.size > 1024
|
43
|
+
db.execute("delete from t"){}
|
44
|
+
end
|
45
|
+
}
|
46
|
+
|
47
|
+
tuples.each_with_index{|tuple, idx| p [idx, tuple]}
|
48
|
+
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: sldb
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2006-10-23 00:00:00.000000 -06:00
|
8
|
+
summary: sldb
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: ara.t.howard@noaa.gov
|
12
|
+
homepage: http://codeforpeople.com/lib/ruby/sldb/
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire: sldb
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: false
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
-
|
22
|
+
- ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
25
|
+
version:
|
26
|
+
platform: ruby
|
27
|
+
signing_key:
|
28
|
+
cert_chain:
|
29
|
+
authors:
|
30
|
+
- Ara T. Howard
|
31
|
+
files:
|
32
|
+
- lib
|
33
|
+
- install.rb
|
34
|
+
- README.tmpl
|
35
|
+
- white_box
|
36
|
+
- README
|
37
|
+
- gen_readme.rb
|
38
|
+
- VERSION
|
39
|
+
- gemspec.rb
|
40
|
+
- sample
|
41
|
+
- lib/sldb.rb
|
42
|
+
- lib/sldb-0.1.0.rb
|
43
|
+
- white_box/test.rb
|
44
|
+
- sample/a.rb
|
45
|
+
- sample/b.rb
|
46
|
+
- sample/c.rb
|
47
|
+
- sample/d.rb
|
48
|
+
- sample/e.rb
|
49
|
+
test_files: []
|
50
|
+
rdoc_options: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
executables: []
|
53
|
+
extensions: []
|
54
|
+
requirements: []
|
55
|
+
dependencies: []
|