@@ -256,22 +256,57 @@ def get_column_name_with_alias_table(self,column, table_of_from):
256256 else :
257257 return str (one_table_of_column ) + '.' + str (column )
258258
259+ def intersect (self , a , b ):
260+ return list (set (a ) & set (b ))
261+
262+ def predict_operation_type (self , previous_column_offset , current_column_offset ):
263+ interval_offset = range (previous_column_offset , current_column_offset )
264+ if (len (self .intersect (interval_offset , self .count_keyword_offset )) >= 1 ):
265+ return 0
266+ elif (len (self .intersect (interval_offset , self .sum_keyword_offset )) >= 1 ):
267+ return 1
268+ elif (len (self .intersect (interval_offset , self .average_keyword_offset )) >= 1 ):
269+ return 2
270+ elif (len (self .intersect (interval_offset , self .max_keyword_offset )) >= 1 ):
271+ return 3
272+ elif (len (self .intersect (interval_offset , self .min_keyword_offset )) >= 1 ):
273+ return 4
274+ else :
275+ return None
276+
277+ def predict_operator (self , current_column_offset , next_column_offset ):
278+ interval_offset = range (current_column_offset , next_column_offset )
279+ if (len (self .intersect (interval_offset , self .negation_keyword_offset )) >= 1 ) and (len (self .intersect (interval_offset , self .greater_keyword_offset )) >= 1 ):
280+ return 0 # less
281+ elif (len (self .intersect (interval_offset , self .negation_keyword_offset )) >= 1 ) and (len (self .intersect (interval_offset , self .less_keyword_offset )) >= 1 ):
282+ return 1 # greater
283+ if (len (self .intersect (interval_offset , self .less_keyword_offset )) >= 1 ):
284+ return 0 # less
285+ elif (len (self .intersect (interval_offset , self .greater_keyword_offset )) >= 1 ):
286+ return 1 # greater
287+ elif (len (self .intersect (interval_offset , self .between_keyword_offset )) >= 1 ):
288+ return 2 # between
289+ elif (len (self .intersect (interval_offset , self .negation_keyword_offset )) >= 1 ):
290+ return 3 # not equal
291+ else :
292+ return 4 # equal
293+
259294 def run (self ):
260295 number_of_where_columns = 0
261296 columns_of_where = []
262297 offset_of = {}
263298 column_offset = []
264- count_keyword_offset = []
265- sum_keyword_offset = []
266- average_keyword_offset = []
267- max_keyword_offset = []
268- min_keyword_offset = []
269- greater_keyword_offset = []
270- less_keyword_offset = []
271- between_keyword_offset = []
272- junction_keyword_offset = []
273- disjunction_keyword_offset = []
274- negation_keyword_offset = []
299+ self . count_keyword_offset = []
300+ self . sum_keyword_offset = []
301+ self . average_keyword_offset = []
302+ self . max_keyword_offset = []
303+ self . min_keyword_offset = []
304+ self . greater_keyword_offset = []
305+ self . less_keyword_offset = []
306+ self . between_keyword_offset = []
307+ self . junction_keyword_offset = []
308+ self . disjunction_keyword_offset = []
309+ self . negation_keyword_offset = []
275310
276311 for phrase in self .phrases :
277312 for i in range (0 , len (phrase )):
@@ -283,45 +318,49 @@ def run(self):
283318 column_offset .append (i )
284319 break
285320 if phrase [i ] in self .count_keywords : # before the column
286- count_keyword_offset .append (i )
321+ self . count_keyword_offset .append (i )
287322 if phrase [i ] in self .sum_keywords : # before the column
288- sum_keyword_offset .append (i )
323+ self . sum_keyword_offset .append (i )
289324 if phrase [i ] in self .average_keywords : # before the column
290- average_keyword_offset .append (i )
325+ self . average_keyword_offset .append (i )
291326 if phrase [i ] in self .max_keywords : # before the column
292- max_keyword_offset .append (i )
327+ self . max_keyword_offset .append (i )
293328 if phrase [i ] in self .min_keywords : # before the column
294- min_keyword_offset .append (i )
329+ self . min_keyword_offset .append (i )
295330 if phrase [i ] in self .greater_keywords : # after the column
296- greater_keyword_offset .append (i )
331+ self . greater_keyword_offset .append (i )
297332 if phrase [i ] in self .less_keywords : # after the column
298- less_keyword_offset .append (i )
333+ self . less_keyword_offset .append (i )
299334 if phrase [i ] in self .between_keywords : # after the column
300- between_keyword_offset .append (i )
301- if phrase [i ] in self .junction_keywords : # between the column and the equal, greater or less keyword
302- junction_keyword_offset .append (i )
335+ self . between_keyword_offset .append (i )
336+ if phrase [i ] in self .junction_keywords : # after the column
337+ self . junction_keyword_offset .append (i )
303338 if phrase [i ] in self .disjunction_keywords : # after the column
304- disjunction_keyword_offset .append (i )
339+ self . disjunction_keyword_offset .append (i )
305340 if phrase [i ] in self .negation_keywords : # between the column and the equal, greater or less keyword
306- negation_keyword_offset .append (i )
341+ self . negation_keyword_offset .append (i )
307342
308343 for table_of_from in self .tables_of_from :
309344 where_object = Where ()
310345 for i in range (0 , len (column_offset )):
346+ current = column_offset [i ]
347+
311348 if i == 0 :
312- previous = 0
349+ previous = 0
313350 else :
314351 previous = column_offset [i - 1 ]
315352
316353 if i == (len (column_offset ) - 1 ):
317- _next = - 1
354+ _next = 100 # put max integer in python, here!
318355 else :
319356 _next = column_offset [i + 1 ]
320357
321358 junction = None
322- operator = None
323- value = None
324- where_object .add_condition (junction , Condition (None , operator , value ))
359+ column = self .get_column_name_with_alias_table (columns_of_where [i ], table_of_from )
360+ operation_type = self .predict_operation_type (previous , current )
361+ value = 'OOV' # Out Of Vocabulary: feature not implemented yet
362+ operator = self .predict_operator (current , _next )
363+ where_object .add_condition (junction , Condition (column , operation_type , operator , value ))
325364 self .where_objects .append (where_object )
326365
327366 def join (self ):
0 commit comments