Fixed #2161 -- handle trailing newlines in initial SQL data. Includes

regression test. Thanks to russellm.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@3177 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2006-06-20 07:12:45 +00:00
parent a513fcb455
commit 3e97535907
5 changed files with 28 additions and 4 deletions

View File

@ -334,8 +334,9 @@ def get_sql_initial_data_for_model(model):
# Some backends can't execute more than one SQL statement at a time, # Some backends can't execute more than one SQL statement at a time,
# so split into separate statements. # so split into separate statements.
sql_expr = re.compile( sql_expr = re.compile(
r"""( # each statement is... r"""( # each statement ...
(?: # one or more chunks of ... [^\r\n;] # starts with something other than a line ending or ';'
(?: # then has one or more chunks of ...
(?:[^;'"]+) # not the end of a statement or start of a quote (?:[^;'"]+) # not the end of a statement or start of a quote
| (?:'[^']*') # something in single quotes | (?:'[^']*') # something in single quotes
| (?:"[^"]*") # something in double quotes | (?:"[^"]*") # something in double quotes

View File

@ -0,0 +1,13 @@
"""
Regression tests for initial SQL insertion.
"""
from django.db import models
class Simple(models.Model):
name = models.CharField(maxlength = 50)
API_TESTS = ""
# NOTE: The format of the included SQL file for this test suite is important.
# It must end with a trailing newline in order to test the fix for #2161.

View File

@ -0,0 +1,5 @@
INSERT INTO initial_sql_regress_simple (name) VALUES ('John');
INSERT INTO initial_sql_regress_simple (name) VALUES ('Paul');
INSERT INTO initial_sql_regress_simple (name) VALUES ('Ringo');
INSERT INTO initial_sql_regress_simple (name) VALUES ('George');

View File

@ -34,8 +34,13 @@ ALWAYS_INSTALLED_APPS = [
] ]
def get_test_models(): def get_test_models():
return [(MODEL_TESTS_DIR_NAME, f) for f in os.listdir(MODEL_TEST_DIR) if not f.startswith('__init__') and not f.startswith('.')] +\ models = []
[(REGRESSION_TESTS_DIR_NAME, f) for f in os.listdir(REGRESSION_TEST_DIR) if not f.startswith('__init__') and not f.startswith('.')] for loc in MODEL_TESTS_DIR_NAME, REGRESSION_TESTS_DIR_NAME:
for f in os.listdir(loc):
if f.startswith('__init__') or f.startswith('.') or f.startswith('sql'):
continue
models.append((loc, f))
return models
class DjangoDoctestRunner(doctest.DocTestRunner): class DjangoDoctestRunner(doctest.DocTestRunner):
def __init__(self, verbosity_level, *args, **kwargs): def __init__(self, verbosity_level, *args, **kwargs):