Skip to content

Commit

Permalink
CBQE-0: RQG :: Remove false alarms fromr final result
Browse files Browse the repository at this point in the history
Change-Id: Ibc516f4733250378ee494a0f74462523ec15888b
Reviewed-on: http://review.couchbase.org/50238
Reviewed-by: Parag Agarwal <agarwal.parag@gmail.com>
Tested-by: Parag Agarwal <agarwal.parag@gmail.com>
  • Loading branch information
Parag Agarwal authored and knotking committed Apr 25, 2015
1 parent 6c80704 commit ee58cb9
Show file tree
Hide file tree
Showing 4 changed files with 1,059 additions and 568 deletions.
Binary file modified b/resources/rqg/simple_table_db/data_dump/simple_table_db.zip
Binary file not shown.
1,559 changes: 1,000 additions & 559 deletions b/resources/rqg/simple_table_db/query_examples/query_1000.example.txt

Large diffs are not rendered by default.

57 changes: 49 additions & 8 deletions lib/couchbase_helper/tuq_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,40 @@ def _verify_results_rqg(self, n1ql_result = [], sql_result = [], hints = ["a1"])
actual_result = sorted(actual_result)
expected_result = sorted(sql_result)
if len(actual_result) != len(expected_result):
raise Exception("Results are incorrect.Actual num %s. Expected num: %s.\n" % (
len(actual_result), len(expected_result)))
extra_msg = self._get_failure_message(expected_result, actual_result)
raise Exception("Results are incorrect.Actual num %s. Expected num: %s.:: %s \n" % (
len(actual_result), len(expected_result), extra_msg))
msg = "The number of rows match but the results mismatch, please check"
if actual_result != expected_result:
raise Exception(msg)

def _get_failure_message(self, expected_result, actual_result):
if expected_result == None:
expected_result = []
if actual_result == None:
actual_result = []
len_expected_result = len(expected_result)
len_actual_result = len(actual_result)
len_expected_result = min(5,len_expected_result)
len_actual_result = min(5,len_actual_result)
extra_msg = "mismatch in results :: expected :: {0}, actual :: {1} ".format(expected_result[0:len_expected_result], actual_result[0:len_actual_result])
return extra_msg

def _analyze_for_special_case_using_func(self, expected_result, actual_result):
if expected_result == None:
expected_result = []
if actual_result == None:
actual_result = []
if len(expected_result) == 1:
value = expected_result[0].values()[0]
if value == None:
expected_result = []
if len(actual_result) == 1:
value = actual_result[0].values()[0]
if value == None:
actual_result = []
return expected_result, actual_result

def _is_function_in_result(self, result):
if result == "FUN":
return True
Expand All @@ -131,18 +159,22 @@ def _verify_results_rqg_for_function(self, n1ql_result = [], sql_result = [], hi
actual_count = -1
expected_count = -1
actual_result = n1ql_result
msg = "the number of results do not match :: expected = {0}, actual = {1}".format(len(n1ql_result), len(sql_result))
if len(sql_result) != len(n1ql_result):
raise Exception(msg)
sql_result, actual_result= self._analyze_for_special_case_using_func(sql_result, actual_result)
if len(sql_result) != len(actual_result):
msg = "the number of results do not match :: expected = {0}, actual = {1}".format(len(n1ql_result), len(sql_result))
extra_msg = self._get_failure_message(sql_result, actual_result)
raise Exception(msg+"\n"+extra_msg)
n1ql_result = self._gen_dict_n1ql_func_result(n1ql_result)
n1ql_result = sorted(n1ql_result)
sql_result = self._gen_dict(sql_result)
sql_result = sorted(sql_result)
if len(sql_result) == 0 and len(actual_result) == 0:
return
if sql_result != n1ql_result:
max = 5
max = 2
if len(sql_result) < 5:
max = len(sql_result)
msg = "mismatch in results :: expected [0:{0}]:: {1}, actual 0:{0}]:: {2} ".format(max, sql_result[0:max], n1ql_result[0:max])
msg = "mismatch in results :: expected [0:{0}]:: {1}, actual [0:{0}]:: {2} ".format(max, sql_result[0:max], n1ql_result[0:max])
raise Exception(msg)

def _convert_to_number(self, val):
Expand Down Expand Up @@ -399,7 +431,16 @@ def _gen_dict(self, result):

def _gen_dict_n1ql_func_result(self, result):
result_set = [val[key] for val in result for key in val.keys()]
return result_set
new_result_set = []
if len(result_set) > 0:
for value in result_set:
if isinstance(value, float):
new_result_set.append(round(value, 0))
else:
new_result_set.append(value)
else:
new_result_set = result_set
return new_result_set

def _check_sample(self, result, expected_in_key = None):
if expected_in_key == "FUN":
Expand Down
11 changes: 10 additions & 1 deletion lib/mysql_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,21 @@ def _gen_json_from_results(self, columns, rows):
def _convert_to_mysql_json_compatible_val(self, value, type):
if not hasattr(self, 'table_key_type_map'):
return value
if isinstance(value, float):
return int(round(value, 0))
if "datetime" in str(type):
return str(value)
if ("float" in str(type)) or ("double" in str(type)):
if value == None:
return None
else:
return int(round(value, 0))
if "decimal" in str(type):
if value == None:
return 0
return None
else:
if isinstance(value, float):
return int(round(value, 0))
return int(value)
return value

Expand Down

0 comments on commit ee58cb9

Please sign in to comment.