New Presto driver unable to read DECIMAL columns

Hey guys,

I have Metabase set up to connect to a Presto data source. I get an error every time I try to access a table containing DECIMAL columns:

java.lang.IllegalArgumentException: ParameterKind is [TYPE] but expected [LONG]

I'm using the new Presto driver with Metabase v0.43.4, Presto v348, and Datomic Presto Server v0.9.96.

Metabase works fine with the same data source if I use the Presto Deprecated Driver. Is that a bug in the new Presto driver? Should I create an issue o Metabase's repository?

Here is the full stack trace.

2022-07-21 22:02:11,711 WARN sync.util :: Error fingerprinting Table 42 'my_schema.my_table'
clojure.lang.ExceptionInfo: Error executing query: Error executing query {:sql "-- Metabase\nSELECT \"my_schema\".\"my_table\".\"cost\" AS \"cost\" FROM \"my_schema\".\"my_table\" LIMIT 10000", :params nil, :type :invalid-query}
	at metabase.driver.sql_jdbc.execute$execute_reducible_query$fn__54060.invoke(execute.clj:502)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:499)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:486)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:494)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:486)
	at metabase.driver.sql_jdbc$fn__83581.invokeStatic(sql_jdbc.clj:54)
	at metabase.driver.sql_jdbc$fn__83581.invoke(sql_jdbc.clj:52)
	at clojure.lang.MultiFn.invoke(MultiFn.java:244)
	at metabase.query_processor.context$executef.invokeStatic(context.clj:59)
	at metabase.query_processor.context$executef.invoke(context.clj:48)
	at metabase.query_processor.context.default$default_runf.invokeStatic(default.clj:67)
	at metabase.query_processor.context.default$default_runf.invoke(default.clj:65)
	at metabase.query_processor.context$runf.invokeStatic(context.clj:45)
	at metabase.query_processor.context$runf.invoke(context.clj:39)
	at metabase.query_processor.reducible$identity_qp.invokeStatic(reducible.clj:12)
	at metabase.query_processor.reducible$identity_qp.invoke(reducible.clj:9)
	at metabase.query_processor.middleware.cache$maybe_return_cached_results$maybe_return_cached_results_STAR___51447.invoke(cache.clj:220)
	at metabase.query_processor.middleware.permissions$check_query_permissions$fn__47230.invoke(permissions.clj:109)
	at metabase.query_processor.middleware.mbql_to_native$mbql__GT_native$fn__50388.invoke(mbql_to_native.clj:23)
	at metabase.query_processor$fn__52921$combined_post_process__52926$combined_post_process_STAR___52927.invoke(query_processor.clj:207)
	at metabase.query_processor$fn__52921$combined_pre_process__52922$combined_pre_process_STAR___52923.invoke(query_processor.clj:204)
	at metabase.query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__51368$fn__51373.invoke(resolve_database_and_driver.clj:35)
	at metabase.driver$do_with_driver.invokeStatic(driver.clj:75)
	at metabase.driver$do_with_driver.invoke(driver.clj:71)
	at metabase.query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__51368.invoke(resolve_database_and_driver.clj:34)
	at metabase.query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__47473.invoke(fetch_source_query.clj:281)
	at metabase.query_processor.middleware.store$initialize_store$fn__47661$fn__47662.invoke(store.clj:11)
	at metabase.query_processor.store$do_with_store.invokeStatic(store.clj:42)
	at metabase.query_processor.store$do_with_store.invoke(store.clj:38)
	at metabase.query_processor.middleware.store$initialize_store$fn__47661.invoke(store.clj:10)
	at metabase.query_processor.middleware.normalize_query$normalize$fn__51640.invoke(normalize_query.clj:22)
	at metabase.query_processor.reducible$async_qp$qp_STAR___44200$thunk__44202.invoke(reducible.clj:100)
	at metabase.query_processor.reducible$async_qp$qp_STAR___44200.invoke(reducible.clj:106)
	at metabase.query_processor.reducible$async_qp$qp_STAR___44200.invoke(reducible.clj:91)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:667)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.query_processor.reducible$sync_qp$qp_STAR___44211.doInvoke(reducible.clj:126)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.query_processor$process_query.invokeStatic(query_processor.clj:242)
	at metabase.query_processor$process_query.doInvoke(query_processor.clj:236)
	at clojure.lang.RestFn.invoke(RestFn.java:423)
	at clojure.lang.Var.invoke(Var.java:388)
	at metabase.db.metadata_queries$fn__65779$table_rows_sample__65788$fn__65791.invoke(metadata_queries.clj:145)
	at metabase.db.metadata_queries$fn__65779$table_rows_sample__65788.invoke(metadata_queries.clj:132)
	at metabase.sync.analyze.fingerprint$fn__65846$fingerprint_table_BANG___65851$fn__65852.invoke(fingerprint.clj:66)
	at metabase.sync.analyze.fingerprint$fn__65846$fingerprint_table_BANG___65851.invoke(fingerprint.clj:46)
	at metabase.sync.analyze.fingerprint$fn__66022$fingerprint_fields_BANG___66027$fn__66028$fn__66029.invoke(fingerprint.clj:180)
	at metabase.sync.util$do_with_error_handling.invokeStatic(util.clj:158)
	at metabase.sync.util$do_with_error_handling.invoke(util.clj:151)
	at metabase.sync.analyze.fingerprint$fn__66022$fingerprint_fields_BANG___66027$fn__66028.invoke(fingerprint.clj:178)
	at metabase.sync.analyze.fingerprint$fn__66022$fingerprint_fields_BANG___66027.invoke(fingerprint.clj:174)
	at metabase.sync.analyze.fingerprint$fn__66057$fingerprint_fields_for_db_BANG__STAR___66066$fn__66069$fn__66070$fn__66071.invoke(fingerprint.clj:204)
	at clojure.lang.PersistentVector.reduce(PersistentVector.java:343)
	at clojure.core$reduce.invokeStatic(core.clj:6829)
	at clojure.core$reduce.invoke(core.clj:6812)
	at metabase.sync.analyze.fingerprint$fn__66057$fingerprint_fields_for_db_BANG__STAR___66066$fn__66069$fn__66070.invoke(fingerprint.clj:200)
	at metabase.query_processor.store$do_with_store.invokeStatic(store.clj:44)
	at metabase.query_processor.store$do_with_store.invoke(store.clj:38)
	at metabase.sync.analyze.fingerprint$fn__66057$fingerprint_fields_for_db_BANG__STAR___66066$fn__66069.invoke(fingerprint.clj:197)
	at metabase.sync.analyze.fingerprint$fn__66057$fingerprint_fields_for_db_BANG__STAR___66066.invoke(fingerprint.clj:186)
	at metabase.sync.analyze.fingerprint$fn__66057$fingerprint_fields_for_db_BANG__STAR___66066$fn__66067.invoke(fingerprint.clj:191)
	at metabase.sync.analyze.fingerprint$fn__66057$fingerprint_fields_for_db_BANG__STAR___66066.invoke(fingerprint.clj:186)
	at metabase.sync.analyze.fingerprint$fn__66099$fingerprint_fields_for_db_BANG___66104$fn__66105.invoke(fingerprint.clj:218)
	at metabase.sync.analyze.fingerprint$fn__66099$fingerprint_fields_for_db_BANG___66104.invoke(fingerprint.clj:212)
	at metabase.sync.analyze$make_analyze_steps$fn__66412.invoke(analyze.clj:104)
	at clojure.lang.AFn.applyToHelper(AFn.java:154)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.sync.util$fn__41548$run_step_with_metadata__41553$fn__41557$fn__41559.doInvoke(util.clj:388)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invokeStatic(util.clj:100)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invoke(util.clj:94)
	at metabase.sync.util$with_start_and_finish_debug_logging.invokeStatic(util.clj:117)
	at metabase.sync.util$with_start_and_finish_debug_logging.invoke(util.clj:114)
	at metabase.sync.util$fn__41548$run_step_with_metadata__41553$fn__41557.invoke(util.clj:383)
	at metabase.sync.util$fn__41548$run_step_with_metadata__41553.invoke(util.clj:378)
	at metabase.sync.util$fn__41764$run_sync_operation__41769$fn__41770$fn__41778.invoke(util.clj:489)
	at metabase.sync.util$fn__41764$run_sync_operation__41769$fn__41770.invoke(util.clj:487)
	at metabase.sync.util$fn__41764$run_sync_operation__41769.invoke(util.clj:481)
	at metabase.sync.analyze$fn__66424$analyze_db_BANG___66429$fn__66430$fn__66431.invoke(analyze.clj:121)
	at metabase.sync.util$do_with_error_handling.invokeStatic(util.clj:158)
	at metabase.sync.util$do_with_error_handling.invoke(util.clj:151)
	at clojure.core$partial$fn__5859.invoke(core.clj:2634)
	at metabase.driver$fn__32609.invokeStatic(driver.clj:592)
	at metabase.driver$fn__32609.invoke(driver.clj:592)
	at clojure.lang.MultiFn.invoke(MultiFn.java:239)
	at metabase.sync.util$sync_in_context$fn__41457.invoke(util.clj:136)
	at metabase.sync.util$with_db_logging_disabled$fn__41454.invoke(util.clj:127)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invokeStatic(util.clj:100)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invoke(util.clj:94)
	at metabase.sync.util$with_start_and_finish_logging$fn__41443.invoke(util.clj:112)
	at metabase.sync.util$with_sync_events$fn__41438.invoke(util.clj:86)
	at metabase.sync.util$with_duplicate_ops_prevented$fn__41429.invoke(util.clj:65)
	at metabase.sync.util$do_sync_operation.invokeStatic(util.clj:179)
	at metabase.sync.util$do_sync_operation.invoke(util.clj:176)
	at metabase.sync.analyze$fn__66424$analyze_db_BANG___66429$fn__66430.invoke(analyze.clj:118)
	at metabase.sync.analyze$fn__66424$analyze_db_BANG___66429.invoke(analyze.clj:113)
	at metabase.api.database$fn__74852$fn__74853.invoke(database.clj:752)
	at clojure.core$binding_conveyor_fn$fn__5772.invoke(core.clj:2034)
	at clojure.lang.AFn.call(AFn.java:18)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.sql.SQLException: Error executing query
	at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:307)
	at com.facebook.presto.jdbc.PrestoStatement.execute(PrestoStatement.java:230)
	at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:75)
	at metabase.driver.sql_jdbc.execute$fn__53980.invokeStatic(execute.clj:367)
	at metabase.driver.sql_jdbc.execute$fn__53980.invoke(execute.clj:365)
	at clojure.lang.MultiFn.invoke(MultiFn.java:239)
	at metabase.driver.sql_jdbc.execute$execute_statement_or_prepared_statement_BANG_.invokeStatic(execute.clj:375)
	at metabase.driver.sql_jdbc.execute$execute_statement_or_prepared_statement_BANG_.invoke(execute.clj:372)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query$fn__54060.invoke(execute.clj:500)
	... 108 more
