Skip to content

Commit

Permalink
Merge pull request #701 from jan-song/master
Browse files Browse the repository at this point in the history
支持Oracle数据修改备份SQL功能,支持explain,with查询语法,对Oracle表结构和schema显示进行排序,支持sql tuning advisor,Oracle支持执行计划查看,支持Oracle update/insert/delete/create table/create index的语法SQL审核
  • Loading branch information
hhyo authored Apr 25, 2020
2 parents 9ac69c9 + 81883b6 commit df304be
Show file tree
Hide file tree
Showing 7 changed files with 2,514 additions and 1,811 deletions.
282 changes: 141 additions & 141 deletions sql/engines/models.py
Original file line number Diff line number Diff line change
@@ -1,141 +1,141 @@
# -*- 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, **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.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:
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}
# -*- 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, **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.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:
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}
Loading

0 comments on commit df304be

Please sign in to comment.