mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-17 18:32:35 +00:00
Merge branch '351-fix-year-0-is-out-of-range-error' into 'develop'
Resolve "Fix `year 0 is out of range` error" Closes #351 See merge request bramw/baserow!192
This commit is contained in:
commit
5fa323bedb
4 changed files with 71 additions and 1 deletions
|
@ -330,7 +330,10 @@ class DateFieldType(FieldType):
|
|||
|
||||
return f"""
|
||||
begin
|
||||
p_in = {sql_function}(p_in::text, 'FM{sql_format}');
|
||||
p_in = GREATEST(
|
||||
{sql_function}(p_in::text, 'FM{sql_format}'),
|
||||
'0001-01-01'::date
|
||||
);
|
||||
exception when others then end;
|
||||
"""
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# Generated by Django 2.2.11 on 2021-01-25 14:54
|
||||
|
||||
from django.db import migrations, connections
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
def forward(apps, schema_editor):
|
||||
DateField = apps.get_model('database', 'DateField')
|
||||
|
||||
connection = connections[settings.USER_TABLE_DATABASE]
|
||||
with connection.schema_editor() as tables_schema_editor:
|
||||
for field in DateField.objects.all():
|
||||
table_name = f'database_table_{field.table.id}'
|
||||
field_name = f'field_{field.id}'
|
||||
tables_schema_editor.execute(
|
||||
f"""
|
||||
UPDATE {table_name} SET {field_name} = '0001-01-01'::date
|
||||
WHERE {field_name} < '0001-01-01'::date
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('database', '0027_gridviewfieldoptions_order'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward, migrations.RunPython.noop),
|
||||
]
|
|
@ -361,3 +361,38 @@ def test_converting_date_field_value(data_fixture):
|
|||
assert getattr(rows[0], f'field_{date_field_iso_24.id}') == '2021-07-22 12:45'
|
||||
|
||||
assert getattr(rows[2], f'field_{date_field_eu_12.id}') is None
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_negative_date_field_value(data_fixture):
|
||||
user = data_fixture.create_user()
|
||||
table = data_fixture.create_database_table(user=user)
|
||||
date_field = data_fixture.create_text_field(table=table)
|
||||
datetime_field = data_fixture.create_text_field(table=table)
|
||||
|
||||
model = table.get_model()
|
||||
model.objects.create(**{
|
||||
f'field_{date_field.id}': '-0',
|
||||
f'field_{datetime_field.id}': '-0',
|
||||
})
|
||||
model.objects.create(**{
|
||||
f'field_{date_field.id}': '2010-02-03',
|
||||
f'field_{datetime_field.id}': '2010-02-03 12:30',
|
||||
})
|
||||
|
||||
date_field = FieldHandler().update_field(user, date_field, new_type_name='date')
|
||||
datetime_field = FieldHandler().update_field(user, datetime_field,
|
||||
new_type_name='date',
|
||||
date_include_time=True)
|
||||
|
||||
model = table.get_model()
|
||||
results = model.objects.all()
|
||||
|
||||
assert getattr(results[0], f'field_{date_field.id}') == date(1, 1, 1)
|
||||
assert getattr(results[0], f'field_{datetime_field.id}') == (
|
||||
datetime(1, 1, 1, 0, 0, 0, tzinfo=timezone('utc'))
|
||||
)
|
||||
assert getattr(results[1], f'field_{date_field.id}') == date(2010, 2, 3)
|
||||
assert getattr(results[1], f'field_{datetime_field.id}') == (
|
||||
datetime(2010, 2, 3, 12, 30, 0, tzinfo=timezone('utc'))
|
||||
)
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* Made it possible to re-order fields in a grid view.
|
||||
* Show the number of filters and sorts active in the header of a grid view.
|
||||
* The first user to sign-up after installation now gets given staff status.
|
||||
* Prevented the date field value to be negative.
|
||||
|
||||
## Released (2021-03-01)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue