|
| 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