Showing with 9,581 additions and 3,764 deletions.
  1. +1 −1 .env
  2. +1 −1 .github/actionlint.yaml
  3. +1 −1 .github/workflows/docs-preview.yml
  4. +8 −4 .github/workflows/ibis-backends.yml
  5. +1 −1 .github/workflows/ibis-docs-main.yml
  6. +4 −1 .github/workflows/ibis-main.yml
  7. +1 −1 .github/workflows/nix-skip-helper.yml
  8. +3 −9 .github/workflows/nix.yml
  9. +8 −8 compose.yaml
  10. +1 −1 conda/environment-arm64-flink.yml
  11. +1 −1 conda/environment.yml
  12. +2 −2 docker/flink/Dockerfile
  13. +1 −1 docker/mysql/startup.sql
  14. +16 −0 docs/_freeze/posts/better-pypi-stats/index/execute-results/html.json
  15. +19 −0 docs/_freeze/posts/ibisml/index/execute-results/html.json
  16. +1 −0 docs/_quarto.yml
  17. +0 −2 docs/_tabsets/install.qmd
  18. +7 −0 docs/backends/dask.qmd
  19. +8 −0 docs/backends/pandas.qmd
  20. +35 −3 docs/backends/snowflake.qmd
  21. +15 −0 docs/concepts/datatypes.qmd
  22. +358 −0 docs/posts/better-pypi-stats/index.qmd
  23. BIN docs/posts/better-pypi-stats/thumbnail.png
  24. +104 −0 docs/posts/farewell-pandas/index.qmd
  25. +928 −0 docs/posts/ibisml/index.qmd
  26. +1 −0 docs/presentations/linkedin-meetup-2024-04-24.qmd
  27. +1 −0 docs/presentations/overview/index.qmd
  28. +12 −0 docs/presentations/positconf2024/custom.scss
  29. BIN docs/presentations/positconf2024/fine.jpg
  30. +312 −0 docs/presentations/positconf2024/talk.qmd
  31. BIN docs/presentations/positconf2024/terminal.png
  32. +2 −1 docs/presentations/pycon2024/maintainers.qmd
  33. +106 −0 docs/release_notes_generated.qmd
  34. +6 −6 flake.lock
  35. +3 −3 flake.nix
  36. +1 −1 ibis/__init__.py
  37. +111 −60 ibis/backends/__init__.py
  38. +4 −9 ibis/backends/bigquery/__init__.py
  39. +3 −3 ibis/backends/bigquery/tests/system/test_client.py
  40. +7 −0 ibis/backends/bigquery/tests/unit/snapshots/test_compiler/test_approx_quantiles/array/out.sql
  41. +3 −0 ...backends/bigquery/tests/unit/snapshots/test_compiler/test_approx_quantiles/complete-array/out.sql
  42. +3 −0 ibis/backends/bigquery/tests/unit/snapshots/test_compiler/test_approx_quantiles/scalar/out.sql
  43. +7 −0 ...backends/bigquery/tests/unit/snapshots/test_compiler/test_approx_quantiles/shuffled-array/out.sql
  44. +3 −0 .../backends/bigquery/tests/unit/snapshots/test_compiler/test_approx_quantiles/tricky-scalar/out.sql
  45. +28 −3 ibis/backends/bigquery/tests/unit/test_compiler.py
  46. +25 −16 ibis/backends/clickhouse/__init__.py
  47. +1 −1 ibis/backends/clickhouse/tests/snapshots/test_functions/test_cast_string_col/timestamp/out.sql
  48. +1 −1 ibis/backends/clickhouse/tests/snapshots/test_functions/test_timestamp_cast/out1.sql
  49. +1 −1 ibis/backends/clickhouse/tests/snapshots/test_functions/test_timestamp_cast/out2.sql
  50. +1 −1 ibis/backends/clickhouse/tests/snapshots/test_functions/test_timestamp_truncate/d/out.sql
  51. +1 −1 ibis/backends/clickhouse/tests/test_aggregations.py
  52. +33 −0 ibis/backends/clickhouse/tests/test_client.py
  53. +1 −1 ibis/backends/clickhouse/tests/test_functions.py
  54. +3 −51 ibis/backends/conftest.py
  55. +4 −6 ibis/backends/dask/__init__.py
  56. +0 −5 ibis/backends/dask/tests/conftest.py
  57. +0 −25 ibis/backends/dask/tests/test_window.py
  58. +14 −10 ibis/backends/datafusion/__init__.py
  59. +0 −4 ibis/backends/datafusion/tests/test_select.py
  60. +0 −5 ibis/backends/datafusion/tests/test_udf.py
  61. +1 −7 ibis/backends/druid/tests/conftest.py
  62. +12 −12 ibis/backends/duckdb/__init__.py
  63. +5 −4 ibis/backends/duckdb/tests/conftest.py
  64. +44 −0 ibis/backends/duckdb/tests/snapshots/test_decompile_tpch/test_parse_sql_tpch/tpch01/out_tpch.py
  65. +106 −0 ibis/backends/duckdb/tests/snapshots/test_decompile_tpch/test_parse_sql_tpch/tpch03/out_tpch.py
  66. +14 −0 ibis/backends/duckdb/tests/test_client.py
  67. +1 −0 ibis/backends/duckdb/tests/test_datatypes.py
  68. +101 −0 ibis/backends/duckdb/tests/test_decompile_tpch.py
  69. +5 −5 ibis/backends/duckdb/tests/test_register.py
  70. +3 −1 ibis/backends/exasol/__init__.py
  71. +9 −0 ibis/backends/exasol/converter.py
  72. +0 −5 ibis/backends/flink/tests/conftest.py
  73. +1 −1 ibis/backends/flink/tests/test_compiler.py
  74. +9 −2 ibis/backends/impala/__init__.py
  75. +11 −0 ibis/backends/impala/ddl.py
  76. +0 −7 ibis/backends/impala/tests/test_client.py
  77. +7 −7 ibis/backends/impala/tests/test_exprs.py
  78. +18 −7 ibis/backends/impala/tests/test_partition.py
  79. +3 −3 ibis/backends/impala/tests/test_value_exprs.py
  80. +59 −21 ibis/backends/mssql/__init__.py
  81. +92 −16 ibis/backends/mssql/tests/test_client.py
  82. +3 −1 ibis/backends/mysql/__init__.py
  83. +15 −16 ibis/backends/oracle/__init__.py
  84. +3 −2 ibis/backends/oracle/tests/test_client.py
  85. +10 −3 ibis/backends/pandas/__init__.py
  86. +0 −5 ibis/backends/pandas/tests/conftest.py
  87. +14 −25 ibis/backends/polars/__init__.py
  88. +43 −10 ibis/backends/polars/compiler.py
  89. +0 −5 ibis/backends/polars/tests/conftest.py
  90. +39 −0 ibis/backends/polars/tests/test_client.py
  91. +18 −19 ibis/backends/postgres/__init__.py
  92. +0 −8 ibis/backends/postgres/tests/conftest.py
  93. +0 −25 ibis/backends/postgres/tests/test_functions.py
  94. +22 −9 ibis/backends/pyspark/__init__.py
  95. +0 −10 ibis/backends/pyspark/tests/test_ddl.py
  96. +4 −1 ibis/backends/risingwave/__init__.py
  97. +0 −5 ibis/backends/risingwave/tests/conftest.py
  98. +4 −4 ibis/backends/snowflake/__init__.py
  99. +1 −1 ibis/backends/snowflake/tests/test_client.py
  100. +9 −24 ibis/backends/sql/__init__.py
  101. +69 −25 ibis/backends/sql/compilers/base.py
  102. +58 −5 ibis/backends/sql/compilers/bigquery/__init__.py
  103. +28 −23 ibis/backends/sql/compilers/clickhouse.py
  104. +7 −2 ibis/backends/sql/compilers/datafusion.py
  105. +0 −2 ibis/backends/sql/compilers/druid.py
  106. +9 −2 ibis/backends/sql/compilers/duckdb.py
  107. +46 −9 ibis/backends/sql/compilers/exasol.py
  108. +17 −3 ibis/backends/sql/compilers/flink.py
  109. +12 −6 ibis/backends/sql/compilers/impala.py
  110. +32 −10 ibis/backends/sql/compilers/mssql.py
  111. +6 −21 ibis/backends/sql/compilers/mysql.py
  112. +63 −22 ibis/backends/sql/compilers/oracle.py
  113. +19 −7 ibis/backends/sql/compilers/postgres.py
  114. +25 −6 ibis/backends/sql/compilers/pyspark.py
  115. +16 −10 ibis/backends/sql/compilers/risingwave.py
  116. +18 −11 ibis/backends/sql/compilers/snowflake.py
  117. +69 −14 ibis/backends/sql/compilers/sqlite.py
  118. +31 −22 ibis/backends/sql/compilers/trino.py
  119. +9 −1 ibis/backends/sql/datatypes.py
  120. +21 −16 ibis/backends/sql/dialects.py
  121. +98 −1 ibis/backends/sql/rewrites.py
  122. +10 −0 ibis/backends/sql/tests/test_compiler.py
  123. +23 −1 ibis/backends/sql/tests/test_datatypes.py
  124. +1 −1 ibis/backends/sqlite/__init__.py
  125. +0 −25 ibis/backends/sqlite/tests/conftest.py
  126. +7 −0 ibis/backends/sqlite/udf.py
  127. +1 −4 ibis/backends/tests/base.py
  128. +4 −2 ibis/backends/tests/errors.py
  129. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/bigquery/out.sql
  130. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/clickhouse/out.sql
  131. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/datafusion/out.sql
  132. +13 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/druid/out.sql
  133. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/duckdb/out.sql
  134. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/exasol/out.sql
  135. +13 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/flink/out.sql
  136. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/impala/out.sql
  137. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/mssql/out.sql
  138. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/mysql/out.sql
  139. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/oracle/out.sql
  140. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/postgres/out.sql
  141. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/pyspark/out.sql
  142. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/risingwave/out.sql
  143. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/snowflake/out.sql
  144. +6 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/sqlite/out.sql
  145. +4 −0 ibis/backends/tests/snapshots/test_sql/test_rewrite_context/trino/out.sql
  146. +0 −5 ibis/backends/tests/sql/conftest.py
  147. +2 −6 ibis/backends/tests/sql/snapshots/test_compiler/test_column_distinct/out.sql
  148. +1 −1 ibis/backends/tests/sql/snapshots/test_compiler/test_column_expr_retains_name/decompiled.py
  149. +1 −1 ibis/backends/tests/sql/snapshots/test_compiler/test_count_distinct/decompiled.py
  150. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_difference_project_column/decompiled.py
  151. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_having_from_filter/decompiled.py
  152. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_intersect_project_column/decompiled.py
  153. +1 −1 ibis/backends/tests/sql/snapshots/test_compiler/test_subquery_where_location/decompiled.py
  154. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_table_difference/decompiled.py
  155. +3 −7 ibis/backends/tests/sql/snapshots/test_compiler/test_table_distinct/out.sql
  156. +6 −3 ibis/backends/tests/sql/snapshots/test_compiler/test_table_drop_with_filter/decompiled.py
  157. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_table_intersect/decompiled.py
  158. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_union/decompiled.py
  159. +2 −2 ibis/backends/tests/sql/snapshots/test_compiler/test_union_project_column/decompiled.py
  160. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_aggregate_count_joined/decompiled.py
  161. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_anti_join/decompiled.py
  162. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_bool_bool/decompiled.py
  163. +2 −2 ibis/backends/tests/sql/snapshots/test_select_sql/test_case_in_projection/decompiled.py
  164. +9 −0 .../backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/distinct-filter-order_by/out.sql
  165. +7 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/distinct-filter/out.sql
  166. +12 −0 ...sts/sql/snapshots/test_select_sql/test_fuse_distinct/distinct-non-trivial-select-distinct/out.sql
  167. +12 −0 ...ckends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/distinct-non-trivial-select/out.sql
  168. +12 −0 .../backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/distinct-select-distinct/out.sql
  169. +12 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/distinct-select/out.sql
  170. +7 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/distinct/out.sql
  171. +6 −0 ...ckends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/non-trivial-select-distinct/out.sql
  172. +14 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/order_by-distinct-drop/out.sql
  173. +9 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/order_by-distinct/out.sql
  174. +8 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/order_by-drop-distinct/out.sql
  175. +6 −0 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_distinct/select-distinct/out.sql
  176. +2 −2 ibis/backends/tests/sql/snapshots/test_select_sql/test_fuse_projections/decompiled.py
  177. +10 −8 ibis/backends/tests/sql/snapshots/test_select_sql/test_join_between_joins/decompiled.py
  178. +2 −2 ibis/backends/tests/sql/snapshots/test_select_sql/test_join_just_materialized/decompiled.py
  179. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_limit_with_self_join/decompiled.py
  180. +2 −2 ibis/backends/tests/sql/snapshots/test_select_sql/test_multiple_joins/decompiled.py
  181. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_select_sql/filter_then_limit/decompiled.py
  182. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_select_sql/limit_then_filter/decompiled.py
  183. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_semi_join/decompiled.py
  184. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_simple_joins/decompiled.py
  185. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_subquery_in_union/decompiled.py
  186. +5 −3 ibis/backends/tests/sql/snapshots/test_select_sql/test_where_analyze_scalar_op/decompiled.py
  187. +7 −3 ibis/backends/tests/sql/snapshots/test_select_sql/test_where_no_pushdown_possible/decompiled.py
  188. +1 −1 ibis/backends/tests/sql/snapshots/test_select_sql/test_where_with_between/decompiled.py
  189. +2 −2 ibis/backends/tests/sql/snapshots/test_select_sql/test_where_with_join/decompiled.py
  190. +3 −7 ibis/backends/tests/sql/snapshots/test_sql/test_distinct/projection_distinct/out.sql
  191. +2 −6 ibis/backends/tests/sql/snapshots/test_sql/test_distinct/single_column_projection_distinct/out.sql
  192. +2 −2 ibis/backends/tests/sql/snapshots/test_sql/test_lower_projection_sort_key/decompiled.py
  193. +1 −1 ibis/backends/tests/sql/snapshots/test_sql/test_where_simple_comparisons/decompiled.py
  194. +61 −0 ibis/backends/tests/sql/test_select_sql.py
  195. +84 −175 ibis/backends/tests/test_aggregation.py
  196. +1 −5 ibis/backends/tests/test_api.py
  197. +29 −41 ibis/backends/tests/test_array.py
  198. +74 −30 ibis/backends/tests/test_client.py
  199. +1 −6 ibis/backends/tests/test_conditionals.py
  200. +25 −26 ibis/backends/tests/test_dot_sql.py
  201. +25 −0 ibis/backends/tests/test_export.py
  202. +13 −24 ibis/backends/tests/test_expr_caching.py
  203. +130 −73 ibis/backends/tests/test_generic.py
  204. +2 −14 ibis/backends/tests/test_join.py
  205. +0 −6 ibis/backends/tests/test_map.py
  206. +1 −1 ibis/backends/tests/test_param.py
  207. +11 −0 ibis/backends/tests/test_sql.py
  208. +0 −1 ibis/backends/tests/test_string.py
  209. +0 −4 ibis/backends/tests/test_struct.py
  210. +130 −137 ibis/backends/tests/test_temporal.py
  211. +3 −2 ibis/backends/tests/test_vectorized_udf.py
  212. +0 −12 ibis/backends/tests/test_window.py
  213. +37 −20 ibis/backends/tests/tpc/conftest.py
  214. +1,994 −9 ibis/backends/tests/tpc/ds/test_queries.py
  215. +14 −15 ibis/backends/tests/tpc/h/test_queries.py
  216. +125 −0 ibis/backends/tests/tpc/queries/clickhouse/ds/64.sql
  217. +1 −1 ibis/backends/tests/tpc/queries/duckdb/ds/72.sql
  218. +3 −3 ibis/backends/tests/tpc/queries/duckdb/ds/75.sql
  219. +1 −1 ibis/backends/tests/tpc/queries/duckdb/ds/79.sql
  220. +9 −9 ibis/backends/tests/tpc/queries/duckdb/ds/83.sql
  221. +2 −2 ibis/backends/tests/tpc/queries/duckdb/ds/85.sql
  222. +1 −1 ibis/backends/tests/tpc/queries/duckdb/ds/87.sql
  223. +2 −2 ibis/backends/tests/tpc/queries/duckdb/ds/92.sql
  224. +1 −1 ibis/backends/tests/tpc/queries/duckdb/ds/94.sql
  225. +1 −1 ibis/backends/tests/tpc/queries/duckdb/ds/95.sql
  226. +1 −1 ibis/backends/tests/tpc/queries/duckdb/ds/96.sql
  227. +30 −9 ibis/backends/trino/__init__.py
  228. +0 −33 ibis/backends/trino/tests/conftest.py
  229. +18 −14 ibis/common/annotations.py
  230. +1 −73 ibis/common/caching.py
  231. +1 −1 ibis/common/graph.py
  232. +84 −2 ibis/common/selectors.py
  233. +26 −12 ibis/common/tests/test_annotations.py
  234. +10 −0 ibis/common/tests/test_deferred.py
  235. +20 −12 ibis/common/tests/test_grounds.py
  236. +28 −28 ibis/expr/api.py
  237. +1 −1 ibis/expr/decompile.py
  238. +24 −19 ibis/expr/operations/reductions.py
  239. +1 −1 ibis/expr/operations/relations.py
  240. +4 −6 ibis/expr/operations/udf.py
  241. +5 −3 ibis/expr/rewrites.py
  242. +113 −9 ibis/expr/sql.py
  243. +3 −2 ibis/expr/tests/snapshots/test_sql/test_parse_sql_aggregation_with_multiple_joins/decompiled.py
  244. +3 −1 ibis/expr/tests/snapshots/test_sql/test_parse_sql_basic_aggregation_with_join/decompiled.py
  245. +4 −2 ibis/expr/tests/snapshots/test_sql/test_parse_sql_basic_join/inner/decompiled.py
  246. +4 −2 ibis/expr/tests/snapshots/test_sql/test_parse_sql_basic_join/left/decompiled.py
  247. +4 −2 ibis/expr/tests/snapshots/test_sql/test_parse_sql_basic_join/right/decompiled.py
  248. +1 −1 ibis/expr/tests/snapshots/test_sql/test_parse_sql_basic_projection/decompiled.py
  249. +4 −2 ibis/expr/tests/snapshots/test_sql/test_parse_sql_join_with_filter/decompiled.py
  250. +3 −2 ibis/expr/tests/snapshots/test_sql/test_parse_sql_multiple_joins/decompiled.py
  251. +1 −1 ibis/expr/tests/snapshots/test_sql/test_parse_sql_scalar_subquery/decompiled.py
  252. +1 −1 ibis/expr/tests/snapshots/test_sql/test_parse_sql_simple_select_count/decompiled.py
  253. +9 −0 ibis/expr/tests/test_newrels.py
  254. +10 −0 ibis/expr/tests/test_reductions.py
  255. +0 −6 ibis/expr/tests/test_schema.py
  256. +61 −42 ibis/expr/types/core.py
  257. +113 −89 ibis/expr/types/generic.py
  258. +3 −3 ibis/expr/types/geospatial.py
  259. +42 −42 ibis/expr/types/logical.py
  260. +73 −4 ibis/expr/types/numeric.py
  261. +7 −5 ibis/expr/types/pretty.py
  262. +75 −43 ibis/expr/types/relations.py
  263. +17 −8 ibis/expr/types/strings.py
  264. +2 −0 ibis/expr/types/structs.py
  265. +63 −22 ibis/expr/types/temporal.py
  266. +6 −9 ibis/formats/pandas.py
  267. +0 −3 ibis/formats/polars.py
  268. +1 −1 ibis/formats/tests/test_polars.py
  269. +201 −133 ibis/selectors.py
  270. +9 −0 ibis/tests/expr/test_literal.py
  271. +46 −0 ibis/tests/expr/test_selectors.py
  272. +7 −0 ibis/tests/expr/test_table.py
  273. +64 −47 ibis/tests/expr/test_temporal.py
  274. +6 −1 ibis/tests/expr/test_timestamp.py
  275. +0 −8 ibis/tests/test_strategies.py
  276. +10 −12 justfile
  277. +0 −14 nix/ibis-core.nix
  278. +0 −19 nix/ibis-local.nix
  279. +8 −2 nix/ibis.nix
  280. +3 −7 nix/overlay.nix
  281. +1,597 −1,445 poetry.lock
  282. +15 −7 pyproject.toml
  283. +70 −69 requirements-dev.txt
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FLINK_VERSION=1.19.1
FLINK_VERSION=1.20.0
CLOUDSDK_ACTIVE_CONFIG_NAME=ibis-gbq
GOOGLE_CLOUD_PROJECT="$CLOUDSDK_ACTIVE_CONFIG_NAME"
PGPASSWORD="postgres"
Expand Down
2 changes: 1 addition & 1 deletion .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
self-hosted-runner:
labels:
- ubuntu-arm64-small
- ubuntu-arm64-24.04
2 changes: 1 addition & 1 deletion .github/workflows/docs-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
- name: Get all changed qmd files
id: changed-qmd-files
uses: tj-actions/changed-files@v44
uses: tj-actions/changed-files@v45
with:
# Avoid using single or double quotes for multiline patterns
files: |
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/ibis-backends.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ jobs:
extras:
- flink
additional_deps:
- "'apache-flink==1.19.1'"
- "'apache-flink==1.20.0'"
- "'pandas<2.2'"
- setuptools
services:
Expand All @@ -249,7 +249,7 @@ jobs:
extras:
- flink
additional_deps:
- "'apache-flink==1.19.1'"
- "'apache-flink==1.20.0'"
- "'pandas<2.2'"
- setuptools
services:
Expand Down Expand Up @@ -400,7 +400,7 @@ jobs:
extras:
- flink
additional_deps:
- "'apache-flink==1.19.1'"
- "'apache-flink==1.20.0'"
- "'pandas<2.2'"
- setuptools
services:
Expand All @@ -413,7 +413,7 @@ jobs:
extras:
- flink
additional_deps:
- "'apache-flink==1.19.1'"
- "'apache-flink==1.20.0'"
- "'pandas<2.2'"
- setuptools
services:
Expand Down Expand Up @@ -481,6 +481,10 @@ jobs:
- name: show installed deps
run: poetry run pip list