Caused by: java.lang.IllegalArgumentException: ParameterKind is [TYPE] but expected [LONG]
	at com.facebook.presto.jdbc.internal.common.type.TypeSignatureParameter.getValue(TypeSignatureParameter.java:110)
	at com.facebook.presto.jdbc.internal.common.type.TypeSignatureParameter.getLongLiteral(TypeSignatureParameter.java:122)
	at com.facebook.presto.jdbc.ColumnInfo.setTypeInfo(ColumnInfo.java:194)
	at com.facebook.presto.jdbc.PrestoResultSet.getColumnInfo(PrestoResultSet.java:1869)
	at com.facebook.presto.jdbc.PrestoResultSet.<init>(PrestoResultSet.java:123)
	at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:272)
	... 116 more

Hi @hprange
So you are using PrestoSQL aka TrinoDB, not PrestoDB.
The included drivers in Metabase has always been for PrestoDB. The deprecated driver might have worked with TrinoDB, but the project has diverted too much from PrestoDB.
You'll need to use a driver for TrinoDB: https://github.com/starburstdata/metabase-driver (https://github.com/metabase/metabase/issues/17532)

Thanks for your quick reply! I haven't noticed the difference between PrestoDB and PrestoSQL (aka TrinoDB). Thanks for pointing out the community driver for TrinoDB. I'll give it a try.