sqlframe 1.0.0__py3-none-any.whl → 1.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 (39) hide show
  1. sqlframe/_version.py +2 -2
  2. sqlframe/base/catalog.py +3 -2
  3. sqlframe/base/column.py +1 -1
  4. sqlframe/base/dataframe.py +10 -5
  5. sqlframe/base/functions.py +1 -1
  6. sqlframe/base/group.py +1 -1
  7. sqlframe/base/normalize.py +1 -1
  8. sqlframe/base/operations.py +1 -1
  9. sqlframe/base/readerwriter.py +1 -1
  10. sqlframe/base/session.py +5 -13
  11. sqlframe/base/transforms.py +1 -1
  12. sqlframe/base/types.py +1 -1
  13. sqlframe/base/util.py +2 -0
  14. sqlframe/base/window.py +1 -1
  15. sqlframe/bigquery/group.py +1 -1
  16. sqlframe/bigquery/readwriter.py +1 -1
  17. sqlframe/duckdb/catalog.py +1 -1
  18. sqlframe/duckdb/group.py +1 -1
  19. sqlframe/duckdb/readwriter.py +18 -6
  20. sqlframe/postgres/catalog.py +1 -1
  21. sqlframe/postgres/group.py +1 -1
  22. sqlframe/postgres/readwriter.py +1 -1
  23. sqlframe/redshift/catalog.py +1 -1
  24. sqlframe/redshift/group.py +1 -1
  25. sqlframe/redshift/readwriter.py +1 -1
  26. sqlframe/snowflake/catalog.py +1 -1
  27. sqlframe/snowflake/group.py +1 -1
  28. sqlframe/snowflake/readwriter.py +1 -1
  29. sqlframe/spark/catalog.py +1 -1
  30. sqlframe/spark/group.py +1 -1
  31. sqlframe/spark/readwriter.py +1 -1
  32. sqlframe/standalone/group.py +1 -1
  33. sqlframe/standalone/readwriter.py +1 -1
  34. sqlframe/standalone/session.py +1 -1
  35. {sqlframe-1.0.0.dist-info → sqlframe-1.1.1.dist-info}/METADATA +3 -3
  36. {sqlframe-1.0.0.dist-info → sqlframe-1.1.1.dist-info}/RECORD +39 -39
  37. {sqlframe-1.0.0.dist-info → sqlframe-1.1.1.dist-info}/LICENSE +0 -0
  38. {sqlframe-1.0.0.dist-info → sqlframe-1.1.1.dist-info}/WHEEL +0 -0
  39. {sqlframe-1.0.0.dist-info → sqlframe-1.1.1.dist-info}/top_level.txt +0 -0
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 = '1.0.0'
16
- __version_tuple__ = version_tuple = (1, 0, 0)
15
+ __version__ = version = '1.1.1'
16
+ __version_tuple__ = version_tuple = (1, 1, 1)
sqlframe/base/catalog.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -8,7 +8,7 @@ from sqlglot import MappingSchema, exp
8
8
 
9
9
  from sqlframe.base.decorators import normalize
10
10
  from sqlframe.base.exceptions import TableSchemaError
11
- from sqlframe.base.util import to_schema
11
+ from sqlframe.base.util import ensure_column_mapping, to_schema
12
12
 
13
13
  if t.TYPE_CHECKING:
14
14
  from sqlglot.schema import ColumnMapping
@@ -82,6 +82,7 @@ class _BaseCatalog(t.Generic[SESSION, DF]):
82
82
  raise TableSchemaError(
83
83
  "This session does not have access to a catalog that can lookup column information. See docs for explicitly defining columns or using a session that can automatically determine this."
84
84
  )
85
+ column_mapping = ensure_column_mapping(column_mapping) # type: ignore
85
86
  self._schema.add_table(table, column_mapping, dialect=self.session.input_dialect)
86
87
 
87
88
  @normalize(["dbName"])
sqlframe/base/column.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -417,7 +417,7 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
417
417
  from sqlframe.base.session import _BaseSession
418
418
 
419
419
  value = expression.sql(dialect=_BaseSession().input_dialect).encode("utf-8")
420
- hash = f"t{zlib.crc32(value)}"[:6]
420
+ hash = f"t{zlib.crc32(value)}"[:9]
421
421
  return self.session._normalize_string(hash)
422
422
 
