def gen_cql_env(configuration, experiment_conf, output): ''' Generate environment files for StremPref ''' text = get_register_stream(configuration, experiment_conf) query_dir = get_query_dir(configuration, experiment_conf) # Environment files for equivalent CQL queries filename = query_dir + os.sep + 'table_ots.cql' text += REG_Q_STR.format(qname='table_ots', qfile=filename) filename = query_dir + os.sep + 'stream_ots.cql' text += REG_Q_STR.format(qname='stream_ots', qfile=filename) filename = query_dir + os.sep + 'z.cql' text += REG_Q_STR.format(qname='z', qfile=filename) filename = query_dir + os.sep + 'z_prime.cql' text += REG_Q_STR.format(qname='z_prime', qfile=filename) filename = query_dir + os.sep + 'p_start.cql' text += REG_Q_STR.format(qname='p_start', qfile=filename) filename = query_dir + os.sep + 'p_end.cql' text += REG_Q_STR.format(qname='p_end', qfile=filename) filename = query_dir + os.sep + 'p_start_end.cql' text += REG_Q_STR.format(qname='p_start_end', qfile=filename) # Final equivalent query filename = query_dir + os.sep + 'equiv.cql' if output: # Get output filename out_file = get_out_file(configuration, experiment_conf) text += REG_Q_OUTPUT_STR.format(qname='equiv', qfile=filename, ofile=out_file) else: text += REG_Q_STR.format(qname='equiv', qfile=filename) filename = get_env_file(configuration, experiment_conf) write_to_txt(filename, text)
def gen_util_query(configuration, experiment_conf): ''' Generate single query ''' op_list = experiment_conf[OPERATOR_LIST] query = 'SELECT ' # ENDSEQ if ENDSEQ in op_list: query += Q_ENDSEQ # CONSEQ if CONSEQ in op_list: query += Q_CONSEQ # SEQ query += Q_SEQ.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI]) where_list = [] # MINSEQ if MINSEQ in op_list: where_list.append(Q_MINSEQ.format(min=experiment_conf[MIN])) # MAXSEQ if MAXSEQ in op_list: where_list.append(Q_MAXSEQ.format(max=experiment_conf[MAX])) if len(where_list): query += '\nWHERE ' + ' AND '.join(where_list) # Select correct query rules_dict = gen_rules_dict(configuration, experiment_conf) pref_str = get_temporal_preferences(rules_dict) query += Q_BESTSEQ.format(pref=pref_str) # Store query code filename = get_query_util_file(configuration, experiment_conf) write_to_txt(filename, query)
def gen_cql_rpos_spos_queries(query_dir): ''' Generate RPOS and SPOS queries ''' filename = query_dir + os.sep + 'rpos.cql' write_to_txt(filename, CQL_RPOS) filename = query_dir + os.sep + 'spos.cql' write_to_txt(filename, CQL_SPOS)
def gen_prev_rule_query(out_dir, rule_number, rule, condition_number): ''' Generate query for rule with previous condition ''' filename = out_dir + os.sep + \ 'r' + str(rule_number) + '_f' + str(condition_number) + '.cql' query = PREV_QUERY.format(cond=rule[COND_PREV]) write_to_txt(filename, query)
def gen_cql_z_query(query_dir, experiment_conf): ''' Consider RANGE and SLIDE and generate Z relation ''' query = CQL_Z.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI]) filename = query_dir + os.sep + 'z.cql' write_to_txt(filename, query)
def gen_seq_query(configuration, experiment_conf): ''' Generate queries with SEQ operator ''' query_dir = get_query_dir(configuration, experiment_conf) filename = query_dir + os.sep + 'seq.cql' query = SEQ_QUERY.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI]) write_to_txt(filename, query)
def gen_cql_queries(configuration, experiment_conf): ''' Generate all CQL queries equivalent to ENDSEQ operator ''' query_dir = get_query_dir(configuration, experiment_conf) query = CQL_Z.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI]) filename = query_dir + os.sep + 'z.cql' write_to_txt(filename, query) gen_cql_final_query(query_dir, experiment_conf)
def gen_someprev_rule_query(out_dir, rule_number, rule, condition_number): ''' Generate query for rule with some previous condition ''' filename = out_dir + os.sep + 'm_sp' + str(rule_number) + '.cql' query = MIN_SOMEPREV_QUERY.format(cond=rule[COND_SOMPREV]) write_to_txt(filename, query) filename = out_dir + os.sep + \ 'r' + str(rule_number) + '_f' + str(condition_number) + '.cql' query = SOMEPREV_QUERY.format(rn=rule_number) write_to_txt(filename, query)
def gen_bestseq_query(configuration, experiment_conf): ''' Generate StreamPref queries with BESTSEQ operator ''' filename = get_query_dir(configuration, experiment_conf) + \ os.sep + 'bestseq.cql' rules_dict = gen_rules_dict(configuration, experiment_conf) pref_str = get_temporal_preferences(rules_dict) query = BESTSEQ_QUERY.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI], pref=pref_str) write_to_txt(filename, query)
def gen_util_env(configuration, experiment_conf): ''' Generate environment ''' text = get_register_stream(configuration, experiment_conf) # Get query filename filename = get_query_util_file(configuration, experiment_conf) # Register query text += REG_Q_STR.format(qname='util', qfile=filename) # Get environment filename filename = get_env_util_file(configuration, experiment_conf) write_to_txt(filename, text)
def gen_cql_w_query(query_dir, experiment_conf): ''' Consider RANGE and SLIDE and generate W relation ''' # Build attribute names list att_list = get_attribute_list(experiment_conf[ATT]) att_str = ', '.join(att_list) # W query = CQL_W.format(att=att_str, ran=experiment_conf[RAN], sli=experiment_conf[SLI]) filename = query_dir + os.sep + 'w.cql' write_to_txt(filename, query)
def gen_cql_final_query(query_dir, experiment_conf): ''' Generate final query equivalent to SEQ operator for a range parameter ''' # Get attribute list att_list = get_attribute_list(experiment_conf[ATT], prefix='w.') att_str = ', '.join(att_list) # List of final position queries pos_query_list = [] for position in range(1, experiment_conf[RAN] + 1): pos_query = CQL_PI_FINAL.format(pos=position, att=att_str) pos_query_list.append(pos_query) # Equivalent is the union of final positions query = '\nUNION\n'.join(pos_query_list) + ';' filename = query_dir + os.sep + 'equiv.cql' write_to_txt(filename, query)
def gen_rule_queries(query_dir, experiment_conf, rule_number, rule): ''' Generate queries for all rules ''' if rule[TYPE] == FIRST: gen_first_rule_query(query_dir, rule_number) elif rule[TYPE] == PREV: gen_prev_rule_query(query_dir, rule_number, rule, 1) gen_someprev_rule_query(query_dir, rule_number, rule, 2) gen_allprev_rule_query(query_dir, rule_number, rule, 3) query = COND_QUERY.format(rn=rule_number) filename = query_dir + os.sep + 'r' + str(rule_number) + '.cql' write_to_txt(filename, query) # All input attributes (except identifier) # Get attribute list att_list = get_attribute_list(experiment_conf[ATT]) # Exclude sequence identifier (A1) att_list = att_list[1:] att_list = ', '.join(att_list) # Attributes non in TUP (transitive tuples) attnt_list = get_attribute_list(experiment_conf[ATT]) # Exclude sequence identifier (A1) and TUP attributes (A2, A3) attnt_list = attnt_list[3:] attnt_list = ', '.join(attnt_list) # Generate D_i Pref Queries query = DI_PREF_QUERY.format(att=att_list, attnt=attnt_list, cond=rule[COND_SIMPLE], pref=rule[PREF], rn=rule_number) filename = query_dir + os.sep + 'd' + str(rule_number) + '_pref.cql' write_to_txt(filename, query) # Generate D_i NonPref Queries query = \ DI_NONPREF_QUERY.format(att=att_list, attnt=attnt_list, cond=rule[COND_SIMPLE], nonpref=rule[NONPREF], rn=rule_number) filename = query_dir + os.sep + 'd' + str(rule_number) + '_nonpref.cql' write_to_txt(filename, query) # Generate D_i Queries # Get attribute list att_list = get_attribute_list(experiment_conf[ATT]) # Exclude sequence identifier (A1) att_list = att_list[1:] p_att_list = ['p.' + att for att in att_list] p_att_list = ', '.join(p_att_list) np_att_list = ['p.' + att + ' AS _' + att for att in att_list] np_att_list = ', '.join(np_att_list) ceteris_cond = get_ceteris_attributes(experiment_conf) ceteris_cond = ['p.' + att + ' = np.' + att for att in ceteris_cond] ceteris_cond = ' AND '.join(ceteris_cond) filename = query_dir + os.sep + 'd' + str(rule_number) + '.cql' query = DI_QUERY.format(p_att=p_att_list, np_att=np_att_list, rn=rule_number, cet_cond=ceteris_cond) write_to_txt(filename, query)
def gen_endseq_env(configuration, experiment_conf, output): ''' Generate environment files for ENDSEQ operator ''' text = get_register_stream(configuration, experiment_conf) # Get query filename query_dir = get_query_dir(configuration, experiment_conf) filename = query_dir + os.sep + 'endseq.cql' # Register query if output: # Get output filename out_file = get_out_file(configuration, experiment_conf) text += REG_Q_OUTPUT_STR.format(qname='endseq', qfile=filename, ofile=out_file) else: text += REG_Q_STR.format(qname='endseq', qfile=filename) # Get environment filename filename = get_env_file(configuration, experiment_conf) write_to_txt(filename, text)
def gen_cql_env(configuration, experiment_conf, output): ''' Generate environment files for StremPref ''' # Register stream text = get_register_stream(configuration, experiment_conf, include_tup=True) query_dir = get_query_dir(configuration, experiment_conf) filename = query_dir + os.sep + 'z.cql' text += REG_Q_STR.format(qname='z', qfile=filename) filename = query_dir + os.sep + 'p_join.cql' text += REG_Q_STR.format(qname='p_join', qfile=filename) filename = query_dir + os.sep + 'p.cql' text += REG_Q_STR.format(qname='p', qfile=filename) text += gen_reg_rules_queries(configuration, query_dir, experiment_conf) query_name = 't1' filename = query_dir + os.sep + query_name + '.cql' text += REG_Q_STR.format(qname=query_name, qfile=filename) level = experiment_conf[LEV] for number in range(2, level + 1): query_name = 't' + str(number) filename = query_dir + os.sep + query_name + '.cql' text += REG_Q_STR.format(qname=query_name, qfile=filename) query_name = 'id' filename = query_dir + os.sep + query_name + '.cql' text += REG_Q_STR.format(qname=query_name, qfile=filename) query_name = 'equiv' filename = query_dir + os.sep + query_name + '.cql' if output: # Get output filename out_file = get_out_file(configuration, experiment_conf) text += REG_Q_OUTPUT_STR.format(qname=query_name, qfile=filename, ofile=out_file) else: text += REG_Q_STR.format(qname=query_name, qfile=filename) # Get environment filename filename = get_env_file(configuration, experiment_conf) write_to_txt(filename, text)
def gen_cql_env(configuration, experiment_conf, output): ''' Generate environment files for StremPref ''' text = get_register_stream(configuration, experiment_conf) query_dir = get_query_dir(configuration, experiment_conf) # Environment files for equivalent CQL queries # RPOS filename = query_dir + os.sep + 'rpos.cql' text += REG_Q_STR.format(qname='rpos', qfile=filename) # SPOS filename = query_dir + os.sep + 'spos.cql' text += REG_Q_STR.format(qname='spos', qfile=filename) # W filename = query_dir + os.sep + 'w.cql' text += REG_Q_STR.format(qname='w', qfile=filename) # W1 and P1 filename = query_dir + os.sep + 'w1.cql' text += REG_Q_STR.format(qname='w1', qfile=filename) filename = query_dir + os.sep + 'p1.cql' text += REG_Q_STR.format(qname='p1', qfile=filename) # W_i and P_i range_value = experiment_conf[RAN] for pos in range(2, range_value + 1): filename = query_dir + os.sep + 'w' + str(pos) + '.cql' text += REG_Q_STR.format(qname='w' + str(pos), qfile=filename) filename = query_dir + os.sep + 'p' + str(pos) + '.cql' text += REG_Q_STR.format(qname='p' + str(pos), qfile=filename) # Final equivalent query filename = query_dir + os.sep + 'equiv.cql' if output: # Get output filename out_file = get_out_file(configuration, experiment_conf) text += REG_Q_OUTPUT_STR.format(qname='equiv', qfile=filename, ofile=out_file) else: text += REG_Q_STR.format(qname='equiv', qfile=filename) filename = get_env_file(configuration, experiment_conf) write_to_txt(filename, text)
def gen_cql_transitive_queries(experiment_conf, query_dir): ''' Generate CQL queries for transitive comparisons ''' # Generate T_i Queries # Get attribute list att_list = get_attribute_list(experiment_conf[ATT]) # Exclude sequence identifier (A1) att_list = att_list[1:] p_att_list = ['p.' + att for att in att_list] p_att_list = ', '.join(p_att_list) np_att_list = ['np._' + att for att in att_list] np_att_list = ', '.join(np_att_list) join_att = ['p._' + att + ' = np.' + att for att in att_list] join_att = ' AND '.join(join_att) for level_number in range(2, experiment_conf[LEV] + 1): filename = query_dir + os.sep + 't' + str(level_number) + '.cql' prev_level = level_number - 1 query = TI_QUERY.format(prev_n=prev_level, p_att=p_att_list, np_att=np_att_list, p_np_join=join_att) write_to_txt(filename, query)
def gen_cql_queries(configuration, experiment_conf): ''' Generate all CQL queries equivalent to MAXSEQ operator ''' query_dir = get_query_dir(configuration, experiment_conf) query = CQL_Z.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI]) filename = query_dir + os.sep + 'z.cql' write_to_txt(filename, query) query = CQL_ZMAX.format(max=experiment_conf[MAX]) filename = query_dir + os.sep + 'zmax.cql' write_to_txt(filename, query) filename = query_dir + os.sep + 'equiv.cql' write_to_txt(filename, CQL_EQUIV)
def gen_allprev_rule_query(out_dir, rule_number, rule, condition_number): ''' Generate query for rule with all previous condition ''' filename = out_dir + os.sep + 'nv_ap' + str(rule_number) + '.cql' query = NONVALID_ALLPREV_QUERY.format(cond=rule[COND_ALLPREV]) write_to_txt(filename, query) filename = out_dir + os.sep + 'm_ap' + str(rule_number) + '.cql' query = MIN_ALLPREV_QUERY.format(rn=rule_number) write_to_txt(filename, query) filename = out_dir + os.sep + \ 'r' + str(rule_number) + '_f' + str(condition_number) + '.cql' query = ALLPREV_QUERY.format(rn=rule_number) write_to_txt(filename, query)
def gen_cql_position_queries(query_dir, experiment_conf): ''' Generate queries to get each position ''' # Generate W_1 filename = query_dir + os.sep + 'w1.cql' write_to_txt(filename, CQL_W1) # W_i for range_value in range(2, experiment_conf[RAN] + 1): query = CQL_WI.format(prev=range_value - 1) filename = query_dir + os.sep + \ 'w' + str(range_value) + '.cql' write_to_txt(filename, query) # P_i for range_value in range(1, experiment_conf[RAN] + 1): query = CQL_PI.format(pos=range_value) filename = query_dir + os.sep + \ 'p' + str(range_value) + '.cql' write_to_txt(filename, query)
def gen_cql_queries(configuration, experiment_conf): ''' Generate all CQL queries equivalent to CONSEQ operator ''' query_dir = get_query_dir(configuration, experiment_conf) filename = query_dir + os.sep + 'table_ots.cql' write_to_txt(filename, CQL_TABLE_OTS) filename = query_dir + os.sep + 'stream_ots.cql' write_to_txt(filename, CQL_STREAM_OTS) gen_cql_z_query(query_dir, experiment_conf) filename = query_dir + os.sep + 'z_prime.cql' write_to_txt(filename, CQL_Z_PRIME) filename = query_dir + os.sep + 'p_start.cql' write_to_txt(filename, CQL_P_START) filename = query_dir + os.sep + 'p_end.cql' write_to_txt(filename, CQL_P_END) filename = query_dir + os.sep + 'p_start_end.cql' write_to_txt(filename, CQL_P_START_END) filename = query_dir + os.sep + 'equiv.cql' att_list = get_attribute_list(experiment_conf[ATT], 'z.') att_list = ', '.join(att_list) query = CQL_EQUIV.format(zatt=att_list) write_to_txt(filename, query)
def gen_first_rule_query(out_dir, rule_number): ''' Generate query for rule with first condition ''' filename = out_dir + os.sep + 'r' + str(rule_number) + '.cql' write_to_txt(filename, FIRST_QUERY)
def gen_cql_queries(configuration, experiment_conf): ''' Generate queries with CQL original operators equivalent to BESTSEQ operator ''' filename = get_tup_file(configuration) gen_transitive_tup(configuration, filename) query_dir = get_query_dir(configuration, experiment_conf) # Generate z query (sequences) query = Z_QUERY.format(ran=experiment_conf[RAN], sli=experiment_conf[SLI]) filename = query_dir + os.sep + 'z.cql' write_to_txt(filename, query) # Generate p_join query (join z positions) # Get attribute list att_list = get_attribute_list(experiment_conf[ATT]) # Exclude sequence identifier (A1) att_list = att_list[1:] z1_att_list = ['z1.' + att for att in att_list] z1_att_list = ', '.join(z1_att_list) z2_att_list = ['z2.' + att + ' AS _' + att for att in att_list] z2_att_list = ', '.join(z2_att_list) query = P_JOIN_QUERY.format(z1_att=z1_att_list, z2_att=z2_att_list) filename = query_dir + os.sep + 'p_join.cql' write_to_txt(filename, query) # Generate query p (positions to be compared) diff_filter = ['NOT ' + att + ' = _' + att for att in att_list] diff_filter = ' OR '.join(diff_filter) query = P_QUERY.format(p_filter=diff_filter) filename = query_dir + os.sep + 'p.cql' write_to_txt(filename, query) # Get rule list rule_list = get_rule_list(configuration, experiment_conf) # Generate query t1 (identifier of dominant sequences) and # individual rule queries query_list = [] for index, rule in enumerate(rule_list): # Generates queries R_i and D_i for each rule gen_rule_queries(query_dir, experiment_conf, index + 1, rule) query = 'SELECT * FROM d' + str(index + 1) query_list.append(query) query = '\nUNION\n'.join(query_list) + ';' filename = query_dir + os.sep + 't1.cql' write_to_txt(filename, query) # Generate T_i Queries gen_cql_transitive_queries(experiment_conf, query_dir) # Generate ID query query = ID_QUERY.format(rn=experiment_conf[LEV]) filename = query_dir + os.sep + 'id.cql' write_to_txt(filename, query) # Generate query for final result query = 'SELECT z.* FROM z, id WHERE z.a1 = id.a1;' filename = query_dir + os.sep + 'equiv.cql' write_to_txt(filename, query)