Skip to content

Commit 9f68b31

Browse files
committed
renamed liteDb
1 parent 714e196 commit 9f68b31

File tree

7 files changed

+5200
-0
lines changed

7 files changed

+5200
-0
lines changed

liteDb/ReadMe.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
* LiteDB - A Ruby-based Lightweight Database Management System *
2+
LiteDB is a simple yet powerful database management system (DBMS) written in Ruby. It's designed to handle SQL queries for database operations with both case-insensitive and case-sensitive support. This lightweight DBMS uses CSV files as its storage backend, making it easy to work with and perfect for small to medium-sized projects.
3+
4+
Features
5+
SQL Query Support: LiteDB supports essential SQL query commands like SELECT, INSERT, UPDATE, and DELETE.
6+
Case Insensitivity: You can use SQL queries in either uppercase or lowercase letters, making it user-friendly and flexible.
7+
CSV-Based Storage: LiteDB stores data in CSV files, making it easy to work with and suitable for small-scale projects.
8+
Powerful Query Engine: Utilizes regular expressions, hash manipulation, loops, block arguments, and merge sort algorithms for efficient query processing.
9+
Installation
10+
LiteDB requires Ruby to be installed on your system. You can install it using the following steps:
11+
12+
Clone this repository to your local machine:
13+
14+
bash
15+
Copy code
16+
git clone https://github.com/yourusername/LiteDB.git
17+
cd LiteDB
18+
Install the required gems:
19+
20+
bash
21+
Copy code
22+
bundle install
23+
Usage
24+
You can interact with LiteDB through the command-line interface (CLI). Here are some sample SQL queries:
25+
26+
SELECT
27+
ruby
28+
Copy code
29+
SELECT name,email FROM nba_player_data WHERE name='Matt Zunic'
30+
INSERT
31+
ruby
32+
Copy code
33+
INSERT INTO nba_player_data (name, year_start, year_end, position, height, weight, college) VALUES ('Alaa Abdelnaby34', 1991, 1995, 'F-C', '6-10', 240, 'Duke University')
34+
UPDATE
35+
ruby
36+
Copy code
37+
UPDATE nba_player_data SET name = 'Bill Renamed', year_start = '2330' WHERE name = 'Bill Zopf', year_start = '1971'
38+
DELETE
39+
40+
DELETE FROM nba_player_data WHERE name = 'John'

