# -*- coding: UTF-8 -*-
"""engine 结果集定义"""
import json
class SqlItem:
def __init__(
self,
id=0,
statement="",
stmt_type="SQL",
object_owner="",
object_type="",
object_name="",
):
"""
:param id: SQL序号,从0开始
:param statement: SQL Statement
:param stmt_type: SQL类型(SQL, PLSQL), 默认为SQL
:param object_owner: PLSQL Object Owner
:param object_type: PLSQL Object Type
:param object_name: PLSQL Object Name
"""
self.id = id
self.statement = statement
self.stmt_type = stmt_type
self.object_owner = object_owner
self.object_type = object_type
self.object_name = object_name
class ReviewResult:
"""审核的单条结果"""
def __init__(self, inception_result=None, **kwargs):
"""
inception的结果列 = ['ID', 'stage', 'errlevel', 'stagestatus', 'errormessage', 'SQL', 'Affected_rows',
'sequence','backup_dbname', 'execute_time', 'sqlsha1']
go_inception的结果列 = ['order_id', 'stage', 'error_level', 'stage_status', 'error_message', 'sql',
'affected_rows', 'sequence', 'backup_dbname', 'execute_time', 'sqlsha1', 'backup_time']
"""
if inception_result:
self.id = inception_result[0] or 0
self.stage = inception_result[1] or ""
self.errlevel = inception_result[2] or 0
self.stagestatus = inception_result[3] or ""
self.errormessage = inception_result[4] or ""
self.sql = inception_result[5] or ""
self.affected_rows = inception_result[6] or 0
self.sequence = inception_result[7] or ""
self.backup_dbname = inception_result[8] or ""
self.execute_time = inception_result[9] or ""
self.sqlsha1 = inception_result[10] or ""
self.backup_time = (
inception_result[11] if len(inception_result) >= 12 else ""
)
self.actual_affected_rows = ""
else:
self.id = kwargs.get("id", 0)
self.stage = kwargs.get("stage", "")
self.errlevel = kwargs.get("errlevel", 0)
self.stagestatus = kwargs.get("stagestatus", "")
self.errormessage = kwargs.get("errormessage", "")
self.sql = kwargs.get("sql", "")
self.affected_rows = kwargs.get("affected_rows", 0)
self.sequence = kwargs.get("sequence", "")
self.backup_dbname = kwargs.get("backup_dbname", "")
self.execute_time = kwargs.get("execute_time", "")
self.sqlsha1 = kwargs.get("sqlsha1", "")
self.backup_time = kwargs.get("backup_time", "")
self.actual_affected_rows = kwargs.get("actual_affected_rows", "")
# 自定义属性
for key, value in kwargs.items():
if not hasattr(self, key):
setattr(self, key, value)
class ReviewSet:
"""review和执行后的结果集, rows中是review result, 有设定好的字段"""
def __init__(
self,
full_sql="",
rows=None,
status=None,
affected_rows=0,
column_list=None,
**kwargs
):
self.full_sql = full_sql
self.is_execute = False
self.checked = None
self.warning = None
self.error = None
self.warning_count = 0 # 检测结果警告数
self.error_count = 0 # 检测结果错误数
self.is_critical = False
self.syntax_type = 0 # 语法类型
# rows 为普通列表
self.rows = rows or []
self.column_list = column_list
self.status = status
self.affected_rows = affected_rows
def json(self):
tmp_list = []
for r in self.rows:
if isinstance(r, dict):
tmp_list += [r]
else:
tmp_list += [r.__dict__]
return json.dumps(tmp_list)
def to_dict(self):
tmp_list = []
for r in self.rows:
tmp_list += [r.__dict__]
return tmp_list
class ResultSet:
"""查询的结果集, rows 内只有值, column_list 中的是key"""
def __init__(
self,
full_sql="",
rows=None,
status=None,
affected_rows=0,
column_list=None,
column_type=None,
**kwargs
):
self.full_sql = full_sql
self.is_execute = False
self.checked = None
self.is_masked = False
self.query_time = ""
self.mask_rule_hit = False
self.mask_time = ""
self.warning = None
self.error = None
self.is_critical = False
# rows 为普通列表
self.rows = rows or []
self.column_list = column_list if column_list else []
self.column_type = column_type if column_type else []
self.status = status
self.affected_rows = affected_rows
def json(self):
tmp_list = []
for r in self.rows:
tmp_list += [dict(zip(self.column_list, r))]
return json.dumps(tmp_list)
def to_dict(self):
tmp_list = []
for r in self.rows:
if isinstance(r, dict):
tmp_list += [r]
else:
tmp_list += [dict(zip(self.column_list, r))]
return tmp_list
def to_sep_dict(self):
return {"column_list": self.column_list, "rows": self.rows}