- name: show version of python-linked sqlite
if: matrix.backend.name == 'sqlite'
run: poetry run python -c 'import sqlite3; print(sqlite3.sqlite_version)'

- name: "run parallel tests: ${{ matrix.backend.name }}"
if: ${{ !matrix.backend.serial }}
run: just ci-check -m ${{ matrix.backend.name }} --numprocesses auto --dist=loadgroup
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ibis-docs-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:

- name: Install Algolia API Dependencies
run: |
python -m pip install --upgrade algoliasearch
python -m pip install --upgrade 'algoliasearch<4'
- name: Create and Upload Base Index
run: |
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/ibis-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,10 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: run doctests
run: just ci-doctest --junitxml=junit.xml --cov=ibis --cov-report=xml:coverage.xml
run: just doctest --junitxml=junit.xml --cov=ibis --cov-report=xml:coverage.xml

- name: check for dead fixtures
run: poetry run pytest --dead-fixtures -m 'not flink'

- name: upload code coverage
if: success()
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nix-skip-helper.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
- "3.11"
- "3.12"
include:
- os: ubuntu-arm64-small
- os: ubuntu-arm64-24.04
python-version: "3.12"
- os: macos-14
python-version: "3.10"
Expand Down
12 changes: 3 additions & 9 deletions .github/workflows/nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
- "3.11"
- "3.12"
include:
- os: ubuntu-arm64-small
- os: ubuntu-arm64-24.04
python-version: "3.12"
- os: macos-14
python-version: "3.10"
Expand All @@ -59,19 +59,13 @@ jobs:
name: ibis
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
extraPullNames: nix-community,poetry2nix
- name: nix build and test core
run: |
set -euo pipefail
version='${{ matrix.python-version }}'
nix build ".#ibisCore${version//./}" --fallback --keep-going --print-build-logs

