sqlframe 3.3.1__py3-none-any.whl → 3.4.0__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.
sqlframe/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.3.1'
16
- __version_tuple__ = version_tuple = (3, 3, 1)
15
+ __version__ = version = '3.4.0'
16
+ __version_tuple__ = version_tuple = (3, 4, 0)
@@ -1129,11 +1129,15 @@ def overlay(
1129
1129
  pos: t.Union[ColumnOrName, int],
1130
1130
  len: t.Optional[t.Union[ColumnOrName, int]] = None,
1131
1131
  ) -> Column:
1132
- pos_value = lit(pos) if isinstance(pos, int) else pos
1133
- if len is not None:
1134
- len_value = lit(len) if isinstance(len, int) else len
1135
- return Column.invoke_anonymous_function(src, "OVERLAY", replace, pos_value, len_value)
1136
- return Column.invoke_anonymous_function(src, "OVERLAY", replace, pos_value)
1132
+ return Column.invoke_expression_over_column(
1133
+ src,
1134
+ expression.Overlay,
1135
+ **{
1136
+ "expression": Column(replace).expression,
1137
+ "from": lit(pos).expression,
1138
+ "for": lit(len).expression if len is not None else None,
1139
+ },
1140
+ )
1137
1141
 
1138
1142
 
1139
1143
  @meta(unsupported_engines=["bigquery", "duckdb", "postgres", "snowflake"])
@@ -4834,7 +4838,7 @@ def str_to_map(
4834
4838
  )
4835
4839
 
4836
4840
 
4837
- @meta(unsupported_engines="*")
4841
+ @meta(unsupported_engines="postgres")
4838
4842
  def substr(str: ColumnOrName, pos: ColumnOrName, len: t.Optional[ColumnOrName] = None) -> Column:
4839
4843
  """
4840
4844
  Returns the substring of `str` that starts at `pos` and is of length `len`,
@@ -4873,10 +4877,7 @@ def substr(str: ColumnOrName, pos: ColumnOrName, len: t.Optional[ColumnOrName] =
4873
4877
  | k SQL|
4874
4878
  +------------------------+
4875
4879
  """
4876
- if len is not None:
4877
- return Column.invoke_anonymous_function(str, "substr", pos, len)
4878
- else:
4879
- return Column.invoke_anonymous_function(str, "substr", pos)
4880
+ return Column.invoke_expression_over_column(str, expression.Substring, start=pos, length=len)
4880
4881
 
4881
4882
 
4882
4883
  @meta(unsupported_engines="*")
@@ -251,6 +251,7 @@ from sqlframe.base.functions import stddev as stddev
251
251
  from sqlframe.base.functions import stddev_pop as stddev_pop
252
252
  from sqlframe.base.functions import stddev_samp as stddev_samp
253
253
  from sqlframe.base.functions import struct as struct
254
+ from sqlframe.base.functions import substr as substr
254
255
  from sqlframe.base.functions import substring as substring
255
256
  from sqlframe.base.functions import sum as sum
256
257
  from sqlframe.base.functions import sum_distinct as sum_distinct
