benchbox 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (728) hide show
  1. benchbox/__init__.py +1 -1
  2. benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query72.tpl +1 -1
  3. benchbox/_binaries/tpc-ds/{darwin-x86_64/query_templates/ansi.tpl → templates/query_templates/sqlserver.tpl} +1 -1
  4. benchbox/_binaries/tpc-ds/templates/query_variants/README +6 -0
  5. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query10.tpl → templates/query_variants/query10a.tpl} +13 -14
  6. benchbox/_binaries/tpc-ds/{darwin-x86_64/query_templates/query14.tpl → templates/query_variants/query14a.tpl} +30 -26
  7. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query18.tpl → templates/query_variants/query18a.tpl} +40 -19
  8. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query22.tpl → templates/query_variants/query22a.tpl} +31 -9
  9. benchbox/_binaries/tpc-ds/{darwin-x86_64/query_templates/query27.tpl → templates/query_variants/query27a.tpl} +23 -10
  10. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query35.tpl → templates/query_variants/query35a.tpl} +9 -8
  11. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query36.tpl → templates/query_variants/query36a.tpl} +24 -12
  12. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query51.tpl → templates/query_variants/query51a.tpl} +37 -20
  13. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query5.tpl → templates/query_variants/query5a.tpl} +15 -10
  14. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query67.tpl → templates/query_variants/query67a.tpl} +46 -18
  15. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query70.tpl → templates/query_variants/query70a.tpl} +31 -27
  16. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query77.tpl → templates/query_variants/query77a.tpl} +22 -15
  17. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query80.tpl → templates/query_variants/query80a.tpl} +22 -8
  18. benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query86.tpl → templates/query_variants/query86a.tpl} +22 -13
  19. benchbox/_binaries/tpc-h/templates/dists.dss +836 -0
  20. benchbox/_binaries/tpc-h/templates/queries/1.sql +28 -0
  21. benchbox/_binaries/tpc-h/templates/queries/10.sql +38 -0
  22. benchbox/_binaries/tpc-h/templates/queries/11.sql +34 -0
  23. benchbox/_binaries/tpc-h/templates/queries/12.sql +35 -0
  24. benchbox/_binaries/tpc-h/templates/queries/13.sql +27 -0
  25. benchbox/_binaries/tpc-h/templates/queries/14.sql +20 -0
  26. benchbox/_binaries/tpc-h/templates/queries/15.sql +40 -0
  27. benchbox/_binaries/tpc-h/templates/queries/16.sql +37 -0
  28. benchbox/_binaries/tpc-h/templates/queries/17.sql +24 -0
  29. benchbox/_binaries/tpc-h/templates/queries/18.sql +39 -0
  30. benchbox/_binaries/tpc-h/templates/queries/19.sql +42 -0
  31. benchbox/_binaries/tpc-h/templates/queries/2.sql +50 -0
  32. benchbox/_binaries/tpc-h/templates/queries/20.sql +44 -0
  33. benchbox/_binaries/tpc-h/templates/queries/21.sql +46 -0
  34. benchbox/_binaries/tpc-h/templates/queries/22.sql +44 -0
  35. benchbox/_binaries/tpc-h/templates/queries/3.sql +29 -0
  36. benchbox/_binaries/tpc-h/templates/queries/4.sql +28 -0
  37. benchbox/_binaries/tpc-h/templates/queries/5.sql +31 -0
  38. benchbox/_binaries/tpc-h/templates/queries/6.sql +16 -0
  39. benchbox/_binaries/tpc-h/templates/queries/7.sql +46 -0
  40. benchbox/_binaries/tpc-h/templates/queries/8.sql +44 -0
  41. benchbox/_binaries/tpc-h/templates/queries/9.sql +39 -0
  42. benchbox/_binaries/tpc-h/templates/variants/12a.sql +27 -0
  43. benchbox/_binaries/tpc-h/templates/variants/13a.sql +30 -0
  44. benchbox/_binaries/tpc-h/templates/variants/14a.sql +18 -0
  45. benchbox/_binaries/tpc-h/templates/variants/15a.sql +39 -0
  46. benchbox/_binaries/tpc-h/templates/variants/8a.sql +77 -0
  47. benchbox/base.py +88 -121
  48. benchbox/cli/benchmarks.py +3 -3
  49. benchbox/cli/commands/calculate_qphh.py +55 -14
  50. benchbox/cli/commands/checks.py +1 -4
  51. benchbox/cli/commands/convert.py +8 -3
  52. benchbox/cli/commands/metrics.py +55 -14
  53. benchbox/cli/commands/results.py +131 -3
  54. benchbox/cli/commands/run.py +157 -22
  55. benchbox/cli/commands/visualize.py +3 -3
  56. benchbox/cli/composite_params.py +1 -1
  57. benchbox/cli/config.py +13 -3
  58. benchbox/cli/database.py +3 -3
  59. benchbox/cli/dryrun.py +30 -4
  60. benchbox/cli/exceptions.py +2 -1
  61. benchbox/cli/execution_pipeline.py +2 -1
  62. benchbox/cli/orchestrator.py +25 -71
  63. benchbox/cli/tuning.py +1 -1
  64. benchbox/core/ai_primitives/benchmark.py +53 -0
  65. benchbox/core/ai_primitives/dataframe_operations.py +1217 -0
  66. benchbox/core/base_benchmark.py +90 -68
  67. benchbox/core/coffeeshop/queries.py +1 -1
  68. benchbox/core/coffeeshop/schema.py +1 -1
  69. benchbox/core/comparison/plotter.py +5 -4
  70. benchbox/core/dataframe/__init__.py +26 -0
  71. benchbox/core/dataframe/benchmark_suite.py +5 -4
  72. benchbox/core/dataframe/context.py +45 -0
  73. benchbox/core/dataframe/data_loader.py +180 -79
  74. benchbox/core/dataframe/maintenance_interface.py +866 -0
  75. benchbox/core/dryrun.py +152 -22
  76. benchbox/core/expected_results/registry.py +22 -5
  77. benchbox/core/manifest/io.py +4 -3
  78. benchbox/core/metadata_primitives/__init__.py +31 -0
  79. benchbox/core/metadata_primitives/benchmark.py +337 -0
  80. benchbox/core/metadata_primitives/dataframe_operations.py +1824 -0
  81. benchbox/core/platform_registry.py +134 -45
  82. benchbox/core/read_primitives/benchmark.py +56 -4
  83. benchbox/core/read_primitives/dataframe_queries.py +6547 -0
  84. benchbox/core/results/__init__.py +47 -6
  85. benchbox/core/results/builder.py +909 -0
  86. benchbox/core/results/database.py +5 -5
  87. benchbox/core/results/exporter.py +58 -96
  88. benchbox/core/results/filenames.py +102 -0
  89. benchbox/core/results/loader.py +10 -9
  90. benchbox/core/results/metrics.py +211 -0
  91. benchbox/core/results/models.py +3 -1
  92. benchbox/core/results/normalizer.py +346 -0
  93. benchbox/core/results/platform_info.py +235 -0
  94. benchbox/core/results/query_normalizer.py +200 -0
  95. benchbox/core/results/schema.py +368 -69
  96. benchbox/core/runner/conversion.py +2 -0
  97. benchbox/core/runner/dataframe_runner.py +135 -131
  98. benchbox/core/runner/runner.py +111 -18
  99. benchbox/core/schemas.py +145 -3
  100. benchbox/core/ssb/generator.py +14 -2
  101. benchbox/core/tpc_compliance.py +4 -4
  102. benchbox/core/tpc_metrics.py +9 -4
  103. benchbox/core/tpcdi/generator/manifest.py +15 -2
  104. benchbox/core/tpcds/benchmark/runner.py +3 -7
  105. benchbox/core/tpcds/c_tools.py +34 -28
  106. benchbox/core/tpcds/dataframe_queries/queries.py +44 -21
  107. benchbox/core/tpcds/generator/filesystem.py +23 -11
  108. benchbox/core/tpcds/generator/manager.py +3 -2
  109. benchbox/core/tpcds/maintenance_test.py +281 -0
  110. benchbox/core/tpcds/power_test.py +21 -11
  111. benchbox/core/tpcds/throughput_test.py +27 -9
  112. benchbox/core/tpcds_obt/etl/transformer.py +24 -5
  113. benchbox/core/tpch/dataframe_queries.py +46 -43
  114. benchbox/core/tpch/generator.py +21 -8
  115. benchbox/core/tpch/maintenance_test.py +87 -0
  116. benchbox/core/tpch/power_test.py +21 -5
  117. benchbox/core/tpch/queries.py +2 -7
  118. benchbox/core/tpch/streams.py +3 -19
  119. benchbox/core/transaction_primitives/benchmark.py +99 -0
  120. benchbox/core/transaction_primitives/dataframe_operations.py +1294 -0
  121. benchbox/core/transaction_primitives/generator.py +11 -4
  122. benchbox/core/visualization/__init__.py +2 -2
  123. benchbox/core/visualization/charts.py +4 -4
  124. benchbox/core/visualization/dependencies.py +1 -12
  125. benchbox/core/visualization/exporters.py +15 -26
  126. benchbox/core/visualization/result_plotter.py +90 -49
  127. benchbox/core/visualization/templates.py +6 -6
  128. benchbox/core/write_primitives/__init__.py +13 -0
  129. benchbox/core/write_primitives/benchmark.py +66 -0
  130. benchbox/core/write_primitives/dataframe_operations.py +912 -0
  131. benchbox/core/write_primitives/generator.py +11 -4
  132. benchbox/mcp/__init__.py +5 -1
  133. benchbox/mcp/errors.py +29 -0
  134. benchbox/mcp/resources/registry.py +12 -7
  135. benchbox/mcp/schemas.py +62 -0
  136. benchbox/mcp/server.py +17 -14
  137. benchbox/mcp/tools/__init__.py +3 -0
  138. benchbox/mcp/tools/analytics.py +550 -582
  139. benchbox/mcp/tools/benchmark.py +603 -611
  140. benchbox/mcp/tools/discovery.py +156 -205
  141. benchbox/mcp/tools/results.py +332 -533
  142. benchbox/mcp/tools/visualization.py +449 -0
  143. benchbox/platforms/__init__.py +740 -622
  144. benchbox/platforms/adapter_factory.py +6 -6
  145. benchbox/platforms/azure_synapse.py +3 -7
  146. benchbox/platforms/base/adapter.py +189 -49
  147. benchbox/platforms/base/cloud_spark/config.py +8 -0
  148. benchbox/platforms/base/cloud_spark/mixins.py +96 -0
  149. benchbox/platforms/base/cloud_spark/session.py +4 -2
  150. benchbox/platforms/base/cloud_spark/staging.py +15 -7
  151. benchbox/platforms/base/data_loading.py +315 -1
  152. benchbox/platforms/base/format_capabilities.py +37 -2
  153. benchbox/platforms/base/utils.py +6 -4
  154. benchbox/platforms/bigquery.py +5 -6
  155. benchbox/platforms/clickhouse_cloud.py +263 -0
  156. benchbox/platforms/databricks/adapter.py +16 -15
  157. benchbox/platforms/databricks/dataframe_adapter.py +4 -1
  158. benchbox/platforms/dataframe/__init__.py +31 -0
  159. benchbox/platforms/dataframe/benchmark_mixin.py +779 -0
  160. benchbox/platforms/dataframe/cudf_df.py +3 -3
  161. benchbox/platforms/dataframe/dask_df.py +3 -3
  162. benchbox/platforms/dataframe/datafusion_df.py +152 -15
  163. benchbox/platforms/dataframe/delta_lake_maintenance.py +341 -0
  164. benchbox/platforms/dataframe/ducklake_maintenance.py +402 -0
  165. benchbox/platforms/dataframe/expression_family.py +47 -8
  166. benchbox/platforms/dataframe/hudi_maintenance.py +437 -0
  167. benchbox/platforms/dataframe/iceberg_maintenance.py +605 -0
  168. benchbox/platforms/dataframe/modin_df.py +3 -3
  169. benchbox/platforms/dataframe/pandas_df.py +3 -3
  170. benchbox/platforms/dataframe/pandas_family.py +59 -8
  171. benchbox/platforms/dataframe/platform_checker.py +16 -49
  172. benchbox/platforms/dataframe/polars_df.py +14 -12
  173. benchbox/platforms/dataframe/polars_maintenance.py +630 -0
  174. benchbox/platforms/dataframe/pyspark_df.py +15 -0
  175. benchbox/platforms/dataframe/pyspark_maintenance.py +613 -0
  176. benchbox/platforms/datafusion.py +5 -6
  177. benchbox/platforms/duckdb.py +2 -1
  178. benchbox/platforms/fabric_warehouse.py +15 -15
  179. benchbox/platforms/firebolt.py +3 -2
  180. benchbox/platforms/influxdb/adapter.py +7 -3
  181. benchbox/platforms/motherduck.py +3 -2
  182. benchbox/platforms/onehouse/__init__.py +39 -0
  183. benchbox/platforms/onehouse/onehouse_client.py +509 -0
  184. benchbox/platforms/onehouse/quanton_adapter.py +646 -0
  185. benchbox/platforms/postgresql.py +5 -9
  186. benchbox/platforms/presto.py +2 -2
  187. benchbox/platforms/pyspark/session.py +3 -3
  188. benchbox/platforms/pyspark/sql_adapter.py +2 -3
  189. benchbox/platforms/redshift.py +7 -7
  190. benchbox/platforms/snowflake.py +4 -4
  191. benchbox/platforms/snowpark_connect.py +2 -1
  192. benchbox/platforms/trino.py +2 -2
  193. benchbox/release/__init__.py +17 -0
  194. benchbox/release/content_validation.py +745 -0
  195. benchbox/release/workflow.py +17 -0
  196. benchbox/utils/VERSION_MANAGEMENT.md +1 -1
  197. benchbox/utils/cloud_storage.py +7 -5
  198. benchbox/utils/compression.py +8 -8
  199. benchbox/utils/compression_mixin.py +2 -1
  200. benchbox/utils/data_validation.py +23 -14
  201. benchbox/utils/dependencies.py +47 -7
  202. benchbox/utils/file_format.py +407 -0
  203. benchbox/utils/format_converters/__init__.py +5 -1
  204. benchbox/utils/format_converters/ducklake_converter.py +227 -0
  205. benchbox/utils/format_converters/vortex_converter.py +168 -0
  206. benchbox/utils/tpc_compilation.py +43 -0
  207. benchbox/utils/version.py +14 -2
  208. {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/METADATA +15 -15
  209. benchbox-0.1.1.dist-info/RECORD +839 -0
  210. {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/WHEEL +1 -1
  211. benchbox/_binaries/tpc-ds/darwin-arm64/query_templates/sqlserver.tpl +0 -37
  212. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/README +0 -4
  213. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/db2.tpl +0 -38
  214. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/netezza.tpl +0 -38
  215. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/oracle.tpl +0 -38
  216. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query1.tpl +0 -62
  217. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query10.tpl +0 -98
  218. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query11.tpl +0 -119
  219. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query12.tpl +0 -72
  220. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query13.tpl +0 -89
  221. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query15.tpl +0 -56
  222. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query16.tpl +0 -76
  223. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query17.tpl +0 -80
  224. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query18.tpl +0 -73
  225. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query19.tpl +0 -64
  226. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query2.tpl +0 -94
  227. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query20.tpl +0 -67
  228. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query21.tpl +0 -65
  229. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query22.tpl +0 -54
  230. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query23.tpl +0 -144
  231. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query24.tpl +0 -147
  232. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query25.tpl +0 -84
  233. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query26.tpl +0 -61
  234. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query28.tpl +0 -90
  235. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query29.tpl +0 -85
  236. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query3.tpl +0 -58
  237. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query30.tpl +0 -66
  238. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query31.tpl +0 -88
  239. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query32.tpl +0 -65
  240. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query33.tpl +0 -113
  241. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query34.tpl +0 -77
  242. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query35.tpl +0 -98
  243. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query36.tpl +0 -74
  244. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query37.tpl +0 -57
  245. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query38.tpl +0 -58
  246. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query39.tpl +0 -93
  247. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query4.tpl +0 -154
  248. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query40.tpl +0 -63
  249. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query41.tpl +0 -90
  250. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query42.tpl +0 -64
  251. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query43.tpl +0 -55
  252. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query44.tpl +0 -72
  253. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query45.tpl +0 -56
  254. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query46.tpl +0 -78
  255. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query47.tpl +0 -89
  256. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query48.tpl +0 -104
  257. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query49.tpl +0 -164
  258. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query5.tpl +0 -165
  259. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query50.tpl +0 -96
  260. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query51.tpl +0 -80
  261. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query52.tpl +0 -59
  262. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query53.tpl +0 -64
  263. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query54.tpl +0 -95
  264. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query55.tpl +0 -52
  265. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query56.tpl +0 -108
  266. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query57.tpl +0 -87
  267. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query58.tpl +0 -101
  268. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query59.tpl +0 -79
  269. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query6.tpl +0 -62
  270. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query60.tpl +0 -115
  271. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query61.tpl +0 -83
  272. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query62.tpl +0 -71
  273. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query63.tpl +0 -64
  274. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query64.tpl +0 -157
  275. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query65.tpl +0 -62
  276. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query66.tpl +0 -261
  277. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query67.tpl +0 -81
  278. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query68.tpl +0 -82
  279. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query69.tpl +0 -85
  280. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query7.tpl +0 -60
  281. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query70.tpl +0 -73
  282. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query71.tpl +0 -74
  283. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query72.tpl +0 -67
  284. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query73.tpl +0 -69
  285. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query74.tpl +0 -99
  286. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query75.tpl +0 -107
  287. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query76.tpl +0 -64
  288. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query77.tpl +0 -145
  289. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query78.tpl +0 -94
  290. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query79.tpl +0 -60
  291. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query8.tpl +0 -144
  292. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query80.tpl +0 -131
  293. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query81.tpl +0 -68
  294. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query82.tpl +0 -56
  295. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query83.tpl +0 -104
  296. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query84.tpl +0 -58
  297. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query85.tpl +0 -121
  298. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query86.tpl +0 -60
  299. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query87.tpl +0 -56
  300. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query88.tpl +0 -128
  301. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query89.tpl +0 -75
  302. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query9.tpl +0 -88
  303. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query90.tpl +0 -58
  304. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query91.tpl +0 -68
  305. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query92.tpl +0 -68
  306. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query93.tpl +0 -53
  307. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query94.tpl +0 -67
  308. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query95.tpl +0 -71
  309. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query96.tpl +0 -52
  310. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query97.tpl +0 -62
  311. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query98.tpl +0 -70
  312. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query99.tpl +0 -69
  313. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/sqlserver.tpl +0 -37
  314. benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/templates.lst +0 -99
  315. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/README +0 -4
  316. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/ansi.tpl +0 -38
  317. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/db2.tpl +0 -38
  318. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/netezza.tpl +0 -38
  319. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/oracle.tpl +0 -38
  320. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query1.tpl +0 -62
  321. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query11.tpl +0 -119
  322. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query12.tpl +0 -72
  323. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query13.tpl +0 -89
  324. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query14.tpl +0 -247
  325. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query15.tpl +0 -56
  326. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query16.tpl +0 -76
  327. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query17.tpl +0 -80
  328. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query19.tpl +0 -64
  329. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query2.tpl +0 -94
  330. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query20.tpl +0 -67
  331. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query21.tpl +0 -65
  332. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query23.tpl +0 -144
  333. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query24.tpl +0 -147
  334. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query25.tpl +0 -84
  335. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query26.tpl +0 -61
  336. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query27.tpl +0 -68
  337. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query28.tpl +0 -90
  338. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query29.tpl +0 -85
  339. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query3.tpl +0 -58
  340. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query30.tpl +0 -66
  341. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query31.tpl +0 -88
  342. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query32.tpl +0 -65
  343. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query33.tpl +0 -113
  344. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query34.tpl +0 -77
  345. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query37.tpl +0 -57
  346. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query38.tpl +0 -58
  347. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query39.tpl +0 -93
  348. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query4.tpl +0 -154
  349. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query40.tpl +0 -63
  350. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query41.tpl +0 -90
  351. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query42.tpl +0 -64
  352. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query43.tpl +0 -55
  353. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query44.tpl +0 -72
  354. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query45.tpl +0 -56
  355. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query46.tpl +0 -78
  356. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query47.tpl +0 -89
  357. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query48.tpl +0 -104
  358. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query49.tpl +0 -164
  359. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query50.tpl +0 -96
  360. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query52.tpl +0 -59
  361. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query53.tpl +0 -64
  362. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query54.tpl +0 -95
  363. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query55.tpl +0 -52
  364. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query56.tpl +0 -108
  365. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query57.tpl +0 -87
  366. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query58.tpl +0 -101
  367. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query59.tpl +0 -79
  368. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query6.tpl +0 -62
  369. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query60.tpl +0 -115
  370. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query61.tpl +0 -83
  371. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query62.tpl +0 -71
  372. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query63.tpl +0 -64
  373. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query64.tpl +0 -157
  374. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query65.tpl +0 -62
  375. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query66.tpl +0 -261
  376. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query68.tpl +0 -82
  377. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query69.tpl +0 -85
  378. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query7.tpl +0 -60
  379. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query71.tpl +0 -74
  380. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query72.tpl +0 -67
  381. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query73.tpl +0 -69
  382. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query74.tpl +0 -99
  383. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query75.tpl +0 -107
  384. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query76.tpl +0 -64
  385. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query78.tpl +0 -94
  386. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query79.tpl +0 -60
  387. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query8.tpl +0 -144
  388. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query81.tpl +0 -68
  389. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query82.tpl +0 -56
  390. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query83.tpl +0 -104
  391. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query84.tpl +0 -58
  392. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query85.tpl +0 -121
  393. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query87.tpl +0 -56
  394. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query88.tpl +0 -128
  395. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query89.tpl +0 -75
  396. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query9.tpl +0 -88
  397. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query90.tpl +0 -58
  398. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query91.tpl +0 -68
  399. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query92.tpl +0 -68
  400. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query93.tpl +0 -53
  401. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query94.tpl +0 -67
  402. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query95.tpl +0 -71
  403. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query96.tpl +0 -52
  404. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query97.tpl +0 -62
  405. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query98.tpl +0 -70
  406. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query99.tpl +0 -69
  407. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/sqlserver.tpl +0 -37
  408. benchbox/_binaries/tpc-ds/linux-arm64/query_templates/templates.lst +0 -99
  409. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/README +0 -4
  410. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/ansi.tpl +0 -38
  411. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/db2.tpl +0 -38
  412. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/netezza.tpl +0 -38
  413. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/oracle.tpl +0 -38
  414. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query1.tpl +0 -62
  415. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query10.tpl +0 -98
  416. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query11.tpl +0 -119
  417. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query12.tpl +0 -72
  418. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query13.tpl +0 -89
  419. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query14.tpl +0 -247
  420. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query15.tpl +0 -56
  421. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query16.tpl +0 -76
  422. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query17.tpl +0 -80
  423. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query18.tpl +0 -73
  424. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query19.tpl +0 -64
  425. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query2.tpl +0 -94
  426. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query20.tpl +0 -67
  427. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query21.tpl +0 -65
  428. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query22.tpl +0 -54
  429. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query23.tpl +0 -144
  430. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query24.tpl +0 -147
  431. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query25.tpl +0 -84
  432. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query26.tpl +0 -61
  433. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query27.tpl +0 -68
  434. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query28.tpl +0 -90
  435. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query29.tpl +0 -85
  436. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query3.tpl +0 -58
  437. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query30.tpl +0 -66
  438. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query31.tpl +0 -88
  439. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query32.tpl +0 -65
  440. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query33.tpl +0 -113
  441. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query34.tpl +0 -77
  442. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query35.tpl +0 -98
  443. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query36.tpl +0 -74
  444. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query37.tpl +0 -57
  445. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query38.tpl +0 -58
  446. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query39.tpl +0 -93
  447. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query4.tpl +0 -154
  448. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query40.tpl +0 -63
  449. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query41.tpl +0 -90
  450. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query42.tpl +0 -64
  451. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query43.tpl +0 -55
  452. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query44.tpl +0 -72
  453. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query45.tpl +0 -56
  454. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query46.tpl +0 -78
  455. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query47.tpl +0 -89
  456. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query48.tpl +0 -104
  457. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query49.tpl +0 -164
  458. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query5.tpl +0 -165
  459. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query50.tpl +0 -96
  460. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query51.tpl +0 -80
  461. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query52.tpl +0 -59
  462. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query53.tpl +0 -64
  463. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query54.tpl +0 -95
  464. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query55.tpl +0 -52
  465. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query56.tpl +0 -108
  466. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query57.tpl +0 -87
  467. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query58.tpl +0 -101
  468. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query59.tpl +0 -79
  469. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query6.tpl +0 -62
  470. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query60.tpl +0 -115
  471. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query61.tpl +0 -83
  472. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query62.tpl +0 -71
  473. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query63.tpl +0 -64
  474. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query64.tpl +0 -157
  475. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query65.tpl +0 -62
  476. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query66.tpl +0 -261
  477. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query67.tpl +0 -81
  478. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query68.tpl +0 -82
  479. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query69.tpl +0 -85
  480. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query7.tpl +0 -60
  481. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query70.tpl +0 -73
  482. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query71.tpl +0 -74
  483. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query72.tpl +0 -67
  484. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query73.tpl +0 -69
  485. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query74.tpl +0 -99
  486. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query75.tpl +0 -107
  487. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query76.tpl +0 -64
  488. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query77.tpl +0 -145
  489. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query78.tpl +0 -94
  490. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query79.tpl +0 -60
  491. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query8.tpl +0 -144
  492. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query80.tpl +0 -131
  493. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query81.tpl +0 -68
  494. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query82.tpl +0 -56
  495. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query83.tpl +0 -104
  496. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query84.tpl +0 -58
  497. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query85.tpl +0 -121
  498. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query86.tpl +0 -60
  499. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query87.tpl +0 -56
  500. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query88.tpl +0 -128
  501. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query89.tpl +0 -75
  502. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query9.tpl +0 -88
  503. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query90.tpl +0 -58
  504. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query91.tpl +0 -68
  505. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query92.tpl +0 -68
  506. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query93.tpl +0 -53
  507. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query94.tpl +0 -67
  508. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query95.tpl +0 -71
  509. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query96.tpl +0 -52
  510. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query97.tpl +0 -62
  511. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query98.tpl +0 -70
  512. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query99.tpl +0 -69
  513. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/sqlserver.tpl +0 -37
  514. benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/templates.lst +0 -99
  515. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/README +0 -4
  516. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/ansi.tpl +0 -38
  517. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/db2.tpl +0 -38
  518. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/netezza.tpl +0 -38
  519. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/oracle.tpl +0 -38
  520. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query1.tpl +0 -62
  521. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query10.tpl +0 -98
  522. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query11.tpl +0 -119
  523. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query12.tpl +0 -72
  524. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query13.tpl +0 -89
  525. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query14.tpl +0 -247
  526. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query15.tpl +0 -56
  527. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query16.tpl +0 -76
  528. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query17.tpl +0 -80
  529. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query18.tpl +0 -73
  530. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query19.tpl +0 -64
  531. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query2.tpl +0 -94
  532. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query20.tpl +0 -67
  533. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query21.tpl +0 -65
  534. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query22.tpl +0 -54
  535. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query23.tpl +0 -144
  536. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query24.tpl +0 -147
  537. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query25.tpl +0 -84
  538. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query26.tpl +0 -61
  539. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query27.tpl +0 -68
  540. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query28.tpl +0 -90
  541. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query29.tpl +0 -85
  542. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query3.tpl +0 -58
  543. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query30.tpl +0 -66
  544. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query31.tpl +0 -88
  545. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query32.tpl +0 -65
  546. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query33.tpl +0 -113
  547. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query34.tpl +0 -77
  548. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query35.tpl +0 -98
  549. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query36.tpl +0 -74
  550. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query37.tpl +0 -57
  551. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query38.tpl +0 -58
  552. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query39.tpl +0 -93
  553. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query4.tpl +0 -154
  554. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query40.tpl +0 -63
  555. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query41.tpl +0 -90
  556. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query42.tpl +0 -64
  557. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query43.tpl +0 -55
  558. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query44.tpl +0 -72
  559. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query45.tpl +0 -56
  560. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query46.tpl +0 -78
  561. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query47.tpl +0 -89
  562. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query48.tpl +0 -104
  563. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query49.tpl +0 -164
  564. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query5.tpl +0 -165
  565. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query50.tpl +0 -96
  566. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query51.tpl +0 -80
  567. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query52.tpl +0 -59
  568. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query53.tpl +0 -64
  569. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query54.tpl +0 -95
  570. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query55.tpl +0 -52
  571. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query56.tpl +0 -108
  572. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query57.tpl +0 -87
  573. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query58.tpl +0 -101
  574. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query59.tpl +0 -79
  575. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query6.tpl +0 -62
  576. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query60.tpl +0 -115
  577. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query61.tpl +0 -83
  578. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query62.tpl +0 -71
  579. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query63.tpl +0 -64
  580. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query64.tpl +0 -157
  581. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query65.tpl +0 -62
  582. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query66.tpl +0 -261
  583. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query67.tpl +0 -81
  584. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query68.tpl +0 -82
  585. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query69.tpl +0 -85
  586. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query7.tpl +0 -60
  587. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query70.tpl +0 -73
  588. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query71.tpl +0 -74
  589. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query72.tpl +0 -67
  590. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query73.tpl +0 -69
  591. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query74.tpl +0 -99
  592. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query75.tpl +0 -107
  593. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query76.tpl +0 -64
  594. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query77.tpl +0 -145
  595. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query78.tpl +0 -94
  596. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query79.tpl +0 -60
  597. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query8.tpl +0 -144
  598. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query80.tpl +0 -131
  599. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query81.tpl +0 -68
  600. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query82.tpl +0 -56
  601. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query83.tpl +0 -104
  602. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query84.tpl +0 -58
  603. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query85.tpl +0 -121
  604. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query86.tpl +0 -60
  605. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query87.tpl +0 -56
  606. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query88.tpl +0 -128
  607. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query89.tpl +0 -75
  608. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query9.tpl +0 -88
  609. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query90.tpl +0 -58
  610. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query91.tpl +0 -68
  611. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query92.tpl +0 -68
  612. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query93.tpl +0 -53
  613. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query94.tpl +0 -67
  614. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query95.tpl +0 -71
  615. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query96.tpl +0 -52
  616. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query97.tpl +0 -62
  617. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query98.tpl +0 -70
  618. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query99.tpl +0 -69
  619. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/sqlserver.tpl +0 -37
  620. benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/templates.lst +0 -99
  621. benchbox-0.1.0.dist-info/RECORD +0 -1192
  622. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/README +0 -0
  623. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/ansi.tpl +0 -0
  624. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/db2.tpl +0 -0
  625. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/netezza.tpl +0 -0
  626. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/oracle.tpl +0 -0
  627. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query1.tpl +0 -0
  628. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query10.tpl +0 -0
  629. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query11.tpl +0 -0
  630. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query12.tpl +0 -0
  631. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query13.tpl +0 -0
  632. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query14.tpl +0 -0
  633. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query15.tpl +0 -0
  634. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query16.tpl +0 -0
  635. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query17.tpl +0 -0
  636. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query18.tpl +0 -0
  637. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query19.tpl +0 -0
  638. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query2.tpl +0 -0
  639. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query20.tpl +0 -0
  640. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query21.tpl +0 -0
  641. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query22.tpl +0 -0
  642. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query23.tpl +0 -0
  643. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query24.tpl +0 -0
  644. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query25.tpl +0 -0
  645. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query26.tpl +0 -0
  646. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query27.tpl +0 -0
  647. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query28.tpl +0 -0
  648. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query29.tpl +0 -0
  649. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query3.tpl +0 -0
  650. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query30.tpl +0 -0
  651. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query31.tpl +0 -0
  652. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query32.tpl +0 -0
  653. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query33.tpl +0 -0
  654. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query34.tpl +0 -0
  655. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query35.tpl +0 -0
  656. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query36.tpl +0 -0
  657. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query37.tpl +0 -0
  658. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query38.tpl +0 -0
  659. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query39.tpl +0 -0
  660. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query4.tpl +0 -0
  661. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query40.tpl +0 -0
  662. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query41.tpl +0 -0
  663. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query42.tpl +0 -0
  664. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query43.tpl +0 -0
  665. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query44.tpl +0 -0
  666. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query45.tpl +0 -0
  667. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query46.tpl +0 -0
  668. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query47.tpl +0 -0
  669. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query48.tpl +0 -0
  670. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query49.tpl +0 -0
  671. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query5.tpl +0 -0
  672. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query50.tpl +0 -0
  673. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query51.tpl +0 -0
  674. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query52.tpl +0 -0
  675. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query53.tpl +0 -0
  676. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query54.tpl +0 -0
  677. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query55.tpl +0 -0
  678. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query56.tpl +0 -0
  679. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query57.tpl +0 -0
  680. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query58.tpl +0 -0
  681. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query59.tpl +0 -0
  682. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query6.tpl +0 -0
  683. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query60.tpl +0 -0
  684. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query61.tpl +0 -0
  685. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query62.tpl +0 -0
  686. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query63.tpl +0 -0
  687. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query64.tpl +0 -0
  688. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query65.tpl +0 -0
  689. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query66.tpl +0 -0
  690. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query67.tpl +0 -0
  691. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query68.tpl +0 -0
  692. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query69.tpl +0 -0
  693. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query7.tpl +0 -0
  694. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query70.tpl +0 -0
  695. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query71.tpl +0 -0
  696. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query73.tpl +0 -0
  697. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query74.tpl +0 -0
  698. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query75.tpl +0 -0
  699. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query76.tpl +0 -0
  700. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query77.tpl +0 -0
  701. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query78.tpl +0 -0
  702. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query79.tpl +0 -0
  703. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query8.tpl +0 -0
  704. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query80.tpl +0 -0
  705. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query81.tpl +0 -0
  706. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query82.tpl +0 -0
  707. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query83.tpl +0 -0
  708. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query84.tpl +0 -0
  709. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query85.tpl +0 -0
  710. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query86.tpl +0 -0
  711. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query87.tpl +0 -0
  712. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query88.tpl +0 -0
  713. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query89.tpl +0 -0
  714. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query9.tpl +0 -0
  715. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query90.tpl +0 -0
  716. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query91.tpl +0 -0
  717. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query92.tpl +0 -0
  718. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query93.tpl +0 -0
  719. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query94.tpl +0 -0
  720. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query95.tpl +0 -0
  721. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query96.tpl +0 -0
  722. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query97.tpl +0 -0
  723. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query98.tpl +0 -0
  724. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query99.tpl +0 -0
  725. /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/templates.lst +0 -0
  726. {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/entry_points.txt +0 -0
  727. {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/licenses/LICENSE +0 -0
  728. {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/top_level.txt +0 -0
@@ -8,6 +8,7 @@ Copyright 2026 Joe Harris / BenchBox Project
8
8
  Licensed under the MIT License. See LICENSE file in the project root for details.
9
9
  """
10
10
 
11
+ import importlib
11
12
  from typing import Optional, Type
12
13
 
13
14
  from benchbox.core.platform_registry import PlatformRegistry
@@ -15,170 +16,215 @@ from benchbox.utils.runtime_env import ensure_driver_version
15
16
 
16
17
  from .base import BenchmarkResults, ConnectionConfig, PlatformAdapter
17
18
 
18
- # Import local platform adapters
19
- try:
20
- from .duckdb import DuckDBAdapter
21
- except ImportError:
22
- DuckDBAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
23
-
24
- try:
25
- from .motherduck import MotherDuckAdapter
26
- except ImportError:
27
- MotherDuckAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
28
-
29
- try:
30
- from .sqlite import SQLiteAdapter
31
- except ImportError:
32
- SQLiteAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
19
+ # ============================================================================
20
+ # Lazy Import System for Cloud Platform Adapters
21
+ # ============================================================================
22
+ # Cloud platform SDKs (databricks, snowflake, google-cloud-bigquery, etc.) have
23
+ # heavy import chains that add 300+ seconds to pytest collection time even when
24
+ # wrapped in try/except blocks. The import statement itself executes even if
25
+ # immediately caught.
26
+ #
27
+ # This lazy loading pattern defers the actual import until the adapter is first
28
+ # accessed, dramatically reducing test suite startup time.
29
+ #
30
+ # Adapters loaded lazily (heavy SDK dependencies):
31
+ # - DatabricksAdapter (databricks-sql-connector, databricks-sdk)
32
+ # - BigQueryAdapter (google-cloud-bigquery, google-cloud-storage)
33
+ # - SnowflakeAdapter (snowflake-connector-python)
34
+ # - RedshiftAdapter (redshift-connector, boto3)
35
+ # - ClickHouseAdapter (clickhouse-driver or chdb)
36
+ # - TrinoAdapter (trino)
37
+ # - AthenaAdapter (pyathena, boto3)
38
+ # - SparkAdapter (pyspark)
39
+ # - PySparkSQLAdapter (pyspark)
40
+ # - FireboltAdapter (firebolt-sdk)
41
+ # - InfluxDBAdapter (influxdb3-python)
42
+ # - PrestoAdapter (presto-python-client)
43
+ # - AzureSynapseAdapter (pyodbc, azure-identity)
44
+ # - FabricWarehouseAdapter (pyodbc, azure-identity)
45
+ #
46
+ # Adapters loaded eagerly (light dependencies or core):
47
+ # - DuckDBAdapter (duckdb - core dependency, always available)
48
+ # - MotherDuckAdapter (duckdb - shares core dependency)
49
+ # - SQLiteAdapter (stdlib sqlite3)
50
+ # - DataFusionAdapter (datafusion - lightweight)
51
+ # - PolarsAdapter (polars - lightweight)
52
+ # - PostgreSQLAdapter (psycopg2 - core dependency)
53
+ # - TimescaleDBAdapter (psycopg2 - shares core dependency)
54
+ # ============================================================================
33
55
 
34
- try:
35
- from .datafusion import DataFusionAdapter
36
- except ImportError:
37
- DataFusionAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
56
+ # Cache for lazily loaded adapters and constants
57
+ _lazy_adapter_cache: dict[str, Optional[Type[PlatformAdapter]]] = {}
58
+ _lazy_constant_cache: dict[str, bool] = {}
59
+
60
+ # Mapping of lazy adapter names to their module paths
61
+ _LAZY_ADAPTERS = {
62
+ # Cloud SQL platforms with heavy SDK dependencies
63
+ "DatabricksAdapter": ".databricks",
64
+ "BigQueryAdapter": ".bigquery",
65
+ "SnowflakeAdapter": ".snowflake",
66
+ "RedshiftAdapter": ".redshift",
67
+ "ClickHouseAdapter": ".clickhouse",
68
+ "ClickHouseCloudAdapter": ".clickhouse_cloud",
69
+ "TrinoAdapter": ".trino",
70
+ "AthenaAdapter": ".athena",
71
+ "SparkAdapter": ".spark",
72
+ "PySparkSQLAdapter": ".pyspark",
73
+ "FireboltAdapter": ".firebolt",
74
+ "InfluxDBAdapter": ".influxdb",
75
+ "PrestoAdapter": ".presto",
76
+ "AzureSynapseAdapter": ".azure_synapse",
77
+ "FabricWarehouseAdapter": ".fabric_warehouse",
78
+ "MicrosoftFabricAdapter": ".fabric_warehouse", # Backward compatibility alias
79
+ "QuantonAdapter": ".onehouse",
80
+ # DataFrame adapters (have their own lazy loading but need module-level deferral)
81
+ "PolarsDataFrameAdapter": ".dataframe",
82
+ "PandasDataFrameAdapter": ".dataframe",
83
+ "ModinDataFrameAdapter": ".dataframe",
84
+ "CuDFDataFrameAdapter": ".dataframe",
85
+ "DaskDataFrameAdapter": ".dataframe",
86
+ "DataFusionDataFrameAdapter": ".dataframe",
87
+ "PySparkDataFrameAdapter": ".dataframe",
88
+ "DataFramePlatformChecker": ".dataframe",
89
+ }
90
+
91
+ # Mapping of lazy constants to their module paths and default values
92
+ _LAZY_CONSTANTS = {
93
+ "POLARS_AVAILABLE": (".dataframe", False),
94
+ "PANDAS_AVAILABLE": (".dataframe", False),
95
+ "MODIN_AVAILABLE": (".dataframe", False),
96
+ "CUDF_AVAILABLE": (".dataframe", False),
97
+ "DASK_AVAILABLE": (".dataframe", False),
98
+ "DATAFUSION_DF_AVAILABLE": (".dataframe", False),
99
+ "PYSPARK_AVAILABLE": (".dataframe", False),
100
+ }
101
+
102
+ # Cache for clickhouse module (special case - needs module reference)
103
+ _clickhouse_module_cache = None
104
+
105
+
106
+ def _load_lazy_adapter(name: str) -> Optional[Type[PlatformAdapter]]:
107
+ """Load a lazily-imported adapter class.
38
108
 
39
- try:
40
- from .polars_platform import PolarsAdapter
41
- except ImportError:
42
- PolarsAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
109
+ Args:
110
+ name: Adapter class name (e.g., 'DatabricksAdapter')
43
111
 
44
- # Import cloud platform adapters with graceful fallback
45
- # ClickHouse is optional and may not be included in pip-installed packages
46
- try:
47
- from . import clickhouse as _clickhouse_module
48
- from .clickhouse import ClickHouseAdapter
112
+ Returns:
113
+ Adapter class if available, None if import fails
114
+ """
115
+ if name in _lazy_adapter_cache:
116
+ return _lazy_adapter_cache[name]
49
117
 
50
- # Provide module access for legacy patches/tests (only if clickhouse is available)
51
- clickhouse = _clickhouse_module
52
- except ImportError:
53
- _clickhouse_module = None # type: ignore[assignment]
54
- clickhouse = None # type: ignore[assignment]
55
- ClickHouseAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
118
+ module_path = _LAZY_ADAPTERS.get(name)
119
+ if module_path is None:
120
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
56
121
 
57
- try:
58
- from .databricks import DatabricksAdapter
59
- except ImportError:
60
- DatabricksAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
122
+ try:
123
+ module = importlib.import_module(module_path, __package__)
124
+ adapter_class = getattr(module, name, None)
125
+ _lazy_adapter_cache[name] = adapter_class
126
+ return adapter_class
127
+ except ImportError:
128
+ _lazy_adapter_cache[name] = None
129
+ return None
61
130
 
62
- try:
63
- from .bigquery import BigQueryAdapter
64
- except ImportError:
65
- BigQueryAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
66
131
 
67
- try:
68
- from .redshift import RedshiftAdapter
69
- except ImportError:
70
- RedshiftAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
132
+ def _load_lazy_constant(name: str) -> bool:
133
+ """Load a lazily-imported availability constant.
71
134
 
72
- try:
73
- from .snowflake import SnowflakeAdapter
74
- except ImportError:
75
- SnowflakeAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
135
+ Args:
136
+ name: Constant name (e.g., 'POLARS_AVAILABLE')
76
137
 
77
- try:
78
- from .trino import TrinoAdapter
79
- except ImportError:
80
- TrinoAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
138
+ Returns:
139
+ Constant value (True/False), defaults to False on import failure
140
+ """
141
+ if name in _lazy_constant_cache:
142
+ return _lazy_constant_cache[name]
81
143
 
82
- try:
83
- from .athena import AthenaAdapter
84
- except ImportError:
85
- AthenaAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
144
+ module_path, default = _LAZY_CONSTANTS.get(name, (None, False))
145
+ if module_path is None:
146
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
86
147
 
87
- try:
88
- from .spark import SparkAdapter
89
- except ImportError:
90
- SparkAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
148
+ try:
149
+ module = importlib.import_module(module_path, __package__)
150
+ value = getattr(module, name, default)
151
+ _lazy_constant_cache[name] = value
152
+ return value
153
+ except ImportError:
154
+ _lazy_constant_cache[name] = default
155
+ return default
91
156
 
92
- try:
93
- from .pyspark import PySparkSQLAdapter
94
- except ImportError:
95
- PySparkSQLAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
96
157
 
97
- try:
98
- from .firebolt import FireboltAdapter
99
- except ImportError:
100
- FireboltAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
158
+ def __getattr__(name: str):
159
+ """Lazy load cloud platform adapters and DataFrame components on first access.
101
160
 
102
- try:
103
- from .influxdb import InfluxDBAdapter
104
- except ImportError:
105
- InfluxDBAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
161
+ This function is called when an attribute is not found in the module's namespace.
162
+ It enables deferred loading of heavy cloud SDK dependencies until they're actually
163
+ needed, dramatically reducing test collection time.
164
+ """
165
+ global _clickhouse_module_cache
106
166
 
107
- try:
108
- from .presto import PrestoAdapter
109
- except ImportError:
110
- PrestoAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
167
+ # Handle adapter classes
168
+ if name in _LAZY_ADAPTERS:
169
+ return _load_lazy_adapter(name)
111
170
 
112
- try:
113
- from .postgresql import PostgreSQLAdapter
114
- except ImportError:
115
- PostgreSQLAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
171
+ # Handle availability constants
172
+ if name in _LAZY_CONSTANTS:
173
+ return _load_lazy_constant(name)
116
174
 
117
- try:
118
- from .timescaledb import TimescaleDBAdapter
119
- except ImportError:
120
- TimescaleDBAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
175
+ # Special case: clickhouse module reference (for legacy patches/tests)
176
+ if name == "clickhouse":
177
+ if _clickhouse_module_cache is None:
178
+ try:
179
+ _clickhouse_module_cache = importlib.import_module(".clickhouse", __package__)
180
+ except ImportError:
181
+ pass # Keep as None
182
+ return _clickhouse_module_cache
121
183
 
122
- try:
123
- from .azure_synapse import AzureSynapseAdapter
124
- except ImportError:
125
- AzureSynapseAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
184
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
126
185
 
127
- try:
128
- from .fabric_warehouse import FabricWarehouseAdapter, MicrosoftFabricAdapter
129
- except ImportError:
130
- FabricWarehouseAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
131
- MicrosoftFabricAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
132
186
 
133
- # DataFrame platform adapters - these use a different interface (DataFrame API instead of SQL)
134
- # Import availability flags and adapters with graceful fallback
135
- try:
136
- from .dataframe import POLARS_AVAILABLE, PolarsDataFrameAdapter
137
- except ImportError:
138
- POLARS_AVAILABLE = False
139
- PolarsDataFrameAdapter = None # type: ignore[assignment,misc]
187
+ # ============================================================================
188
+ # Eagerly Loaded Adapters (light dependencies or core)
189
+ # ============================================================================
190
+ # These adapters have lightweight dependencies that don't impact startup time
191
+ # significantly, so they're loaded eagerly for simpler access patterns.
140
192
 
193
+ # Import local platform adapters (core/light dependencies)
141
194
  try:
142
- from .dataframe import PANDAS_AVAILABLE, PandasDataFrameAdapter
195
+ from .duckdb import DuckDBAdapter
143
196
  except ImportError:
144
- PANDAS_AVAILABLE = False
145
- PandasDataFrameAdapter = None # type: ignore[assignment,misc]
197
+ DuckDBAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
146
198
 
147
199
  try:
148
- from .dataframe import MODIN_AVAILABLE, ModinDataFrameAdapter
200
+ from .motherduck import MotherDuckAdapter
149
201
  except ImportError:
150
- MODIN_AVAILABLE = False
151
- ModinDataFrameAdapter = None # type: ignore[assignment,misc]
202
+ MotherDuckAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
152
203
 
153
204
  try:
154
- from .dataframe import CUDF_AVAILABLE, CuDFDataFrameAdapter
205
+ from .sqlite import SQLiteAdapter
155
206
  except ImportError:
156
- CUDF_AVAILABLE = False
157
- CuDFDataFrameAdapter = None # type: ignore[assignment,misc]
207
+ SQLiteAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
158
208
 
159
209
  try:
160
- from .dataframe import DASK_AVAILABLE, DaskDataFrameAdapter
210
+ from .datafusion import DataFusionAdapter
161
211
  except ImportError:
162
- DASK_AVAILABLE = False
163
- DaskDataFrameAdapter = None # type: ignore[assignment,misc]
212
+ DataFusionAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
164
213
 
165
214
  try:
166
- from .dataframe import DATAFUSION_DF_AVAILABLE, DataFusionDataFrameAdapter
215
+ from .polars_platform import PolarsAdapter
167
216
  except ImportError:
168
- DATAFUSION_DF_AVAILABLE = False
169
- DataFusionDataFrameAdapter = None # type: ignore[assignment,misc]
217
+ PolarsAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
170
218
 
171
- # Import platform checker for DataFrame platform status
172
219
  try:
173
- from .dataframe import DataFramePlatformChecker
220
+ from .postgresql import PostgreSQLAdapter
174
221
  except ImportError:
175
- DataFramePlatformChecker = None # type: ignore[assignment,misc]
222
+ PostgreSQLAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
176
223
 
177
224
  try:
178
- from .dataframe import PYSPARK_AVAILABLE, PySparkDataFrameAdapter
225
+ from .timescaledb import TimescaleDBAdapter
179
226
  except ImportError:
180
- PYSPARK_AVAILABLE = False
181
- PySparkDataFrameAdapter = None # type: ignore[assignment,misc]
227
+ TimescaleDBAdapter: Optional[Type[PlatformAdapter]] = None # type: ignore[assignment,misc]
182
228
 
183
229
  __all__ = [
184
230
  "PlatformAdapter",
@@ -189,6 +235,7 @@ __all__ = [
189
235
  "DataFusionAdapter",
190
236
  "PolarsAdapter",
191
237
  "ClickHouseAdapter",
238
+ "ClickHouseCloudAdapter",
192
239
  "DatabricksAdapter",
193
240
  "BigQueryAdapter",
194
241
  "RedshiftAdapter",
@@ -204,6 +251,7 @@ __all__ = [
204
251
  "AzureSynapseAdapter",
205
252
  "FabricWarehouseAdapter",
206
253
  "MicrosoftFabricAdapter", # Backward compatibility alias
254
+ "QuantonAdapter",
207
255
  # DataFrame adapters
208
256
  "PolarsDataFrameAdapter",
209
257
  "PandasDataFrameAdapter",
@@ -387,23 +435,26 @@ def get_dataframe_adapter(platform_name: str, **config):
387
435
  ValueError: If platform is not a recognized DataFrame platform
388
436
  ImportError: If required dependencies are not installed
389
437
  """
390
- dataframe_mapping = {
391
- "polars-df": PolarsDataFrameAdapter,
392
- "pandas-df": PandasDataFrameAdapter,
393
- "modin-df": ModinDataFrameAdapter,
394
- "cudf-df": CuDFDataFrameAdapter,
395
- "dask-df": DaskDataFrameAdapter,
396
- "datafusion-df": DataFusionDataFrameAdapter,
397
- "pyspark-df": PySparkDataFrameAdapter,
438
+ # Mapping uses lazy-loaded adapter names (resolved via __getattr__)
439
+ dataframe_adapter_names = {
440
+ "polars-df": "PolarsDataFrameAdapter",
441
+ "pandas-df": "PandasDataFrameAdapter",
442
+ "modin-df": "ModinDataFrameAdapter",
443
+ "cudf-df": "CuDFDataFrameAdapter",
444
+ "dask-df": "DaskDataFrameAdapter",
445
+ "datafusion-df": "DataFusionDataFrameAdapter",
446
+ "pyspark-df": "PySparkDataFrameAdapter",
398
447
  }
399
448
 
400
449
  platform_lower = platform_name.lower()
401
450
 
402
- if platform_lower not in dataframe_mapping:
403
- available = ", ".join(sorted(dataframe_mapping.keys()))
451
+ if platform_lower not in dataframe_adapter_names:
452
+ available = ", ".join(sorted(dataframe_adapter_names.keys()))
404
453
  raise ValueError(f"Unknown DataFrame platform: {platform_name}. Available: {available}")
405
454
 
406
- adapter_class = dataframe_mapping[platform_lower]
455
+ # Trigger lazy load via __getattr__
456
+ adapter_name = dataframe_adapter_names[platform_lower]
457
+ adapter_class = _load_lazy_adapter(adapter_name)
407
458
 
408
459
  if adapter_class is None:
409
460
  requirements = get_dataframe_requirements(platform_lower)
@@ -420,16 +471,18 @@ def list_available_dataframe_platforms() -> dict[str, bool]:
420
471
  Returns:
421
472
  Dictionary mapping platform name to availability boolean
422
473
  """
423
- platforms = {
424
- "polars-df": POLARS_AVAILABLE,
425
- "pandas-df": PANDAS_AVAILABLE,
426
- "modin-df": MODIN_AVAILABLE,
427
- "cudf-df": CUDF_AVAILABLE,
428
- "dask-df": DASK_AVAILABLE,
429
- "datafusion-df": DATAFUSION_DF_AVAILABLE,
430
- "pyspark-df": PYSPARK_AVAILABLE,
474
+ # Mapping uses lazy-loaded constant names (resolved via __getattr__)
475
+ availability_constants = {
476
+ "polars-df": "POLARS_AVAILABLE",
477
+ "pandas-df": "PANDAS_AVAILABLE",
478
+ "modin-df": "MODIN_AVAILABLE",
479
+ "cudf-df": "CUDF_AVAILABLE",
480
+ "dask-df": "DASK_AVAILABLE",
481
+ "datafusion-df": "DATAFUSION_DF_AVAILABLE",
482
+ "pyspark-df": "PYSPARK_AVAILABLE",
431
483
  }
432
- return platforms
484
+ # Trigger lazy load via __getattr__ for each constant
485
+ return {platform: _load_lazy_constant(const_name) for platform, const_name in availability_constants.items()}
433
486
 
434
487
 
435
488
  def get_dataframe_requirements(platform_name: str) -> str:
@@ -442,13 +495,17 @@ def get_dataframe_requirements(platform_name: str) -> str:
442
495
  Installation command string
443
496
  """
444
497
  requirements = {
445
- "polars-df": "uv add polars (core dependency - should be installed)",
446
- "pandas-df": "uv add benchbox --extra dataframe-pandas",
447
- "modin-df": "uv add modin[ray] (or modin[dask])",
498
+ "polars-df": "pip install polars (core dependency - should be installed)",
499
+ "pandas-df": (
500
+ "pip install pandas # standalone\n uv add benchbox --extra dataframe-pandas # inside a project"
501
+ ),
502
+ "modin-df": "pip install modin[ray] (or modin[dask])",
448
503
  "cudf-df": "pip install cudf-cu12 (requires NVIDIA GPU with CUDA)",
449
- "dask-df": "uv add dask[distributed]",
450
- "datafusion-df": "uv add datafusion (or uv add benchbox --extra datafusion)",
451
- "pyspark-df": "uv add benchbox --extra dataframe-pyspark",
504
+ "dask-df": "pip install dask[distributed]",
505
+ "datafusion-df": "pip install datafusion",
506
+ "pyspark-df": (
507
+ "pip install pyspark # standalone\n uv add benchbox --extra dataframe-pyspark # inside a project"
508
+ ),
452
509
  }
453
510
 
454
511
  return requirements.get(platform_name.lower(), "Unknown DataFrame platform")
@@ -475,514 +532,575 @@ def is_dataframe_platform(platform_name: str) -> bool:
475
532
 
476
533
 
477
534
  # ============================================================================
478
- # Platform Hook Registration
535
+ # Platform Hook Registration (Deferred)
479
536
  # ============================================================================
480
- # IMPORTANT: This registration block MUST be at the bottom of the module to
481
- # avoid circular import issues.
482
- #
483
- # The registration imports benchbox.cli.platform_hooks, which imports
484
- # benchbox.core.platform_registry, which can trigger re-entrant imports of
485
- # benchbox.platforms. By placing this registration at the very bottom, we
486
- # ensure that all platform imports (clickhouse, databricks, etc.) have
487
- # completed before we import PlatformHookRegistry.
537
+ # Platform hooks are registered lazily to avoid triggering SDK imports during
538
+ # module load. The option specs are registered unconditionally (they're just
539
+ # metadata), but config builders are wrapped in lazy loaders that only import
540
+ # the adapter module when the builder is actually called.
488
541
  #
489
- # Previous circular import chain that this placement prevents:
490
- # 1. from benchbox.platforms.databricks import DatabricksAdapter
491
- # 2. benchbox/platforms/__init__.py starts loading
492
- # 3. Line 14: imports platform_registry → triggers platforms.base import
493
- # 4. Lines 32-40: tries to import clickhouse module
494
- # 5. clickhouse/__init__.py:27 imports platform_hooks
495
- # 6. platform_hooks imports platform_registry
496
- # 7. platform_registry tries to re-import platforms
497
- # 8. ERROR: platforms is partially initialized (stuck at clickhouse import)
498
- #
499
- # With this placement at the bottom, all imports complete before registration.
542
+ # This is critical for test performance - importing adapters like Databricks
543
+ # or Snowflake triggers heavy SDK imports (300+ seconds). By deferring these
544
+ # imports, pytest collection time is dramatically reduced.
500
545
  # ============================================================================
501
546
 
502
- # Register config builders for platforms that can't do it themselves due to circular imports
503
- # (specifically, package-structured platforms like databricks)
547
+
548
+ def _make_lazy_config_builder(module_path: str, builder_name: str):
549
+ """Create a lazy config builder that defers module import until called.
550
+
551
+ Args:
552
+ module_path: Relative module path (e.g., '.databricks')
553
+ builder_name: Name of the config builder function in the module
554
+
555
+ Returns:
556
+ A wrapper function that lazily imports and calls the real builder
557
+ """
558
+ from typing import Any
559
+
560
+ def lazy_builder(
561
+ platform: str,
562
+ options: dict[str, Any],
563
+ overrides: dict[str, Any],
564
+ info: Any,
565
+ ):
566
+ module = importlib.import_module(module_path, __package__)
567
+ real_builder = getattr(module, builder_name)
568
+ return real_builder(platform, options, overrides, info)
569
+
570
+ return lazy_builder
571
+
572
+
504
573
  try:
505
574
  from benchbox.cli.platform_hooks import PlatformHookRegistry, PlatformOptionSpec, parse_bool
506
575
 
507
- # Register Databricks config builder (can't register in databricks/__init__.py due to circular import)
508
- if DatabricksAdapter is not None:
509
- from benchbox.platforms.databricks import _build_databricks_config
510
-
511
- PlatformHookRegistry.register_config_builder("databricks", _build_databricks_config)
512
-
513
- # Register Databricks platform options
514
- PlatformHookRegistry.register_option_specs(
515
- "databricks",
516
- PlatformOptionSpec(
517
- name="uc_catalog",
518
- help="Unity Catalog catalog name for staging data",
519
- ),
520
- PlatformOptionSpec(
521
- name="uc_schema",
522
- help="Unity Catalog schema name for staging data",
523
- ),
524
- PlatformOptionSpec(
525
- name="uc_volume",
526
- help="Unity Catalog volume name for staging data",
527
- ),
528
- PlatformOptionSpec(
529
- name="staging_root",
530
- help="Cloud storage path for staging data (e.g., dbfs:/Volumes/..., s3://..., abfss://...)",
531
- ),
532
- )
576
+ # ========================================================================
577
+ # Cloud Platform Hooks (Lazy Config Builders)
578
+ # ========================================================================
579
+ # These platforms use lazy config builders to avoid importing heavy SDKs
580
+ # at module load time. Option specs are registered unconditionally.
533
581
 
534
- # Register BigQuery config builder and platform options
535
- if BigQueryAdapter is not None:
536
- from benchbox.platforms.bigquery import _build_bigquery_config
537
-
538
- PlatformHookRegistry.register_config_builder("bigquery", _build_bigquery_config)
539
-
540
- # Register BigQuery platform options
541
- PlatformHookRegistry.register_option_specs(
542
- "bigquery",
543
- PlatformOptionSpec(
544
- name="staging_root",
545
- help="GCS path for staging data (e.g., gs://bucket/path)",
546
- ),
547
- PlatformOptionSpec(
548
- name="storage_bucket",
549
- help="GCS bucket name for data staging (alternative to staging_root)",
550
- ),
551
- PlatformOptionSpec(
552
- name="storage_prefix",
553
- help="GCS path prefix within bucket for data staging",
554
- ),
555
- )
582
+ # Databricks
583
+ PlatformHookRegistry.register_config_builder(
584
+ "databricks", _make_lazy_config_builder(".databricks", "_build_databricks_config")
585
+ )
586
+ PlatformHookRegistry.register_option_specs(
587
+ "databricks",
588
+ PlatformOptionSpec(
589
+ name="uc_catalog",
590
+ help="Unity Catalog catalog name for staging data",
591
+ ),
592
+ PlatformOptionSpec(
593
+ name="uc_schema",
594
+ help="Unity Catalog schema name for staging data",
595
+ ),
596
+ PlatformOptionSpec(
597
+ name="uc_volume",
598
+ help="Unity Catalog volume name for staging data",
599
+ ),
600
+ PlatformOptionSpec(
601
+ name="staging_root",
602
+ help="Cloud storage path for staging data (e.g., dbfs:/Volumes/..., s3://..., abfss://...)",
603
+ ),
604
+ )
556
605
 
557
- # Register Trino config builder and platform options
558
- if TrinoAdapter is not None:
559
- from benchbox.platforms.trino import _build_trino_config
560
-
561
- PlatformHookRegistry.register_config_builder("trino", _build_trino_config)
562
-
563
- # Register Trino platform options
564
- PlatformHookRegistry.register_option_specs(
565
- "trino",
566
- PlatformOptionSpec(
567
- name="catalog",
568
- help="Trino catalog to use (e.g., hive, iceberg, memory). Auto-discovered if not specified.",
569
- ),
570
- PlatformOptionSpec(
571
- name="staging_root",
572
- help="Cloud storage path for staging data (e.g., s3://..., gs://..., abfss://...)",
573
- ),
574
- PlatformOptionSpec(
575
- name="table_format",
576
- help="Table format for creating tables (memory, hive, iceberg, delta)",
577
- default="memory",
578
- ),
579
- PlatformOptionSpec(
580
- name="source_catalog",
581
- help="Source catalog for external data loading (e.g., hive connector)",
582
- ),
583
- )
606
+ # BigQuery
607
+ PlatformHookRegistry.register_config_builder(
608
+ "bigquery", _make_lazy_config_builder(".bigquery", "_build_bigquery_config")
609
+ )
610
+ PlatformHookRegistry.register_option_specs(
611
+ "bigquery",
612
+ PlatformOptionSpec(
613
+ name="staging_root",
614
+ help="GCS path for staging data (e.g., gs://bucket/path)",
615
+ ),
616
+ PlatformOptionSpec(
617
+ name="storage_bucket",
618
+ help="GCS bucket name for data staging (alternative to staging_root)",
619
+ ),
620
+ PlatformOptionSpec(
621
+ name="storage_prefix",
622
+ help="GCS path prefix within bucket for data staging",
623
+ ),
624
+ )
584
625
 
585
- # Register Firebolt config builder and platform options
586
- if FireboltAdapter is not None:
587
- from benchbox.platforms.firebolt import _build_firebolt_config
588
-
589
- PlatformHookRegistry.register_config_builder("firebolt", _build_firebolt_config)
590
-
591
- # Register Firebolt platform options
592
- PlatformHookRegistry.register_option_specs(
593
- "firebolt",
594
- PlatformOptionSpec(
595
- name="firebolt_mode",
596
- help="Explicit Firebolt mode: 'core' for local Docker, 'cloud' for managed Firebolt",
597
- ),
598
- PlatformOptionSpec(
599
- name="url",
600
- help="Firebolt Core endpoint URL (default: http://localhost:3473)",
601
- default="http://localhost:3473",
602
- ),
603
- PlatformOptionSpec(
604
- name="client_id",
605
- help="Firebolt Cloud OAuth client ID",
606
- ),
607
- PlatformOptionSpec(
608
- name="client_secret",
609
- help="Firebolt Cloud OAuth client secret",
610
- ),
611
- PlatformOptionSpec(
612
- name="account_name",
613
- help="Firebolt Cloud account name",
614
- ),
615
- PlatformOptionSpec(
616
- name="engine_name",
617
- help="Firebolt Cloud engine name",
618
- ),
619
- PlatformOptionSpec(
620
- name="api_endpoint",
621
- help="Firebolt Cloud API endpoint",
622
- default="api.app.firebolt.io",
623
- ),
624
- )
626
+ # Trino
627
+ PlatformHookRegistry.register_config_builder("trino", _make_lazy_config_builder(".trino", "_build_trino_config"))
628
+ PlatformHookRegistry.register_option_specs(
629
+ "trino",
630
+ PlatformOptionSpec(
631
+ name="catalog",
632
+ help="Trino catalog to use (e.g., hive, iceberg, memory). Auto-discovered if not specified.",
633
+ ),
634
+ PlatformOptionSpec(
635
+ name="staging_root",
636
+ help="Cloud storage path for staging data (e.g., s3://..., gs://..., abfss://...)",
637
+ ),
638
+ PlatformOptionSpec(
639
+ name="table_format",
640
+ help="Table format for creating tables (memory, hive, iceberg, delta)",
641
+ default="memory",
642
+ ),
643
+ PlatformOptionSpec(
644
+ name="source_catalog",
645
+ help="Source catalog for external data loading (e.g., hive connector)",
646
+ ),
647
+ )
625
648
 
626
- # Register Presto config builder and platform options
627
- if PrestoAdapter is not None:
628
- from benchbox.platforms.presto import _build_presto_config
629
-
630
- PlatformHookRegistry.register_config_builder("presto", _build_presto_config)
631
-
632
- # Register Presto platform options
633
- PlatformHookRegistry.register_option_specs(
634
- "presto",
635
- PlatformOptionSpec(
636
- name="catalog",
637
- help="Presto catalog to use (e.g., hive, memory). Auto-discovered if not specified.",
638
- ),
639
- PlatformOptionSpec(
640
- name="staging_root",
641
- help="Cloud storage path for staging data (e.g., s3://..., gs://...)",
642
- ),
643
- PlatformOptionSpec(
644
- name="table_format",
645
- help="Table format for creating tables (memory, hive)",
646
- default="memory",
647
- ),
648
- PlatformOptionSpec(
649
- name="source_catalog",
650
- help="Source catalog for external data loading (e.g., hive connector)",
651
- ),
652
- )
649
+ # Firebolt
650
+ PlatformHookRegistry.register_config_builder(
651
+ "firebolt", _make_lazy_config_builder(".firebolt", "_build_firebolt_config")
652
+ )
653
+ PlatformHookRegistry.register_option_specs(
654
+ "firebolt",
655
+ PlatformOptionSpec(
656
+ name="firebolt_mode",
657
+ help="Explicit Firebolt mode: 'core' for local Docker, 'cloud' for managed Firebolt",
658
+ ),
659
+ PlatformOptionSpec(
660
+ name="url",
661
+ help="Firebolt Core endpoint URL (default: http://localhost:3473)",
662
+ default="http://localhost:3473",
663
+ ),
664
+ PlatformOptionSpec(
665
+ name="client_id",
666
+ help="Firebolt Cloud OAuth client ID",
667
+ ),
668
+ PlatformOptionSpec(
669
+ name="client_secret",
670
+ help="Firebolt Cloud OAuth client secret",
671
+ ),
672
+ PlatformOptionSpec(
673
+ name="account_name",
674
+ help="Firebolt Cloud account name",
675
+ ),
676
+ PlatformOptionSpec(
677
+ name="engine_name",
678
+ help="Firebolt Cloud engine name",
679
+ ),
680
+ PlatformOptionSpec(
681
+ name="api_endpoint",
682
+ help="Firebolt Cloud API endpoint",
683
+ default="api.app.firebolt.io",
684
+ ),
685
+ )
686
+
687
+ # Presto
688
+ PlatformHookRegistry.register_config_builder("presto", _make_lazy_config_builder(".presto", "_build_presto_config"))
689
+ PlatformHookRegistry.register_option_specs(
690
+ "presto",
691
+ PlatformOptionSpec(
692
+ name="catalog",
693
+ help="Presto catalog to use (e.g., hive, memory). Auto-discovered if not specified.",
694
+ ),
695
+ PlatformOptionSpec(
696
+ name="staging_root",
697
+ help="Cloud storage path for staging data (e.g., s3://..., gs://...)",
698
+ ),
699
+ PlatformOptionSpec(
700
+ name="table_format",
701
+ help="Table format for creating tables (memory, hive)",
702
+ default="memory",
703
+ ),
704
+ PlatformOptionSpec(
705
+ name="source_catalog",
706
+ help="Source catalog for external data loading (e.g., hive connector)",
707
+ ),
708
+ )
653
709
 
654
- # Register PostgreSQL config builder and platform options
710
+ # ========================================================================
711
+ # Eagerly-Loaded Platform Hooks (PostgreSQL, TimescaleDB)
712
+ # ========================================================================
713
+ # These platforms have lightweight dependencies that are already loaded
714
+ # eagerly, so we can use direct imports for their config builders.
715
+
716
+ # PostgreSQL (eagerly loaded - uses psycopg2 which is a core dependency)
655
717
  if PostgreSQLAdapter is not None:
656
718
  from benchbox.platforms.postgresql import _build_postgresql_config
657
719
 
658
720
  PlatformHookRegistry.register_config_builder("postgresql", _build_postgresql_config)
659
721
 
660
- # Register PostgreSQL platform options
661
- PlatformHookRegistry.register_option_specs(
662
- "postgresql",
663
- PlatformOptionSpec(
664
- name="host",
665
- help="PostgreSQL server hostname",
666
- default="localhost",
667
- ),
668
- PlatformOptionSpec(
669
- name="port",
670
- help="PostgreSQL server port",
671
- default="5432",
672
- ),
673
- PlatformOptionSpec(
674
- name="database",
675
- help="PostgreSQL database name (auto-generated if not specified)",
676
- ),
677
- PlatformOptionSpec(
678
- name="username",
679
- help="PostgreSQL username",
680
- default="postgres",
681
- ),
682
- PlatformOptionSpec(
683
- name="password",
684
- help="PostgreSQL password",
685
- ),
686
- PlatformOptionSpec(
687
- name="schema",
688
- help="PostgreSQL schema name",
689
- default="public",
690
- ),
691
- PlatformOptionSpec(
692
- name="work_mem",
693
- help="PostgreSQL work_mem setting for queries",
694
- default="256MB",
695
- ),
696
- PlatformOptionSpec(
697
- name="enable_timescale",
698
- help="Enable TimescaleDB extensions if available",
699
- default="false",
700
- ),
701
- )
722
+ PlatformHookRegistry.register_option_specs(
723
+ "postgresql",
724
+ PlatformOptionSpec(
725
+ name="host",
726
+ help="PostgreSQL server hostname",
727
+ default="localhost",
728
+ ),
729
+ PlatformOptionSpec(
730
+ name="port",
731
+ help="PostgreSQL server port",
732
+ default="5432",
733
+ ),
734
+ PlatformOptionSpec(
735
+ name="database",
736
+ help="PostgreSQL database name (auto-generated if not specified)",
737
+ ),
738
+ PlatformOptionSpec(
739
+ name="username",
740
+ help="PostgreSQL username",
741
+ default="postgres",
742
+ ),
743
+ PlatformOptionSpec(
744
+ name="password",
745
+ help="PostgreSQL password",
746
+ ),
747
+ PlatformOptionSpec(
748
+ name="schema",
749
+ help="PostgreSQL schema name",
750
+ default="public",
751
+ ),
752
+ PlatformOptionSpec(
753
+ name="work_mem",
754
+ help="PostgreSQL work_mem setting for queries",
755
+ default="256MB",
756
+ ),
757
+ PlatformOptionSpec(
758
+ name="enable_timescale",
759
+ help="Enable TimescaleDB extensions if available",
760
+ default="false",
761
+ ),
762
+ )
702
763
 
703
- # Register TimescaleDB config builder and platform options
764
+ # TimescaleDB (eagerly loaded - shares psycopg2 with PostgreSQL)
704
765
  if TimescaleDBAdapter is not None:
705
766
  from benchbox.platforms.timescaledb import _build_timescaledb_config
706
767
 
707
768
  PlatformHookRegistry.register_config_builder("timescaledb", _build_timescaledb_config)
708
769
 
709
- # Register TimescaleDB platform options
710
- PlatformHookRegistry.register_option_specs(
711
- "timescaledb",
712
- PlatformOptionSpec(
713
- name="host",
714
- help="TimescaleDB server hostname",
715
- default="localhost",
716
- ),
717
- PlatformOptionSpec(
718
- name="port",
719
- help="TimescaleDB server port",
720
- default="5432",
721
- ),
722
- PlatformOptionSpec(
723
- name="database",
724
- help="TimescaleDB database name (auto-generated if not specified)",
725
- ),
726
- PlatformOptionSpec(
727
- name="username",
728
- help="TimescaleDB username",
729
- default="postgres",
730
- ),
731
- PlatformOptionSpec(
732
- name="password",
733
- help="TimescaleDB password",
734
- ),
735
- PlatformOptionSpec(
736
- name="schema",
737
- help="TimescaleDB schema name",
738
- default="public",
739
- ),
740
- PlatformOptionSpec(
741
- name="chunk_interval",
742
- help="Chunk time interval for hypertables (e.g., '1 day', '1 week')",
743
- default="1 day",
744
- ),
745
- PlatformOptionSpec(
746
- name="compression_enabled",
747
- help="Enable compression on hypertables",
748
- default="false",
749
- ),
750
- PlatformOptionSpec(
751
- name="compression_after",
752
- help="Compress chunks older than this interval (e.g., '7 days')",
753
- default="7 days",
754
- ),
755
- )
770
+ PlatformHookRegistry.register_option_specs(
771
+ "timescaledb",
772
+ PlatformOptionSpec(
773
+ name="host",
774
+ help="TimescaleDB server hostname",
775
+ default="localhost",
776
+ ),
777
+ PlatformOptionSpec(
778
+ name="port",
779
+ help="TimescaleDB server port",
780
+ default="5432",
781
+ ),
782
+ PlatformOptionSpec(
783
+ name="database",
784
+ help="TimescaleDB database name (auto-generated if not specified)",
785
+ ),
786
+ PlatformOptionSpec(
787
+ name="username",
788
+ help="TimescaleDB username",
789
+ default="postgres",
790
+ ),
791
+ PlatformOptionSpec(
792
+ name="password",
793
+ help="TimescaleDB password",
794
+ ),
795
+ PlatformOptionSpec(
796
+ name="schema",
797
+ help="TimescaleDB schema name",
798
+ default="public",
799
+ ),
800
+ PlatformOptionSpec(
801
+ name="chunk_interval",
802
+ help="Chunk time interval for hypertables (e.g., '1 day', '1 week')",
803
+ default="1 day",
804
+ ),
805
+ PlatformOptionSpec(
806
+ name="compression_enabled",
807
+ help="Enable compression on hypertables",
808
+ default="false",
809
+ ),
810
+ PlatformOptionSpec(
811
+ name="compression_after",
812
+ help="Compress chunks older than this interval (e.g., '7 days')",
813
+ default="7 days",
814
+ ),
815
+ )
756
816
 
757
- # Register Azure Synapse config builder and platform options
758
- if AzureSynapseAdapter is not None:
759
- from benchbox.platforms.azure_synapse import _build_synapse_config
760
-
761
- PlatformHookRegistry.register_config_builder("synapse", _build_synapse_config)
762
-
763
- # Register Azure Synapse platform options
764
- PlatformHookRegistry.register_option_specs(
765
- "synapse",
766
- PlatformOptionSpec(
767
- name="server",
768
- help="Azure Synapse server endpoint (e.g., myworkspace.sql.azuresynapse.net)",
769
- ),
770
- PlatformOptionSpec(
771
- name="database",
772
- help="Azure Synapse database name (auto-generated if not specified)",
773
- ),
774
- PlatformOptionSpec(
775
- name="username",
776
- help="Azure Synapse username",
777
- ),
778
- PlatformOptionSpec(
779
- name="password",
780
- help="Azure Synapse password",
781
- ),
782
- PlatformOptionSpec(
783
- name="auth_method",
784
- help="Authentication method: sql, aad_password, or aad_msi",
785
- default="sql",
786
- ),
787
- PlatformOptionSpec(
788
- name="storage_account",
789
- help="Azure storage account for data staging",
790
- ),
791
- PlatformOptionSpec(
792
- name="container",
793
- help="Azure blob container name",
794
- ),
795
- PlatformOptionSpec(
796
- name="storage_sas_token",
797
- help="SAS token for Azure storage access",
798
- ),
799
- PlatformOptionSpec(
800
- name="resource_class",
801
- help="Workload resource class (e.g., staticrc20, staticrc30)",
802
- default="staticrc20",
803
- ),
804
- )
817
+ # ========================================================================
818
+ # Lazy Cloud Platform Hooks (Azure Synapse, Fabric)
819
+ # ========================================================================
805
820
 
806
- # Register Microsoft Fabric Warehouse config builder and platform options
807
- if FabricWarehouseAdapter is not None:
808
- # Fabric uses from_config pattern, no separate config builder needed
809
- # (the adapter's from_config method handles configuration)
810
-
811
- # Register Fabric Warehouse platform options
812
- PlatformHookRegistry.register_option_specs(
813
- "fabric_dw",
814
- PlatformOptionSpec(
815
- name="server",
816
- help="Fabric warehouse endpoint (e.g., workspace-guid.datawarehouse.fabric.microsoft.com)",
817
- ),
818
- PlatformOptionSpec(
819
- name="workspace",
820
- help="Fabric workspace name or GUID",
821
- ),
822
- PlatformOptionSpec(
823
- name="warehouse",
824
- help="Fabric warehouse name",
825
- ),
826
- PlatformOptionSpec(
827
- name="database",
828
- help="Database/warehouse name (alias for --warehouse)",
829
- ),
830
- PlatformOptionSpec(
831
- name="auth_method",
832
- help="Authentication method: service_principal, default_credential, or interactive",
833
- default="default_credential",
834
- ),
835
- PlatformOptionSpec(
836
- name="tenant_id",
837
- help="Azure tenant ID for service principal auth",
838
- ),
839
- PlatformOptionSpec(
840
- name="client_id",
841
- help="Service principal client ID",
842
- ),
843
- PlatformOptionSpec(
844
- name="client_secret",
845
- help="Service principal client secret",
846
- ),
847
- PlatformOptionSpec(
848
- name="staging_path",
849
- help="OneLake staging path for data loading",
850
- default="benchbox-staging",
851
- ),
852
- )
821
+ # Azure Synapse (lazy - uses pyodbc and azure-identity)
822
+ PlatformHookRegistry.register_config_builder(
823
+ "synapse", _make_lazy_config_builder(".azure_synapse", "_build_synapse_config")
824
+ )
825
+ PlatformHookRegistry.register_option_specs(
826
+ "synapse",
827
+ PlatformOptionSpec(
828
+ name="server",
829
+ help="Azure Synapse server endpoint (e.g., myworkspace.sql.azuresynapse.net)",
830
+ ),
831
+ PlatformOptionSpec(
832
+ name="database",
833
+ help="Azure Synapse database name (auto-generated if not specified)",
834
+ ),
835
+ PlatformOptionSpec(
836
+ name="username",
837
+ help="Azure Synapse username",
838
+ ),
839
+ PlatformOptionSpec(
840
+ name="password",
841
+ help="Azure Synapse password",
842
+ ),
843
+ PlatformOptionSpec(
844
+ name="auth_method",
845
+ help="Authentication method: sql, aad_password, or aad_msi",
846
+ default="sql",
847
+ ),
848
+ PlatformOptionSpec(
849
+ name="storage_account",
850
+ help="Azure storage account for data staging",
851
+ ),
852
+ PlatformOptionSpec(
853
+ name="container",
854
+ help="Azure blob container name",
855
+ ),
856
+ PlatformOptionSpec(
857
+ name="storage_sas_token",
858
+ help="SAS token for Azure storage access",
859
+ ),
860
+ PlatformOptionSpec(
861
+ name="resource_class",
862
+ help="Workload resource class (e.g., staticrc20, staticrc30)",
863
+ default="staticrc20",
864
+ ),
865
+ )
866
+
867
+ # Microsoft Fabric Warehouse (lazy - uses pyodbc and azure-identity)
868
+ # Fabric uses from_config pattern, no separate config builder needed
869
+ PlatformHookRegistry.register_option_specs(
870
+ "fabric_dw",
871
+ PlatformOptionSpec(
872
+ name="server",
873
+ help="Fabric warehouse endpoint (e.g., workspace-guid.datawarehouse.fabric.microsoft.com)",
874
+ ),
875
+ PlatformOptionSpec(
876
+ name="workspace",
877
+ help="Fabric workspace name or GUID",
878
+ ),
879
+ PlatformOptionSpec(
880
+ name="warehouse",
881
+ help="Fabric warehouse name",
882
+ ),
883
+ PlatformOptionSpec(
884
+ name="database",
885
+ help="Database/warehouse name (alias for --warehouse)",
886
+ ),
887
+ PlatformOptionSpec(
888
+ name="auth_method",
889
+ help="Authentication method: service_principal, default_credential, or interactive",
890
+ default="default_credential",
891
+ ),
892
+ PlatformOptionSpec(
893
+ name="tenant_id",
894
+ help="Azure tenant ID for service principal auth",
895
+ ),
896
+ PlatformOptionSpec(
897
+ name="client_id",
898
+ help="Service principal client ID",
899
+ ),
900
+ PlatformOptionSpec(
901
+ name="client_secret",
902
+ help="Service principal client secret",
903
+ ),
904
+ PlatformOptionSpec(
905
+ name="staging_path",
906
+ help="OneLake staging path for data loading",
907
+ default="benchbox-staging",
908
+ ),
909
+ )
910
+
911
+ # Onehouse Quanton (lazy - uses requests and boto3)
912
+ PlatformHookRegistry.register_config_builder(
913
+ "quanton", _make_lazy_config_builder(".onehouse", "_build_quanton_config")
914
+ )
915
+ PlatformHookRegistry.register_option_specs(
916
+ "quanton",
917
+ PlatformOptionSpec(
918
+ name="api_key",
919
+ help="Onehouse API key (or set ONEHOUSE_API_KEY env var)",
920
+ ),
921
+ PlatformOptionSpec(
922
+ name="s3_staging_dir",
923
+ help="S3 path for data staging (e.g., s3://bucket/path)",
924
+ ),
925
+ PlatformOptionSpec(
926
+ name="region",
927
+ help="AWS region for cluster deployment",
928
+ default="us-east-1",
929
+ ),
930
+ PlatformOptionSpec(
931
+ name="database",
932
+ help="Database name for benchmarks",
933
+ default="benchbox",
934
+ ),
935
+ PlatformOptionSpec(
936
+ name="table_format",
937
+ help="Table format: iceberg, hudi, or delta",
938
+ choices=("iceberg", "hudi", "delta"),
939
+ default="iceberg",
940
+ ),
941
+ PlatformOptionSpec(
942
+ name="cluster_size",
943
+ help="Cluster size: small, medium, large, xlarge",
944
+ choices=("small", "medium", "large", "xlarge"),
945
+ default="small",
946
+ ),
947
+ )
948
+
949
+ # ClickHouse Cloud (lazy - uses clickhouse-connect)
950
+ PlatformHookRegistry.register_config_builder(
951
+ "clickhouse-cloud", _make_lazy_config_builder(".clickhouse_cloud", "_build_clickhouse_cloud_config")
952
+ )
953
+ PlatformHookRegistry.register_option_specs(
954
+ "clickhouse-cloud",
955
+ PlatformOptionSpec(
956
+ name="host",
957
+ help="ClickHouse Cloud hostname (e.g., abc123.us-east-2.aws.clickhouse.cloud)",
958
+ ),
959
+ PlatformOptionSpec(
960
+ name="password",
961
+ help="ClickHouse Cloud password (or set CLICKHOUSE_CLOUD_PASSWORD env var)",
962
+ ),
963
+ PlatformOptionSpec(
964
+ name="username",
965
+ help="Username (default: 'default')",
966
+ default="default",
967
+ ),
968
+ PlatformOptionSpec(
969
+ name="database",
970
+ help="Database name",
971
+ default="default",
972
+ ),
973
+ )
853
974
 
854
975
  # ========================================================================
855
976
  # DataFrame Platform Hooks
856
977
  # ========================================================================
978
+ # DataFrame platform option specs are registered unconditionally since
979
+ # they're just metadata. The actual adapter availability is checked at
980
+ # runtime when the adapter is instantiated.
857
981
 
858
- # Register Polars DataFrame platform options
859
- if PolarsDataFrameAdapter is not None:
860
- PlatformHookRegistry.register_option_specs(
861
- "polars-df",
862
- PlatformOptionSpec(
863
- name="streaming",
864
- help="Enable streaming mode for large datasets",
865
- parser=parse_bool,
866
- default="false",
867
- ),
868
- PlatformOptionSpec(
869
- name="rechunk",
870
- help="Rechunk data for better memory layout",
871
- parser=parse_bool,
872
- default="true",
873
- ),
874
- PlatformOptionSpec(
875
- name="n_rows",
876
- help="Limit number of rows to read (for testing)",
877
- parser=int,
878
- ),
879
- )
982
+ # Polars DataFrame
983
+ PlatformHookRegistry.register_option_specs(
984
+ "polars-df",
985
+ PlatformOptionSpec(
986
+ name="streaming",
987
+ help="Enable streaming mode for large datasets",
988
+ parser=parse_bool,
989
+ default="false",
990
+ ),
991
+ PlatformOptionSpec(
992
+ name="rechunk",
993
+ help="Rechunk data for better memory layout",
994
+ parser=parse_bool,
995
+ default="true",
996
+ ),
997
+ PlatformOptionSpec(
998
+ name="n_rows",
999
+ help="Limit number of rows to read (for testing)",
1000
+ parser=int,
1001
+ ),
1002
+ )
880
1003
 
881
- # Register Pandas DataFrame platform options
882
- if PandasDataFrameAdapter is not None:
883
- PlatformHookRegistry.register_option_specs(
884
- "pandas-df",
885
- PlatformOptionSpec(
886
- name="dtype_backend",
887
- help="Backend for nullable dtypes",
888
- choices=("numpy", "numpy_nullable", "pyarrow"),
889
- default="numpy_nullable",
890
- ),
891
- )
1004
+ # Pandas DataFrame
1005
+ PlatformHookRegistry.register_option_specs(
1006
+ "pandas-df",
1007
+ PlatformOptionSpec(
1008
+ name="dtype_backend",
1009
+ help="Backend for nullable dtypes",
1010
+ choices=("numpy", "numpy_nullable", "pyarrow"),
1011
+ default="numpy_nullable",
1012
+ ),
1013
+ )
892
1014
 
893
- # Register Modin DataFrame platform options
894
- if ModinDataFrameAdapter is not None:
895
- PlatformHookRegistry.register_option_specs(
896
- "modin-df",
897
- PlatformOptionSpec(
898
- name="engine",
899
- help="Modin execution engine",
900
- choices=("ray", "dask"),
901
- default="ray",
902
- ),
903
- )
1015
+ # Modin DataFrame
1016
+ PlatformHookRegistry.register_option_specs(
1017
+ "modin-df",
1018
+ PlatformOptionSpec(
1019
+ name="engine",
1020
+ help="Modin execution engine",
1021
+ choices=("ray", "dask"),
1022
+ default="ray",
1023
+ ),
1024
+ )
904
1025
 
905
- # Register cuDF DataFrame platform options
906
- if CuDFDataFrameAdapter is not None:
907
- PlatformHookRegistry.register_option_specs(
908
- "cudf-df",
909
- PlatformOptionSpec(
910
- name="device_id",
911
- help="CUDA device ID to use",
912
- parser=int,
913
- default="0",
914
- ),
915
- PlatformOptionSpec(
916
- name="spill_to_host",
917
- help="Enable GPU memory spilling to host RAM",
918
- parser=parse_bool,
919
- default="true",
920
- ),
921
- )
1026
+ # cuDF DataFrame
1027
+ PlatformHookRegistry.register_option_specs(
1028
+ "cudf-df",
1029
+ PlatformOptionSpec(
1030
+ name="device_id",
1031
+ help="CUDA device ID to use",
1032
+ parser=int,
1033
+ default="0",
1034
+ ),
1035
+ PlatformOptionSpec(
1036
+ name="spill_to_host",
1037
+ help="Enable GPU memory spilling to host RAM",
1038
+ parser=parse_bool,
1039
+ default="true",
1040
+ ),
1041
+ )
922
1042
 
923
- # Register Dask DataFrame platform options
924
- if DaskDataFrameAdapter is not None:
925
- PlatformHookRegistry.register_option_specs(
926
- "dask-df",
927
- PlatformOptionSpec(
928
- name="n_workers",
929
- help="Number of worker processes",
930
- parser=int,
931
- ),
932
- PlatformOptionSpec(
933
- name="threads_per_worker",
934
- help="Threads per worker process",
935
- parser=int,
936
- default="1",
937
- ),
938
- PlatformOptionSpec(
939
- name="use_distributed",
940
- help="Use distributed scheduler (enables dashboard)",
941
- parser=parse_bool,
942
- default="false",
943
- ),
944
- PlatformOptionSpec(
945
- name="scheduler_address",
946
- help="Connect to existing scheduler (e.g., 'tcp://...')",
947
- ),
948
- )
1043
+ # Dask DataFrame
1044
+ PlatformHookRegistry.register_option_specs(
1045
+ "dask-df",
1046
+ PlatformOptionSpec(
1047
+ name="n_workers",
1048
+ help="Number of worker processes",
1049
+ parser=int,
1050
+ ),
1051
+ PlatformOptionSpec(
1052
+ name="threads_per_worker",
1053
+ help="Threads per worker process",
1054
+ parser=int,
1055
+ default="1",
1056
+ ),
1057
+ PlatformOptionSpec(
1058
+ name="use_distributed",
1059
+ help="Use distributed scheduler (enables dashboard)",
1060
+ parser=parse_bool,
1061
+ default="false",
1062
+ ),
1063
+ PlatformOptionSpec(
1064
+ name="scheduler_address",
1065
+ help="Connect to existing scheduler (e.g., 'tcp://...')",
1066
+ ),
1067
+ )
949
1068
 
950
- # Register DataFusion DataFrame platform options
951
- if DataFusionDataFrameAdapter is not None:
952
- PlatformHookRegistry.register_option_specs(
953
- "datafusion-df",
954
- PlatformOptionSpec(
955
- name="target_partitions",
956
- help="Number of target partitions for parallelism (default: CPU count)",
957
- parser=int,
958
- ),
959
- PlatformOptionSpec(
960
- name="repartition_joins",
961
- help="Enable automatic repartitioning for joins",
962
- parser=parse_bool,
963
- default="true",
964
- ),
965
- PlatformOptionSpec(
966
- name="parquet_pushdown",
967
- help="Enable predicate/projection pushdown for Parquet files",
968
- parser=parse_bool,
969
- default="true",
970
- ),
971
- PlatformOptionSpec(
972
- name="batch_size",
973
- help="Batch size for query execution",
974
- parser=int,
975
- default="8192",
976
- ),
977
- PlatformOptionSpec(
978
- name="memory_limit",
979
- help="Memory limit for fair spill pool (e.g., '8G', '16GB')",
980
- ),
981
- PlatformOptionSpec(
982
- name="temp_dir",
983
- help="Temporary directory for disk spilling (default: system temp)",
984
- ),
985
- )
1069
+ # DataFusion DataFrame
1070
+ PlatformHookRegistry.register_option_specs(
1071
+ "datafusion-df",
1072
+ PlatformOptionSpec(
1073
+ name="target_partitions",
1074
+ help="Number of target partitions for parallelism (default: CPU count)",
1075
+ parser=int,
1076
+ ),
1077
+ PlatformOptionSpec(
1078
+ name="repartition_joins",
1079
+ help="Enable automatic repartitioning for joins",
1080
+ parser=parse_bool,
1081
+ default="true",
1082
+ ),
1083
+ PlatformOptionSpec(
1084
+ name="parquet_pushdown",
1085
+ help="Enable predicate/projection pushdown for Parquet files",
1086
+ parser=parse_bool,
1087
+ default="true",
1088
+ ),
1089
+ PlatformOptionSpec(
1090
+ name="batch_size",
1091
+ help="Batch size for query execution",
1092
+ parser=int,
1093
+ default="8192",
1094
+ ),
1095
+ PlatformOptionSpec(
1096
+ name="memory_limit",
1097
+ help="Memory limit for fair spill pool (e.g., '8G', '16GB')",
1098
+ ),
1099
+ PlatformOptionSpec(
1100
+ name="temp_dir",
1101
+ help="Temporary directory for disk spilling (default: system temp)",
1102
+ ),
1103
+ )
986
1104
  except ImportError:
987
1105
  # Platform hooks may not be available in all contexts
988
1106
  pass