- name: nix build and test local
- name: nix build and test
run: |
set -euo pipefail
version='${{ matrix.python-version }}'
nix build ".#ibisLocal${version//./}" --fallback --keep-going --print-build-logs
nix build ".#ibis${version//./}" --fallback --keep-going --print-build-logs
- name: nix build devShell
run: |
Expand Down
16 changes: 8 additions & 8 deletions compose.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
clickhouse:
image: clickhouse/clickhouse-server:24.7.2.13-alpine
image: clickhouse/clickhouse-server:24.7.3.42-alpine
ports:
- 8123:8123 # http port
- 9000:9000 # native protocol port
Expand Down Expand Up @@ -28,7 +28,7 @@ services:
- CMD
- mariadb-admin
- ping
image: mariadb:11.4.2
image: mariadb:11.5.2
ports:
- 3306:3306
networks:
Expand Down Expand Up @@ -82,7 +82,7 @@ services:
- mssql

hive-metastore-db:
image: postgres:16.3-alpine
image: postgres:16.4-alpine
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
Expand All @@ -99,7 +99,7 @@ services:
- trino

minio:
image: bitnami/minio:2024.8.3
image: bitnami/minio:2024.8.29
environment:
MINIO_ROOT_USER: accesskey
MINIO_ROOT_PASSWORD: secretkey
Expand Down Expand Up @@ -161,7 +161,7 @@ services:
test:
- CMD-SHELL
- trino --output-format null --execute 'show schemas in hive; show schemas in memory'
image: trinodb/trino:449
image: trinodb/trino:455
ports:
- 8080:8080
networks:
Expand All @@ -172,7 +172,7 @@ services:
- $PWD/docker/trino/jvm.config:/etc/trino/jvm.config:ro

