Showing with 4,417 additions and 3,267 deletions.
  1. +1 −1 .github/workflows/create-rotate-key-issue.yml
  2. +1 −1 .github/workflows/docs-preview.yml
  3. +2 −2 .github/workflows/ibis-backends-cloud.yml
  4. +11 −3 .github/workflows/ibis-backends.yml
  5. +1 −1 .github/workflows/release.yml
  6. +4 −4 compose.yaml
  7. +4 −3 docs/_freeze/posts/ibis-to-file/index/execute-results/html.json
  8. +5 −4 docs/_freeze/posts/selectors/index/execute-results/html.json
  9. +16 −0 docs/_freeze/tutorials/cloud-data-platforms/clickhouse/execute-results/html.json
  10. +7 −2 docs/_quarto.yml
  11. +1 −1 docs/how-to/extending/builtin.qmd
  12. +1 −1 docs/how-to/input-output/duckdb-parquet.qmd
  13. +1 −1 docs/how-to/visualization/matplotlib.qmd
  14. +1 −1 docs/posts/ibis-to-file/index.qmd
  15. +9 −8 docs/posts/selectors/index.qmd
  16. +16 −0 docs/reference/cursed_knowledge.qmd
  17. +62 −0 docs/release_notes_generated.qmd
  18. +13 −23 docs/tutorials/ibis-for-pandas-users.qmd
  19. +29 −35 docs/tutorials/ibis-for-sql-users.qmd
  20. +2 −2 docs/tutorials/open-source-software/apache-flink/1_single_feature.qmd
  21. +6 −6 flake.lock
  22. +1 −1 ibis/__init__.py
  23. +25 −5 ibis/backends/__init__.py
  24. +121 −107 ibis/backends/bigquery/__init__.py
  25. +16 −6 ibis/backends/bigquery/tests/system/test_client.py
  26. +1 −1 ibis/backends/bigquery/tests/system/udf/test_udf_execute.py
  27. +6 −6 ibis/backends/bigquery/tests/unit/test_compiler.py
  28. +22 −9 ibis/backends/clickhouse/__init__.py
  29. +1 −3 ...ends/clickhouse/tests/snapshots/test_operators/test_binary_infix_parenthesization/lambda0/out.sql
  30. +1 −5 ibis/backends/clickhouse/tests/snapshots/test_select/test_named_from_filter_groupby/out1.sql
  31. +1 −5 ibis/backends/clickhouse/tests/snapshots/test_select/test_named_from_filter_groupby/out2.sql
  32. +1 −1 ibis/backends/clickhouse/tests/test_aggregations.py
  33. +13 −2 ibis/backends/clickhouse/tests/test_client.py
  34. +1 −1 ibis/backends/clickhouse/tests/test_functions.py
  35. +1 −1 ibis/backends/clickhouse/tests/test_operators.py
  36. +13 −13 ibis/backends/clickhouse/tests/test_select.py
  37. +5 −6 ibis/backends/dask/__init__.py
  38. +2 −2 ibis/backends/dask/tests/test_arrays.py
  39. +19 −17 ibis/backends/dask/tests/test_join.py
  40. +8 −8 ibis/backends/dask/tests/test_operations.py
  41. +5 −5 ibis/backends/dask/tests/test_window.py
  42. +49 −66 ibis/backends/datafusion/__init__.py
  43. +2 −6 ibis/backends/datafusion/tests/test_connect.py
  44. +2 −1 ibis/backends/datafusion/tests/test_register.py
  45. +26 −2 ibis/backends/druid/__init__.py
  46. +72 −42 ibis/backends/duckdb/__init__.py
  47. +9 −0 ibis/backends/duckdb/tests/test_client.py
  48. +13 −0 ibis/backends/duckdb/tests/test_register.py
  49. +2 −1 ibis/backends/duckdb/tests/test_udf.py
  50. +70 −74 ibis/backends/exasol/__init__.py
  51. +2 −3 ibis/backends/flink/__init__.py
  52. +2 −2 ibis/backends/flink/tests/test_compiler.py
  53. +23 −33 ibis/backends/impala/__init__.py
  54. +1 −1 ibis/backends/impala/tests/snapshots/test_exprs/test_named_from_filter_group_by/abc.sql
  55. +1 −1 ibis/backends/impala/tests/snapshots/test_exprs/test_named_from_filter_group_by/foo.sql
  56. +1 −1 ibis/backends/impala/tests/snapshots/test_string_builtins/test_string_builtins/lstrip/out.sql
  57. +1 −1 ibis/backends/impala/tests/snapshots/test_string_builtins/test_string_builtins/rstrip/out.sql
  58. +1 −1 ibis/backends/impala/tests/snapshots/test_string_builtins/test_string_builtins/strip/out.sql
  59. +1 −3 ...ds/impala/tests/snapshots/test_value_exprs/test_binary_infix_parenthesization/parens_left/out.sql
  60. +1 −1 ibis/backends/impala/tests/test_bucket_histogram.py
  61. +5 −3 ibis/backends/impala/tests/test_client.py
  62. +8 −6 ibis/backends/impala/tests/test_ddl.py
  63. +1 −1 ibis/backends/impala/tests/test_ddl_compilation.py
  64. +20 −18 ibis/backends/impala/tests/test_exprs.py
  65. +1 −1 ibis/backends/impala/tests/test_in_not_in.py
  66. +4 −2 ibis/backends/impala/tests/test_partition.py
  67. +28 −25 ibis/backends/impala/tests/test_sql.py
  68. +7 −7 ibis/backends/impala/tests/test_value_exprs.py
  69. +3 −3 ibis/backends/impala/tests/test_window.py
  70. +75 −57 ibis/backends/mssql/__init__.py
  71. +25 −1 ibis/backends/mssql/tests/test_client.py
  72. +77 −77 ibis/backends/mysql/__init__.py
  73. +77 −65 ibis/backends/oracle/__init__.py
  74. +5 −3 ibis/backends/pandas/__init__.py
  75. +2 −2 ibis/backends/pandas/tests/test_arrays.py
  76. +26 −22 ibis/backends/pandas/tests/test_join.py
  77. +7 −7 ibis/backends/pandas/tests/test_operations.py
  78. +5 −5 ibis/backends/pandas/tests/test_window.py
  79. +38 −2 ibis/backends/polars/__init__.py
  80. +6 −2 ibis/backends/polars/compiler.py
  81. +5 −11 ibis/backends/polars/tests/conftest.py
  82. +23 −0 ibis/backends/polars/tests/test_client.py
  83. +58 −67 ibis/backends/postgres/__init__.py
  84. +6 −16 ibis/backends/postgres/tests/test_functions.py
  85. +6 −6 ibis/backends/postgres/tests/test_geospatial.py
  86. +1 −1 ibis/backends/postgres/tests/test_json.py
  87. +1 −1 ibis/backends/postgres/tests/test_postgis.py
  88. +1 −1 ibis/backends/postgres/tests/test_string.py
  89. +6 −2 ibis/backends/postgres/tests/test_udf.py
  90. +8 −8 ibis/backends/pyspark/__init__.py
  91. +1 −1 ibis/backends/pyspark/tests/test_array.py
  92. +4 −4 ibis/backends/pyspark/tests/test_ddl.py
  93. +2 −2 ibis/backends/pyspark/tests/test_null.py
  94. +68 −92 ibis/backends/risingwave/__init__.py
  95. +5 −15 ibis/backends/risingwave/tests/test_functions.py
  96. +1 −1 ibis/backends/risingwave/tests/test_json.py
  97. +31 −50 ibis/backends/snowflake/__init__.py
  98. +6 −6 ibis/backends/snowflake/tests/test_client.py
  99. +3 −0 ibis/backends/sql/__init__.py
  100. +67 −150 ibis/backends/sql/compilers/base.py
  101. +10 −4 ibis/backends/sql/compilers/bigquery/__init__.py
  102. +16 −7 ibis/backends/sql/compilers/clickhouse.py
  103. +25 −7 ibis/backends/sql/compilers/duckdb.py
  104. +5 −1 ibis/backends/sql/compilers/flink.py
  105. +9 −3 ibis/backends/sql/compilers/impala.py
  106. +26 −4 ibis/backends/sql/compilers/mssql.py
  107. +5 −8 ibis/backends/sql/compilers/oracle.py
  108. +10 −4 ibis/backends/sql/compilers/postgres.py
  109. +10 −4 ibis/backends/sql/compilers/pyspark.py
  110. +12 −13 ibis/backends/sql/compilers/snowflake.py
  111. +11 −7 ibis/backends/sql/compilers/trino.py
  112. +8 −0 ibis/backends/sql/datatypes.py
  113. +2 −1 ibis/backends/sql/dialects.py
  114. +19 −13 ibis/backends/sql/rewrites.py
  115. +52 −52 ibis/backends/sqlite/__init__.py
  116. +7 −0 ibis/backends/sqlite/tests/test_client.py
  117. +1 −1 ibis/backends/tests/snapshots/test_sql/test_to_sql_default_backend/mssql/to_sql.sql
  118. +20 −20 ibis/backends/tests/sql/conftest.py
  119. +1 −1 ibis/backends/tests/sql/snapshots/test_compiler/test_subquery_where_location/decompiled.py
  120. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/add-dateintervalD/out.sql
  121. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/add-int8/out.sql
  122. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/add-interval/out.sql
  123. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/add-timeinterval/out.sql
  124. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/add-timestampinterval/out.sql
  125. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/and_-bool/out.sql
  126. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/and_-int8/out.sql
  127. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/lshift-int8/out.sql
  128. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/mod-int8/out.sql
  129. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/mul-int8/out.sql
  130. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/mul-intervalint8/out.sql
  131. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/or_-bool/out.sql
  132. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/or_-int8/out.sql
  133. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/pow-int8/out.sql
  134. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/rshift-int8/out.sql
  135. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/sub-dateintervalD/out.sql
  136. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/sub-int8/out.sql
  137. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/sub-interval/out.sql
  138. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/sub-timeinterval/out.sql
  139. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/sub-timestampinterval/out.sql
  140. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/truediv-int8/out.sql
  141. +10 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/xor-bool/out.sql
  142. +8 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_parens/xor-int8/out.sql
  143. +5 −0 ibis/backends/tests/sql/snapshots/test_sql/test_binop_with_alias_still_parenthesized/out.sql
  144. +22 −23 ibis/backends/tests/sql/test_compiler.py
  145. +78 −69 ibis/backends/tests/sql/test_select_sql.py
  146. +87 −28 ibis/backends/tests/sql/test_sql.py
  147. +9 −3 ibis/backends/tests/test_aggregation.py
  148. +44 −7 ibis/backends/tests/test_client.py
  149. +7 −7 ibis/backends/tests/test_dataframe_interchange.py
  150. +28 −1 ibis/backends/tests/test_dot_sql.py
  151. +5 −7 ibis/backends/tests/test_export.py
  152. +21 −28 ibis/backends/tests/test_generic.py
  153. +1 −1 ibis/backends/tests/test_interactive.py
  154. +13 −13 ibis/backends/tests/test_join.py
  155. +9 −12 ibis/backends/tests/test_numeric.py
  156. +1 −1 ibis/backends/tests/test_sql.py
  157. +294 −14 ibis/backends/tests/test_string.py
  158. +1 −1 ibis/backends/tests/test_struct.py
  159. +9 −6 ibis/backends/tests/test_temporal.py
  160. +1 −1 ibis/backends/tests/test_vectorized_udf.py
  161. +2 −2 ibis/backends/tests/test_window.py
  162. +88 −21 ibis/backends/tests/tpc/ds/test_queries.py
  163. +14 −14 ibis/backends/tests/tpc/h/test_queries.py
  164. +36 −48 ibis/backends/trino/__init__.py
  165. +1 −8 ibis/backends/trino/tests/conftest.py
  166. +77 −17 ibis/common/graph.py
  167. +37 −6 ibis/common/tests/test_graph.py
  168. +2 −7 ibis/expr/datatypes/tests/test_core.py
  169. +4 −7 ibis/expr/operations/relations.py
  170. +71 −0 ibis/expr/schema.py
  171. +9 −9 ibis/expr/tests/test_format.py
  172. +7 −7 ibis/expr/tests/test_newrels.py
  173. +4 −4 ibis/expr/tests/test_visualize.py
  174. +130 −41 ibis/expr/types/generic.py
  175. +9 −26 ibis/expr/types/logical.py
  176. +75 −199 ibis/expr/types/relations.py
  177. +5 −6 ibis/formats/pandas.py
  178. +1 −1 ibis/formats/polars.py
  179. +7 −0 ibis/formats/tests/test_pandas.py
  180. +2 −1 ibis/formats/tests/test_polars.py
  181. +75 −9 ibis/selectors.py
  182. +24 −6 ibis/tests/benchmarks/test_benchmarks.py
  183. +15 −13 ibis/tests/expr/test_analysis.py
  184. +15 −2 ibis/tests/expr/test_analytics.py
  185. +1 −1 ibis/tests/expr/test_case.py
  186. +2 −2 ibis/tests/expr/test_format_sql_operations.py
  187. +2 −2 ibis/tests/expr/test_relocate.py
  188. +56 −47 ibis/tests/expr/test_selectors.py
  189. +3 −3 ibis/tests/expr/test_struct.py
  190. +67 −122 ibis/tests/expr/test_table.py
  191. +8 −16 ibis/tests/expr/test_value_exprs.py
  192. +4 −2 ibis/tests/expr/test_window_frames.py
  193. +45 −0 ibis/util.py
  194. +11 −0 jupyter-lite.json
  195. +15 −0 justfile
  196. +17 −12 nix/quarto/default.nix
  197. +883 −912 poetry.lock
  198. +14 −6 pyproject.toml
  199. +31 −31 requirements-dev.txt
