Skip to content

Commit ebc02a5

Browse files
authored
Parameterize database query in SQL Server schema collection (#23381)
* Parameterize database query in SQL Server schema collection * Lint * Changelog
1 parent b08ccb4 commit ebc02a5

4 files changed

Lines changed: 10 additions & 5 deletions

File tree

sqlserver/changelog.d/23381.fixed

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Parameterize database query in SQL Server schema collection

sqlserver/datadog_checks/sqlserver/queries.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from datadog_checks.sqlserver.database_metrics.xe_session_metrics import XE_RING_BUFFER
66

7+
# `{}` is replaced with comma-separated ODBC `?` placeholders (values bound via parameters).
78
DB_QUERY = """
89
SELECT
910
db.database_id AS id, db.name AS name, db.collation_name AS collation, dp.name AS owner

sqlserver/datadog_checks/sqlserver/schemas.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ def _get_databases(self):
100100
database_names = self._check.get_databases()
101101
with self._check.connection.open_managed_default_connection(KEY_PREFIX):
102102
with self._check.connection.get_managed_cursor(KEY_PREFIX) as cursor:
103-
db_names_formatted = ",".join(["'{}'".format(t) for t in database_names])
104-
return execute_query(DB_QUERY.format(db_names_formatted), cursor, convert_results_to_str=True)
103+
if not database_names:
104+
return []
105+
placeholders = ",".join(["?"] * len(database_names))
106+
query = DB_QUERY.format(placeholders)
107+
return execute_query(query, cursor, convert_results_to_str=True, parameters=tuple(database_names))
105108

106109
@contextlib.contextmanager
107110
def _get_cursor(self, database_name):

sqlserver/datadog_checks/sqlserver/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,9 @@ def is_azure_sql_database(engine_edition):
211211
return engine_edition == ENGINE_EDITION_SQL_DATABASE
212212

213213

214-
def execute_query(query, cursor, convert_results_to_str=False, parameter=None) -> Dict[str, str]:
215-
if parameter is not None:
216-
cursor.execute(query, (parameter,))
214+
def execute_query(query, cursor, convert_results_to_str=False, parameters=None) -> Dict[str, str]:
215+
if parameters is not None:
216+
cursor.execute(query, parameters)
217217
else:
218218
cursor.execute(query)
219219
columns = [str(column[0]).lower() for column in cursor.description]

0 commit comments

Comments
 (0)