Skip to content
This repository was archived by the owner on Apr 11, 2024. It is now read-only.

No method in multimethod 'date' for dispatch value: [:duckdb :day] #7

Closed
igitur opened this issue Dec 19, 2022 · 5 comments
Closed

Comments

@igitur
Copy link

igitur commented Dec 19, 2022

image

Using v0.6.1 of the driver and connecting successfully to a DuckDB file. I can see the tables and browse around a bit, but it seems any query that uses a date in the query generates this error:

2022-12-19 15:15:42,020 ERROR middleware.catch-exceptions :: Error processing query: No method in multimethod 'date' for dispatch value: [:duckdb :day]
{:database_id 2,
 :started_at #t "2022-12-19T15:15:41.690399700+02:00[Africa/Harare]",
 :via
 [{:status :failed,
   :class clojure.lang.ExceptionInfo,
   :error "Error compiling :field clause: No method in multimethod 'date' for dispatch value: [:duckdb :day]",
   :stacktrace
   ["--> driver.sql.query_processor$fn__47451.invokeStatic(query_processor.clj:479)"
    "driver.sql.query_processor$fn__47451.invoke(query_processor.clj:448)"
    "driver.sql.query_processor$as.invokeStatic(query_processor.clj:706)"
    "driver.sql.query_processor$as.doInvoke(query_processor.clj:692)"
    "driver.sql.query_processor$fn__47871$fn__47873.invoke(query_processor.clj:763)"
    "driver.sql.query_processor$fn__47871.invokeStatic(query_processor.clj:762)"
    "driver.sql.query_processor$fn__47871.invoke(query_processor.clj:757)"
    "driver.sql.query_processor$apply_top_level_clauses$fn__48136.invoke(query_processor.clj:1028)"
    "driver.sql.query_processor$apply_top_level_clauses.invokeStatic(query_processor.clj:1026)"
    "driver.sql.query_processor$apply_top_level_clauses.invoke(query_processor.clj:1022)"
    "driver.sql.query_processor$apply_clauses.invokeStatic(query_processor.clj:1056)"
    "driver.sql.query_processor$apply_clauses.invoke(query_processor.clj:1046)"
    "driver.sql.query_processor$mbql__GT_honeysql.invokeStatic(query_processor.clj:1075)"
    "driver.sql.query_processor$mbql__GT_honeysql.invoke(query_processor.clj:1070)"
    "driver.sql.query_processor$mbql__GT_native.invokeStatic(query_processor.clj:1084)"
    "driver.sql.query_processor$mbql__GT_native.invoke(query_processor.clj:1080)"
    "driver.sql$fn__85150.invokeStatic(sql.clj:40)"
    "driver.sql$fn__85150.invoke(sql.clj:38)"
    "query_processor.middleware.mbql_to_native$query__GT_native_form.invokeStatic(mbql_to_native.clj:13)"
    "query_processor.middleware.mbql_to_native$query__GT_native_form.invoke(mbql_to_native.clj:8)"
    "query_processor.middleware.mbql_to_native$mbql__GT_native$fn__52474.invoke(mbql_to_native.clj:20)"
    "query_processor$fn__55005$combined_post_process__55010$combined_post_process_STAR___55011.invoke(query_processor.clj:212)"
    "query_processor$fn__55005$combined_pre_process__55006$combined_pre_process_STAR___55007.invoke(query_processor.clj:209)"
    "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__53450$fn__53455.invoke(resolve_database_and_driver.clj:35)"
    "driver$do_with_driver.invokeStatic(driver.clj:76)"
    "driver$do_with_driver.invoke(driver.clj:72)"
    "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__53450.invoke(resolve_database_and_driver.clj:34)"
    "query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__49450.invoke(fetch_source_query.clj:314)"
    "query_processor.middleware.store$initialize_store$fn__49640$fn__49641.invoke(store.clj:11)"
    "query_processor.store$do_with_store.invokeStatic(store.clj:45)"
    "query_processor.store$do_with_store.invoke(store.clj:39)"
    "query_processor.middleware.store$initialize_store$fn__49640.invoke(store.clj:10)"
    "query_processor.middleware.normalize_query$normalize$fn__53722.invoke(normalize_query.clj:22)"
    "query_processor.middleware.constraints$add_default_userland_constraints$fn__50728.invoke(constraints.clj:53)"
    "query_processor.middleware.process_userland_query$process_userland_query$fn__53661.invoke(process_userland_query.clj:145)"
    "query_processor.middleware.catch_exceptions$catch_exceptions$fn__54033.invoke(catch_exceptions.clj:167)"
    "query_processor.reducible$async_qp$qp_STAR___45482$thunk__45484.invoke(reducible.clj:100)"
    "query_processor.reducible$async_qp$qp_STAR___45482.invoke(reducible.clj:106)"
    "query_processor.reducible$async_qp$qp_STAR___45482.invoke(reducible.clj:91)"
    "query_processor.reducible$sync_qp$qp_STAR___45493.doInvoke(reducible.clj:126)"
    "query_processor$process_userland_query.invokeStatic(query_processor.clj:331)"
    "query_processor$process_userland_query.doInvoke(query_processor.clj:327)"
    "query_processor$fn__55052$process_query_and_save_execution_BANG___55061$fn__55064.invoke(query_processor.clj:342)"
    "query_processor$fn__55052$process_query_and_save_execution_BANG___55061.invoke(query_processor.clj:335)"
    "query_processor$fn__55096$process_query_and_save_with_max_results_constraints_BANG___55105$fn__55108.invoke(query_processor.clj:354)"
    "query_processor$fn__55096$process_query_and_save_with_max_results_constraints_BANG___55105.invoke(query_processor.clj:347)"
    "api.dataset$run_query_async$fn__70403.invoke(dataset.clj:69)"
    "query_processor.streaming$streaming_response_STAR_$fn__40578$fn__40579.invoke(streaming.clj:162)"
    "query_processor.streaming$streaming_response_STAR_$fn__40578.invoke(streaming.clj:161)"
    "async.streaming_response$do_f_STAR_.invokeStatic(streaming_response.clj:65)"
    "async.streaming_response$do_f_STAR_.invoke(streaming_response.clj:63)"
    "async.streaming_response$do_f_async$task__20017.invoke(streaming_response.clj:84)"],

I found a similar issue for the Crate driver at metabase/crate-driver#1 , and it seems it required a driver fix.

@igitur
Copy link
Author

igitur commented Dec 19, 2022

Comparing https://github.com/AlexR2D2/metabase_duckdb_driver/blob/main/src/metabase/driver/duckdb.clj to https://github.com/metabase/crate-driver/blob/master/src/metabase/driver/crate.clj , it seems there are still many methods/conversions/whatever missing in the DuckDB driver. The date-specific parts start at https://github.com/metabase/crate-driver/blob/master/src/metabase/driver/crate.clj#L142 .

I'd love to submit a PR, but I have no experience with Clojure and wouldn't even know where to begin to debug this. If you don't have the capacity, I can try, but it will take a while.

@igitur
Copy link
Author

igitur commented Dec 19, 2022

Maybe the Sqlite driver is a better base to work from, since the syntax is so similar to DuckDB.

https://github.com/metabase/metabase/blob/master/modules/drivers/sqlite/src/metabase/driver/sqlite.clj

@AlexR2D2
Copy link
Owner

AlexR2D2 commented Dec 20, 2022

Please, check the new version of driver. Added the date processing functions as you proposed. Thanks for issue researching.

@igitur
Copy link
Author

igitur commented Dec 29, 2022

Sorry, currently on holiday. Will test and give feedback mid January.

@igitur
Copy link
Author

igitur commented Jan 25, 2023

Thanks, this is much better. Appreciate the effort. I think there are a few more issues, but I will investigate more that it's a driver problem and if so, will log new issues.

@igitur igitur closed this as completed Jan 25, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants