+
+
ClickHouse performance comparison
+"""
+
+table_anchor = 0
+row_anchor = 0
+
+
+def currentTableAnchor():
+ global table_anchor
+ return f"{table_anchor}"
+
+
+def newTableAnchor():
+ global table_anchor
+ table_anchor += 1
+ return currentTableAnchor()
+
+
+def currentRowAnchor():
+ global row_anchor
+ global table_anchor
+ return f"{table_anchor}.{row_anchor}"
+
+
+def nextRowAnchor():
+ global row_anchor
+ global table_anchor
+ return f"{table_anchor}.{row_anchor + 1}"
+
+
+def advanceRowAnchor():
+ global row_anchor
+ global table_anchor
+ row_anchor += 1
+ return currentRowAnchor()
+
+
+def tr(x, anchor=None):
+ # return '
{x}
'.format(a=a, x=str(x))
+ anchor = anchor if anchor else advanceRowAnchor()
+ return f"
{x}
"
+
+
+def td(value, cell_attributes=""):
+ return "
{value} | ".format(
+ cell_attributes=cell_attributes, value=value
+ )
+
+
+def th(value, cell_attributes=""):
+ return "
{value} | ".format(
+ cell_attributes=cell_attributes, value=value
+ )
+
+
+def tableRow(cell_values, cell_attributes=[], anchor=None):
+ return tr(
+ "".join(
+ [
+ td(v, a)
+ for v, a in itertools.zip_longest(
+ cell_values, cell_attributes, fillvalue=""
+ )
+ if a is not None and v is not None
+ ]
+ ),
+ anchor,
+ )
+
+
+def tableHeader(cell_values, cell_attributes=[]):
+ return tr(
+ "".join(
+ [
+ th(v, a)
+ for v, a in itertools.zip_longest(
+ cell_values, cell_attributes, fillvalue=""
+ )
+ if a is not None and v is not None
+ ]
+ )
+ )
+
+
+def tableStart(title):
+ cls = "-".join(title.lower().split(" ")[:3])
+ global table_anchor
+ table_anchor = cls
+ anchor = currentTableAnchor()
+ help_anchor = "-".join(title.lower().split(" "))
+ return f"""
+
+
+ """
+
+
+def tableEnd():
+ return "
"
+
+
+def tsvRows(n):
+ try:
+ with open(n, encoding="utf-8") as fd:
+ result = []
+ for row in csv.reader(fd, delimiter="\t", quoting=csv.QUOTE_NONE):
+ new_row = []
+ for e in row:
+ # The first one .encode('utf-8').decode('unicode-escape') decodes the escape characters from the strings.
+ # The second one (encode('latin1').decode('utf-8')) fixes the changes with unicode vs utf-8 chars, so
+ # 'Чем зÐ�нимаеÑ�ЬÑ�Ñ�' is transformed back into 'Чем зАнимаешЬся'.
+
+ new_row.append(
+ e.encode("utf-8")
+ .decode("unicode-escape")
+ .encode("latin1")
+ .decode("utf-8")
+ )
+ result.append(new_row)
+ return result
+
+ except:
+ report_errors.append(traceback.format_exception_only(*sys.exc_info()[:2])[-1])
+ pass
+ return []
+
+
+def htmlRows(n):
+ rawRows = tsvRows(n)
+ result = ""
+ for row in rawRows:
+ result += tableRow(row)
+ return result
+
+
+def addSimpleTable(caption, columns, rows, pos=None):
+ global tables
+ text = ""
+ if not rows:
+ return
+
+ text += tableStart(caption)
+ text += tableHeader(columns)
+ for row in rows:
+ text += tableRow(row)
+ text += tableEnd()
+ tables.insert(pos if pos else len(tables), text)
+
+
+def add_tested_commits():
+ global report_errors
+ try:
+ addSimpleTable(
+ "Tested Commits",
+ ["Reference", "Patched"],
+ [
+ [
+ "
{}
".format(x)
+ for x in [
+ open("left-commit.txt").read(),
+ open("right-commit.txt").read(),
+ ]
+ ]
+ ],
+ )
+ except:
+ # Don't fail if no commit info -- maybe it's a manual run.
+ report_errors.append(traceback.format_exception_only(*sys.exc_info()[:2])[-1])
+ pass
+
+
+def add_report_errors():
+ global tables
+ global report_errors
+ # Add the errors reported by various steps of comparison script
+ try:
+ report_errors += [l.strip() for l in open("report/errors.log")]
+ except:
+ report_errors.append(traceback.format_exception_only(*sys.exc_info()[:2])[-1])
+ pass
+
+ if not report_errors:
+ return
+
+ text = tableStart("Errors while Building the Report")
+ text += tableHeader(["Error"])
+ for x in report_errors:
+ text += tableRow([x])
+ text += tableEnd()
+ # Insert after Tested Commits
+ tables.insert(1, text)
+ errors_explained.append(
+ [
+ f'
There were some errors while building the report'
+ ]
+ )
+
+
+def add_errors_explained():
+ if not errors_explained:
+ return
+
+ text = '
'
+ text += tableStart("Error Summary")
+ text += tableHeader(["Description"])
+ for row in errors_explained:
+ text += tableRow(row)
+ text += tableEnd()
+
+ global tables
+ tables.insert(1, text)
+
+
+if args.report == "main":
+ print((header_template.format()))
+
+ add_tested_commits()
+
+ def print_status(status, message):
+ print(
+ (
+ """
+
+
+ """.format(
+ status=status, message=message
+ )
+ )
+ )
+
+ if args.no_tests_run:
+ for t in tables:
+ print(t)
+ print(
+ "
No tests to run. Only changed tests were run, but all changed tests are from another batch.
"
+ )
+ print(
+ f"""
+
+ {os.getenv("CHPC_ADD_REPORT_LINKS") or ''}
+
+