Opened 11 years ago

Closed 20 months ago

#19884 closed Bug (fixed)

Inspectdb on Oracle doesn't produce correct field types

Reported by: Anssi Kääriäinen Owned by: nobody
Component: Database layer (models, ORM) Version: 1.9
Severity: Normal Keywords:
Cc: felisiak.mariusz@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Mariusz Felisiak)

The test inspectdb.test_field_types() has multiple errors, at least:

  • CharField lengths not correctly inspected (returns double the length of generated field)
  • FloatField not correctly inspected (returns DecimalField with max_digits=-127)
  • DateTimeField is inspected as TimeField (cannot be distinguished)

Getting all these to work correctly will be somewhat hard. So, the suggested short-term fix is to just mark the test as expectedFailure on Oracle. Inspectdb isn't high-priority as the output should be hand-edited in any case.

Change History (14)

comment:1 by Anssi Kääriäinen <akaariai@…>, 11 years ago

In f565c6f9994b2559a5164dc709a926eac7ebd5fe:

Marked a test as expected failure. Refs #19884

comment:2 by Shai Berger <shai@…>, 10 years ago

In ad975c64fcdf3faa67cacd51665c4f95a2c5b060:

Made Oracle introspect boolean fields

Fixed failing test schema.tests.SchemaTests.test_add_field_temp_default_boolean
Refs #19884

comment:3 by Shai Berger, 10 years ago

I just posted PR 2225 which breaks inspectdb.test_field_types() in two: a test_number_field_types() which passes (the PR includes a fix to the FloatField issue), and test_field_types() which does all the rest and is still marked expectedFailure; most of the fields tested there are CharFields under Oracle, so fixing makes little sense indeed.

I would have committed this immediately, except that the breaking of the test method includes some not-entirely-trivial factoring-out of code, and I'd like a second eye on that.

Last edited 10 years ago by Shai Berger (previous) (diff)

comment:4 by Shai Berger <shai@…>, 10 years ago

In e9d12bae1e59e51738c11c492c620f56f96106bf:

Made Oracle introspect FloatFields correctly

Broke InspectDBTestCase.test_field_types in two:

  • a test_number_field_types, which now passes on Oracle too
  • a test_field_types, for all non-numeric fields, which is still expected to fail

Also made some pep8 fixes in the tests file. Refs #19884

Thanks Tim Graham for review.

comment:5 by Shai Berger, 10 years ago

Description: modified (diff)

comment:6 by Shai Berger <shai@…>, 10 years ago

In 0573120cb406066041b0235a3912dc38bc9f10ef:

[1.6.x] Made Oracle introspect boolean fields

Refs #19884

Backport of ad975c64fc from master

comment:7 by Shai Berger <shai@…>, 10 years ago

In 5f42c0219550b62e62db6e0f3834671a994e3cd8:

[1.6.x] Made Oracle introspect FloatFields correctly

Broke InspectDBTestCase.test_field_types in two:

  • a test_number_field_types, which now passes on Oracle too
  • a test_field_types, for all non-numeric fields, which is still expected to fail

Also made some pep8 fixes in the tests file. Refs #19884

Thanks Tim Graham for review.

Backport of e9d12ba from master

comment:8 by Shai Berger, 10 years ago

#17202 was closed as a duplicate of this bug.

comment:9 by JorisBenschop, 8 years ago

Version: 1.41.9

comment:10 by JorisBenschop, 8 years ago

Because this problem is still present in 1.9 I updated the version number

comment:11 by Tim Graham <timograham@…>, 7 years ago

In 3e43d24:

Refs #19884 -- Added CharField max_length introspection on Oracle.

comment:12 by Mariusz Felisiak, 7 years ago

Cc: felisiak.mariusz@… added
Description: modified (diff)

comment:13 by Tim Graham <timograham@…>, 7 years ago

In cc0bb07:

Refs #19884 -- Removed DatabaseFeatures.can_introspect_max_length.

Unused (always True) after 3e43d24ad36d45cace57e6a7efd34638577ae744.

comment:14 by Mariusz Felisiak, 20 months ago

Description: modified (diff)
Resolution: fixed
Status: newclosed

Both DateTimeField and TimeField use exactly the same datatype i.e. TIMESTAMP, they cannot be distinguished in introspection. IMO, we can treat this ticket as fixed.

Note: See TracTickets for help on using tickets.
Back to Top