2 changes: 1 addition & 1 deletion .github/workflows/create-rotate-key-issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Generate a GitHub token
uses: actions/create-github-app-token@v1.10.3
uses: actions/create-github-app-token@v1.10.4
id: generate_token
with:
app-id: ${{ secrets.SQUAWK_BOT_APP_ID }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
cancel-in-progress: true
if: github.event.label.name == 'docs-preview'
steps:
- uses: actions/create-github-app-token@v1.10.3
- uses: actions/create-github-app-token@v1.10.4
id: generate_token
with:
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ibis-backends-cloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- uses: actions/create-github-app-token@v1.10.3
- uses: actions/create-github-app-token@v1.10.4
id: generate_token
with:
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
Expand All @@ -107,7 +107,7 @@ jobs:
run: poetry add snowflake-snowpark-python --python="==${{ steps.install_python.outputs.python-version }}"

- name: install ibis
run: poetry install --without dev --without docs --extras "${{ join(matrix.backend.extras, ' ') }}"
run: poetry install --without dev --without docs --extras "${{ join(matrix.backend.extras, ' ') }} examples"

- uses: extractions/setup-just@v2
env:
Expand Down
14 changes: 11 additions & 3 deletions .github/workflows/ibis-backends.yml
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,7 @@ jobs:
run: pip install 'poetry==1.8.3'

- name: install ibis
run: poetry install --without dev --without docs --extras "${{ join(matrix.backend.extras, ' ') }}"
run: poetry install --without dev --without docs --extras "${{ join(matrix.backend.extras, ' ') }} examples"

- name: install deps for broken avro-python setup
if: matrix.backend.name == 'flink'
Expand Down Expand Up @@ -501,6 +501,14 @@ jobs:
FLINK_REMOTE_CLUSTER_PORT: "8081"
IBIS_EXAMPLES_DATA: ${{ runner.temp }}/examples-${{ matrix.backend.name }}-${{ matrix.os }}-${{ steps.install_python.outputs.python-version }}

- name: "run backend doctests: ${{ matrix.backend.name }}"
if: matrix.os == 'ubuntu-latest'
run: just backend-doctests ${{ matrix.backend.name }}
env:
FLINK_REMOTE_CLUSTER_ADDR: localhost
FLINK_REMOTE_CLUSTER_PORT: "8081"
IBIS_EXAMPLES_DATA: ${{ runner.temp }}/examples-${{ matrix.backend.name }}-${{ matrix.os }}-${{ steps.install_python.outputs.python-version }}

- name: check that no untracked files were produced
shell: bash
run: |
Expand Down Expand Up @@ -655,7 +663,7 @@ jobs:
run: poetry lock --no-update

- name: install ibis
run: poetry install --without dev --without docs --extras "${{ join(matrix.backend.extras, ' ') }}"
run: poetry install --without dev --without docs --extras "${{ join(matrix.backend.extras, ' ') }} examples"

- name: run tests
run: just ci-check -m ${{ matrix.backend.name }} --numprocesses auto --dist=loadgroup
Expand Down Expand Up @@ -741,7 +749,7 @@ jobs:
run: poetry lock --no-update

- name: install ibis
run: poetry install --without dev --without docs --extras pyspark
run: poetry install --without dev --without docs --extras "pyspark examples"

- name: install delta-spark
if: matrix.pyspark-version == '3.5'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1.10.3
- uses: actions/create-github-app-token@v1.10.4
id: generate_token
with:
app-id: ${{ secrets.APP_ID }}
Expand Down
8 changes: 4 additions & 4 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.3.42-alpine
image: clickhouse/clickhouse-server:24.8.4.13-alpine
ports:
- 8123:8123 # http port
- 9000:9000 # native protocol port
Expand Down Expand Up @@ -99,7 +99,7 @@ services:
- trino

minio:
image: bitnami/minio:2024.8.29
image: bitnami/minio:2024.9.9
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:455
image: trinodb/trino:457
ports:
- 8080:8080
networks:
Expand Down Expand Up @@ -367,7 +367,7 @@ services:
- oracle:/opt/oracle/data

exasol:
image: exasol/docker-db:8.30.0
image: exasol/docker-db:8.31.0
privileged: true
ports:
- 8563:8563
Expand Down
Loading