423
423
  def _get_select_expressions(
@@ -606,8 +606,13 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
606
606
  return df._convert_leaf_to_cte(sequence_id=new_sequence_id)
607
607
 
608
608
  @operation(Operation.WHERE)
609
- def where(self, column: t.Union[Column, bool], **kwargs) -> Self:
610
- col = self._ensure_and_normalize_col(column)
609
+ def where(self, column: t.Union[Column, str, bool], **kwargs) -> Self:
610
+ if isinstance(column, str):
611
+ col = self._ensure_and_normalize_col(
612
+ sqlglot.parse_one(column, dialect=self.session.input_dialect)
613
+ )
614
+ else:
615
+ col = self._ensure_and_normalize_col(column)
611
616
  return self.copy(expression=self.expression.where(col.expression))
612
617
 
613
618
  filter = where
@@ -1094,7 +1099,7 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
1094
1099
  )
1095
1100
  if existing_col_index:
1096
1101
  expression = self.expression.copy()
1097
- expression.expressions[existing_col_index] = col.expression
1102
+ expression.expressions[existing_col_index] = col.alias(colName).expression
1098
1103
  return self.copy(expression=expression)
1099
1104
  return self.copy().select(col.alias(colName), append=True)
1100
1105
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
sqlframe/base/group.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
sqlframe/base/session.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -313,24 +313,16 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, CONN]):
313
313
  sel_expression = exp.Select(**select_kwargs)
314
314
  if empty_df:
315
315
  sel_expression = sel_expression.where(exp.false())
316
- # if empty_df:
317
- # if not column_mapping:
318
- # # If we don't have rows or columns then we just return a null with a false expression
319
- # sel_expression = (
320
- # exp.Select().select("null").from_("VALUES (NULL)").where(exp.false())
321
- # )
322
- # else:
323
- # # Ensure no results are returned if the dataframe is expected to be empty instead of
324
- # # a row of null values
325
- # sel_expression = sel_expression.where(exp.false())
326
316
  return self._create_df(sel_expression)
327
317
 
328
- def sql(self, sqlQuery: t.Union[str, exp.Expression]) -> DF:
329
- expression = self._optimize(
318
+ def sql(self, sqlQuery: t.Union[str, exp.Expression], optimize: bool = True) -> DF:
319
+ expression = (
330
320
  sqlglot.parse_one(sqlQuery, read=self.input_dialect)
331
321
  if isinstance(sqlQuery, str)
332
322
  else sqlQuery
333
323
  )
324
+ if optimize:
325
+ expression = self._optimize(expression)
334
326
  if self.temp_views:
335
327
  replacement_mapping = {}
336
328
  for table in expression.find_all(exp.Table):
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  import typing as t
4
4
 
sqlframe/base/types.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
sqlframe/base/util.py CHANGED
@@ -113,6 +113,8 @@ def ensure_column_mapping(schema: t.Union[str, StructType]) -> t.Dict:
113
113
  }
114
114
  # TODO: Make a protocol with a `simpleString` attribute as what it looks for instead of the actual
115
115
  # `StructType` object.
116
+ elif hasattr(schema, "simpleString"):
117
+ return {struct_field.name: struct_field.dataType.simpleString() for struct_field in schema}
116
118
  return sqlglot_ensure_column_mapping(schema) # type: ignore
117
119
 
118
120
 
sqlframe/base/window.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
sqlframe/duckdb/group.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,10 +1,13 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
5
  import logging
6
6
  import typing as t
7
7
 
8
+ from sqlglot import exp
9
+ from sqlglot.helper import ensure_list
10
+
8
11
  from sqlframe.base.readerwriter import _BaseDataFrameReader, _BaseDataFrameWriter
9
12
  from sqlframe.base.util import ensure_column_mapping, to_csv
10
13
 
