Coverage for mindsdb / integrations / handlers / cloud_sql_handler / cloud_sql_handler.py: 0%
37 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1from typing import Optional
3from mindsdb_sql_parser.ast.base import ASTNode
5from mindsdb.integrations.libs.base import DatabaseHandler
6from mindsdb.integrations.libs.response import (
7 HandlerStatusResponse as StatusResponse
8)
10from mindsdb.integrations.handlers.mysql_handler.mysql_handler import MySQLHandler
11from mindsdb.integrations.handlers.postgres_handler.postgres_handler import PostgresHandler
12from mindsdb.integrations.handlers.mssql_handler.mssql_handler import SqlServerHandler
15class CloudSQLHandler(DatabaseHandler):
16 """
17 This handler handles connection and execution of the Google Cloud SQL statements.
18 """
19 name = 'cloud_sql'
21 def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
22 """
23 Initialize the handler.
24 Args:
25 name (str): name of particular handler instance
26 connection_data (dict): parameters for connecting to the database
27 **kwargs: arbitrary keyword arguments.
28 """
29 super().__init__(name)
31 self.dialect = 'cloud_sql'
32 self.connection_data = connection_data
33 self.kwargs = kwargs
35 if self.connection_data['db_engine'] == 'mysql':
36 self.db = MySQLHandler(
37 name=name + 'mysql',
38 connection_data={key: self.connection_data[key] for key in self.connection_data if key != 'db_engine'}
39 )
40 elif self.connection_data['db_engine'] == 'postgresql':
41 self.db = PostgresHandler(
42 name=name + 'postgresql',
43 connection_data={key: self.connection_data[key] for key in self.connection_data if key != 'db_engine'}
44 )
45 elif self.connection_data['db_engine'] == 'mssql':
46 self.db = SqlServerHandler(
47 name=name + 'mssql',
48 connection_data={key: self.connection_data[key] for key in self.connection_data if key != 'db_engine'}
49 )
50 else:
51 raise Exception("The database engine should be either MySQL, PostgreSQL or SQL Server!")
53 def __del__(self):
54 self.db.__del__()
56 def connect(self) -> StatusResponse:
57 """
58 Set up the connection required by the handler.
59 Returns:
60 HandlerStatusResponse
61 """
63 return self.db.connect()
65 def disconnect(self):
66 """
67 Close any existing connections.
68 """
70 return self.db.disconnect()
72 def check_connection(self) -> StatusResponse:
73 """
74 Check connection to the handler.
75 Returns:
76 HandlerStatusResponse
77 """
79 return self.db.check_connection()
81 def native_query(self, query: str) -> StatusResponse:
82 """
83 Receive raw query and act upon it somehow.
84 Args:
85 query (str): query in native format
86 Returns:
87 HandlerResponse
88 """
90 return self.db.native_query(query)
92 def query(self, query: ASTNode) -> StatusResponse:
93 """
94 Receive query as AST (abstract syntax tree) and act upon it somehow.
95 Args:
96 query (ASTNode): sql query represented as AST. May be any kind
97 of query: SELECT, INTSERT, DELETE, etc
98 Returns:
99 HandlerResponse
100 """
102 return self.db.query(query)
104 def get_tables(self) -> StatusResponse:
105 """
106 Return list of entities that will be accessible as tables.
107 Returns:
108 HandlerResponse
109 """
111 return self.db.get_tables()
113 def get_columns(self, table_name: str) -> StatusResponse:
114 """
115 Returns a list of entity columns.
116 Args:
117 table_name (str): name of one of tables returned by self.get_tables()
118 Returns:
119 HandlerResponse
120 """
122 return self.db.get_columns(table_name)