コード例 #1
0
def print_redundant_rows(roots, stats_file, args):
    cond_list = args['prefix']
    stats_file.write("\t<queryOnlyToQuery>\n")
    if args['plot_loop']:
        [r, r_loop] = util.calculateAllActions(roots,
                                               cond_list,
                                               count_loop=True)
        d1 = float(sum(r) - sum(r_loop))
        d2 = float(sum(r_loop))
        d3 = float(args['readTotal'] - args['readInClosure'] - d1)
        d4 = float(args['readInClosure'] - d2)

        stats_file.write("\t\t<otherNoLoop>%f</otherNoLoop>\n" %
                         (d3 / float(len(roots))))
        stats_file.write(
            "\t\t<queryOnlyToQueryNoLoop>%f</queryOnlyToQueryNoLoop>\n" %
            (d1 / float(len(roots))))
        stats_file.write("\t\t<otherInLoop>%f</otherInLoop>\n" %
                         (d4 / float(len(roots))))
        stats_file.write(
            "\t\t<queryOnlyToQueryInLoop>%f</queryOnlyToQueryInLoop>\n" %
            (d2 / float(len(roots))))
    else:
        r = util.calculateAllActions(roots, cond_list)
        stats_file.write("\t\t<queryOnlyToQuery>%f</queryOnlyToQuery>\n" %
                         (float(sum(r)) / float(len(roots))))
        stats_file.write(
            "\t\t<other>%f</other>\n" %
            (float(args['readTotal'] - sum(r)) / float(len(roots))))

    stats_file.write("\t</queryOnlyToQuery>\n")
コード例 #2
0
ファイル: print_others.py プロジェクト: congy/ORManalysis
def print_query_cards(roots, stats_file, args):
	stats_file.write("\t<queryCard>\n")
	if args['plot_loop']:
		cond_list = args['prefix_limited'][:]
		[r_limited, r_limited_loop] = util.calculateAllActions(roots, cond_list, count_loop=True)
		print r_limited
		print r_limited_loop
		cond_list = args['prefix_scale'][:]
		[r_scale, r_scale_loop] = util.calculateAllActions(roots, cond_list, count_loop=True)
		d1 = float(sum(r_scale)-sum(r_scale_loop))
		d2 = float(sum(r_scale_loop))
		d3 = float(sum(r_limited) - sum(r_limited_loop))
		d4 = float(sum(r_limited_loop))
		
		stats_file.write("\t\t<boundedNoLoop>%f</boundedNoLoop>\n"%(d3/float(len(roots))))
		stats_file.write("\t\t<unboundedNoLoop>%f</unboundedNoLoop>\n"%(d1/float(len(roots))))
		stats_file.write("\t\t<boundedInLoop>%f</boundedInLoop>\n"%(d4/float(len(roots))))
		stats_file.write("\t\t<unboundedInLoop>%f</unboundedInLoop>\n"%(d2/float(len(roots))))
	else:
		cond_list = args['prefix_limited'][:]
		r_limited = util.calculateAllActions(roots, cond_list)
		cond_list = args['prefix_scale'][:]
		r_scale = util.calculateAllActions(roots, cond_list)

		stats_file.write("\t\t<scaleCard>%f</scaleCard>\n"%(float(sum(r_scale))/float(len(roots))))
		stats_file.write("\t\t<limitedCard>%f</limitedCard>\n"%(float(sum(r_limited))/float(len(roots))))
	stats_file.write("\t</queryCard>\n")