@@ -69,13 +72,22 @@ class DuckDBDataFrameReader(_BaseDataFrameReader["DuckDBSession", "DuckDBDataFra
69
72
  |100|NULL|
70
73
  +---+----+
71
74
  """
75
+ if schema:
76
+ column_mapping = ensure_column_mapping(schema)
77
+ select_columns = [x.expression for x in self._to_casted_columns(column_mapping)]
78
+ if format == "csv":
79
+ duckdb_columns = ", ".join(
80
+ [f"'{column}': '{dtype}'" for column, dtype in column_mapping.items()]
81
+ )
82
+ options["columns"] = "{" + duckdb_columns + "}"
83
+ else:
84
+ select_columns = [exp.Star()]
72
85
  if format:
73
- sql = f"SELECT * FROM read_{format}('{path}', {to_csv(options)})"
86
+ paths = ",".join([f"'{path}'" for path in ensure_list(path)])
87
+ from_clause = f"read_{format}([{paths}], {to_csv(options)})"
74
88
  else:
75
- sql = f"select * from '{path}'"
76
- df = self.session.sql(sql)
77
- if schema:
78
- df = df.select(*self._to_casted_columns(ensure_column_mapping(schema)))
89
+ from_clause = f"'{path}'"
90
+ df = self.session.sql(exp.select(*select_columns).from_(from_clause), optimize=False)
79
91
  self.session._last_loaded_file = path # type: ignore
80
92
  return df
81
93
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
sqlframe/spark/catalog.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
sqlframe/spark/group.py CHANGED
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'dataframe' folder.
1
+ # This code is based on code from Apache Spark under the license found in the LICENSE file located in the 'sqlframe' folder.
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 1.0.0
3
+ Version: 1.1.1
4
4
  Summary: Taking the Spark out of PySpark by converting to SQL
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.0)
21
- Requires-Dist: sqlglot (<23.18,>=23.14.0)
21
+ Requires-Dist: sqlglot (<24.1,>=24.0.0)
22
22
  Provides-Extra: bigquery
23
23
  Requires-Dist: google-cloud-bigquery-storage (<3,>=2) ; extra == 'bigquery'
24
24
  Requires-Dist: google-cloud-bigquery[pandas] (<4,>=3) ; extra == 'bigquery'
@@ -40,7 +40,7 @@ Requires-Dist: typing-extensions (<5,>=4.11) ; extra == 'dev'
40
40
  Requires-Dist: pre-commit (>=3.5) ; (python_version == "3.8") and extra == 'dev'
41
41
  Requires-Dist: pre-commit (<3.8,>=3.7) ; (python_version >= "3.9") and extra == 'dev'
42
42
  Provides-Extra: docs
43
- Requires-Dist: mkdocs-include-markdown-plugin (==4.0.3) ; extra == 'docs'
43
+ Requires-Dist: mkdocs-include-markdown-plugin (==6.0.6) ; extra == 'docs'
44
44
  Requires-Dist: mkdocs-material-extensions (==1.1.1) ; extra == 'docs'
45
45
  Requires-Dist: mkdocs-material (==9.0.5) ; extra == 'docs'
46
46
  Requires-Dist: mkdocs (==1.4.2) ; extra == 'docs'
@@ -1,23 +1,23 @@
1
1
  sqlframe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- sqlframe/_version.py,sha256=DGJ4pj32xs3_DRJhSzQwCiRNnAQrMgo09USYpyMZsKc,411
2
+ sqlframe/_version.py,sha256=EPoWF0em1tKJgBz5dbBF-r29860VBk-SsdiXh6E1aO0,411
3
3
  sqlframe/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  sqlframe/base/_typing.py,sha256=DuTay8-o9W-pw3RPZCgLunKNJLS9PkaV11G_pxXp9NY,1256
5
- sqlframe/base/catalog.py,sha256=Y9v7ZdpUVeFjjqcKyrRTBKK1H-IXM5SuIwVm5blSXK4,36984
6
- sqlframe/base/column.py,sha256=K9TtpBjVsFK9NtEX9ZQscU6qZIKiVVh1zj3jG9HifyA,15110
7
- sqlframe/base/dataframe.py,sha256=MTghHiW5nXDE6p214h93FChUlOdd8c6xf2WIZxrToR0,58817
5
+ sqlframe/base/catalog.py,sha256=jbEuY1wje4oPRuFSMgKdX-yTohBL99S57QuHhUXCybI,37085
6
+ sqlframe/base/column.py,sha256=1xFwPhBlzdO6ZL9tTpPESL7B3XQ3rFMPIoBekFm0TqM,15109
7
+ sqlframe/base/dataframe.py,sha256=4z1xcHOi8LPeyh4Ev40V6UZ2Wqb53WmUfQAxooPjxgQ,59032
8
8
  sqlframe/base/decorators.py,sha256=fnqT1Hqa0J_gUurDcVY1Dcscj6SXFxFJ5PKAw-xe5sU,2097
9
9
  sqlframe/base/exceptions.py,sha256=pCB9hXX4jxZWzNg3JN1i38cv3BmpUlee5NoLYx3YXIQ,208
10
10
  sqlframe/base/function_alternatives.py,sha256=to0kv3MTJmQFeVTMcitz0AxBIoUJC3cu5LkEY5aJpoo,31318
11
- sqlframe/base/functions.py,sha256=rm-8Mmz_156G3Hdwfdf-HF4HDeVkv0pBcDCJskoRINQ,53541
12
- sqlframe/base/group.py,sha256=sKoaI2aLMih9nJTQfqzfJ00NbBcGQtArWXYHT40motQ,4060
13
- sqlframe/base/normalize.py,sha256=Ie6IcrD9dL-xBUKgDoh_c_gfLw68tBK5AmiprCA8MXE,3633
14
- sqlframe/base/operations.py,sha256=fVlAse6-WdQnEaHghRZVHXOesQ3OnKQwBnVYv5nVRiI,3457
15
- sqlframe/base/readerwriter.py,sha256=cgg7KuO7Eu8fScKOg1KyNFAcgnsjpU6yusPVs0o52a4,25213
16
- sqlframe/base/session.py,sha256=0ZyUs5kHcEM2Kk74BH9M1hCvEGBsp1_RD1lRVwPCH9M,22390
17
- sqlframe/base/transforms.py,sha256=EKwUpfp83bncEs_MNmI2OO7gV6vA_Rr89ZWmE4eETSw,468
18
- sqlframe/base/types.py,sha256=1CwMW9Q1inYzQcPTyjv1QANtVSHha8ZmBigmopQET98,11925
19
- sqlframe/base/util.py,sha256=mnJKg1c_CpkuB1CqyB1f-WamvV7XL3__Y45tOIqauO4,7455
20
- sqlframe/base/window.py,sha256=yyKvoNi41vL2t7XK2Ysjp8Q2FNIu3BYv-9EPtp5og6k,4944
11
+ sqlframe/base/functions.py,sha256=iVe8AbXGX_gXnkQ1N-clX6rihsonfzJ84_YvWzhB2FM,53540
12
+ sqlframe/base/group.py,sha256=TES9CleVmH3x-0X-tqmuUKfCKSWjH5vg1aU3R6dDmFc,4059
13
+ sqlframe/base/normalize.py,sha256=H7Cj2f7snMxuF_fGnvzl0P_ejT6ZJuASxWory08TiQc,3632
14
+ sqlframe/base/operations.py,sha256=-AhNuEzcV7ZExoP1oY3blaKip-joQyJeQVvfBTs_2g4,3456
15
+ sqlframe/base/readerwriter.py,sha256=kyPdmOmi75lHsEAkmHOq9wsLj2cGWf0oHwngwkZYx8k,25212
16
+ sqlframe/base/session.py,sha256=s-jnViqdO6E4t8KiHIiUIBa1mxQlhlSb0dBPUl42nbI,21925
17
+ sqlframe/base/transforms.py,sha256=y0j3SGDz3XCmNGrvassk1S-owllUWfkHyMgZlY6SFO4,467
18
+ sqlframe/base/types.py,sha256=aJT5YXr-M_LAfUM0uK4asfbrQFab_xmsp1CP2zkG8p0,11924
19
+ sqlframe/base/util.py,sha256=SeUC2pcSBGnsS1W5PL1p-IGC6bJG8_2a7En2hxSTmpA,7597
20
+ sqlframe/base/window.py,sha256=8hOv-ignPPIsZA9FzvYzcLE9J_glalVaYjIAUdRUX3o,4943
21
21
  sqlframe/base/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  sqlframe/base/mixins/catalog_mixins.py,sha256=ZNzNn-cWB0RwT7L1KZCWYke2JlP-cZze0MDNOzSfHew,14093
23
23
  sqlframe/base/mixins/readwriter_mixins.py,sha256=N2nsXOG3A2j6O3N195U-_fYOZMkqfifGcfduxODUcxs,4656
@@ -26,58 +26,58 @@ sqlframe/bigquery/catalog.py,sha256=HdRXZfZczoyLHEQ0y30nfCFKBvTTOJ1s6t0mafN_bGk,
26
26
  sqlframe/bigquery/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
27
27
  sqlframe/bigquery/dataframe.py,sha256=fPQ6043aSS_ds30WsvrYOgNZJPH0jq7BeNHGLQ2MEW4,1372
28
28
  sqlframe/bigquery/functions.py,sha256=RF8yG_4MS3at_60V0NNTE5ADERJZa7kZGYFWI4ST3jM,11149
29
- sqlframe/bigquery/group.py,sha256=C3wLlyDYgNqDszTNbojoXdZQuqBYw3FRtOqpHhfaf0E,392
30
- sqlframe/bigquery/readwriter.py,sha256=-r8nGOACWJ51XACONppgKsoMQMwcCgTJ0fp_mXW4JOs,871
29
+ sqlframe/bigquery/group.py,sha256=UVBNBRTo8OqS-_cS5YwvTeJYgYxeG-d6R3kfyHmlFqw,391
30
+ sqlframe/bigquery/readwriter.py,sha256=WAD3ZMwkkjOpvPPoZXfaLLNM6tRTeUvdEj-hQZAzXeo,870
31
31
  sqlframe/bigquery/session.py,sha256=1-hE1Wr2b6SqfD4M_-OGMqjaSbhD6wSQd74v71xHZv8,2709
32
32
  sqlframe/bigquery/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
33
33
  sqlframe/bigquery/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
34
34
  sqlframe/duckdb/__init__.py,sha256=t85TA3ufZtL1weQNFmEs8itCSwbJFtw03-p0GT4XGf8,669
35
- sqlframe/duckdb/catalog.py,sha256=XDFf-si0_myFBOM8rwlg2G80FdgBXBe7pkzk8xxYcuE,3830
35
+ sqlframe/duckdb/catalog.py,sha256=SR1JWPGKjNJ2Dq2au-4rZAadPYr8Zn4WsK5EYKRyFm4,3829
36
36
  sqlframe/duckdb/column.py,sha256=wkEPcp3xVsH5nC3kpacXqNkRv9htPtBgt-0uFRxIRNs,56
37
37
  sqlframe/duckdb/dataframe.py,sha256=9T6GV4JScaApFSA4T7fixot78HMUgkjGxU7TgjolOOM,1410
38
38
  sqlframe/duckdb/functions.py,sha256=srvzbk_Wg-wQPFGYp624dRDyYJghi47M8E-Tu7pBdY0,1507
39
- sqlframe/duckdb/group.py,sha256=sYTExtNprfbW74LWc_Lyjc1G6K1FogQsdILU2599Bq8,384
40
- sqlframe/duckdb/readwriter.py,sha256=ThRTEE_RHsFwJF-SHF_HkPiJ9q0SPSn20McChMZtJeE,3817
39
+ sqlframe/duckdb/group.py,sha256=IkhbW42Ng1U5YT3FkIdiB4zBqRkW4QyTb-1detY1e_4,383
40
+ sqlframe/duckdb/readwriter.py,sha256=qhqXvSsRQ6k-FY_1dSRtHpqbxRNVv8sr3iZp_SooBqs,4375
41
41
  sqlframe/duckdb/session.py,sha256=TCAVsSqBGGj1Otb2iIkSkWqjbzzg1MeDAafGN928-O8,1893
42
42
  sqlframe/duckdb/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
43
43
  sqlframe/duckdb/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
44
44
  sqlframe/postgres/__init__.py,sha256=Sz_MtgV_oh_QhfZTC7iKM07ICUmNcJEDV0kEkSW9ZKU,712
45
- sqlframe/postgres/catalog.py,sha256=EjRbgHKSZKYFdKYkicIIpXiezvA0vOhAQxNyspKNxXk,3653
45
+ sqlframe/postgres/catalog.py,sha256=4f4Ytacfn0Q3xnT0MWUeEYPq4SwNPdS1EmRc2fBK9yc,3652
46
46
  sqlframe/postgres/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
47
47
  sqlframe/postgres/dataframe.py,sha256=bv_y9D9w03x-sfLdippb8n4goFQGazg1j0gZEPHe98k,1372
48
48
  sqlframe/postgres/functions.py,sha256=UNL7dE6LmzekvolwqWB-aFt8ITamxeSfuG50_NP_G8c,2133
49
- sqlframe/postgres/group.py,sha256=XmUndNdoYgy6-84xMMVCdCI06j7Na5QrSFhhqvUKcGw,392
50
- sqlframe/postgres/readwriter.py,sha256=P3gXZkKKc9R92slKph5K0FPJPjsdgMYDRX-8LPsOI5s,871
49
+ sqlframe/postgres/group.py,sha256=KUXeSFKWTSH9yCRJAhW85OvjZaG6Zr4In9LR_ie3yGU,391
50
+ sqlframe/postgres/readwriter.py,sha256=L1e3yKXzFVNR_W5s1DHaWol7G8x7l4jcZ5sLGualyMk,870
51
51
  sqlframe/postgres/session.py,sha256=oKh8-j9MN6msVheQNCYoGmej9ktFLTTHmlMP58uZ3nw,1936
52
52
  sqlframe/postgres/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
53
53
  sqlframe/postgres/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
54
54
  sqlframe/redshift/__init__.py,sha256=jamKYQtQaKjjXnQ01QGPHvatbrZSw9sWno_VOUGSz6I,712
55
- sqlframe/redshift/catalog.py,sha256=6w7-ykPQ6LbWL77Le74PqfQstW_WTmStAw7BrNtgcu4,4718
55
+ sqlframe/redshift/catalog.py,sha256=JBDWIu4FQhi4_POB9pxW0T5A-6qdSK7BCq_Cp-V6tIM,4717
56
56
  sqlframe/redshift/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
57
57
  sqlframe/redshift/dataframe.py,sha256=mtxmKVnvuYNQnirEvuXICY53WRiN8L1QCtSsvPJ-4jE,1372
58
58
  sqlframe/redshift/functions.py,sha256=DR5kodYAcKatUqopwrEQtxryI4ZSqaH47_y3WLht4Wg,455
59
- sqlframe/redshift/group.py,sha256=8iOjDH5CBCtU6NMLrc7qnCkrxynGbBiDU9jjBU2eoY0,392
60
- sqlframe/redshift/readwriter.py,sha256=7sfALF-Wc7FwgOsVqS2zmH2eDZr7-Mo2XcPQPx9gRvQ,871
59
+ sqlframe/redshift/group.py,sha256=5MGZYJfHpzoRSQ0N_pn4KUk4Mk2gocQwU3K1-jAbvGg,391
60
+ sqlframe/redshift/readwriter.py,sha256=g3FYKSsJKqcSnElprzzz29ZctoXq9tRB0Mj9Bm1HycI,870
61
61
  sqlframe/redshift/session.py,sha256=GA2CFGJckissPYmcXWR1R3QOOoSa9XuLOR6sWFFuC1k,1494
62
62
  sqlframe/redshift/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
63
63
  sqlframe/redshift/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
64
64
  sqlframe/snowflake/__init__.py,sha256=nuQ3cuHjDpW4ELZfbd2qOYmtXmcYl7MtsrdOrRdozo0,746
65
- sqlframe/snowflake/catalog.py,sha256=DKigfH4i4VWY2N485YlIDUFUnz-InS0VzibvOD-7Fls,4920
65
+ sqlframe/snowflake/catalog.py,sha256=1Mu6pgYF3CIJwhgrHpYE_mMbg8Mg5m5N-rrglQHMWP0,4919
66
66
  sqlframe/snowflake/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
67
67
  sqlframe/snowflake/dataframe.py,sha256=OJ27NudBUE3XX9mc8ywooGhYV4ijF9nX2K_nkHRcTx4,1393
68
68
  sqlframe/snowflake/functions.py,sha256=ZYX9gyPvmpKoLi_7uQdB0uPQNTREOAJD0aCcccX1iPc,456
69
- sqlframe/snowflake/group.py,sha256=d4P_wmCxYyo3jsB0R9294LQ7HfhOAZyoq_l_UzLTqjE,396
70
- sqlframe/snowflake/readwriter.py,sha256=sMTLtfLfLZ8tzJPq1_adjpRCkfcejU-2GyLMbOFpBbY,885
69
+ sqlframe/snowflake/group.py,sha256=pPP1l2RRo_LgkXrji8a87n2PKo-63ZRPT-WUtvVcBME,395
70
+ sqlframe/snowflake/readwriter.py,sha256=yhRc2HcMq6PwV3ghZWC-q-qaE7LE4aEjZEXCip4OOlQ,884
71
71
  sqlframe/snowflake/session.py,sha256=oJK_3t43TeUiAj7KBfn2lD5d6AVHWsI39xLu-j_h5QM,1502
72
72
  sqlframe/snowflake/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
73
73
  sqlframe/snowflake/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
74
74
  sqlframe/spark/__init__.py,sha256=jamKYQtQaKjjXnQ01QGPHvatbrZSw9sWno_VOUGSz6I,712
75
- sqlframe/spark/catalog.py,sha256=ZJeUfyk43L5WxJppQzWPnaV-aqnBmA8hKtfBO9F2ruE,32485
75
+ sqlframe/spark/catalog.py,sha256=nqiZf14m2-PPbZALLlSgvLnpLqSskNnAiZz_ccI-nPs,32484
76
76
  sqlframe/spark/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
77
77
  sqlframe/spark/dataframe.py,sha256=V3z5Bx9snLgYh4bDwJfJb5mj1P7UsZF8DMlLwZXopBg,1309
78
78
  sqlframe/spark/functions.py,sha256=eSGMM2DXcj17nIPH5ZDLG95ZMuE7F8Qvn0IqGO_wQVw,586
79
- sqlframe/spark/group.py,sha256=U5wpUtPINphprpdCPwLK7lDV6nFwEEVlHnJm9Yk_Xxo,380
80
- sqlframe/spark/readwriter.py,sha256=8NLtkzFN0EEwfIal8hpr6ciJ5yA2rXsNINt3Ac9_pHQ,813
79
+ sqlframe/spark/group.py,sha256=MrvV_v-YkBc6T1zz882WrEqtWjlooWIyHBCmTQg3fCA,379
80
+ sqlframe/spark/readwriter.py,sha256=w68EImTcGJv64X7pc1tk5tDjDxb1nAnn-MiIaaN9Dc8,812
81
81
  sqlframe/spark/session.py,sha256=EJWp4OEM0maGwuOF3YtHat-zXWVUeNlDa23tIoY1KbI,2603
82
82
  sqlframe/spark/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
83
83
  sqlframe/spark/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
@@ -86,13 +86,13 @@ sqlframe/standalone/catalog.py,sha256=oJAPxrXtra_YP_JBZCJY2qsr0TRhWG7FFSq0RHDszc
86
86
  sqlframe/standalone/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
87
87
  sqlframe/standalone/dataframe.py,sha256=o6weWJvDX1w351p_14PQ52qopbPozVG9OFmhaqVvivU,967
88
88
  sqlframe/standalone/functions.py,sha256=NW-k7NP_Y9DzQq6fjX5-CL8oOUGAiaMo4SBuDd8-JUA,38
89
- sqlframe/standalone/group.py,sha256=PUmFFHyRlv7byHmaQWCcmDYC7ocn8g21IluSaEgb5eA,400
90
- sqlframe/standalone/readwriter.py,sha256=n2uoebNdL_t6_eaXNkpu7Zv2UmZ9I3rASuo01gGvOFs,634
91
- sqlframe/standalone/session.py,sha256=xWxBh-OtH--LmWtpDboOBpwKLcaBK5JV-IF2gCra5k0,1192
89
+ sqlframe/standalone/group.py,sha256=oGEbAQMSm6AlkwnBxNI8r9enZWRwsRxc8zpzoz3rArk,399
90
+ sqlframe/standalone/readwriter.py,sha256=EZNyDJ4ID6sGNog3uP4-e9RvchX4biJJDNtc5hkKkrY,633
91
+ sqlframe/standalone/session.py,sha256=wQmdu2sv6KMTAv0LRFk7TY7yzlh3xvmsyqilEtRecbY,1191
92
92
  sqlframe/standalone/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
93
93
  sqlframe/standalone/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
94
- sqlframe-1.0.0.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
95
- sqlframe-1.0.0.dist-info/METADATA,sha256=vNKV-_xHHk2p19RFX9cUrSs5cCbzTVcLJqzSntxROLI,6875
96
- sqlframe-1.0.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
97
- sqlframe-1.0.0.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
98
- sqlframe-1.0.0.dist-info/RECORD,,
94
+ sqlframe-1.1.1.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
95
+ sqlframe-1.1.1.dist-info/METADATA,sha256=LTC6gpDM1_pX9rAzlQSuH2owbzFd93NoKZ3o-xpFDcE,6873
96
+ sqlframe-1.1.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
97
+ sqlframe-1.1.1.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
98
+ sqlframe-1.1.1.dist-info/RECORD,,