1
1
require "csv"
2
2
class MySqliteRequest
3
- attr_accessor :table_name , :hashedDataA , :hashedDataB , :request , :filename_db_b , :columns , :isOrder , :order_type , :order_col , :selected_hash_array , :isWhere , :where_count , :isJoin , :column_on_db_a , :column_on_db_b , :filter_column , :filter_column_value
3
+ attr_accessor :table_name , :hashedDataA , :dataToInsert , : hashedDataB, :request , :filename_db_b , :columns , :isOrder , :order_type , :order_col , :selected_hash_array , :isWhere , :where_count , :isJoin , :column_on_db_a , :column_on_db_b , :filter_column , :filter_column_value
4
4
def initialize
5
5
@isWhere = false
6
6
@isJoin = false
@@ -48,6 +48,17 @@ def order(order, column_name)
48
48
end
49
49
50
50
51
+ def insert ( table_name )
52
+ @table_name = table_name
53
+ @request = 'insert'
54
+ self
55
+ end
56
+
57
+ def values ( *data ) #a hash of data key => value
58
+ @dataToInsert = data
59
+
60
+ self
61
+ end
51
62
52
63
def run
53
64
@hashedDataA = table_to_hashed ( @table_name )
@@ -107,7 +118,20 @@ def run
107
118
108
119
end #of request='select'
109
120
110
-
121
+ if @request=='insert'
122
+ CSV.open(@table_name,"a+") do |csv|
123
+ headers=csv.readline
124
+ puts headers.inspect
125
+ @dataToInsert.each do |data|
126
+ dataValues=headers.map do |header_name|
127
+ data[header_name]
128
+ end
129
+ csv<< dataValues
130
+ end
131
+ # csv << @dataToInsert
132
+ end
133
+ end #of request='insert'
134
+
111
135
112
136
113
137
puts '..........................final result'
@@ -122,55 +146,55 @@ def table_to_hashed(table_name)
122
146
return hashedData
123
147
end
124
148
149
+
150
+
125
151
def process_row(row,result_hash, selected_hash_array,columns)
126
- if columns[0]==='*'
127
- selected_hash_array<<row
128
-
129
- else
130
- columns.each do |column_name|
131
- result_hash[column_name]=row[column_name]
152
+ if columns[0]==='*'
153
+ selected_hash_array<<row
154
+
155
+ else
156
+ columns.each do |column_name|
157
+ result_hash[column_name]=row[column_name]
132
158
133
- end
134
- end
135
- selected_hash_array << result_hash if result_hash != {}
136
-
159
+ end
160
+ end
161
+ selected_hash_array << result_hash if result_hash != {}
162
+
137
163
end
138
164
139
165
def merge_sort(array, &block)
140
- return array if array.length <= 1
141
-
142
- mid = array.length / 2
143
- left = merge_sort(array[0...mid], &block)
144
- right = merge_sort(array[mid..-1], &block)
145
- merge(left, right, &block)
146
- end
147
-
148
- def merge(left, right, &block)
149
- result = []
150
- i = j = 0
151
-
152
- while i < left.length && j < right.length
153
- if block.call( left[i], right[j]) <= 0
154
- result << left[i]
155
- i += 1
156
- else
157
- result << right[j]
158
- j += 1
159
- end
166
+ return array if array.length <= 1
167
+
168
+ mid = array.length / 2
169
+ left = merge_sort(array[0...mid], &block)
170
+ right = merge_sort(array[mid..-1], &block)
171
+ merge(left, right, &block)
172
+ end
173
+
174
+
175
+ def merge(left, right, &block)
176
+ result = []
177
+ i = j = 0
178
+
179
+ while i < left.length && j < right.length
180
+ if block.call( left[i], right[j]) <= 0
181
+ result << left[i]
182
+ i += 1
183
+ else
184
+ result << right[j]
185
+ j += 1
160
186
end
161
-
162
- result.concat(left[i..-1])
163
- result.concat(right[j..-1])
164
-
165
- result
166
187
end
167
- request = MySqliteRequest.new
168
- request = request.from('nba_player_data.csv')
169
- request = request.select('name','year_start')
170
- request = request.where('college', 'University of California')
171
- # request = request.where('year_start', '1997')
172
- request=request.order('desc','year_start')
173
- request.run
188
+
189
+ result.concat(left[i..-1])
190
+ result.concat(right[j..-1])
191
+
192
+ result
193
+ end
174
194
175
195
196
+ request = MySqliteRequest.new
197
+ request = request.insert('nba_player_data.csv')
198
+ request = request.values('name' => 'Alaa Abdelnaby', 'year_start' => '1991', 'year_end' => '1995', 'position' => 'F-C', 'height' => '6-10', 'weight' => '240', 'birth_date' => "June 24, 1968", 'college' => 'Duke University')
199
+ request.run
176
200
0 commit comments