Files
openGauss-OM/script/domain_utils/sql_handler/sql_result.py
coolany eae422baf3 适配CM组件
Signed-off-by: coolany <kyosang@163.com>

support cgroup

追加合入
2022-03-05 18:51:52 +08:00

88 lines
2.8 KiB
Python

# -*- coding:utf-8 -*-
#############################################################################
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# ----------------------------------------------------------------------------
# Description : sql_result.py is a utility to store search result from database
#############################################################################
import os
import re
import sys
from ctypes import cdll, c_void_p, c_int, c_char_p, string_at
sys.path.append(sys.path[0] + "/../../")
from base_utils.os.env_util import EnvUtil
class SqlResult(object):
"""
Class for storing search result from database
"""
def __init__(self, result):
"""
Constructor
"""
self.resCount = 0
self.resSet = []
self.result = result
def parseResult(self):
"""
function : get resCount and resSet from result
input:NA
output:NA
"""
libpath = os.path.join(EnvUtil.getEnv("GAUSSHOME"), "lib")
sys.path.append(libpath)
libc = cdll.LoadLibrary("libpq.so.5.5")
libc.PQntuples.argtypes = [c_void_p]
libc.PQntuples.restype = c_int
libc.PQnfields.argtypes = [c_void_p]
libc.PQnfields.restype = c_int
libc.PQgetvalue.restype = c_char_p
ntups = libc.PQntuples(self.result)
nfields = libc.PQnfields(self.result)
libc.PQgetvalue.argtypes = [c_void_p, c_int, c_int]
self.resCount = ntups
for i_index in range(ntups):
tmp_string = []
for j_index in range(nfields):
paramValue = libc.PQgetvalue(self.result, i_index, j_index)
if paramValue is not None:
tmp_string.append(string_at(paramValue))
else:
tmp_string.append("")
self.resSet.append(tmp_string)
@staticmethod
def findErrorInSql(output):
"""
function : Find error in sql
input : String
output : boolean
"""
# init flag
ERROR_MSG_FLAG = "(ERROR|FATAL|PANIC)"
ERROR_PATTERN = "^%s:.*" % ERROR_MSG_FLAG
pattern = re.compile(ERROR_PATTERN)
for line in output.split("\n"):
line = line.strip()
result = pattern.match(line)
if result is not None:
return True
return False