dont do recursion overflow when FunctionElement type is None

Issue #3485 resolved
Mike Bayer repo owner created an issue
from sqlalchemy.sql.functions import FunctionElement
from sqlalchemy import Integer
from sqlalchemy.ext.compiler import compiles

class MissingType(FunctionElement):
    name = 'mt'
    type = None

class NotMissingType(FunctionElement):
    name = 'nmt'
    type = Integer


@compiles(NotMissingType)
@compiles(MissingType)
def _fn(element, compiler, **kw):
    return element.name

print NotMissingType()
print MissingType()

the second one recursion overflows

#!

  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)
  File "/Users/classic/dev/sqlalchemy/lib/sqlalchemy/sql/elements.py", line 722, in __getattr__
    return getattr(self.comparator, key)

this goes back to at least 0.9 but 1.0.7 is fine

Comments (1)

  1. Mike Bayer reporter
    • Fixed potential issue where a custom subclass of :class:.FunctionElement or other column element that incorrectly states 'None' or any other invalid object as the .type attribute will report this exception instead of recursion overflow. fixes #3485

    → <<cset 41aead96cdfd>>

  2. Log in to comment