feat(datasource):add oceanbase support (#1622)

Co-authored-by: csunny <cfqsunny@163.com>
Co-authored-by: aries_ckt <916701291@qq.com>
This commit is contained in:
明天
2024-06-13 15:13:50 +08:00
committed by GitHub
parent 58d08780d6
commit 0541d1494c
37 changed files with 117 additions and 36 deletions

View File

@@ -49,6 +49,7 @@ class ConnectorManager(BaseComponent):
from dbgpt.datasource.rdbms.conn_hive import HiveConnector # noqa: F401
from dbgpt.datasource.rdbms.conn_mssql import MSSQLConnector # noqa: F401
from dbgpt.datasource.rdbms.conn_mysql import MySQLConnector # noqa: F401
from dbgpt.datasource.rdbms.conn_oceanbase import OceanBaseConnect # noqa: F401
from dbgpt.datasource.rdbms.conn_postgresql import ( # noqa: F401
PostgreSQLConnector,
)
@@ -57,6 +58,9 @@ class ConnectorManager(BaseComponent):
StarRocksConnector,
)
from dbgpt.datasource.rdbms.conn_vertica import VerticaConnector # noqa: F401
from dbgpt.datasource.rdbms.dialect.oceanbase.ob_dialect import ( # noqa: F401
OBDialect,
)
from .connect_config_db import ConnectConfigEntity # noqa: F401

View File

@@ -0,0 +1,37 @@
"""Ocean base connect."""
import logging
from dbgpt.datasource.rdbms.base import RDBMSConnector
logger = logging.getLogger(__name__)
class OceanBaseConnect(RDBMSConnector):
"""Connect Oceanbase Database fetch MetaData.
Args:
Usage:
"""
db_type: str = "oceanbase"
db_dialect: str = "mysql"
driver: str = "mysql+ob"
default_db = ["information_schema", "performance_schema", "sys", "mysql"]
def get_users(self):
"""Get_users."""
return []
def get_grants(self):
"""Get_grants."""
return []
def get_collation(self):
"""Get collation."""
return "UTF-8"
def get_charset(self):
"""Get_charset."""
return "UTF-8"

View File

@@ -0,0 +1 @@
"""Oceanbase connect Module."""

View File

@@ -0,0 +1,26 @@
"""OB Dialect support."""
from sqlalchemy.dialects import registry
from sqlalchemy.dialects.mysql import pymysql
class OBDialect(pymysql.MySQLDialect_pymysql):
"""OBDialect expend."""
def initialize(self, connection):
"""Ob dialect initialize."""
super(OBDialect, self).initialize(connection)
self._server_version_info = (5, 7, 19)
self.server_version_info = (5, 7, 19)
def _server_version_info(self, connection):
"""Ob set fixed version ending compatibility issue."""
return (5, 7, 19)
def get_isolation_level(self, dbapi_connection):
"""Ob set fixed version ending compatibility issue."""
self.server_version_info = (5, 7, 19)
return super(OBDialect, self).get_isolation_level(dbapi_connection)
registry.register("mysql.ob", __name__, "OBDialect")