PR #1199 #1921
GitHub Actions / Test Results - 3.10
failed
Jan 10, 2025 in 0s
1 fail, 36 skipped, 62 pass in 17s
Annotations
Check warning on line 0 in duckdb_engine.tests.test_datatypes
github-actions / Test Results - 3.10
test_double_nested_types (duckdb_engine.tests.test_datatypes) failed
results.xml [took 0s]
Raw output
sqlalchemy.exc.ProgrammingError: (duckdb.duckdb.ParserException) Parser Error: syntax error at or near "outer"
[SQL:
CREATE TABLE test_struct (
id INTEGER NOT NULL,
outer STRUCT("inner" STRUCT("val" INTEGER)),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/20/f405)
self = <sqlalchemy.engine.base.Connection object at 0x7fc495b8f910>
dialect = <duckdb_engine.Dialect object at 0x7fc497f06710>
context = <sqlalchemy.dialects.postgresql.psycopg2.PGExecutionContext_psycopg2 object at 0x7fc495b8e1a0>
statement = <sqlalchemy.dialects.postgresql.base.PGDDLCompiler object at 0x7fc495b8f640>
parameters = [()]
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92m_exec_single_context#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
dialect: Dialect,#x1B[90m#x1B[39;49;00m
context: ExecutionContext,#x1B[90m#x1B[39;49;00m
statement: Union[#x1B[96mstr#x1B[39;49;00m, Compiled],#x1B[90m#x1B[39;49;00m
parameters: Optional[_AnyMultiExecuteParams],#x1B[90m#x1B[39;49;00m
) -> CursorResult[Any]:#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m#x1B[33m"""continue the _execute_context() method for a single DBAPI#x1B[39;49;00m
#x1B[33m cursor.execute() or cursor.executemany() call.#x1B[39;49;00m
#x1B[33m#x1B[39;49;00m
#x1B[33m """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m dialect.bind_typing #x1B[95mis#x1B[39;49;00m BindTyping.SETINPUTSIZES:#x1B[90m#x1B[39;49;00m
generic_setinputsizes = context._prepare_set_input_sizes()#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m generic_setinputsizes:#x1B[90m#x1B[39;49;00m
#x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
dialect.do_set_input_sizes(#x1B[90m#x1B[39;49;00m
context.cursor, generic_setinputsizes, context#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94mexcept#x1B[39;49;00m #x1B[96mBaseException#x1B[39;49;00m #x1B[94mas#x1B[39;49;00m e:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m._handle_dbapi_exception(#x1B[90m#x1B[39;49;00m
e, #x1B[96mstr#x1B[39;49;00m(statement), parameters, #x1B[94mNone#x1B[39;49;00m, context#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
cursor, str_statement, parameters = (#x1B[90m#x1B[39;49;00m
context.cursor,#x1B[90m#x1B[39;49;00m
context.statement,#x1B[90m#x1B[39;49;00m
context.parameters,#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
effective_parameters: Optional[_AnyExecuteParams]#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m context.executemany:#x1B[90m#x1B[39;49;00m
effective_parameters = parameters[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
#x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
effective_parameters = parameters#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._has_events #x1B[95mor#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.engine._has_events:#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m fn #x1B[95min#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dispatch.before_cursor_execute:#x1B[90m#x1B[39;49;00m
str_statement, effective_parameters = fn(#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
cursor,#x1B[90m#x1B[39;49;00m
str_statement,#x1B[90m#x1B[39;49;00m
effective_parameters,#x1B[90m#x1B[39;49;00m
context,#x1B[90m#x1B[39;49;00m
context.executemany,#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._echo:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m._log_info(str_statement)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
stats = context._get_cache_stats()#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.engine.hide_parameters:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m._log_info(#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33m[#x1B[39;49;00m#x1B[33m%s#x1B[39;49;00m#x1B[33m] #x1B[39;49;00m#x1B[33m%r#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
stats,#x1B[90m#x1B[39;49;00m
sql_util._repr_params(#x1B[90m#x1B[39;49;00m
effective_parameters,#x1B[90m#x1B[39;49;00m
batches=#x1B[94m10#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
ismulti=context.executemany,#x1B[90m#x1B[39;49;00m
),#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m._log_info(#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33m[#x1B[39;49;00m#x1B[33m%s#x1B[39;49;00m#x1B[33m] [SQL parameters hidden due to hide_parameters=True]#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
stats,#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
evt_handled: #x1B[96mbool#x1B[39;49;00m = #x1B[94mFalse#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m context.execute_style #x1B[95mis#x1B[39;49;00m ExecuteStyle.EXECUTEMANY:#x1B[90m#x1B[39;49;00m
effective_parameters = cast(#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33m_CoreMultiExecuteParams#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, effective_parameters#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dialect._has_events:#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m fn #x1B[95min#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dialect.dispatch.do_executemany:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m fn(#x1B[90m#x1B[39;49;00m
cursor,#x1B[90m#x1B[39;49;00m
str_statement,#x1B[90m#x1B[39;49;00m
effective_parameters,#x1B[90m#x1B[39;49;00m
context,#x1B[90m#x1B[39;49;00m
):#x1B[90m#x1B[39;49;00m
evt_handled = #x1B[94mTrue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m evt_handled:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.dialect.do_executemany(#x1B[90m#x1B[39;49;00m
cursor,#x1B[90m#x1B[39;49;00m
str_statement,#x1B[90m#x1B[39;49;00m
effective_parameters,#x1B[90m#x1B[39;49;00m
context,#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94melif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m effective_parameters #x1B[95mand#x1B[39;49;00m context.no_parameters:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dialect._has_events:#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m fn #x1B[95min#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dialect.dispatch.do_execute_no_params:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m fn(cursor, str_statement, context):#x1B[90m#x1B[39;49;00m
evt_handled = #x1B[94mTrue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m evt_handled:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.dialect.do_execute_no_params(#x1B[90m#x1B[39;49;00m
cursor, str_statement, context#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
effective_parameters = cast(#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33m_CoreSingleExecuteParams#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, effective_parameters#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dialect._has_events:#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m fn #x1B[95min#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.dialect.dispatch.do_execute:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m fn(#x1B[90m#x1B[39;49;00m
cursor,#x1B[90m#x1B[39;49;00m
str_statement,#x1B[90m#x1B[39;49;00m
effective_parameters,#x1B[90m#x1B[39;49;00m
context,#x1B[90m#x1B[39;49;00m
):#x1B[90m#x1B[39;49;00m
evt_handled = #x1B[94mTrue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m evt_handled:#x1B[90m#x1B[39;49;00m
> #x1B[96mself#x1B[39;49;00m.dialect.do_execute(#x1B[90m#x1B[39;49;00m
cursor, str_statement, effective_parameters, context#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:1967:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/default.py#x1B[0m:941: in do_execute
#x1B[0mcursor.execute(statement, parameters)#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <duckdb_engine.CursorWrapper object at 0x7fc495b8fcd0>
statement = '\nCREATE TABLE test_struct (\n\tid INTEGER NOT NULL, \n\touter STRUCT("inner" STRUCT("val" INTEGER)), \n\tPRIMARY KEY (id)\n)\n\n'
parameters = (), context = None
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92mexecute#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
statement: #x1B[96mstr#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
parameters: Optional[Tuple] = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
context: Optional[Any] = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m statement.lower() == #x1B[33m"#x1B[39;49;00m#x1B[33mcommit#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[90m# this is largely for ipython-sql#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.__c.commit()#x1B[90m#x1B[39;49;00m
#x1B[94melif#x1B[39;49;00m statement.lower() #x1B[95min#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mregister#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mregister(?, ?)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mregister($1, $2)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
):#x1B[90m#x1B[39;49;00m
#x1B[94massert#x1B[39;49;00m parameters #x1B[95mand#x1B[39;49;00m #x1B[96mlen#x1B[39;49;00m(parameters) == #x1B[94m2#x1B[39;49;00m, parameters#x1B[90m#x1B[39;49;00m
view_name, df = parameters#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.__c.register(view_name, df)#x1B[90m#x1B[39;49;00m
#x1B[94melif#x1B[39;49;00m parameters #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.__c.execute(statement)#x1B[90m#x1B[39;49;00m
#x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
> #x1B[96mself#x1B[39;49;00m.__c.execute(statement, parameters)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE duckdb.duckdb.ParserException: Parser Error: syntax error at or near "outer"#x1B[0m
#x1B[1m#x1B[31mduckdb_engine/__init__.py#x1B[0m:150: ParserException
#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m
engine = Engine(duckdb:///:memory:)
session = <sqlalchemy.orm.session.Session object at 0x7fc494090700>
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92mtest_double_nested_types#x1B[39;49;00m(engine: Engine, session: Session) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m#x1B[33m"""Test for https://github.com/Mause/duckdb_engine/issues/1138"""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
importorskip(#x1B[33m"#x1B[39;49;00m#x1B[33mduckdb#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m0.5.0#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m) #x1B[90m# nested types require at least duckdb 0.5.0#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
base = declarative_base()#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mclass#x1B[39;49;00m #x1B[04m#x1B[92mEntry#x1B[39;49;00m(base):#x1B[90m#x1B[39;49;00m
__tablename__ = #x1B[33m"#x1B[39;49;00m#x1B[33mtest_struct#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[96mid#x1B[39;49;00m = Column(Integer, primary_key=#x1B[94mTrue#x1B[39;49;00m, default=#x1B[94m0#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
outer = Column(Struct({#x1B[33m"#x1B[39;49;00m#x1B[33minner#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: Struct({#x1B[33m"#x1B[39;49;00m#x1B[33mval#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: Integer})}))#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
> base.metadata.create_all(bind=engine)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mduckdb_engine/tests/test_datatypes.py#x1B[0m:225:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/schema.py#x1B[0m:5868: in create_all
#x1B[0mbind._run_ddl_visitor(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:3253: in _run_ddl_visitor
#x1B[0mconn._run_ddl_visitor(visitorcallable, element, **kwargs)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:2459: in _run_ddl_visitor
#x1B[0mvisitorcallable(#x1B[96mself#x1B[39;49;00m.dialect, #x1B[96mself#x1B[39;49;00m, **kwargs).traverse_single(element)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/visitors.py#x1B[0m:664: in traverse_single
#x1B[0m#x1B[94mreturn#x1B[39;49;00m meth(obj, **kw)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/ddl.py#x1B[0m:918: in visit_metadata
#x1B[0m#x1B[96mself#x1B[39;49;00m.traverse_single(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/visitors.py#x1B[0m:664: in traverse_single
#x1B[0m#x1B[94mreturn#x1B[39;49;00m meth(obj, **kw)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/ddl.py#x1B[0m:956: in visit_table
#x1B[0m)._invoke_with(#x1B[96mself#x1B[39;49;00m.connection)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/ddl.py#x1B[0m:314: in _invoke_with
#x1B[0m#x1B[94mreturn#x1B[39;49;00m bind.execute(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:1418: in execute
#x1B[0m#x1B[94mreturn#x1B[39;49;00m meth(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/sql/ddl.py#x1B[0m:180: in _execute_on_connection
#x1B[0m#x1B[94mreturn#x1B[39;49;00m connection._execute_ddl(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:1529: in _execute_ddl
#x1B[0mret = #x1B[96mself#x1B[39;49;00m._execute_context(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:1846: in _execute_context
#x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._exec_single_context(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:1986: in _exec_single_context
#x1B[0m#x1B[96mself#x1B[39;49;00m._handle_dbapi_exception(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:2355: in _handle_dbapi_exception
#x1B[0m#x1B[94mraise#x1B[39;49;00m sqlalchemy_exception.with_traceback(exc_info[#x1B[94m2#x1B[39;49;00m]) #x1B[94mfrom#x1B[39;49;00m #x1B[04m#x1B[96me#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/base.py#x1B[0m:1967: in _exec_single_context
#x1B[0m#x1B[96mself#x1B[39;49;00m.dialect.do_execute(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/tests-3-10-sqlalchemy-2-0-35-duckdb-1-0-0/lib/python3.10/site-packages/sqlalchemy/engine/default.py#x1B[0m:941: in do_execute
#x1B[0mcursor.execute(statement, parameters)#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <duckdb_engine.CursorWrapper object at 0x7fc495b8fcd0>
statement = '\nCREATE TABLE test_struct (\n\tid INTEGER NOT NULL, \n\touter STRUCT("inner" STRUCT("val" INTEGER)), \n\tPRIMARY KEY (id)\n)\n\n'
parameters = (), context = None
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92mexecute#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
statement: #x1B[96mstr#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
parameters: Optional[Tuple] = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
context: Optional[Any] = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m statement.lower() == #x1B[33m"#x1B[39;49;00m#x1B[33mcommit#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[90m# this is largely for ipython-sql#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.__c.commit()#x1B[90m#x1B[39;49;00m
#x1B[94melif#x1B[39;49;00m statement.lower() #x1B[95min#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mregister#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mregister(?, ?)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mregister($1, $2)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
):#x1B[90m#x1B[39;49;00m
#x1B[94massert#x1B[39;49;00m parameters #x1B[95mand#x1B[39;49;00m #x1B[96mlen#x1B[39;49;00m(parameters) == #x1B[94m2#x1B[39;49;00m, parameters#x1B[90m#x1B[39;49;00m
view_name, df = parameters#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.__c.register(view_name, df)#x1B[90m#x1B[39;49;00m
#x1B[94melif#x1B[39;49;00m parameters #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[96mself#x1B[39;49;00m.__c.execute(statement)#x1B[90m#x1B[39;49;00m
#x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
> #x1B[96mself#x1B[39;49;00m.__c.execute(statement, parameters)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE sqlalchemy.exc.ProgrammingError: (duckdb.duckdb.ParserException) Parser Error: syntax error at or near "outer"#x1B[0m
#x1B[1m#x1B[31mE [SQL: #x1B[0m
#x1B[1m#x1B[31mE CREATE TABLE test_struct (#x1B[0m
#x1B[1m#x1B[31mE id INTEGER NOT NULL, #x1B[0m
#x1B[1m#x1B[31mE outer STRUCT("inner" STRUCT("val" INTEGER)), #x1B[0m
#x1B[1m#x1B[31mE PRIMARY KEY (id)#x1B[0m
#x1B[1m#x1B[31mE )#x1B[0m
#x1B[1m#x1B[31mE #x1B[0m
#x1B[1m#x1B[31mE ]#x1B[0m
#x1B[1m#x1B[31mE (Background on this error at: https://sqlalche.me/e/20/f405)#x1B[0m
#x1B[1m#x1B[31mduckdb_engine/__init__.py#x1B[0m:150: ProgrammingError
Loading