コード例 #3
0
def print_field_assignment(roots, stats_file, args):
    cond_list = args['prefix'][:]
    fields = util.collectAllTags(roots, cond_list)
    print "fields = "
    print fields
    field_const = []
    field_funcdep = []
    field_no_input = []
    data = {}
    for f in fields:
        cond_list = args['prefix'][:]
        cond_list.append(f)
        r = util.calculateAllActions(roots, cond_list, to_float=False)
        only_from_const = True
        only_from_otherq = True
        for k in r:
            if k != None and ("query" in k or "util_func" in k
                              or "user_input" in k):
                only_from_const = False
                break
        for k in r:
            if k != None and ("user_input" in k or "util_func" in k
                              or "const" in k):
                only_from_otherq = False
                break
        if only_from_const:
            field_const.append(f)
        if only_from_otherq:
            field_funcdep.append(f)
        uses_user_input = False
        for k in r:
            if k != None and "user_input" in k:
                uses_user_input = True
                break
        if uses_user_input == False:
            field_no_input.append(f)

    for f in args['tableFields']:
        if f not in fields:
            field_no_input.append(f)
            if "created_at" not in f and "updated_at" not in f and "created_on" not in f and "updated_on" not in f:
                chs = f.split(".")
                if chs[1] != "id":
                    field_const.append(f)

    stats_file.write("\t<fieldOnlyConst>\n")
    stats_file.write("\t\t<onlyConst>%d</onlyConst>\n" % len(field_const))
    stats_file.write("\t\t<onlyOtherQuery>%d</onlyOtherQuery>\n" %
                     len(field_funcdep))
    stats_file.write("\t\t<otherWithoutInput>%d</otherWithoutInput>\n" %
                     (len(field_no_input) - len(field_const)))
    stats_file.write("\t\t<hasInput>%d</hasInput>\n" %
                     (len(args['tableFields']) - len(field_no_input)))
    stats_file.write("\t</fieldOnlyConst>\n")

    stats_file.write("\t<fieldNoInput>\n")
    stats_file.write("\t\t<noInput>%d</noInput>\n" % len(field_no_input))
    stats_file.write("\t\t<hasInput>%d</hasInput>\n" %
                     (len(args['tableFields']) - len(field_no_input)))
    stats_file.write("\t</fieldNoInput>\n")
コード例 #4
0
def print_field_assignment(roots, stats_file, args):
	cond_list = args['prefix'][:]
	fields = util.collectAllTags(roots, cond_list)
	print "fields = "
	print fields
	field_const = []
	field_funcdep = []
	field_no_input = []
	data = {}
	for f in fields:
		cond_list = args['prefix'][:]
		cond_list.append(f)
		r = util.calculateAllActions(roots, cond_list, to_float=False)
		only_from_const = True
		only_from_otherq = True
		for k in r:
			if k != None and ("query" in k or "util_func" in k or "user_input" in k):
				only_from_const = False
				break
		for k in r:
			if k != None and ("user_input" in k or "util_func" in k or "const" in k):
				only_from_otherq = False
				break
		if only_from_const:
			field_const.append(f)
		if only_from_otherq:
			field_funcdep.append(f)
		uses_user_input = False
		for k in r:
			if k != None and "user_input" in k:
				uses_user_input = True
				break
		if uses_user_input == False:
			field_no_input.append(f)
	
	for f in args['tableFields']:
		if f not in fields:
			field_no_input.append(f)
			if "created_at" not in f and "updated_at" not in f and "created_on" not in f and "updated_on" not in f:
				chs = f.split(".")
				if chs[1] != "id":
					field_const.append(f)

	stats_file.write("\t<fieldOnlyConst>\n")
	stats_file.write("\t\t<onlyConst>%d</onlyConst>\n"%len(field_const))
	stats_file.write("\t\t<onlyOtherQuery>%d</onlyOtherQuery>\n"%len(field_funcdep))
	stats_file.write("\t\t<otherWithoutInput>%d</otherWithoutInput>\n"%(len(field_no_input)-len(field_const)))
	stats_file.write("\t\t<hasInput>%d</hasInput>\n"%(len(args['tableFields'])-len(field_no_input)))
	stats_file.write("\t</fieldOnlyConst>\n")

	stats_file.write("\t<fieldNoInput>\n")
	stats_file.write("\t\t<noInput>%d</noInput>\n"%len(field_no_input))
	stats_file.write("\t\t<hasInput>%d</hasInput>\n"%(len(args['tableFields'])-len(field_no_input)))
	stats_file.write("\t</fieldNoInput>\n")