druid-postgres:
image: postgres:16.3-alpine
image: postgres:16.4-alpine
container_name: druid-postgres
environment:
POSTGRES_PASSWORD: FoolishPassword
Expand Down Expand Up @@ -367,7 +367,7 @@ services:
- oracle:/opt/oracle/data

exasol:
image: exasol/docker-db:8.29.1
image: exasol/docker-db:8.30.0
privileged: true
ports:
- 8563:8563
Expand Down Expand Up @@ -547,7 +547,7 @@ services:
- impala

risingwave:
image: ghcr.io/risingwavelabs/risingwave:nightly-20240204
image: ghcr.io/risingwavelabs/risingwave:v1.10.1
command: "standalone --meta-opts=\" \
--advertise-addr 0.0.0.0:5690 \
--backend mem \
Expand Down
2 changes: 1 addition & 1 deletion conda/environment-arm64-flink.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,4 @@ dependencies:
- py4j =0.10.9.7
- pip
- pip:
- apache-flink =1.19.1
- apache-flink =1.20.0
2 changes: 1 addition & 1 deletion conda/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ channels:
- conda-forge
dependencies:
# runtime dependencies
- apache-flink
- apache-flink =1.20.0
- atpublic >=2.3
- black >=22.1.0,<25
- clickhouse-connect >=0.5.23
Expand Down
4 changes: 2 additions & 2 deletions docker/flink/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
ARG FLINK_VERSION=1.19.1
ARG FLINK_VERSION=1.20.0
FROM flink:${FLINK_VERSION}

