Skip to content

Commit 0b98347

Browse files
committed
fix(backends): escape single quotes on column comments
1 parent 4fa6a2d commit 0b98347

File tree

6 files changed

+35
-10
lines changed

6 files changed

+35
-10
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ on:
1111
branches:
1212
- 'develop'
1313
- 'master'
14+
- 'stable/**'
1415
tags:
1516
- '*'
1617

@@ -21,6 +22,7 @@ on:
2122
branches:
2223
- 'develop'
2324
- 'master'
25+
- 'stable/**'
2426

2527
jobs:
2628
build:

README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ from django.db import models
5757

5858
class Person(models.Model):
5959
first_name = models.CharField(max_length=30)
60-
last_name = models.CharField(max_length=30)
60+
last_name = models.CharField(max_length=30, help_text="It's your last name")
6161

6262
class Meta:
6363
db_table = 'person'
@@ -151,6 +151,10 @@ alter table example.tb_person
151151
check (last_name is not null);
152152
/
153153

154+
comment on column example.tb_person.last_name
155+
is 'It''s your last name';
156+
/
157+
154158
grant select, insert, update, delete
155159
on example.tb_person
156160
to rl_example;
@@ -182,7 +186,8 @@ when (new.id is null)
182186

183187
# Release notes
184188

185-
- `v1.0.0` - 16/04/2018 - First release
186-
- `v1.0.1` - 16/04/2018 - Rename package and fix setup issues
187-
- `v1.0.2` - 17/04/2018 - Fix documentation preview
188-
- `v2.0.0` - 01/03/2021 - Recreate the entire schema editor backend with more flexible features
189+
- `v1.0.0` - Apr 16, 2018 - First release
190+
- `v1.0.1` - Apr 16, 2018 - Rename package and fix setup issues
191+
- `v1.0.2` - Apr 17, 2018 - Fix documentation preview
192+
- `v2.0.0` - Mar 1, 2021 - Recreate the entire schema editor backend with more flexible features
193+
- `v2.0.1` - Mar 22, 2021 - Escape single quotes on column comments

db_adapter/db/backends/base/schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def _create_comment_sql(self, model: Model, field: Field):
221221
return self.sql_comment_on_column % dict(
222222
table=self.quote_name(model._meta.db_table),
223223
column=self.quote_name(field.column),
224-
comment=field.help_text,
224+
comment=field.help_text.replace("'", "''"),
225225
)
226226

227227
def _create_index_sql(self, model, fields, suffix='_idx', **kwargs):

setup.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
[metadata]
22
name=django-db-adapter
3-
version=2.0.0.post0
3+
version=2.0.1
44
url=https://github.com/weynelucas/django-db-adapter/
55
author=Lucas Weyne
66
author_email=weynelucas@gmail.com
77
description=A flexible toolkit for customize how Django creates the databse objects for the application schema
88
long_description=file: README.md
99
long_description_content_type=text/markdown
10-
download_url=https://github.com/weynelucas/django-db-adapter/archive/2.0.0.post0.tar.gz
10+
download_url=https://github.com/weynelucas/django-db-adapter/archive/2.0.1.tar.gz
1111
keywords=django database schema editor oracle django-db-adapter
1212
classifiers=
1313
Development Status :: 5 - Production/Stable

tests/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Meta:
2929

3030
class Person(DBAdapterModel):
3131
first_name = models.CharField(max_length=30)
32-
last_name = models.CharField(max_length=30)
32+
last_name = models.CharField(max_length=30, help_text="It's your last name")
3333

3434
class Meta:
3535
db_table = 'tbl_person'

tests/test_backends/test_base/test_schema.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
test_control_connection,
1111
test_format_connetion,
1212
)
13-
from tests.models import Article, Author, Post, Square, Tag
13+
from tests.models import Article, Author, Person, Post, Square, Tag
1414

1515

1616
def enforce_str_values(data: dict) -> dict:
@@ -214,6 +214,24 @@ def test_column_sql_for_help_text_field(self):
214214
],
215215
)
216216

217+
def test_column_sql_escape_single_quote(self):
218+
editor = TestDatabaseSchemaEditor(test_connection)
219+
220+
model = Person
221+
field = Person._meta.get_field('last_name')
222+
sql, _ = editor.column_sql(model, field)
223+
224+
self.assertEqual(str(sql), 'NVARCHAR2(30)')
225+
226+
column_sql = enforce_str_values(editor.deferred_column_sql)
227+
self.assertEqual(
228+
column_sql['COMMENT'],
229+
[
230+
'COMMENT ON COLUMN tbl_person.last_name '
231+
"IS 'It''s your last name'"
232+
],
233+
)
234+
217235
def test_column_sql_for_auto_field(self):
218236
editor = TestDatabaseSchemaEditor(test_connection)
219237
model = Article

0 commit comments

Comments
 (0)