Skip to content

Commit 73776c5

Browse files
authored
Fix SQLCommenter comment addition before end of SQL statement delimiter (#112)
1 parent e790cbf commit 73776c5

2 files changed

Lines changed: 21 additions & 16 deletions

File tree

python/sqlcommenter-python/google/cloud/sqlcommenter/psycopg2/extension.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ def execute(self, sql, args=None):
8080
if with_opentelemetry:
8181
data.update(get_opentelemetry_values())
8282

83-
sql += generate_sql_comment(**data)
83+
if len(data) != 0:
84+
sql = sql.rstrip()
85+
if sql[-1] == ';':
86+
sql = sql[:-1] + generate_sql_comment(**data) + ';'
87+
else:
88+
sql = sql + generate_sql_comment(**data)
8489

8590
return psycopg2.extensions.cursor.execute(self, sql, args)
8691

python/sqlcommenter-python/tests/psycopg2/tests.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,47 +45,47 @@ def test_no_args(self):
4545

4646
def test_db_driver(self):
4747
self.assertSQL(
48-
"SELECT 1; /*db_driver='psycopg2%%3A{}'*/".format(url_quote(psycopg2.__version__)),
48+
"SELECT 1 /*db_driver='psycopg2%%3A{}'*/;".format(url_quote(psycopg2.__version__)),
4949
with_db_driver=True,
5050
)
5151

5252
def test_dbapi_threadsafety(self):
5353
self.assertSQL(
54-
"SELECT 1; /*dbapi_threadsafety={}*/".format(psycopg2.threadsafety),
54+
"SELECT 1 /*dbapi_threadsafety={}*/;".format(psycopg2.threadsafety),
5555
with_dbapi_threadsafety=True,
5656
)
5757

5858
def test_driver_paramstyle(self):
5959
self.assertSQL(
60-
"SELECT 1; /*driver_paramstyle='{}'*/".format(psycopg2.paramstyle),
60+
"SELECT 1 /*driver_paramstyle='{}'*/;".format(psycopg2.paramstyle),
6161
with_driver_paramstyle=True,
6262
)
6363

6464
def test_dbapi_level(self):
6565
self.assertSQL(
66-
"SELECT 1; /*dbapi_level='{}'*/".format(url_quote(psycopg2.apilevel)),
66+
"SELECT 1 /*dbapi_level='{}'*/;".format(url_quote(psycopg2.apilevel)),
6767
with_dbapi_level=True,
6868
)
6969

7070
def test_libpq_version(self):
7171
self.assertSQL(
72-
"SELECT 1; /*libpq_version={}*/".format(url_quote(psycopg2.__libpq_version__)),
72+
"SELECT 1 /*libpq_version={}*/;".format(url_quote(psycopg2.__libpq_version__)),
7373
with_libpq_version=True,
7474
)
7575

7676
def test_opencensus(self):
7777
with mock_opencensus_tracer():
7878
self.assertSQL(
79-
"SELECT 1; /*traceparent='00-trace%%20id-span%%20id-00',"
80-
"tracestate='congo%%3Dt61rcWkgMzE%%2Crojo%%3D00f067aa0ba902b7'*/",
79+
"SELECT 1 /*traceparent='00-trace%%20id-span%%20id-00',"
80+
"tracestate='congo%%3Dt61rcWkgMzE%%2Crojo%%3D00f067aa0ba902b7'*/;",
8181
with_opencensus=True,
8282
)
8383

8484
def test_opentelemetry(self):
8585
with mock_opentelemetry_context():
8686
self.assertSQL(
87-
"SELECT 1; /*traceparent='00-000000000000000000000000deadbeef-000000000000beef-00',"
88-
"tracestate='some_key%%3Dsome_value'*/",
87+
"SELECT 1 /*traceparent='00-000000000000000000000000deadbeef-000000000000beef-00',"
88+
"tracestate='some_key%%3Dsome_value'*/;",
8989
with_opentelemetry=True,
9090
)
9191

@@ -94,8 +94,8 @@ def test_both_opentelemetry_and_opencensus_warn(self):
9494
"google.cloud.sqlcommenter.psycopg2.extension.logger"
9595
) as logger_mock, mock_opencensus_tracer(), mock_opentelemetry_context():
9696
self.assertSQL(
97-
"SELECT 1; /*traceparent='00-000000000000000000000000deadbeef-000000000000beef-00',"
98-
"tracestate='some_key%%3Dsome_value'*/",
97+
"SELECT 1 /*traceparent='00-000000000000000000000000deadbeef-000000000000beef-00',"
98+
"tracestate='some_key%%3Dsome_value'*/;",
9999
with_opentelemetry=True,
100100
with_opencensus=True,
101101
)
@@ -112,26 +112,26 @@ class FlaskTests(Psycopg2TestCase):
112112
@mock.patch('google.cloud.sqlcommenter.psycopg2.extension.get_flask_info', return_value=flask_info)
113113
def test_all_data(self, get_info):
114114
self.assertSQL(
115-
"SELECT 1; /*controller='c',framework='flask',route='/'*/",
115+
"SELECT 1 /*controller='c',framework='flask',route='/'*/;",
116116
)
117117

118118
@mock.patch('google.cloud.sqlcommenter.psycopg2.extension.get_flask_info', return_value=flask_info)
119119
def test_framework_disabled(self, get_info):
120120
self.assertSQL(
121-
"SELECT 1; /*controller='c',route='/'*/",
121+
"SELECT 1 /*controller='c',route='/'*/;",
122122
with_framework=False,
123123
)
124124

125125
@mock.patch('google.cloud.sqlcommenter.psycopg2.extension.get_flask_info', return_value=flask_info)
126126
def test_controller_disabled(self, get_info):
127127
self.assertSQL(
128-
"SELECT 1; /*framework='flask',route='/'*/",
128+
"SELECT 1 /*framework='flask',route='/'*/;",
129129
with_controller=False,
130130
)
131131

132132
@mock.patch('google.cloud.sqlcommenter.psycopg2.extension.get_flask_info', return_value=flask_info)
133133
def test_route_disabled(self, get_info):
134134
self.assertSQL(
135-
"SELECT 1; /*controller='c',framework='flask'*/",
135+
"SELECT 1 /*controller='c',framework='flask'*/;",
136136
with_route=False,
137137
)

0 commit comments

Comments
 (0)