liteDb/my_sqlite_cli.rb

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
require_relative 'my_sqlite_request'
2+
3+
class MySQLite
4+
def initialize
5+
puts "MySQLite version 0.1 #{Time.now.strftime('%Y-%m-%d')}"
6+
queryUserInput
7+
end
8+
end
9+
10+
def queryUserInput
11+
loop do
12+
print 'my_sqlite_cli>'
13+
query=gets.chomp
14+
result=''
15+
case query
16+
17+
when 'quit'
18+
puts 'exiting sqlte cli'
19+
break
20+
when /^(\s*(SELECT|select)\s+([\w\s*,]+)\s+(FROM|from)\s+(\S+)\s*(?:(JOIN|join)\s+(\S+)\s+(on|ON)\s+(\S+))?(?:(WHERE|where)\s+(.*?))?\s*)$/
21+
column_name=$3
22+
table_name="#{$5}.csv"
23+
where_conditions=$11
24+
table_name2="#{$7}.csv"
25+
join_on=$9
26+
27+
result=runSelectQuery(table_name,column_name).run
28+
if join_on
29+
result=runJoinQuery(join_on,table_name,table_name2,column_name).run
30+
end
31+
if where_conditions
32+
result=runSelectWhereQuery(where_conditions,table_name,column_name).run
33+
end
34+
35+
when /^(?:INSERT|insert)\s+(?:INTO|into)\s+(\w+)(?:\s+\(([^)]+)\))?\s+(?:VALUES|values)\s+\(([^)]+)\)\s*;?\s*$/
36+
37+
table_name="#{$1}.csv"
38+
table_column=$2
39+
table_data=$3
40+
hash_data_array=[]
41+
parsed_table_data = CSV.parse(table_data).first
42+
runInsertQuery(table_name,table_column,hash_data_array,parsed_table_data).run
43+
44+
when /(?:UPDATE|update)\s+(\w+)\s+(?:SET|set)\s+(.+?)\s+(?:WHERE|where)\s+(.+)/
45+
46+
table_name="#{$1}.csv"
47+
values=$2
48+
where_conditions=$3
49+
request=runUpdateQuery(table_name,values,where_conditions).run
50+
51+
when /^\s*(DELETE|delete)\s+(FROM|from)\s+(\w+)\s+(where|WHERE)\s+(.+)/
52+
53+
table_name="#{$3}.csv"
54+
where_conditions=$5
55+
request=runDeleteQuery(table_name,where_conditions,request).run
56+
57+
58+
else
59+
puts 'Invalid query format. Please enter a valid query...e.g..SELECT * FROM database.csv'
60+
end#when
61+
puts result.inspect
62+
# return result
63+
end#loop
64+
end#defQuery
65+
66+
# #HELPER FUNCTIONS
67+
68+
69+
70+
def runSelectQuery(table_name,column_name)
71+
request = MySqliteRequest.new
72+
request = request.from(table_name)
73+
if column_name=="*"
74+
request = request.select(column_name)
75+
else
76+
columNameArray=column_name.split(",")
77+
request = request.select(*columNameArray)
78+
end
79+
return request
80+
end
81+
82+
def runSelectWhereQuery(conditions,table_name,column_name)
83+
request=runSelectQuery(table_name,column_name)
84+
splitted_conditions=conditions.split(",")
85+
86+
splitted_conditions.each do |current_condition|
87+
current_pair_array=current_condition.split("=")
88+
89+
condition_array=current_pair_array.map do |condition|
90+
condition.delete_prefix("'").delete_suffix("'")
91+
end
92+
request=request.where(*condition_array)
93+
end
94+
return request
95+
end
96+
97+
def runJoinQuery(join_conditions,table_name,table_name2,column_name)
98+
join_conditions_array=join_conditions.split("=")
99+
request=runSelectQuery(table_name,column_name)
100+
request=request.join(join_conditions_array[0],table_name2,join_conditions_array[1])
101+
return request
102+
end
103+
104+
def runInsertQuery(table_name,table_column,hash_data_array,parsed_table_data)
105+
if table_column
106+
split_column=table_column.split(",")
107+
split_column.each_with_index do |column,i|
108+
data_hash={}
109+
data_hash[column] = parsed_table_data[i]
110+
hash_data_array<<data_hash
111+
end
112+
113+
end
114+
115+
116+
request = MySqliteRequest.new
117+
request = request.insert(table_name)
118+
if table_column
119+
request = request.values(*hash_data_array)
120+
else
121+
request = request.values(*split_data)
122+
end
123+
request
124+
end
125+
def runUpdateQuery(table_name,values,where_conditions)
126+
splitted_values=values.split(", ")
127+
values_to_update={}
128+
129+
splitted_values.each do |value_pair|
130+
value_pair_hash={}
131+
#create an hash for eaac pair,then push to an array
132+
value_pair_array=value_pair.split("=")
133+
edited_pair_array=value_pair_array.map do |element|
134+
element.strip
135+
end
136+
137+
value_pair_hash[edited_pair_array[0]]=edited_pair_array[1]
138+
values_to_update.merge!(value_pair_hash)
139+
end
140+
141+
142+
request = MySqliteRequest.new
143+
request = request.update(table_name)
144+
request = request.values(values_to_update)
145+
request = processWhereConditions(where_conditions,request)
146+
request
147+
end
148+
149+
def runDeleteQuery(table_name,where_conditions,request)
150+
request = MySqliteRequest.new
151+
request = request.delete
152+
request =request.from(table_name)
153+
request = processWhereConditions(where_conditions,request)
154+
request
155+
end
156+
157+
def processWhereConditions(conditions,request)
158+
splitted_conditions=conditions.split(",")
159+
160+
splitted_conditions.each do |current_condition|
161+
current_pair_array=current_condition.split("=")
162+
edited_pair_array=current_pair_array.map do |element|
163+
element.strip
164+
end
165+
request=request.where(*edited_pair_array)
166+
end
167+
return request
168+
end
169+
MySQLite.new
170+
#DELETE FROM nba_player_data WHERE name = 'John'
171+
172+
# UPDATE nba_player_data SET name = 'Bill Renamed', year_start = '2330' WHERE name = 'Bill Zopf',year_start='1971'
173+
174+
175+
# INSERT INTO nba_player_data (name,year_start,year_end,position,height,weight,college) VALUES (Alaa Abdelnaby34,1991,1995,F-C,6-10,240,Duke University)
176+
# INSERT INTO nba_player_data VALUES (Alaa Abdelnaby34,1991,1995,F-C,6-10,240,"June 24, 1968",Duke University)
177+
178+
179+
180+
#SELECT name,email FROM nba_player_data WHERE name='Matt Zunic'
181+

0 commit comments

Comments
 (0)