コード例 #5
0
ファイル: print_others.py プロジェクト: congy/ORManalysis
def print_redundant_rows(roots, stats_file, args):
	cond_list = args['prefix']
	stats_file.write("\t<queryOnlyToQuery>\n")
	if args['plot_loop']:
		[r, r_loop] = util.calculateAllActions(roots, cond_list, count_loop=True)
		d1 = float(sum(r)-sum(r_loop))
		d2 = float(sum(r_loop))
		d3 = float(args['readTotal']-args['readInClosure']-d1)
		d4 = float(args['readInClosure']-d2)
		
		stats_file.write("\t\t<otherNoLoop>%f</otherNoLoop>\n"%(d3/float(len(roots))))
		stats_file.write("\t\t<queryOnlyToQueryNoLoop>%f</queryOnlyToQueryNoLoop>\n"%(d1/float(len(roots))))
		stats_file.write("\t\t<otherInLoop>%f</otherInLoop>\n"%(d4/float(len(roots))))
		stats_file.write("\t\t<queryOnlyToQueryInLoop>%f</queryOnlyToQueryInLoop>\n"%(d2/float(len(roots))))
	else:
		r = util.calculateAllActions(roots, cond_list)
		stats_file.write("\t\t<queryOnlyToQuery>%f</queryOnlyToQuery>\n"%(float(sum(r))/float(len(roots))))
		stats_file.write("\t\t<other>%f</other>\n"%(float(args['readTotal']-sum(r))/float(len(roots))))
			
	stats_file.write("\t</queryOnlyToQuery>\n")
コード例 #6
0
def print_query_cards(roots, stats_file, args):
    stats_file.write("\t<queryCard>\n")
    if args['plot_loop']:
        cond_list = args['prefix_limited'][:]
        [r_limited, r_limited_loop] = util.calculateAllActions(roots,
                                                               cond_list,
                                                               count_loop=True)
        print r_limited
        print r_limited_loop
        cond_list = args['prefix_scale'][:]
        [r_scale, r_scale_loop] = util.calculateAllActions(roots,
                                                           cond_list,
                                                           count_loop=True)
        d1 = float(sum(r_scale) - sum(r_scale_loop))
        d2 = float(sum(r_scale_loop))
        d3 = float(sum(r_limited) - sum(r_limited_loop))
        d4 = float(sum(r_limited_loop))

        stats_file.write("\t\t<boundedNoLoop>%f</boundedNoLoop>\n" %
                         (d3 / float(len(roots))))
        stats_file.write("\t\t<unboundedNoLoop>%f</unboundedNoLoop>\n" %
                         (d1 / float(len(roots))))
        stats_file.write("\t\t<boundedInLoop>%f</boundedInLoop>\n" %
                         (d4 / float(len(roots))))
        stats_file.write("\t\t<unboundedInLoop>%f</unboundedInLoop>\n" %
                         (d2 / float(len(roots))))
    else:
        cond_list = args['prefix_limited'][:]
        r_limited = util.calculateAllActions(roots, cond_list)
        cond_list = args['prefix_scale'][:]
        r_scale = util.calculateAllActions(roots, cond_list)

        stats_file.write("\t\t<scaleCard>%f</scaleCard>\n" %
                         (float(sum(r_scale)) / float(len(roots))))
        stats_file.write("\t\t<limitedCard>%f</limitedCard>\n" %
                         (float(sum(r_limited)) / float(len(roots))))
    stats_file.write("\t</queryCard>\n")
