swift_db 0.1.1

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/Manifest ADDED
@@ -0,0 +1,13 @@
1
+ Manifest
2
+ README.rdoc
3
+ Rakefile
4
+ lib/a.rb
5
+ lib/common/comparison.rb
6
+ lib/db.rb
7
+ lib/root/binary.rb
8
+ lib/root/internal_node.rb
9
+ lib/root/leaf.rb
10
+ lib/root/table.rb
11
+ lib/root/tree.rb
12
+ lib/swift_db.rb
13
+ swift_db.gemspec
data/README.rdoc ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('swift_db', '0.1.1') do |p|
6
+ p.description = "Stores data in a B+tree structure"
7
+ p.url = "https://github.com/ask4prasath/swift_db"
8
+ p.author = "Prasath V Ram"
9
+ p.email = "ask4prasath@gmail.com"
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ p.development_dependencies = []
12
+ end
13
+
14
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
data/lib/a.rb ADDED
File without changes
@@ -0,0 +1,14 @@
1
+ module DB
2
+ module Core
3
+ module Common
4
+ module Comparison
5
+ EQ = "==" # Equal
6
+ NEQ = "<>" # Not equal
7
+ GT = ">" # Greater than
8
+ GTE = ">=" # Greater than or equal
9
+ LT = "<" # Less than
10
+ LTE = "<=" # Less than or equal
11
+ end
12
+ end
13
+ end
14
+ end
data/lib/db.rb ADDED
@@ -0,0 +1,20 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__),'..','lib'))
2
+
3
+ #Loads all the core Database Files
4
+
5
+ #require "/home/prasath/database/Database/lib/root/leaf.rb"
6
+
7
+ require "root/tree.rb"
8
+ require "root/leaf.rb"
9
+ require "root/internal_node.rb"
10
+ require "root/binary.rb"
11
+ require "root/table.rb"
12
+ require "common/comparison.rb"
13
+
14
+
15
+
16
+
17
+ #for local reference
18
+
19
+ #require "/home/prasath/database/Database/lib/db.rb"
20
+ #a = Db::Core::Table.new
@@ -0,0 +1,7 @@
1
+ module Db
2
+ module Core
3
+ def binary_search
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,97 @@
1
+ module Db
2
+ module Core
3
+ class InternalNode
4
+ attr_reader :infinity_node, :keys_and_node_pointers
5
+ attr_accessor :parent_node
6
+
7
+ def initialize(order=3, infinity_node=nil)
8
+ @order=order
9
+ @max_capacity=@order-1
10
+ @keys_and_node_pointers=[]
11
+ @infinity_node=infinity_node
12
+ @infinity_node.parent_node=self
13
+ @parent_node=nil
14
+ end
15
+
16
+ def keys
17
+ keys=[]
18
+ @keys_and_node_pointers.each {|key_data| keys << key_data[0]}
19
+ keys
20
+ end
21
+
22
+ def datas
23
+
24
+ end
25
+
26
+
27
+ def max_key_value
28
+ @keys_and_node_pointers[-1][0]
29
+ end
30
+
31
+ def insert_node_pointer(key_and_node)
32
+ puts "-------------#{key_and_node}"
33
+ @keys_and_node_pointers << key_and_node
34
+ sort_keys
35
+ split if @keys_and_node_pointers.size > @max_capacity
36
+ end
37
+
38
+
39
+ def insert(key, value)
40
+ case
41
+ when key > max_key_value
42
+ @infinity_node.insert(key, value)
43
+ else
44
+ @keys_and_node_pointers.each do |key_node|
45
+ if key <= key_node[0]
46
+ key_node[1].insert(key, value)
47
+ break;
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def search(key, operator=DB::Core::Common::Comparison::EQ)
54
+ match=nil
55
+ case
56
+ when key > max_key_value
57
+ match=@infinity_node.search(key, operator)
58
+ else
59
+ @keys_and_node_pointers.each do |key_node|
60
+ if key <= key_node[0]
61
+ match=key_node[1].search(key, operator)
62
+ break;
63
+ end
64
+ end
65
+ end
66
+ return match
67
+ end
68
+
69
+
70
+ private
71
+
72
+ def sort_keys
73
+ @keys_and_node_pointers.sort! {|a,b| a<=>b}
74
+ end
75
+
76
+ def split
77
+ puts "============#{@keys_and_node_pointers}"
78
+ split_index=((@keys_and_node_pointers.length / @max_capacity.to_f).ceil)-1
79
+ splited_values=@keys_and_node_pointers.values_at(0..split_index)
80
+ @keys_and_node_pointers.slice!(0..split_index)
81
+
82
+ max_key_node = splited_values[-1]
83
+
84
+ new_node=InternalNode.new(@order, max_key_node[1])
85
+
86
+ @parent_node = InternalNode.new(@order, self) if @parent_node.nil?
87
+ new_node.parent_node=@parent_node
88
+
89
+ splited_values.slice!(-1)
90
+ splited_values.each {|key_node| new_node.insert_node_pointer(key_node) }
91
+
92
+ @parent_node.insert_node_pointer([max_key_node[0], new_node])
93
+ end
94
+
95
+ end
96
+ end
97
+ end
data/lib/root/leaf.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Db
2
+ module Core
3
+ class Leaf
4
+ def initialize()
5
+
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/root/table.rb ADDED
@@ -0,0 +1,32 @@
1
+ module Db
2
+ module Core
3
+ class Table
4
+
5
+ attr_accessor :root_node, :first_node
6
+
7
+ def initialize(structure=3)
8
+ raise "Your node structure is less than 3 which is not good for BTree" if (structure < 3)
9
+ @structure = structure
10
+ @root_node = Tree.new(@structure)
11
+ @first_node = @root_node
12
+ end
13
+
14
+ def insert(key, value)
15
+ @root_node.insert(key, value)
16
+ @root_node = @root_node.parent_node unless @root_node.parent_node.nil?
17
+ end
18
+
19
+ def search(key, operator=DB::Core::Common::Comparison::EQ)
20
+ case operator
21
+ when DB::Core::Common::Comparison::NEQ
22
+ @root_node.search(key, DB::Core::Common::Comparison::LT) + @root_node.search(key, DB::Core::Common::Comparison::GT)
23
+ else
24
+ @root_node.search(key, operator)
25
+ end
26
+ end
27
+
28
+
29
+
30
+ end
31
+ end
32
+ end
data/lib/root/tree.rb ADDED
@@ -0,0 +1,115 @@
1
+ module Db
2
+ module Core
3
+ class Tree
4
+
5
+ attr_accessor :datas, :parent_node, :pre_node, :next_node, :structure
6
+
7
+ def initialize(structure=3)
8
+ @structure = structure
9
+ @datas = []
10
+ @parent_node = nil
11
+ @pre_node = nil
12
+ @leaf_node = nil
13
+ @next_node = nil
14
+ end
15
+
16
+ def keys
17
+ id = []
18
+ @datas.each {|k| id << k[0]}
19
+ id
20
+ end
21
+
22
+ def max_key_value
23
+ @datas[-1][0]
24
+ end
25
+
26
+ def insert(key, value)
27
+ inserting_element = key
28
+ _datas = [] << inserting_element << value
29
+ @datas << _datas
30
+ sort_keys
31
+ divide if @datas.length > @structure
32
+ @datas
33
+ end
34
+
35
+ def search(key, operator=DB::Core::Common::Comparison::EQ)
36
+ match=[]
37
+ case operator
38
+ when DB::Core::Common::Comparison::EQ
39
+ @datas.each do |key_node|
40
+ if key == key_node[0]
41
+ match << key_node[1]
42
+ break;
43
+ end
44
+ end
45
+ return match[0]
46
+ when DB::Core::Common::Comparison::GT ## Find nodes that are greater than key
47
+ @datas.each do |key_node|
48
+ if key_node[0] > key
49
+ match << key_node[1]
50
+ end
51
+ end if max_key_value > key
52
+ match += next_node.search(key, operator) unless next_node.nil?
53
+ return match
54
+ when DB::Core::Common::Comparison::GTE
55
+ @datas.each do |key_node|
56
+ if key_node[0] >= key
57
+ match << key_node[1]
58
+ end
59
+ end if max_key_value >= key
60
+ match += next_node.search(key, operator) unless next_node.nil?
61
+ return match
62
+ when DB::Core::Common::Comparison::LT
63
+ @datas.each do |key_node|
64
+ if key_node[0] < key
65
+ match << key_node[1]
66
+ end
67
+ end
68
+ pre_match = []
69
+ pre_match = pre_node.search(key, operator) unless pre_node.nil?
70
+ match = pre_match + match
71
+ return match
72
+ when DB::Core::Common::Comparison::LTE
73
+ @datas.each do |key_node|
74
+ if key_node[0] <= key
75
+ match << key_node[1]
76
+ end
77
+ end
78
+ pre_match = []
79
+ pre_match = pre_node.search(key, operator) unless pre_node.nil?
80
+ match = pre_match + match
81
+ return match
82
+ end
83
+ end
84
+
85
+
86
+ private
87
+ def sort_keys
88
+ self.datas.sort!
89
+ end
90
+
91
+ def divide
92
+ no_of_divides = ((@datas.length/@structure).ceil) - 1
93
+ leaf_items = @datas.values_at(0..no_of_divides)
94
+ @datas.slice!(0..no_of_divides)
95
+
96
+
97
+ new_node = Tree.new()
98
+ new_node.datas = leaf_items
99
+ new_node.pre_node = @pre_node
100
+ new_node.next_node = self
101
+ new_node.pre_node.next_node = new_node unless new_node.pre_node.nil?
102
+ @pre_node = new_node
103
+ @parent_node = InternalNode.new(@structure, self) if @parent_node.nil?
104
+ @pre_node.parent_node=@parent_node
105
+ @parent_node.insert_node_pointer([@pre_node.max_key_value, @pre_node]) unless @parent_node.nil?
106
+
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+
113
+
114
+ #require "/home/prasath/database/Database/lib/db.rb"
115
+ #a= Db::Core::Tree.new
data/lib/swift_db.rb ADDED
@@ -0,0 +1,12 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__),'..','lib'))
2
+
3
+ #Loads all the core Database Files
4
+
5
+ #require "/home/prasath/database/Database/lib/root/leaf.rb"
6
+
7
+ require "root/tree.rb"
8
+ require "root/leaf.rb"
9
+ require "root/internal_node.rb"
10
+ require "root/binary.rb"
11
+ require "root/table.rb"
12
+ require "common/comparison.rb"
data/swift_db.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{swift_db}
5
+ s.version = "0.1.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Prasath V Ram"]
9
+ s.date = %q{2010-12-05}
10
+ s.description = %q{Stores data in a B+tree structure}
11
+ s.email = %q{ask4prasath@gmail.com}
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/a.rb", "lib/common/comparison.rb", "lib/db.rb", "lib/root/binary.rb", "lib/root/internal_node.rb", "lib/root/leaf.rb", "lib/root/table.rb", "lib/root/tree.rb", "lib/swift_db.rb"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "lib/a.rb", "lib/common/comparison.rb", "lib/db.rb", "lib/root/binary.rb", "lib/root/internal_node.rb", "lib/root/leaf.rb", "lib/root/table.rb", "lib/root/tree.rb", "lib/swift_db.rb", "swift_db.gemspec"]
14
+ s.homepage = %q{https://github.com/ask4prasath/swift_db}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Swift_db", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{swift_db}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{Stores data in a B+tree structure}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ else
27
+ end
28
+ else
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: swift_db
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Prasath V Ram
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-05 00:00:00 +05:30
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Stores data in a B+tree structure
23
+ email: ask4prasath@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.rdoc
30
+ - lib/a.rb
31
+ - lib/common/comparison.rb
32
+ - lib/db.rb
33
+ - lib/root/binary.rb
34
+ - lib/root/internal_node.rb
35
+ - lib/root/leaf.rb
36
+ - lib/root/table.rb
37
+ - lib/root/tree.rb
38
+ - lib/swift_db.rb
39
+ files:
40
+ - Manifest
41
+ - README.rdoc
42
+ - Rakefile
43
+ - lib/a.rb
44
+ - lib/common/comparison.rb
45
+ - lib/db.rb
46
+ - lib/root/binary.rb
47
+ - lib/root/internal_node.rb
48
+ - lib/root/leaf.rb
49
+ - lib/root/table.rb
50
+ - lib/root/tree.rb
51
+ - lib/swift_db.rb
52
+ - swift_db.gemspec
53
+ has_rdoc: true
54
+ homepage: https://github.com/ask4prasath/swift_db
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options:
59
+ - --line-numbers
60
+ - --inline-source
61
+ - --title
62
+ - Swift_db
63
+ - --main
64
+ - README.rdoc
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 11
82
+ segments:
83
+ - 1
84
+ - 2
85
+ version: "1.2"
86
+ requirements: []
87
+
88
+ rubyforge_project: swift_db
89
+ rubygems_version: 1.3.7
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Stores data in a B+tree structure
93
+ test_files: []
94
+