# ibis-flink requires PyFlink dependency
ARG FLINK_VERSION=1.19.1
ARG FLINK_VERSION=1.20.0
RUN wget -nv -P $FLINK_HOME/lib/ https://repo1.maven.org/maven2/org/apache/flink/flink-python/${FLINK_VERSION}/flink-python-${FLINK_VERSION}.jar

# install python3 and pip3
Expand Down
2 changes: 1 addition & 1 deletion docker/mysql/startup.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CREATE USER 'ibis'@'localhost' IDENTIFIED BY 'ibis';
CREATE SCHEMA IF NOT EXISTS test_schema;
GRANT CREATE,SELECT,DROP ON *.* TO 'ibis'@'%';
GRANT CREATE,SELECT,DROP,INSERT ON *.* TO 'ibis'@'%';
FLUSH PRIVILEGES;

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions docs/_freeze/posts/ibisml/index/execute-results/html.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions docs/_quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ website:
- section: UDFs
contents:
- reference/scalar-udfs.qmd
- reference/aggregate-udfs.qmd

- section: Connection APIs
contents:
Expand Down
2 changes: 0 additions & 2 deletions docs/_tabsets/install.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ from textwrap import dedent
backends = [
{"name": "BigQuery", "module": "bigquery"},
{"name": "ClickHouse", "module": "clickhouse"},
{"name": "Dask", "module": "dask"},
{"name": "DataFusion", "module": "datafusion"},
{"name": "Druid", "module": "druid"},
{"name": "DuckDB", "module": "duckdb"},
Expand All @@ -20,7 +19,6 @@ backends = [
{"name": "MSSQL", "module": "mssql"},
{"name": "MySQL", "module": "mysql"},
{"name": "Oracle", "module": "oracle"},
{"name": "pandas", "module": "pandas"},
{"name": "Polars", "module": "polars"},
{"name": "PostgreSQL", "module": "postgres"},
{"name": "PySpark", "module": "pyspark"},
Expand Down
7 changes: 7 additions & 0 deletions docs/backends/dask.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@

![](https://img.shields.io/badge/memtables-native-green?style=flat-square) ![](https://img.shields.io/badge/inputs-CSV | Parquet-blue?style=flat-square) ![](https://img.shields.io/badge/outputs-CSV | pandas | Parquet | PyArrow-orange?style=flat-square)

::: {.callout-warning}
## The Dask backend is slated for removal in Ibis 10.0
We recommend using one of our other backends.

Many workloads work well on the DuckDB and Polars backends, for example.
:::

## Install

Install Ibis and dependencies for the Dask backend:
Expand Down
8 changes: 8 additions & 0 deletions docs/backends/pandas.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@

![](https://img.shields.io/badge/memtables-native-green?style=flat-square) ![](https://img.shields.io/badge/inputs-CSV | Parquet-blue?style=flat-square) ![](https://img.shields.io/badge/outputs-CSV | pandas | Parquet | PyArrow-orange?style=flat-square)

::: {.callout-warning}
## The Pandas backend is slated for removal in Ibis 10.0
We recommend using one of our other backends.

Many workloads work well on the DuckDB and Polars backends, for example.
:::


## Install

Install Ibis and dependencies for the pandas backend:
Expand Down
38 changes: 35 additions & 3 deletions docs/backends/snowflake.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ con = ibis.snowflake.connect(
user="user",
password="password",
account="safpqpq-sq55555",
database="IBIS_TESTING/IBIS_TESTING",
database="my_database",
schema="my_schema",
)
```

Expand Down Expand Up @@ -119,7 +120,8 @@ APIs. All values of `authenticator` are supported.
con = ibis.snowflake.connect(
user="user",
account="safpqpq-sq55555",
database="my_database/my_schema",
database="my_database",
schema="my_schema",
warehouse="my_warehouse",
authenticator="externalbrowser",
)
Expand All @@ -129,11 +131,41 @@ con = ibis.snowflake.connect(

```python
con = ibis.connect(
f"snowflake://{user}@{account}/{database}?warehouse={warehouse}",
f"snowflake://{user}@{account}/{database}/{schema}?warehouse={warehouse}",
authenticator="externalbrowser",
)
```

### Authenticating with Key Pair Authentication

Ibis supports connecting to Snowflake warehouses using private keys.

You can use it in the explicit-parameters-style or in the URL-style connection
APIs.

#### Explicit

```python
con = ibis.snowflake.connect(
user="user",
account="safpqpq-sq55555",
database="my_database",
schema="my_schema",
warehouse="my_warehouse",
# extracted private key from .p8 file
private_key=os.getenv(SNOWFLAKE_PKEY),
)
```

#### URL

```python
con = ibis.connect(
f"snowflake://{user}@{account}/{database}/{schema}?warehouse={warehouse}",
private_key=os.getenv(SNOWFLAKE_PKEY),
)
```

### Looking up your Snowflake organization ID and user ID

A [Snowflake account
Expand Down
15 changes: 15 additions & 0 deletions docs/concepts/datatypes.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,21 @@ t2 = ibis.examples.population.fetch().head(100)
t2
```

```{python}
#| echo: false
import IPython
import rich
import rich.traceback as rtb
rtb.install(
suppress=[IPython, rich],
width=84,
word_wrap=True,
max_frames=1,
code_width=84,
)
del IPython, rich, rtb
```

```{python}
#| error: true
t1.bill_depth_mm + t2.population
Expand Down
Loading