MonetDB / sqlalchemy-monetdb

A SQLAlchemy dialect for MonetDB
MIT License
41 stars 17 forks source link

Fix: failed to compile SQL for float/double columns #57

Open semigodking opened 2 years ago

semigodking commented 2 years ago

Visitor's name must contain only characters for Python symbols.

MitchellWeg commented 2 years ago

Do you have an example of what this PR fixes? The test-suite does not have any more passing/failing tests.

semigodking commented 2 years ago

Yes. Here is code to reproduce.

(base) root@c5a28fb7edc6:/home/nia# python
Python 3.8.12 (default, Oct 12 2021, 13:49:34)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlalchemy as sqla
>>> url = "monetdb://monetdb:password@monetdb:50000/db"
>>> engine = sqla.create_engine(url)
>>> engine.execute("create table test1 (col1 double)");
<sqlalchemy.engine.cursor.LegacyCursorResult object at 0x7fd2c2897370>
>>> meta = sqla.MetaData(bind=engine)
>>> table = sqla.Table("test1", meta, autoload=True)
>>> table.columns
<sqlalchemy.sql.base.ImmutableColumnCollection object at 0x7fd2c2620900>
>>> table.columns["col1"]
Column('col1', DOUBLE_PRECISION(), table=<test1>)
>>> table.columns["col1"].type
DOUBLE_PRECISION()
>>> table.columns["col1"].type.compile(dialect=engine.dialect)
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/site-packages/sqlalchemy/sql/visitors.py", line 77, in _compiler_dispatch
    meth = getter(visitor)
AttributeError: 'MonetTypeCompiler' object has no attribute 'visit_DOUBLE PRECISION'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/conda/lib/python3.8/site-packages/sqlalchemy/sql/type_api.py", line 692, in compile
    return dialect.type_compiler.process(self)
  File "/opt/conda/lib/python3.8/site-packages/sqlalchemy/sql/compiler.py", line 518, in process
    return type_._compiler_dispatch(self, **kw)
  File "/opt/conda/lib/python3.8/site-packages/sqlalchemy/sql/visitors.py", line 79, in _compiler_dispatch
    return visitor.visit_unsupported_compilation(self, err, **kw)
  File "/opt/conda/lib/python3.8/site-packages/sqlalchemy/sql/compiler.py", line 521, in visit_unsupported_compilation
    util.raise_(
  File "/opt/conda/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
sqlalchemy.exc.UnsupportedCompilationError: Compiler <sqlalchemy_monetdb.compiler.MonetTypeCompiler object at 0x7fd2c267d2e0> can't render element of type DOUBLE_PRECISION (Background on this error at: https://sqlalche.me/e/14/l7de)
gijzelaerr commented 2 years ago

can you add your example as a unittest to the PR? thanks!