@@ -184,6 +184,7 @@ from sqlframe.base.functions import (
184
184
  stddev_samp as stddev_samp,
185
185
  struct as struct,
186
186
  substring as substring,
187
+ substr as substr,
187
188
  sum as sum,
188
189
  sumDistinct as sumDistinct,
189
190
  sum_distinct as sum_distinct,
@@ -52,6 +52,10 @@ class DuckDBSession(
52
52
  super().__init__(conn, *args, **kwargs)
53
53
  self._last_result = None
54
54
 
55
+ @cached_property
56
+ def _cur(self) -> DuckDBPyConnection: # type: ignore
57
+ return self._conn
58
+
55
59
  @classmethod
56
60
  def _try_get_map(cls, value: t.Any) -> t.Optional[t.Dict[str, t.Any]]:
57
61
  if value and isinstance(value, dict):
@@ -193,6 +193,7 @@ from sqlframe.base.functions import (
193
193
  stddev_pop as stddev_pop,
194
194
  stddev_samp as stddev_samp,
195
195
  substring as substring,
196
+ substr as substr,
196
197
  sum as sum,
197
198
  sumDistinct as sumDistinct,
198
199
  sum_distinct as sum_distinct,
@@ -18,4 +18,5 @@ from sqlframe.base.function_alternatives import ( # noqa
18
18
  add_months_by_multiplication as add_months,
19
19
  arrays_overlap_renamed as arrays_overlap,
20
20
  _is_string_using_typeof_string_lcase as _is_string,
21
+ try_element_at_zero_based as try_element_at,
21
22
  )
@@ -2,6 +2,7 @@ from sqlframe.base.function_alternatives import ( # noqa
2
2
  percentile_without_disc as percentile,
3
3
  add_months_by_multiplication as add_months,
4
4
  arrays_overlap_renamed as arrays_overlap,
5
+ try_element_at_zero_based as try_element_at,
5
6
  )
6
7
  from sqlframe.base.functions import (
7
8
  abs as abs,
@@ -372,7 +373,6 @@ from sqlframe.base.functions import (
372
373
  try_aes_decrypt as try_aes_decrypt,
373
374
  try_avg as try_avg,
374
375
  try_divide as try_divide,
375
- try_element_at as try_element_at,
376
376
  try_multiply as try_multiply,
377
377
  try_subtract as try_subtract,
378
378
  try_sum as try_sum,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.3.1
3
+ Version: 3.4.0
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -18,7 +18,7 @@ Requires-Python: >=3.8
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: prettytable (<3.11.1)
21
- Requires-Dist: sqlglot (<25.23,>=24.0.0)
21
+ Requires-Dist: sqlglot (<25.25,>=24.0.0)
22
22
  Requires-Dist: typing-extensions (<5,>=4.8)
23
23
  Provides-Extra: bigquery
24
24
  Requires-Dist: google-cloud-bigquery-storage (<3,>=2) ; extra == 'bigquery'
@@ -27,7 +27,7 @@ Provides-Extra: dev
27
27
  Requires-Dist: duckdb (<1.2,>=0.9) ; extra == 'dev'
28
28
  Requires-Dist: findspark (<3,>=2) ; extra == 'dev'
29
29
  Requires-Dist: mypy (<1.12,>=1.10.0) ; extra == 'dev'
30
- Requires-Dist: openai (<1.48,>=1.30) ; extra == 'dev'
30
+ Requires-Dist: openai (<1.52,>=1.30) ; extra == 'dev'
31
31
  Requires-Dist: pandas-stubs (<3,>=2) ; extra == 'dev'
32
32
  Requires-Dist: pandas (<3,>=2) ; extra == 'dev'
33
33
  Requires-Dist: psycopg (<4,>=3.1) ; extra == 'dev'
@@ -39,7 +39,7 @@ Requires-Dist: pytest (<8.4,>=8.2.0) ; extra == 'dev'
39
39
  Requires-Dist: ruff (<0.7,>=0.4.4) ; extra == 'dev'
40
40
  Requires-Dist: types-psycopg2 (<3,>=2.9) ; extra == 'dev'
41
41
  Requires-Dist: pre-commit (>=3.5) ; (python_version == "3.8") and extra == 'dev'
42
- Requires-Dist: pre-commit (<3.9,>=3.7) ; (python_version >= "3.9") and extra == 'dev'
42
+ Requires-Dist: pre-commit (<4.1,>=3.7) ; (python_version >= "3.9") and extra == 'dev'
43
43
  Provides-Extra: docs
44
44
  Requires-Dist: mkdocs-include-markdown-plugin (==6.0.6) ; extra == 'docs'
45
45
  Requires-Dist: mkdocs-material-extensions (==1.1.1) ; extra == 'docs'
@@ -50,7 +50,7 @@ Provides-Extra: duckdb
50
50
  Requires-Dist: duckdb (<1.2,>=0.9) ; extra == 'duckdb'
51
51
  Requires-Dist: pandas (<3,>=2) ; extra == 'duckdb'
52
52
  Provides-Extra: openai
53
- Requires-Dist: openai (<1.48,>=1.30) ; extra == 'openai'
53
+ Requires-Dist: openai (<1.52,>=1.30) ; extra == 'openai'
54
54
  Provides-Extra: pandas
55
55
  Requires-Dist: pandas (<3,>=2) ; extra == 'pandas'
56
56
  Provides-Extra: postgres
@@ -1,5 +1,5 @@
1
1
  sqlframe/__init__.py,sha256=E3qCJ4PSEgKz6Hg3ves6LWt3JrQOV8c9HVLSIUOzKNc,3106
2
- sqlframe/_version.py,sha256=kgjiv6RGaxXEtlEXqn4D_sBXv_DSClZBtjMcTFwo908,411
2
+ sqlframe/_version.py,sha256=YWGqQYvejjlymmjzg4jncyBgDC760jlRmyon_Rd-2uQ,411
3
3
  sqlframe/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  sqlframe/base/_typing.py,sha256=b2clI5HI1zEZKB_3Msx3FeAJQyft44ubUifJwQRVXyQ,1298
5
5
  sqlframe/base/catalog.py,sha256=SzFQalTWdhWzxUY-4ut1f9TfOECp_JmJEgNPfrRKCe0,38457
@@ -8,7 +8,7 @@ sqlframe/base/dataframe.py,sha256=uTM46auSPniww-ZMtI5s0hrrCG1nOICMEhdZZ8E4cu8,71
8
8
  sqlframe/base/decorators.py,sha256=Jy4bf8MhZ-AJ6CWTj59bBJRqamtLbPC0USUMFrY6g0w,449
9
9
  sqlframe/base/exceptions.py,sha256=9Uwvqn2eAkDpqm4BrRgbL61qM-GMCbJEMAW8otxO46s,370
10
10
  sqlframe/base/function_alternatives.py,sha256=IxNBqplehkAEkpzA625Dif-9Xyi4Hrho81A9U262rV0,50714
11
- sqlframe/base/functions.py,sha256=p1aVgQ3htTLR5-mDzDtEh7W3iTcbt_XOOljLpza-dF8,189984
11
+ sqlframe/base/functions.py,sha256=b6rjrBHHpTMzBU2N5ubdXMJACM40qw4WnbI_RqusWIU,189878
12
12
  sqlframe/base/group.py,sha256=fsyG5990_Pd7gFPjTFrH9IEoAquL_wEkVpIlBAIkZJU,4091
13
13
  sqlframe/base/normalize.py,sha256=nXAJ5CwxVf4DV0GsH-q1w0p8gmjSMlv96k_ez1eVul8,3880
14
14
  sqlframe/base/operations.py,sha256=-AhNuEzcV7ZExoP1oY3blaKip-joQyJeQVvfBTs_2g4,3456
@@ -28,7 +28,7 @@ sqlframe/bigquery/catalog.py,sha256=8d36IzT5GPWd1FdxJ9vEljOdbIDepHnFOBjwP0bX6FE,
28
28
  sqlframe/bigquery/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
29
29
  sqlframe/bigquery/dataframe.py,sha256=Y2uy4FEYw0KxIHgnaA9uMwdIzxJzTlD_NSzIe7P7kxA,2405
30
30
  sqlframe/bigquery/functions.py,sha256=CxXiBzSLRf9h-9lAM8xSz1CFcVk2tVXU1eFPJ4d_L00,11140
31
- sqlframe/bigquery/functions.pyi,sha256=BCYqHpZzv4KWVtTuiC9wCSzXdxeHsz9gwkEvKzwHnoY,13583
31
+ sqlframe/bigquery/functions.pyi,sha256=GJnEmsTV2PyEzVlowJxpAvOT_6JYY2pVwJ_cZ3lxvz0,13636
32
32
  sqlframe/bigquery/group.py,sha256=UVBNBRTo8OqS-_cS5YwvTeJYgYxeG-d6R3kfyHmlFqw,391
33
33
  sqlframe/bigquery/readwriter.py,sha256=WAD3ZMwkkjOpvPPoZXfaLLNM6tRTeUvdEj-hQZAzXeo,870
34
34
  sqlframe/bigquery/session.py,sha256=uSiEWWiDEryq3gIJJUmsu1DIalRGomNiymVulxt439c,2744
@@ -40,10 +40,10 @@ sqlframe/duckdb/catalog.py,sha256=YYYVmetLUaJOdObKw4AJ7L0P-msshkta4xHlcZQ9zEA,47
40
40
  sqlframe/duckdb/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
41
41
  sqlframe/duckdb/dataframe.py,sha256=HZg_uMAz4RsubZJT4-MslUQS_0-InF0_P5Yq5HyJ3wE,1708
42
42
  sqlframe/duckdb/functions.py,sha256=Ee8o6YFtRdEiq0jNLXxgu5lcbc7Tsg0-lK6oRyxdcjo,1920
43
- sqlframe/duckdb/functions.pyi,sha256=Qn6j4zwwuBsh6q9341dR3Z5kpeRsgvM4u6Bb6FekKrI,5827
43
+ sqlframe/duckdb/functions.pyi,sha256=mKr9hI4snRyXEeWWTYfRNpBJmWd5T2EujdQ0oJxpEjY,5849
44
44
  sqlframe/duckdb/group.py,sha256=IkhbW42Ng1U5YT3FkIdiB4zBqRkW4QyTb-1detY1e_4,383
45
45
  sqlframe/duckdb/readwriter.py,sha256=iY0Wsms35gymilETOhAQGQCHfH8LCj9_uY8aCdF77ds,4806
46
- sqlframe/duckdb/session.py,sha256=h0gr4hzGTLTSYN2OECAYjb8HHh2QvSshInxAIUjEEs8,2615
46
+ sqlframe/duckdb/session.py,sha256=b5IrKbTkYUVNQGSG2EJPNV9MTdJw4onN-9aMrskjxck,2721
47
47
  sqlframe/duckdb/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
48
48
  sqlframe/duckdb/udf.py,sha256=Du9LnOtT1lJvB90D4HSR2tB7MXy179jZngDR-EjVjQk,656
49
49
  sqlframe/duckdb/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
@@ -75,7 +75,7 @@ sqlframe/snowflake/catalog.py,sha256=Tp_B9oMTInnqLTiZNsT0UNc-a-aKXu3zFThlCwLeKCA
75
75
  sqlframe/snowflake/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
76
76
  sqlframe/snowflake/dataframe.py,sha256=ANDZ5Dpxz-WTlTtmKNcv-nJlzTeTsAOK0X0gR2euPqQ,2144
77
77
  sqlframe/snowflake/functions.py,sha256=iX67xU8Czy5k3HiNjNbN-x-via6yqGNaMPw1maV9HPs,2580
78
- sqlframe/snowflake/functions.pyi,sha256=wqUPXuZxjRY0rPY2BRAb7XXkWYP1DyuDzvlriRySdSw,6185
78
+ sqlframe/snowflake/functions.pyi,sha256=DoRyF0zob8kV7qHkHonyyyPex-C_GIQvFDaSxf2lSa4,6207
79
79
  sqlframe/snowflake/group.py,sha256=pPP1l2RRo_LgkXrji8a87n2PKo-63ZRPT-WUtvVcBME,395
80
80
  sqlframe/snowflake/readwriter.py,sha256=yhRc2HcMq6PwV3ghZWC-q-qaE7LE4aEjZEXCip4OOlQ,884
81
81
  sqlframe/snowflake/session.py,sha256=fnFYrJ9JxoOf4ZKTrQcSKjwr6wNp6A85cMqKczOi3vA,3320
@@ -86,8 +86,8 @@ sqlframe/spark/__init__.py,sha256=QV0eNmY5fL4ulLvAJVVVx2OYFfQXN2KYV3R5cij7HTg,85
86
86
  sqlframe/spark/catalog.py,sha256=8ghHiKz9rBJ2ohm768XIftyi9Htbw-1cSkJUlXemwrI,39796
87
87
  sqlframe/spark/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
88
88
  sqlframe/spark/dataframe.py,sha256=_TD-h7oz0-i80r90v17UoLDoIzcGNchU2SL13ujOOic,1779
89
- sqlframe/spark/functions.py,sha256=AQfqfvaojJzCuo9DyDklz0JYZPhn_3dzWvztsklBO0o,586
90
- sqlframe/spark/functions.pyi,sha256=bjz6s8E6OB0c4KfTTsls7rhb_R9mIYvkaeaXefMziqM,11617
89
+ sqlframe/spark/functions.py,sha256=KY_597LO6UN0NQOK9Gk4ElRPACjS60ANTDF4KWKeyxc,635
90
+ sqlframe/spark/functions.pyi,sha256=jiZr-EGGuXEodEeKq56MwibcXBk4Lpy4H3brFd0DDVA,11628
91
91
  sqlframe/spark/group.py,sha256=MrvV_v-YkBc6T1zz882WrEqtWjlooWIyHBCmTQg3fCA,379
92
92
  sqlframe/spark/readwriter.py,sha256=w68EImTcGJv64X7pc1tk5tDjDxb1nAnn-MiIaaN9Dc8,812
93
93
  sqlframe/spark/session.py,sha256=cjsRQZz1kW67aajvXQyAJkv9Uh-zmmk3C3O9QSBbEQQ,5265
@@ -107,8 +107,8 @@ sqlframe/standalone/udf.py,sha256=azmgtUjHNIPs0WMVNId05SHwiYn41MKVBhKXsQJ5dmY,27
107
107
  sqlframe/standalone/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
108
108
  sqlframe/testing/__init__.py,sha256=VVCosQhitU74A3NnE52O4mNtGZONapuEXcc20QmSlnQ,132
109
109
  sqlframe/testing/utils.py,sha256=9DDYVuocO7tygee3RaajuJNZ24sJwf_LY556kKg7kTw,13011
110
- sqlframe-3.3.1.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
111
- sqlframe-3.3.1.dist-info/METADATA,sha256=SPW_z2bAjr0_jJPP-BNREOJAgwhMmecPt11oqPpcv4E,8639
112
- sqlframe-3.3.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
113
- sqlframe-3.3.1.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
114
- sqlframe-3.3.1.dist-info/RECORD,,
110
+ sqlframe-3.4.0.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
111
+ sqlframe-3.4.0.dist-info/METADATA,sha256=IDBAwEcCrJfWwGuAaa8kfV3Jxlte38uOYO87zcFWJfY,8639
112
+ sqlframe-3.4.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
113
+ sqlframe-3.4.0.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
114
+ sqlframe-3.4.0.dist-info/RECORD,,