﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
27977	inspectdb errors after upgrade to cx_Oracle 5.3	JorisBenschop	nobody	"Hi

After upgrading Oracle from 11.2 to 12.1 (which required updating cx_Oracle to 5.3 for some reason), {{manage.py inspectdb}} returns errors
{{{
# Unable to inspect table 'test_table'
# The error was: unorderable types: NoneType() > int()
}}}

My original install was 1.9, but upgrading to Django 1.10 gave the same error. Oddly, the error in 1.9 came with a complete stack trace, while the one in 1.10 only have the above error. Here's the stack from 1.9
{{{
from django.db import models
DEBUG (0.004) QUERY = ""SELECT TABLE_NAME, 't' FROM USER_TABLES UNION ALL SELECT VIEW_NAME, 'v' FROM USER_VIEWS"" - PARAMS = (); args=None


class AuthGroup(models.Model):
DEBUG (14.986) QUERY = '\n    SELECT ta.column_name, tb.table_name, tb.column_name\n    FROM   user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb,\n           user_tab_cols ta, user_tab_cols tb\n    WHERE  user_constraints.table_name = :arg0 AND\n           ta.table_name = user_constraints.table_name AND\n           ta.column_name = ca.column_name AND\n           ca.table_name = ta.table_name AND\n           user_constraints.constraint_name = ca.constraint_name AND\n           user_constraints.r_constraint_name = cb.constraint_name AND\n           cb.table_name = tb.table_name AND\n           cb.column_name = tb.column_name AND\n           ca.position = cb.position' - PARAMS = ('AUTH_GROUP',); args=['AUTH_GROUP']
DEBUG (8.362) QUERY = ""\n    SELECT LOWER(uic1.column_name) AS column_name,\n           CASE user_constraints.constraint_type\n               WHEN 'P' THEN 1 ELSE 0\n           END AS is_primary_key,\n           CASE user_indexes.uniqueness\n               WHEN 'UNIQUE' THEN 1 ELSE 0\n           END AS is_unique\n    FROM   user_constraints, user_indexes, user_ind_columns uic1\n    WHERE  user_constraints.constraint_type (+) = 'P'\n      AND  user_constraints.index_name (+) = uic1.index_name\n      AND  user_indexes.uniqueness (+) = 'UNIQUE'\n      AND  user_indexes.index_name (+) = uic1.index_name\n      AND  uic1.table_name = UPPER(:arg0)\n      AND  uic1.column_position = 1\n      AND  NOT EXISTS (\n              SELECT 1\n              FROM   user_ind_columns uic2\n              WHERE  uic2.index_name = uic1.index_name\n                AND  uic2.column_position = 2\n           )\n        "" - PARAMS = ('auth_group',); args=['auth_group']
Traceback (most recent call last):
  File ""./manage.py"", line 16, in <module>
    execute_from_command_line(sys.argv)
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/core/management/__init__.py"", line 350, in execute_from_command_line
    utility.execute()
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/core/management/__init__.py"", line 342, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/core/management/base.py"", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/core/management/base.py"", line 399, in execute
    output = self.handle(*args, **options)
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/core/management/commands/inspectdb.py"", line 25, in handle
    for line in self.handle_inspection(options):
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/core/management/commands/inspectdb.py"", line 66, in handle_inspection
    indexes = connection.introspection.get_indexes(cursor, table_name)
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/db/backends/oracle/introspection.py"", line 144, in get_indexes
    for row in cursor.fetchall():
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/db/utils.py"", line 102, in inner
    return func(*args, **kwargs)
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/db/backends/oracle/base.py"", line 519, in fetchall
    return tuple(_rowfactory(r, self.cursor) for r in self.cursor.fetchall())
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/db/backends/oracle/base.py"", line 519, in <genexpr>
    return tuple(_rowfactory(r, self.cursor) for r in self.cursor.fetchall())
  File ""/tools/general/app/anaconda-python-3.4/lib/python3.4/site-packages/django/db/backends/oracle/base.py"", line 580, in _rowfactory
    elif precision > 0:
TypeError: unorderable types: NoneType() > int()

}}}
The default database only contains tables that django itself has made and that were not touched by any user directly."	Bug	new	Database layer (models, ORM)	1.10	Normal				Unreviewed	0	0	0	0	0	0
