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
@@ -0,0 +1,909 @@
1
+ """Centralized result builder for benchmark execution.
2
+
3
+ This module provides the ResultBuilder class that consolidates all BenchmarkResults
4
+ creation into a single, centralized location. This ensures consistent, complete
5
+ output regardless of execution mode (SQL vs DataFrame).
6
+
7
+ Usage:
8
+ from benchbox.core.results.builder import ResultBuilder, BenchmarkInfoInput
9
+
10
+ builder = ResultBuilder(
11
+ benchmark=BenchmarkInfoInput(name="TPC-H", scale_factor=1.0),
12
+ platform=PlatformInfoInput(name="DuckDB", platform_version="1.0.0"),
13
+ )
14
+
15
+ for result in query_results:
16
+ builder.add_query_result(normalize_query_result(result))
17
+
18
+ builder.set_loading_time(load_time_ms)
19
+ results = builder.build()
20
+
21
+ Copyright 2026 Joe Harris / BenchBox Project
22
+
23
+ Licensed under the MIT License. See LICENSE file in the project root for details.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import uuid
29
+ from dataclasses import dataclass
30
+ from datetime import datetime
31
+ from typing import TYPE_CHECKING, Any
32
+
33
+ from benchbox.core.results.metrics import (
34
+ TimingStatsCalculator,
35
+ TPCMetricsCalculator,
36
+ )
37
+ from benchbox.core.results.models import (
38
+ BenchmarkResults,
39
+ DataLoadingPhase,
40
+ ExecutionPhases,
41
+ PowerTestPhase,
42
+ QueryExecution,
43
+ SetupPhase,
44
+ TableLoadingStats,
45
+ ThroughputStream,
46
+ ThroughputTestPhase,
47
+ )
48
+ from benchbox.core.results.platform_info import (
49
+ PlatformInfoInput,
50
+ format_platform_display_name,
51
+ )
52
+ from benchbox.core.results.query_normalizer import (
53
+ QueryResultInput,
54
+ format_query_id,
55
+ )
56
+
57
+ if TYPE_CHECKING:
58
+ pass
59
+
60
+
61
+ def normalize_benchmark_id(name: str) -> str:
62
+ """Normalize benchmark name to canonical ID.
63
+
64
+ Maps benchmark names to canonical IDs for consistent identification
65
+ across SQL and DataFrame execution paths.
66
+
67
+ Args:
68
+ name: Benchmark name (e.g., "TPC-H", "TPC-H Benchmark", "tpch")
69
+
70
+ Returns:
71
+ Canonical benchmark ID (e.g., "tpch", "tpcds", "ssb", "clickbench")
72
+
73
+ Examples:
74
+ >>> normalize_benchmark_id("TPC-H")
75
+ 'tpch'
76
+ >>> normalize_benchmark_id("TPC-H Benchmark")
77
+ 'tpch'
78
+ >>> normalize_benchmark_id("TPC-DS")
79
+ 'tpcds'
80
+ """
81
+ # Strip " Benchmark" suffix if present
82
+ short_name = name[:-10] if name.lower().endswith(" benchmark") else name
83
+ lowered = short_name.lower()
84
+
85
+ # Canonical ID mappings for known benchmarks
86
+ # Each tuple contains variant spellings that map to the canonical ID
87
+ benchmark_mappings: list[tuple[str, tuple[str, ...]]] = [
88
+ ("tpch", ("tpch", "tpc-h", "tpc_h")),
89
+ ("tpcds", ("tpcds", "tpc-ds", "tpc_ds")),
90
+ ("ssb", ("ssb",)),
91
+ ("clickbench", ("clickbench",)),
92
+ ]
93
+
94
+ for canonical_id, variants in benchmark_mappings:
95
+ if any(v in lowered for v in variants):
96
+ return canonical_id
97
+
98
+ # Generic normalization: lowercase with underscores
99
+ normalized = lowered.replace(" ", "_").replace("-", "_")
100
+ while "__" in normalized:
101
+ normalized = normalized.replace("__", "_")
102
+ return normalized
103
+
104
+
105
+ @dataclass
106
+ class BenchmarkInfoInput:
107
+ """Normalized benchmark information."""
108
+
109
+ name: str # Always short form: "TPC-H", "TPC-DS" (not "TPC-H Benchmark")
110
+ scale_factor: float
111
+ test_type: str = "power" # "power", "throughput", "standard", "combined"
112
+ benchmark_id: str | None = None
113
+ display_name: str | None = None # Optional full display name
114
+
115
+
116
+ @dataclass
117
+ class TableStats:
118
+ """Statistics for a loaded table."""
119
+
120
+ rows: int
121
+ load_time_ms: int = 0
122
+ status: str = "SUCCESS"
123
+ error_message: str | None = None
124
+
125
+
126
+ @dataclass
127
+ class RunConfigInput:
128
+ """Run configuration for reproducibility."""
129
+
130
+ compression_type: str | None = None
131
+ compression_level: int | None = None
132
+ seed: int | None = None
133
+ phases: list[str] | None = None
134
+ query_subset: list[str] | None = None
135
+ parallelism: int | None = None
136
+ tuning_mode: str | None = None
137
+ tuning_config: dict[str, Any] | None = None
138
+ platform_options: dict[str, Any] | None = None
139
+
140
+ def to_dict(self) -> dict[str, Any]:
141
+ data: dict[str, Any] = {}
142
+ if self.compression_type:
143
+ data["compression"] = {"type": self.compression_type, "level": self.compression_level}
144
+ if self.seed is not None:
145
+ data["seed"] = self.seed
146
+ if self.phases:
147
+ data["phases"] = self.phases
148
+ if self.query_subset:
149
+ data["query_subset"] = self.query_subset
150
+ if self.parallelism is not None:
151
+ data["parallelism"] = self.parallelism
152
+ if self.tuning_mode:
153
+ data["tuning_mode"] = self.tuning_mode
154
+ if self.tuning_config:
155
+ data["tuning_config"] = self.tuning_config
156
+ if self.platform_options:
157
+ data["platform_options"] = self.platform_options
158
+ return data
159
+
160
+
161
+ class ResultBuilder:
162
+ """Centralized builder for BenchmarkResults.
163
+
164
+ This class collects execution data from any adapter (SQL or DataFrame)
165
+ and produces complete, validated BenchmarkResults instances with
166
+ consistent field population.
167
+
168
+ Key responsibilities:
169
+ - Normalize query results to consistent format
170
+ - Calculate TPC metrics (Power@Size, Throughput@Size, QphH)
171
+ - Calculate timing statistics (avg, min, max, percentiles, geometric mean)
172
+ - Build complete platform_info with rich configuration
173
+ - Ensure all fields are populated regardless of execution mode
174
+ """
175
+
176
+ def __init__(
177
+ self,
178
+ benchmark: BenchmarkInfoInput,
179
+ platform: PlatformInfoInput,
180
+ execution_id: str | None = None,
181
+ ):
182
+ """Initialize the result builder.
183
+
184
+ Args:
185
+ benchmark: Benchmark identification and configuration
186
+ platform: Platform identification and configuration
187
+ execution_id: Optional unique execution ID (auto-generated if not provided)
188
+ """
189
+ self._benchmark = benchmark
190
+ self._platform = platform
191
+ self._execution_id = execution_id or self._generate_id()
192
+
193
+ # Query results storage
194
+ self._query_results: list[QueryResultInput] = []
195
+
196
+ # Table loading statistics
197
+ self._table_stats: dict[str, TableStats] = {}
198
+ self._loading_time_ms: float = 0.0
199
+
200
+ # Timing metadata
201
+ self._start_time: datetime | None = None
202
+ self._end_time: datetime | None = None
203
+
204
+ # Additional metadata
205
+ self._validation_status: str = "PASSED"
206
+ self._validation_details: dict[str, Any] | None = None
207
+ self._execution_metadata: dict[str, Any] = {}
208
+ self._run_config: RunConfigInput | None = None
209
+ self._phase_status: dict[str, dict[str, Any]] = {}
210
+ self._system_profile: dict[str, Any] | None = None
211
+ self._tunings_applied: dict[str, Any] | None = None
212
+ self._tuning_config_hash: str | None = None
213
+ self._tuning_source_file: str | None = None
214
+
215
+ # Query plan capture statistics
216
+ self._query_plans_captured: int = 0
217
+ self._plan_capture_failures: int = 0
218
+ self._plan_capture_errors: list[dict[str, str]] = []
219
+
220
+ # Cost tracking
221
+ self._cost_summary: dict[str, Any] | None = None
222
+
223
+ # Throughput test data (for multi-stream benchmarks)
224
+ self._throughput_streams: list[dict[str, Any]] = []
225
+ self._throughput_total_time_seconds: float = 0.0
226
+ self._execution_phases_override: ExecutionPhases | None = None
227
+
228
+ @staticmethod
229
+ def _generate_id() -> str:
230
+ """Generate a unique execution ID."""
231
+ return uuid.uuid4().hex[:8]
232
+
233
+ # -------------------------------------------------------------------------
234
+ # Query Result Collection
235
+ # -------------------------------------------------------------------------
236
+
237
+ def add_query_result(self, result: QueryResultInput) -> None:
238
+ """Add a query execution result.
239
+
240
+ Args:
241
+ result: Normalized query result
242
+ """
243
+ self._query_results.append(result)
244
+
245
+ def add_query_results(self, results: list[QueryResultInput]) -> None:
246
+ """Add multiple query execution results.
247
+
248
+ Args:
249
+ results: List of normalized query results
250
+ """
251
+ self._query_results.extend(results)
252
+
253
+ # -------------------------------------------------------------------------
254
+ # Table Loading Statistics
255
+ # -------------------------------------------------------------------------
256
+
257
+ def add_table_stats(
258
+ self,
259
+ table_name: str,
260
+ row_count: int,
261
+ load_time_ms: int = 0,
262
+ status: str = "SUCCESS",
263
+ error_message: str | None = None,
264
+ ) -> None:
265
+ """Add table loading statistics.
266
+
267
+ Args:
268
+ table_name: Name of the table
269
+ row_count: Number of rows loaded
270
+ load_time_ms: Time to load the table in milliseconds
271
+ status: "SUCCESS" or "FAILED"
272
+ error_message: Error message if failed
273
+ """
274
+ self._table_stats[table_name] = TableStats(
275
+ rows=row_count,
276
+ load_time_ms=load_time_ms,
277
+ status=status,
278
+ error_message=error_message,
279
+ )
280
+
281
+ def set_loading_time(self, time_ms: float) -> None:
282
+ """Set total data loading time.
283
+
284
+ Args:
285
+ time_ms: Total loading time in milliseconds
286
+ """
287
+ self._loading_time_ms = time_ms
288
+
289
+ # -------------------------------------------------------------------------
290
+ # Timing Metadata
291
+ # -------------------------------------------------------------------------
292
+
293
+ def set_start_time(self, start_time: datetime) -> None:
294
+ """Set benchmark start time."""
295
+ self._start_time = start_time
296
+
297
+ def set_end_time(self, end_time: datetime) -> None:
298
+ """Set benchmark end time."""
299
+ self._end_time = end_time
300
+
301
+ def mark_started(self) -> None:
302
+ """Mark the benchmark as started (sets start time to now)."""
303
+ self._start_time = datetime.now()
304
+
305
+ def mark_completed(self) -> None:
306
+ """Mark the benchmark as completed (sets end time to now)."""
307
+ self._end_time = datetime.now()
308
+
309
+ # -------------------------------------------------------------------------
310
+ # Validation and Metadata
311
+ # -------------------------------------------------------------------------
312
+
313
+ def set_validation_status(
314
+ self,
315
+ status: str,
316
+ details: dict[str, Any] | None = None,
317
+ ) -> None:
318
+ """Set validation status and details.
319
+
320
+ Args:
321
+ status: "PASSED" or "FAILED"
322
+ details: Optional validation details
323
+ """
324
+ self._validation_status = status
325
+ self._validation_details = details
326
+
327
+ def set_execution_metadata(self, metadata: dict[str, Any]) -> None:
328
+ """Set execution metadata.
329
+
330
+ Args:
331
+ metadata: Execution context metadata
332
+ """
333
+ self._execution_metadata = metadata
334
+
335
+ def add_execution_metadata(self, key: str, value: Any) -> None:
336
+ """Add a single metadata key-value pair."""
337
+ self._execution_metadata[key] = value
338
+
339
+ def set_run_config(self, config: RunConfigInput) -> None:
340
+ """Set run configuration for reproducibility."""
341
+ self._run_config = config
342
+
343
+ def set_phase_status(self, phase: str, status: str, duration_ms: float | None = None) -> None:
344
+ """Set phase status metadata for export."""
345
+ entry: dict[str, Any] = {"status": status}
346
+ if duration_ms is not None:
347
+ entry["duration_ms"] = duration_ms
348
+ self._phase_status[phase] = entry
349
+
350
+ def set_system_profile(self, profile: dict[str, Any]) -> None:
351
+ """Set system profile information."""
352
+ self._system_profile = profile
353
+
354
+ def set_tuning_info(
355
+ self,
356
+ tunings_applied: dict[str, Any] | None = None,
357
+ config_hash: str | None = None,
358
+ source_file: str | None = None,
359
+ ) -> None:
360
+ """Set tuning configuration information."""
361
+ self._tunings_applied = tunings_applied
362
+ self._tuning_config_hash = config_hash
363
+ self._tuning_source_file = source_file
364
+
365
+ def set_cost_summary(self, cost_summary: dict[str, Any]) -> None:
366
+ """Set cost summary for cloud platforms."""
367
+ self._cost_summary = cost_summary
368
+
369
+ def set_execution_phases(self, phases: ExecutionPhases) -> None:
370
+ """Set execution phases directly."""
371
+ self._execution_phases_override = phases
372
+
373
+ # -------------------------------------------------------------------------
374
+ # Query Plan Statistics
375
+ # -------------------------------------------------------------------------
376
+
377
+ def add_plan_capture_stats(
378
+ self,
379
+ plans_captured: int,
380
+ capture_failures: int = 0,
381
+ capture_errors: list[dict[str, str]] | None = None,
382
+ ) -> None:
383
+ """Add query plan capture statistics."""
384
+ self._query_plans_captured = plans_captured
385
+ self._plan_capture_failures = capture_failures
386
+ self._plan_capture_errors = capture_errors or []
387
+
388
+ # -------------------------------------------------------------------------
389
+ # Throughput Test Support
390
+ # -------------------------------------------------------------------------
391
+
392
+ def add_throughput_stream(
393
+ self,
394
+ stream_id: int,
395
+ query_results: list[QueryResultInput],
396
+ duration_seconds: float,
397
+ start_time: datetime | None = None,
398
+ end_time: datetime | None = None,
399
+ ) -> None:
400
+ """Add results from a throughput test stream.
401
+
402
+ Args:
403
+ stream_id: Stream identifier
404
+ query_results: Query results from this stream
405
+ duration_seconds: Total stream duration
406
+ start_time: Stream start time
407
+ end_time: Stream end time
408
+ """
409
+ self._throughput_streams.append(
410
+ {
411
+ "stream_id": stream_id,
412
+ "query_results": query_results,
413
+ "duration_seconds": duration_seconds,
414
+ "start_time": start_time,
415
+ "end_time": end_time,
416
+ }
417
+ )
418
+
419
+ def set_throughput_total_time(self, total_time_seconds: float) -> None:
420
+ """Set total elapsed time for throughput test."""
421
+ self._throughput_total_time_seconds = total_time_seconds
422
+
423
+ # -------------------------------------------------------------------------
424
+ # Build Methods
425
+ # -------------------------------------------------------------------------
426
+
427
+ def build(self) -> BenchmarkResults:
428
+ """Build the complete, validated BenchmarkResults.
429
+
430
+ Returns:
431
+ Complete BenchmarkResults instance with all metrics calculated
432
+ """
433
+ # Calculate duration
434
+ duration_seconds = self._calculate_duration()
435
+
436
+ # Calculate query metrics (prefer measurement results when available)
437
+ measurement_results = [r for r in self._query_results if r.run_type == "measurement" and r.iteration > 0]
438
+ results_for_stats = measurement_results if measurement_results else self._query_results
439
+ successful_queries = [r for r in results_for_stats if r.status == "SUCCESS"]
440
+ failed_queries = [r for r in results_for_stats if r.status == "FAILED"]
441
+
442
+ # Use measurement execution times for aggregate timing metrics when possible
443
+ exec_times_all = [r.execution_time_seconds for r in results_for_stats if r.execution_time_seconds > 0]
444
+
445
+ # Calculate timing statistics
446
+ timing_stats = TimingStatsCalculator.calculate_seconds(exec_times_all)
447
+ total_exec_time = timing_stats.get("total_s", 0.0)
448
+ avg_time = timing_stats.get("avg_s", 0.0)
449
+ geometric_mean = timing_stats.get("geometric_mean_s", 0.0)
450
+
451
+ # Calculate TPC metrics only when all queries succeeded
452
+ if failed_queries:
453
+ tpc_metrics = {
454
+ "power_at_size": None,
455
+ "throughput_at_size": None,
456
+ "qph_at_size": None,
457
+ }
458
+ geometric_mean = 0.0
459
+ else:
460
+ tpc_metrics = self._calculate_tpc_metrics()
461
+
462
+ # Build execution phases
463
+ execution_phases = self._build_execution_phases(
464
+ exec_times_all,
465
+ tpc_metrics,
466
+ )
467
+ if self._execution_phases_override is not None:
468
+ execution_phases = self._execution_phases_override
469
+
470
+ # Build query results list
471
+ query_results_list = self._format_query_results()
472
+
473
+ # Build platform info dict
474
+ platform_info = self._build_platform_info_dict()
475
+
476
+ # Determine validation status based on failures
477
+ validation_status = self._validation_status
478
+ if failed_queries and validation_status == "PASSED":
479
+ validation_status = "PARTIAL"
480
+
481
+ return BenchmarkResults(
482
+ # Core identification
483
+ benchmark_name=self._benchmark.display_name or self._benchmark.name,
484
+ platform=format_platform_display_name(
485
+ self._platform.name,
486
+ self._platform.execution_mode,
487
+ ),
488
+ scale_factor=self._benchmark.scale_factor,
489
+ execution_id=self._execution_id,
490
+ timestamp=self._start_time or datetime.now(),
491
+ duration_seconds=duration_seconds,
492
+ # Query counts
493
+ total_queries=len(results_for_stats),
494
+ successful_queries=len(successful_queries),
495
+ failed_queries=len(failed_queries),
496
+ # Query results
497
+ query_results=query_results_list,
498
+ # Summary metrics
499
+ total_execution_time=total_exec_time,
500
+ average_query_time=avg_time,
501
+ # Loading stats
502
+ data_loading_time=self._loading_time_ms / 1000.0,
503
+ total_rows_loaded=sum(ts.rows for ts in self._table_stats.values()),
504
+ table_statistics={name: stats.rows for name, stats in self._table_stats.items()},
505
+ # Execution phases
506
+ execution_phases=execution_phases,
507
+ # TPC metrics
508
+ test_execution_type=self._benchmark.test_type,
509
+ power_at_size=tpc_metrics.get("power_at_size"),
510
+ throughput_at_size=tpc_metrics.get("throughput_at_size"),
511
+ qph_at_size=tpc_metrics.get("qph_at_size"),
512
+ geometric_mean_execution_time=geometric_mean or None,
513
+ # Validation
514
+ validation_status=validation_status,
515
+ validation_details=self._validation_details,
516
+ # Platform info
517
+ platform_info=platform_info,
518
+ # Execution metadata
519
+ execution_metadata=self._build_execution_metadata(),
520
+ system_profile=self._system_profile,
521
+ # Tuning
522
+ tunings_applied=self._tunings_applied,
523
+ tuning_config_hash=self._tuning_config_hash,
524
+ tuning_source_file=self._tuning_source_file,
525
+ # Query plan stats
526
+ query_plans_captured=self._query_plans_captured,
527
+ plan_capture_failures=self._plan_capture_failures,
528
+ plan_capture_errors=self._plan_capture_errors,
529
+ # Cost
530
+ cost_summary=self._cost_summary,
531
+ _benchmark_id_override=self._benchmark.benchmark_id,
532
+ )
533
+
534
+ def _calculate_duration(self) -> float:
535
+ """Calculate total duration in seconds."""
536
+ if self._start_time and self._end_time:
537
+ delta = self._end_time - self._start_time
538
+ return delta.total_seconds()
539
+
540
+ # Fall back to sum of query times plus loading time
541
+ total_query_time = sum(r.execution_time_seconds for r in self._query_results)
542
+ return total_query_time + (self._loading_time_ms / 1000.0)
543
+
544
+ def _calculate_tpc_metrics(self) -> dict[str, float | None]:
545
+ """Calculate TPC benchmark metrics."""
546
+ metrics: dict[str, float | None] = {
547
+ "power_at_size": None,
548
+ "throughput_at_size": None,
549
+ "qph_at_size": None,
550
+ }
551
+
552
+ scale_factor = self._benchmark.scale_factor
553
+ test_type = self._benchmark.test_type
554
+
555
+ # Calculate Power@Size for power and combined tests
556
+ if test_type in ("power", "standard", "combined"):
557
+ power = self._calculate_power_at_size()
558
+ if power and power > 0:
559
+ metrics["power_at_size"] = power
560
+
561
+ # Calculate Throughput@Size for throughput and combined tests
562
+ if test_type in ("throughput", "combined"):
563
+ total_queries = 0
564
+ num_streams = 0
565
+ total_time = 0.0
566
+
567
+ if self._throughput_streams:
568
+ total_queries = sum(len(s["query_results"]) for s in self._throughput_streams)
569
+ num_streams = len(self._throughput_streams)
570
+ total_time = self._throughput_total_time_seconds
571
+ elif self._execution_phases_override and self._execution_phases_override.throughput_test:
572
+ phase = self._execution_phases_override.throughput_test
573
+ total_queries = phase.total_queries_executed
574
+ num_streams = phase.num_streams
575
+ total_time = (phase.duration_ms or 0) / 1000.0
576
+
577
+ if total_time > 0 and total_queries > 0 and num_streams > 0:
578
+ throughput = TPCMetricsCalculator.calculate_throughput_at_size(
579
+ total_queries,
580
+ total_time,
581
+ scale_factor,
582
+ num_streams,
583
+ )
584
+ if throughput > 0:
585
+ metrics["throughput_at_size"] = throughput
586
+
587
+ # Calculate composite QphH for combined tests
588
+ power = metrics.get("power_at_size")
589
+ throughput = metrics.get("throughput_at_size")
590
+ if power and throughput:
591
+ qph = TPCMetricsCalculator.calculate_qph(power, throughput)
592
+ if qph > 0:
593
+ metrics["qph_at_size"] = qph
594
+
595
+ return metrics
596
+
597
+ def _calculate_power_at_size(self) -> float | None:
598
+ """Calculate Power@Size using only final measurement iteration."""
599
+ measurement = [r for r in self._query_results if r.run_type == "measurement" and r.iteration > 0]
600
+ if not measurement:
601
+ return None
602
+
603
+ final_iter = max((r.iteration for r in measurement), default=0)
604
+ final_results = [r for r in measurement if r.iteration == final_iter]
605
+ if not final_results:
606
+ return None
607
+ if any(r.status != "SUCCESS" for r in final_results):
608
+ return None
609
+
610
+ times = [r.execution_time_seconds for r in final_results if r.execution_time_seconds > 0]
611
+ if not times:
612
+ return None
613
+ return TPCMetricsCalculator.calculate_power_at_size(times, self._benchmark.scale_factor)
614
+
615
+ def _build_execution_phases(
616
+ self,
617
+ exec_times_seconds: list[float],
618
+ tpc_metrics: dict[str, float | None],
619
+ ) -> ExecutionPhases | None:
620
+ """Build ExecutionPhases structure."""
621
+ setup_phase = self._build_setup_phase()
622
+ power_test_phase = self._build_power_test_phase(
623
+ exec_times_seconds,
624
+ tpc_metrics,
625
+ )
626
+ throughput_test_phase = self._build_throughput_test_phase(tpc_metrics)
627
+
628
+ if not any([setup_phase, power_test_phase, throughput_test_phase]):
629
+ return None
630
+
631
+ return ExecutionPhases(
632
+ setup=setup_phase or SetupPhase(),
633
+ power_test=power_test_phase,
634
+ throughput_test=throughput_test_phase,
635
+ )
636
+
637
+ def _build_setup_phase(self) -> SetupPhase | None:
638
+ """Build SetupPhase from table loading stats."""
639
+ if not self._table_stats:
640
+ return None
641
+
642
+ per_table_stats = {
643
+ name: TableLoadingStats(
644
+ rows=stats.rows,
645
+ load_time_ms=stats.load_time_ms,
646
+ status=stats.status,
647
+ error_message=stats.error_message,
648
+ )
649
+ for name, stats in self._table_stats.items()
650
+ }
651
+
652
+ total_rows = sum(ts.rows for ts in self._table_stats.values())
653
+ failed_count = sum(1 for ts in self._table_stats.values() if ts.status == "FAILED")
654
+ status = "FAILED" if failed_count > 0 else "SUCCESS"
655
+
656
+ return SetupPhase(
657
+ data_loading=DataLoadingPhase(
658
+ duration_ms=int(self._loading_time_ms),
659
+ status=status,
660
+ total_rows_loaded=total_rows,
661
+ tables_loaded=len(self._table_stats),
662
+ per_table_stats=per_table_stats,
663
+ )
664
+ )
665
+
666
+ def _build_power_test_phase(
667
+ self,
668
+ exec_times_seconds: list[float],
669
+ tpc_metrics: dict[str, float | None],
670
+ ) -> PowerTestPhase | None:
671
+ """Build PowerTestPhase from query results."""
672
+ if self._benchmark.test_type not in ("power", "standard", "combined"):
673
+ return None
674
+
675
+ if not self._query_results:
676
+ return None
677
+
678
+ # Build query executions
679
+ query_executions = []
680
+ for i, result in enumerate(self._query_results):
681
+ query_executions.append(
682
+ QueryExecution(
683
+ query_id=format_query_id(result.query_id),
684
+ stream_id=str(result.stream_id),
685
+ execution_order=i + 1,
686
+ execution_time_ms=int(result.execution_time_seconds * 1000),
687
+ status=result.status,
688
+ rows_returned=result.rows_returned,
689
+ error_message=result.error_message,
690
+ iteration=result.iteration,
691
+ run_type=result.run_type,
692
+ row_count_validation=result.row_count_validation,
693
+ cost=result.cost,
694
+ )
695
+ )
696
+
697
+ # Calculate geometric mean
698
+ geometric_mean = 0.0
699
+ if exec_times_seconds:
700
+ geometric_mean = TPCMetricsCalculator.calculate_geometric_mean(exec_times_seconds)
701
+
702
+ # Calculate total duration
703
+ total_duration_ms = sum(int(r.execution_time_seconds * 1000) for r in self._query_results)
704
+
705
+ now_iso = datetime.now().isoformat()
706
+
707
+ return PowerTestPhase(
708
+ start_time=self._start_time.isoformat() if self._start_time else now_iso,
709
+ end_time=self._end_time.isoformat() if self._end_time else now_iso,
710
+ duration_ms=total_duration_ms,
711
+ query_executions=query_executions,
712
+ geometric_mean_time=geometric_mean,
713
+ power_at_size=tpc_metrics.get("power_at_size") or 0.0,
714
+ )
715
+
716
+ def _build_throughput_test_phase(
717
+ self,
718
+ tpc_metrics: dict[str, float | None],
719
+ ) -> ThroughputTestPhase | None:
720
+ """Build ThroughputTestPhase from stream data."""
721
+ if self._benchmark.test_type not in ("throughput", "combined"):
722
+ return None
723
+
724
+ if not self._throughput_streams:
725
+ return None
726
+
727
+ streams = []
728
+ total_queries = 0
729
+
730
+ for stream_data in self._throughput_streams:
731
+ stream_id = stream_data["stream_id"]
732
+ results = stream_data["query_results"]
733
+ duration = stream_data["duration_seconds"]
734
+ start = stream_data.get("start_time")
735
+ end = stream_data.get("end_time")
736
+
737
+ query_executions = []
738
+ for i, result in enumerate(results):
739
+ query_executions.append(
740
+ QueryExecution(
741
+ query_id=format_query_id(result.query_id),
742
+ stream_id=str(stream_id),
743
+ execution_order=i + 1,
744
+ execution_time_ms=int(result.execution_time_seconds * 1000),
745
+ status=result.status,
746
+ rows_returned=result.rows_returned,
747
+ error_message=result.error_message,
748
+ )
749
+ )
750
+ total_queries += 1
751
+
752
+ now_iso = datetime.now().isoformat()
753
+ streams.append(
754
+ ThroughputStream(
755
+ stream_id=stream_id,
756
+ start_time=start.isoformat() if start else now_iso,
757
+ end_time=end.isoformat() if end else now_iso,
758
+ duration_ms=int(duration * 1000),
759
+ query_executions=query_executions,
760
+ )
761
+ )
762
+
763
+ total_duration_ms = int(self._throughput_total_time_seconds * 1000)
764
+ now_iso = datetime.now().isoformat()
765
+
766
+ return ThroughputTestPhase(
767
+ start_time=self._start_time.isoformat() if self._start_time else now_iso,
768
+ end_time=self._end_time.isoformat() if self._end_time else now_iso,
769
+ duration_ms=total_duration_ms,
770
+ num_streams=len(streams),
771
+ streams=streams,
772
+ total_queries_executed=total_queries,
773
+ throughput_at_size=tpc_metrics.get("throughput_at_size") or 0.0,
774
+ )
775
+
776
+ def _format_query_results(self) -> list[dict[str, Any]]:
777
+ """Format query results as list of dictionaries."""
778
+ results = []
779
+ for result in self._query_results:
780
+ result_dict: dict[str, Any] = {
781
+ "query_id": format_query_id(result.query_id),
782
+ "execution_time": result.execution_time_seconds,
783
+ "execution_time_ms": int(result.execution_time_seconds * 1000),
784
+ "status": result.status,
785
+ "rows_returned": result.rows_returned,
786
+ "iteration": result.iteration,
787
+ "stream_id": result.stream_id,
788
+ }
789
+
790
+ if result.error_message:
791
+ result_dict["error_message"] = result.error_message
792
+ if result.cost is not None:
793
+ result_dict["cost"] = result.cost
794
+ if result.run_type:
795
+ result_dict["run_type"] = result.run_type
796
+ if result.row_count_validation:
797
+ result_dict["row_count_validation"] = result.row_count_validation
798
+
799
+ results.append(result_dict)
800
+
801
+ return results
802
+
803
+ def _build_platform_info_dict(self) -> dict[str, Any]:
804
+ """Build platform_info dictionary."""
805
+ info: dict[str, Any] = {
806
+ "platform_name": self._platform.name,
807
+ "execution_mode": self._platform.execution_mode,
808
+ }
809
+
810
+ if self._platform.platform_version:
811
+ info["platform_version"] = self._platform.platform_version
812
+ if self._platform.client_library_version:
813
+ info["client_library_version"] = self._platform.client_library_version
814
+
815
+ if self._platform.connection_mode:
816
+ info["connection_mode"] = self._platform.connection_mode
817
+
818
+ if self._platform.family:
819
+ info["family"] = self._platform.family
820
+
821
+ if self._platform.config:
822
+ info["configuration"] = self._platform.config
823
+
824
+ return info
825
+
826
+ def _build_execution_metadata(self) -> dict[str, Any]:
827
+ """Build execution metadata dictionary."""
828
+ metadata = dict(self._execution_metadata)
829
+
830
+ # Add execution mode info
831
+ metadata["mode"] = self._platform.execution_mode
832
+ metadata["execution_mode"] = self._platform.execution_mode
833
+
834
+ # Add DataFrame-specific metadata
835
+ if self._platform.execution_mode == "dataframe":
836
+ metadata["dataframe_platform"] = self._platform.name
837
+ if self._platform.family:
838
+ metadata["dataframe_family"] = self._platform.family
839
+
840
+ if self._run_config:
841
+ metadata["run_config"] = self._run_config.to_dict()
842
+ if self._phase_status:
843
+ metadata["phase_status"] = dict(self._phase_status)
844
+
845
+ return metadata
846
+
847
+
848
+ # Convenience function for quick result building
849
+ def build_benchmark_results(
850
+ benchmark_name: str,
851
+ platform_name: str,
852
+ scale_factor: float,
853
+ query_results: list[QueryResultInput],
854
+ *,
855
+ execution_mode: str = "sql",
856
+ test_type: str = "power",
857
+ platform_version: str | None = None,
858
+ table_stats: dict[str, int] | None = None,
859
+ loading_time_ms: float = 0.0,
860
+ start_time: datetime | None = None,
861
+ end_time: datetime | None = None,
862
+ ) -> BenchmarkResults:
863
+ """Convenience function to build BenchmarkResults in one call.
864
+
865
+ Args:
866
+ benchmark_name: Benchmark name (e.g., "TPC-H")
867
+ platform_name: Platform name (e.g., "DuckDB")
868
+ scale_factor: Benchmark scale factor
869
+ query_results: List of normalized query results
870
+ execution_mode: "sql" or "dataframe"
871
+ test_type: "power", "throughput", "standard", or "combined"
872
+ platform_version: Optional platform version string
873
+ table_stats: Optional table row counts {table_name: row_count}
874
+ loading_time_ms: Data loading time in milliseconds
875
+ start_time: Benchmark start time
876
+ end_time: Benchmark end time
877
+
878
+ Returns:
879
+ Complete BenchmarkResults instance
880
+ """
881
+ builder = ResultBuilder(
882
+ benchmark=BenchmarkInfoInput(
883
+ name=benchmark_name,
884
+ scale_factor=scale_factor,
885
+ test_type=test_type,
886
+ ),
887
+ platform=PlatformInfoInput(
888
+ name=platform_name,
889
+ platform_version=platform_version,
890
+ client_library_version=None,
891
+ execution_mode=execution_mode,
892
+ ),
893
+ )
894
+
895
+ builder.add_query_results(query_results)
896
+
897
+ if table_stats:
898
+ for table_name, row_count in table_stats.items():
899
+ builder.add_table_stats(table_name, row_count)
900
+
901
+ if loading_time_ms:
902
+ builder.set_loading_time(loading_time_ms)
903
+
904
+ if start_time:
905
+ builder.set_start_time(start_time)
906
+ if end_time:
907
+ builder.set_end_time(end_time)
908
+
909
+ return builder.build()