コード例 #7
0
def print_redundant_table(roots, stats_file, args):
    cond_list = args['prefix'][:]
    tables = util.collectAllTags(roots, cond_list)
    data = {}
    print tables
    for t in tables:
        cond_list = args['prefix'][:]
        cond_list.append(t)
        r = util.calculateAllActions(roots, cond_list, to_float=False)
        data[t] = len(r)

    stats_file.write("\t<redundantTable>\n")
    for k, v in data.items():
        stats_file.write("\t\t<%s>%d</%s>\n" % (k, v, k))
    stats_file.write("\t</redundantTable>\n")
コード例 #8
0
ファイル: print_others.py プロジェクト: congy/ORManalysis
def print_redundant_table(roots, stats_file, args):
	cond_list = args['prefix'][:]
	tables = util.collectAllTags(roots, cond_list)	
	data = {}
	print tables
	for t in tables:
		cond_list = args['prefix'][:]
		cond_list.append(t)
		r = util.calculateAllActions(roots, cond_list, to_float=False)
		data[t] = len(r)

	stats_file.write("\t<redundantTable>\n")
	for k,v in data.items():
		stats_file.write("\t\t<%s>%d</%s>\n"%(k,v,k))
	stats_file.write("\t</redundantTable>\n")
コード例 #9
0
def print_branch_on_query_stats(roots, stats_file, args):
    data = {}
    tags = []
    cond_list = args['prefix'][:]
    tags = util.collectAllTags(roots, cond_list)
    print tags
    for t in tags:
        cond_list = args['prefix'][:]
        cond_list.append(t)
        r = util.calculateAllActions(roots, cond_list)
        data[t] = sum(r)  #util.getAverage(r)

    stats_file.write("\t<branchOnQueryType>\n")
    for k, v in data.items():
        stats_file.write("\t\t<%s>%f</%s>\n" % (k, v, k))
    stats_file.write("\t</branchOnQueryType>\n")
コード例 #10
0
def print_branch_on_query_stats(roots, stats_file, args):
	data = {}
	tags = []
	cond_list = args['prefix'][:]
	tags = util.collectAllTags(roots, cond_list)
	print tags
	for t in tags:
		cond_list = args['prefix'][:]
		cond_list.append(t)
		r = util.calculateAllActions(roots, cond_list)
		data[t] = sum(r)#util.getAverage(r)

	stats_file.write("\t<branchOnQueryType>\n")
	for k,v in data.items():
		stats_file.write("\t\t<%s>%f</%s>\n"%(k,v,k))
	stats_file.write("\t</branchOnQueryType>\n")
コード例 #11
0
def print_general_stats(roots, stats_file, args):
	data = {}
	data_std = {}
	for g in args['contents']:
		cond_list = args['prefix'][:] #prefix[:]
		cond_list.append(g)
		r = util.calculateAllActions(roots, cond_list)
		data[g] = util.getAverage(r)
		data_std[g] = util.getStd(r)

	stats_file.write("\t<queryGeneral>\n")
	stats_file.write("\t\t<readQuery>%f</readQuery>\n"%(data["readTotal"]))
	#stats_file.write("\t\t<readTotal>%d</readTotal>\n"%(data["readTotal"]*len(roots)))
	stats_file.write("\t\t<writeQuery>%f</writeQuery>\n"%(data["writeTotal"]))
	#stats_file.write("\t\t<writeTotal>%d</writeTotal>\n"%(data["writeTotal"]*len(roots)))
	stats_file.write("\t</queryGeneral>\n")

	stats_file.write("\t<queryInLoop>\n")
	stats_file.write("\t\t<queryInLoop>%f</queryInLoop>\n"%(data["queryInClosure"]))
	stats_file.write("\t\t<queryNotInLoop>%f</queryNotInLoop>\n"%(data["readTotal"]+data["writeTotal"]-data["queryInClosure"]))
	stats_file.write("\t</queryInLoop>\n")
	
	return [data['queryTotal']*len(roots), data['readTotal']*len(roots), data['queryInClosure']*len(roots), data['queryReadInClosure']*len(roots)]