swift_db 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
+