Skip to content

Commit 68fc4d8

Browse files
committed
Add debug logging throughout library
Added comprehensive debug logging to help users troubleshoot query generation issues. Logs capture: - Parameter style selection (set_style, render) - Interpolation processing (expression, format_spec, value type) - Literal validation steps - Unsafe value usage - Final rendered SQL and parameters Users can enable debug logging with: logging.basicConfig(level=logging.DEBUG)
1 parent af99a37 commit 68fc4d8

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

tsql/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import re
22
import string
33
import datetime
4+
import logging
45
from typing import NamedTuple, Tuple, Any, List, Dict, Iterable, Union, TYPE_CHECKING
56
from string.templatelib import Template, Interpolation
67

78
from tsql.styles import ParamStyle, QMARK
89

10+
logger = logging.getLogger(__name__)
11+
912
if TYPE_CHECKING:
1013
from tsql.query_builder import QueryBuilder
1114

1215
default_style = QMARK
1316

1417
def set_style(style: type[ParamStyle]):
1518
global default_style
19+
logger.debug("Setting default parameter style to: %s", style.__name__)
1620
default_style = style
1721

1822

@@ -50,6 +54,7 @@ def __init__(self, template_string: Template):
5054
def render(self, style:ParamStyle = None) -> RenderedQuery:
5155
if style is None:
5256
style = default_style
57+
logger.debug("Rendering query with style: %s", style.__name__)
5358
result = ''
5459

5560
style_instance = style()
@@ -61,6 +66,8 @@ def render(self, style:ParamStyle = None) -> RenderedQuery:
6166
else:
6267
result += part
6368

69+
logger.debug("Rendered SQL: %s", result)
70+
logger.debug("Parameters (%d): %s", len(style_instance.params), style_instance.params)
6471
return RenderedQuery(result, style_instance.params)
6572

6673

@@ -114,11 +121,17 @@ def _sqlize(cls, val: Interpolation|Template|Any) -> list[str|Parameter]:
114121
if val.conversion:
115122
value = formatter.convert_field(value, val.conversion)
116123

124+
logger.debug("Processing interpolation: expression=%r, format_spec=%r, value_type=%s",
125+
val.expression, val.format_spec, type(value).__name__)
126+
117127
match val.format_spec, value:
118128
case 'literal', str():
129+
logger.debug("Validating literal: %r", value)
119130
cls._check_literal(value)
131+
logger.debug("Literal validated, inlining: %r", value)
120132
return [value]
121133
case 'unsafe', str():
134+
logger.debug("Using unsafe inline value: %r", value)
122135
return [value]
123136
case 'as_values', dict():
124137
return as_values(value)._sql_parts

0 commit comments

Comments
 (0)