You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.2 KiB

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/4/9 8:27
# @Author : old tom
# @File : metadata_dao.py
# @Project : futool-tiny-datahub
# @Desc :
from common.fudb.connectors.connector_factory import ConnFactory
from common.fudb.dbapis.fu_dao import BaseDao
class MetadataDao(BaseDao):
def __init__(self, connector: ConnFactory):
super().__init__(connector)
def query_all_tables(self, sql):
"""
查询所有表
:param sql:
:return:
"""
return self.query_all(sql)
def query_all_views(self, sql):
"""
查询所有视图
:param sql:
:return:
"""
return self.query_all(sql)
def query_all_procedure(self, sql):
"""
查询所有存储过程
:param sql:
:return:
"""
return self.query_all(sql)
def query_procedure_detail(self, sql):
"""
查询视图及存储过程明细
:param sql:
:return:
"""
rt = self.query_all(sql)
# 合并为完整SQL
return 'create or replace ' + (''.join([str(x[0]).replace('\n', '\r') for x in rt]))
def query_view_detail(self, view_name, sql):
"""
查询视图创建语句
:param view_name:
:param sql:
:return:
"""
return f'CREATE OR REPLACE VIEW {view_name} AS ' + '\r\n' + self.query_one(sql)[0]
def query_table_field(self, sql):
"""
查询表字段
:param sql:
:return:
"""
return self.query_all(sql)
def save_table_fields(self, data):
"""
保存表字段
:param data:
:return:
"""
return self.batch_insert(
sql_tpl='insert into metadata_object_field(meta_id,field_name,field_ch_name,order_num,field_type,nullable,default_value,field_length) values %s',
data=data, batch_size=1500)
def save_metadata_obj(self, objs):
"""
保存元数据
:param objs:
:return:
"""
return self.batch_insert(
sql_tpl='insert into metadata_object(meta_id,source_id,meta_type,meta_name,meta_ch_name) values %s',
data=objs, batch_size=1500)
def save_metadata_create(self, details):
return self.batch_insert(
sql_tpl='insert into metadata_object_create(meta_id,create_sql) values %s',
data=details, batch_size=1500)
def query_metadata_by_type(self, obj_type):
return self.query_all(
f"select * from metadata_object where meta_type='{obj_type}'") if obj_type else self.query_all(
'select * from metadata_object')
def query_metadata_name_by_type(self, obj_type):
"""
查询元数据名称
:param obj_type:
:return:
"""
sql = f"select meta_name from metadata_object where meta_type='{obj_type}'" if obj_type else 'select meta_name from metadata_object'
return [x[0] for x in self.query_all(sql)]
def query_metadata_id(self, obj_type):
return self.query_all(
f"select meta_id,meta_name from metadata_object where meta_type='{obj_type}'") if obj_type else self.query_all(
'select meta_id,meta_name from metadata_object')