from MyUtils.MetadataWebUtil import MetadataWebUtil


class ZillionUtil():
    def __init__(self, url):
        self.metadata = MetadataWebUtil(url)

    ##列出所有数据库
    def database_list(self):
        param = {
            "QueryType": "database_list"
        }
        databases = self.metadata.get_hbase(param)
        return databases["Content"]

        # TODO  其他zillion语句

    ##列出所有数据库下的表(不包含分表)
    def table_list_strict(self,table):
        param = {
            	"QueryType":"table_list_strict",
	            "Database":table
        }
        databases = self.metadata.get_hbase(param)
        return databases["Content"]


    ##列出所有数据库
    # def query(self, database, table, Criteria):
    #     param = {
    #         "QueryType": "select",
    #         "Database": database,
    #         "Datatable": table,
    #         "Criteria": Criteria
    #     }
    #     print(param)
    #     databases = self.metadata.get_hbase(param)
    #     return databases["Content"]

    def select(self, database, table, Criteria):
        param = {
            "QueryType": "select",
            "Database": database,
            "Datatable": table,
            "Criteria": Criteria
        }
        databases = self.metadata.get_hbase(param)
        return databases["Content"]

    def table_key(self, database, table):
        param = {
            "QueryType": "table_detail",
            "Database": database,
            "Datatable": table
        }
        databases = self.metadata.get_hbase(param)
        key = databases["Content"]["Key"]
        return key



    def select_count(self, database, table, Criteria):
        param = {
            "QueryType": "select_count",
            "Database": database,
            "Datatable": table,
            "Criteria": Criteria
        }
        databases = self.metadata.get_hbase(param)
        return databases["Count"]

    def query_data(self, sql):
        databases = self.metadata.get_hbase(sql)
        return databases["Content"]

    def insert(self,database,table,InsertObject):
        param = {
            "QueryType": "batch_insert",
            "Database": database,
            "Datatable": table,
            "InsertObjects": InsertObject
        }
        databases = self.metadata.get_hbase(param)
        return databases["Count"]

    def remove(self,database,table,key):
        param = {
            "QueryType": "remove",
            "Database": database,
            "Datatable": table,
            "Key": key
        }
        databases = self.metadata.get_hbase(param)
        return databases["Count"]

    def put(self,database,table,InsertObject):
        param = {
            "QueryType": "batch_put",
            "Database": database,
            "Datatable": table,
            "InsertObjects": InsertObject
        }
        databases = self.metadata.get_hbase(param)
        return databases["Result"]