[Sqlalchemy-tickets] Issue #4229: PostgreSQL DATERANGE(): comparison with None does not generate ex
Brought to you by:
zzzeek
From: Lele G. <iss...@bi...> - 2018-04-03 12:12:36
|
New issue 4229: PostgreSQL DATERANGE(): comparison with None does not generate expected "IS NOT NULL" https://bitbucket.org/zzzeek/sqlalchemy/issues/4229/postgresql-daterange-comparison-with-none Lele Gaifax: The following script: ``` #!python import sqlalchemy as sa import sqlalchemy.orm as orm import sqlalchemy.types as types import sqlalchemy.dialects.postgresql as sapg md = sa.MetaData() testtable = sa.Table( 'testtable', md, sa.Column('id', types.Integer(), primary_key=True, nullable=False), sa.Column('name', types.Unicode(192), nullable=False), sa.Column('visibility', sapg.DATERANGE()) ) class Base: def __init__(self, **kwargs): for k in kwargs: setattr(self, k, kwargs[k]) class TestTable(Base): pass orm.mapper(TestTable, testtable) e = sa.create_engine('postgresql://localhost/test', echo=True) md.create_all(e) s = orm.Session(e) o1 = TestTable(id=1, name='foo') s.add(o1) s.commit() q = s.query(TestTable).filter(TestTable.name != None) print(str(q)) q = s.query(TestTable).filter(TestTable.name == None) print(str(q)) q = s.query(TestTable).filter(TestTable.visibility != None) print(str(q)) q = s.query(TestTable).filter(TestTable.visibility == None) print(str(q)) ``` prints: ``` SELECT testtable.id AS testtable_id, testtable.name AS testtable_name, testtable.visibility AS testtable_visibility FROM testtable WHERE testtable.name IS NOT NULL SELECT testtable.id AS testtable_id, testtable.name AS testtable_name, testtable.visibility AS testtable_visibility FROM testtable WHERE testtable.name IS NULL SELECT testtable.id AS testtable_id, testtable.name AS testtable_name, testtable.visibility AS testtable_visibility FROM testtable WHERE testtable.visibility <> %(visibility_1)s SELECT testtable.id AS testtable_id, testtable.name AS testtable_name, testtable.visibility AS testtable_visibility FROM testtable WHERE testtable.visibility IS NULL ``` Am I missing something or is this unexpected? |