Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #15
0
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)
Beispiel #16
0
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)
Beispiel #17
0
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)
Beispiel #18
0
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)
Beispiel #19
0
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)
Beispiel #20
0
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)
Beispiel #21
0
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)
Beispiel #22
0
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)
Beispiel #23
0
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)