diff --git a/CHANGELOG.md b/CHANGELOG.md index 77092b7da1..959915450f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 1.50.0 (TBD) +## 1.50.0 (2026-04-23) ### Snowpark Python API Updates diff --git a/recipe/meta.yaml b/recipe/meta.yaml index a919a95146..24974557e1 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snowflake-snowpark-python" %} -{% set version = "1.49.0" %} +{% set version = "1.50.0" %} {% set noarch_build = (os.environ.get('SNOWFLAKE_SNOWPARK_PYTHON_NOARCH_BUILD', 'false')) == 'true' %} {% set build_number = os.environ.get('SNOWFLAKE_SNOWPARK_PYTHON_BUILD_NUMBER', 0) %} diff --git a/src/snowflake/snowpark/_internal/analyzer/select_statement.py b/src/snowflake/snowpark/_internal/analyzer/select_statement.py index 2372f12ee7..e59afd4034 100644 --- a/src/snowflake/snowpark/_internal/analyzer/select_statement.py +++ b/src/snowflake/snowpark/_internal/analyzer/select_statement.py @@ -1604,7 +1604,17 @@ def filter(self, col: Expression) -> "SelectStatement": can_be_flattened = ( (not self.flatten_disabled) and can_clause_dependent_columns_flatten( - derive_dependent_columns(col), self.column_states, "filter" + derive_dependent_columns(col), + self.column_states, + "filter", + # In Snowpark Connect compatible mode, the NEW-column branch + # below allows flattening through any subquery. Pass + # subquery_has_limit so that branch can still reject + # flattening across LIMIT/OFFSET, since WHERE cannot cross + # LIMIT/OFFSET without changing semantics. + subquery_has_limit_or_offset=( + self.limit_ is not None or self.offset is not None + ), ) and not has_data_generator_or_window_function_exp(self.projection) and not ( @@ -2175,6 +2185,7 @@ def can_clause_dependent_columns_flatten( dependent_columns: Optional[AbstractSet[str]], subquery_column_states: ColumnStateDict, clause: Literal["filter", "sort"], + subquery_has_limit_or_offset: bool = False, ) -> bool: assert clause in ( "filter", @@ -2218,6 +2229,14 @@ def can_clause_dependent_columns_flatten( and context._snowpark_connect_flatten_select_after_sort ): return False + # Compatible-mode safety: even though we loosened the + # NEW-column flatten rule above, we must not flatten a + # WHERE across LIMIT/OFFSET on a NEW column — that + # would push the filter in front of the limit and + # change the result set. (Sort has its own + # `not self.limit_` guard at the call site.) + if clause == "filter" and subquery_has_limit_or_offset: + return False return True diff --git a/src/snowflake/snowpark/version.py b/src/snowflake/snowpark/version.py index 50130f7ce2..57bd9b8300 100644 --- a/src/snowflake/snowpark/version.py +++ b/src/snowflake/snowpark/version.py @@ -2,4 +2,4 @@ # Update this for the versions -VERSION = (1, 49, 0) +VERSION = (1, 50, 0) diff --git a/tests/ast/data/DataFrame.agg.test b/tests/ast/data/DataFrame.agg.test index 70f82d8438..d2c9aa07ad 100644 --- a/tests/ast/data/DataFrame.agg.test +++ b/tests/ast/data/DataFrame.agg.test @@ -508,6 +508,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.ai.test b/tests/ast/data/DataFrame.ai.test index c21203213a..9df8eb0451 100644 --- a/tests/ast/data/DataFrame.ai.test +++ b/tests/ast/data/DataFrame.ai.test @@ -2146,6 +2146,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.col_ilike.test b/tests/ast/data/DataFrame.col_ilike.test index 407afe94ec..7bc0abd179 100644 --- a/tests/ast/data/DataFrame.col_ilike.test +++ b/tests/ast/data/DataFrame.col_ilike.test @@ -239,6 +239,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.collect.test b/tests/ast/data/DataFrame.collect.test index e0a56202cd..b76a891606 100644 --- a/tests/ast/data/DataFrame.collect.test +++ b/tests/ast/data/DataFrame.collect.test @@ -511,6 +511,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.count.test b/tests/ast/data/DataFrame.count.test index a0424494c2..53856b102c 100644 --- a/tests/ast/data/DataFrame.count.test +++ b/tests/ast/data/DataFrame.count.test @@ -228,6 +228,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.count2.test b/tests/ast/data/DataFrame.count2.test index 8ad807d62f..aea62471af 100644 --- a/tests/ast/data/DataFrame.count2.test +++ b/tests/ast/data/DataFrame.count2.test @@ -315,6 +315,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.create_or_replace.test b/tests/ast/data/DataFrame.create_or_replace.test index 6281dc4b4c..d19ca63482 100644 --- a/tests/ast/data/DataFrame.create_or_replace.test +++ b/tests/ast/data/DataFrame.create_or_replace.test @@ -823,6 +823,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.cross_join.lsuffix.test b/tests/ast/data/DataFrame.cross_join.lsuffix.test index 6cb1265230..e72209b602 100644 --- a/tests/ast/data/DataFrame.cross_join.lsuffix.test +++ b/tests/ast/data/DataFrame.cross_join.lsuffix.test @@ -171,6 +171,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.cross_join.rsuffix.test b/tests/ast/data/DataFrame.cross_join.rsuffix.test index a4c2c8b92f..81d73b7597 100644 --- a/tests/ast/data/DataFrame.cross_join.rsuffix.test +++ b/tests/ast/data/DataFrame.cross_join.rsuffix.test @@ -171,6 +171,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.cross_join.suffix.test b/tests/ast/data/DataFrame.cross_join.suffix.test index 7d1d48f245..a6ce09d9e6 100644 --- a/tests/ast/data/DataFrame.cross_join.suffix.test +++ b/tests/ast/data/DataFrame.cross_join.suffix.test @@ -174,6 +174,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.describe.test b/tests/ast/data/DataFrame.describe.test index bd416245e4..6a0102261e 100644 --- a/tests/ast/data/DataFrame.describe.test +++ b/tests/ast/data/DataFrame.describe.test @@ -192,6 +192,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.flatten.test b/tests/ast/data/DataFrame.flatten.test index d33f38db4c..9dd3f0d87b 100644 --- a/tests/ast/data/DataFrame.flatten.test +++ b/tests/ast/data/DataFrame.flatten.test @@ -175,6 +175,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.indexers.test b/tests/ast/data/DataFrame.indexers.test index 5eae683d5b..cfb6770355 100644 --- a/tests/ast/data/DataFrame.indexers.test +++ b/tests/ast/data/DataFrame.indexers.test @@ -207,6 +207,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.inner.column.test b/tests/ast/data/DataFrame.join.inner.column.test index 4467901d1f..8472a9e773 100644 --- a/tests/ast/data/DataFrame.join.inner.column.test +++ b/tests/ast/data/DataFrame.join.inner.column.test @@ -241,6 +241,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.inner.column_list.test b/tests/ast/data/DataFrame.join.inner.column_list.test index e2b7ed5ec2..9a82994fe1 100644 --- a/tests/ast/data/DataFrame.join.inner.column_list.test +++ b/tests/ast/data/DataFrame.join.inner.column_list.test @@ -203,6 +203,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.inner.column_list_predicate.test b/tests/ast/data/DataFrame.join.inner.column_list_predicate.test index 5790c9465b..42f0a825e2 100644 --- a/tests/ast/data/DataFrame.join.inner.column_list_predicate.test +++ b/tests/ast/data/DataFrame.join.inner.column_list_predicate.test @@ -328,6 +328,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.inner.predicate.test b/tests/ast/data/DataFrame.join.inner.predicate.test index 54e1a85ba7..11a45e4e75 100644 --- a/tests/ast/data/DataFrame.join.inner.predicate.test +++ b/tests/ast/data/DataFrame.join.inner.predicate.test @@ -289,6 +289,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.inner.predicate_rsuffix.test b/tests/ast/data/DataFrame.join.inner.predicate_rsuffix.test index 5e56499bcb..53d3505210 100644 --- a/tests/ast/data/DataFrame.join.inner.predicate_rsuffix.test +++ b/tests/ast/data/DataFrame.join.inner.predicate_rsuffix.test @@ -279,6 +279,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.left_outer.column.test b/tests/ast/data/DataFrame.join.left_outer.column.test index 0c9a5f471b..8d87705895 100644 --- a/tests/ast/data/DataFrame.join.left_outer.column.test +++ b/tests/ast/data/DataFrame.join.left_outer.column.test @@ -203,6 +203,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join.right_outer.predicate.test b/tests/ast/data/DataFrame.join.right_outer.predicate.test index 0bfee6136d..118784cde9 100644 --- a/tests/ast/data/DataFrame.join.right_outer.predicate.test +++ b/tests/ast/data/DataFrame.join.right_outer.predicate.test @@ -220,6 +220,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.join_table_function.test b/tests/ast/data/DataFrame.join_table_function.test index 987f28425f..e0b07fb651 100644 --- a/tests/ast/data/DataFrame.join_table_function.test +++ b/tests/ast/data/DataFrame.join_table_function.test @@ -263,6 +263,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.lateral_join.test b/tests/ast/data/DataFrame.lateral_join.test index 02e54b237b..5ac9541a64 100644 --- a/tests/ast/data/DataFrame.lateral_join.test +++ b/tests/ast/data/DataFrame.lateral_join.test @@ -666,6 +666,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.natural_join.test b/tests/ast/data/DataFrame.natural_join.test index 33af4fdfbf..c1dc891846 100644 --- a/tests/ast/data/DataFrame.natural_join.test +++ b/tests/ast/data/DataFrame.natural_join.test @@ -171,6 +171,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.pivot.test b/tests/ast/data/DataFrame.pivot.test index 2181d7b1e5..3f146917af 100644 --- a/tests/ast/data/DataFrame.pivot.test +++ b/tests/ast/data/DataFrame.pivot.test @@ -756,6 +756,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.select_expr.test b/tests/ast/data/DataFrame.select_expr.test index 679f72f901..b39f2327e7 100644 --- a/tests/ast/data/DataFrame.select_expr.test +++ b/tests/ast/data/DataFrame.select_expr.test @@ -359,6 +359,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.stat.test b/tests/ast/data/DataFrame.stat.test index c7cfac1744..0fb4207ad5 100644 --- a/tests/ast/data/DataFrame.stat.test +++ b/tests/ast/data/DataFrame.stat.test @@ -1647,6 +1647,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.to_df.test b/tests/ast/data/DataFrame.to_df.test index a314cc580d..f4bcce9c04 100644 --- a/tests/ast/data/DataFrame.to_df.test +++ b/tests/ast/data/DataFrame.to_df.test @@ -172,6 +172,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.to_local_iterator.test b/tests/ast/data/DataFrame.to_local_iterator.test index ac54a81c04..2d749bbd61 100644 --- a/tests/ast/data/DataFrame.to_local_iterator.test +++ b/tests/ast/data/DataFrame.to_local_iterator.test @@ -539,6 +539,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.to_pandas.test b/tests/ast/data/DataFrame.to_pandas.test index b91cf904c0..3b90697b74 100644 --- a/tests/ast/data/DataFrame.to_pandas.test +++ b/tests/ast/data/DataFrame.to_pandas.test @@ -298,6 +298,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.to_pandas_batch.test b/tests/ast/data/DataFrame.to_pandas_batch.test index ac996b6a2d..6b75239e3b 100644 --- a/tests/ast/data/DataFrame.to_pandas_batch.test +++ b/tests/ast/data/DataFrame.to_pandas_batch.test @@ -298,6 +298,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.unpivot.test b/tests/ast/data/DataFrame.unpivot.test index c888c87cfa..f52c0e479f 100644 --- a/tests/ast/data/DataFrame.unpivot.test +++ b/tests/ast/data/DataFrame.unpivot.test @@ -237,6 +237,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataFrame.write.test b/tests/ast/data/DataFrame.write.test index d77a488483..ab4d2e35b8 100644 --- a/tests/ast/data/DataFrame.write.test +++ b/tests/ast/data/DataFrame.write.test @@ -6237,6 +6237,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.cube.test b/tests/ast/data/Dataframe.cube.test index edc38c5334..761c548145 100644 --- a/tests/ast/data/Dataframe.cube.test +++ b/tests/ast/data/Dataframe.cube.test @@ -520,6 +520,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.distinct.test b/tests/ast/data/Dataframe.distinct.test index 7b47b8c86b..f321e9a0d0 100644 --- a/tests/ast/data/Dataframe.distinct.test +++ b/tests/ast/data/Dataframe.distinct.test @@ -89,6 +89,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.drop_duplicates.test b/tests/ast/data/Dataframe.drop_duplicates.test index cdff83fffb..839070d05d 100644 --- a/tests/ast/data/Dataframe.drop_duplicates.test +++ b/tests/ast/data/Dataframe.drop_duplicates.test @@ -278,6 +278,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.drop_duplicates_snow1874622.test b/tests/ast/data/Dataframe.drop_duplicates_snow1874622.test index e965495741..c8f8722666 100644 --- a/tests/ast/data/Dataframe.drop_duplicates_snow1874622.test +++ b/tests/ast/data/Dataframe.drop_duplicates_snow1874622.test @@ -525,6 +525,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.filter.test b/tests/ast/data/Dataframe.filter.test index eb47100fa7..cc1a294795 100644 --- a/tests/ast/data/Dataframe.filter.test +++ b/tests/ast/data/Dataframe.filter.test @@ -382,6 +382,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.getitem.test b/tests/ast/data/Dataframe.getitem.test index ae1eec2e8b..2cdc9ab5b1 100644 --- a/tests/ast/data/Dataframe.getitem.test +++ b/tests/ast/data/Dataframe.getitem.test @@ -273,6 +273,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.group_by.test b/tests/ast/data/Dataframe.group_by.test index 3d44bc051f..445ba7028c 100644 --- a/tests/ast/data/Dataframe.group_by.test +++ b/tests/ast/data/Dataframe.group_by.test @@ -520,6 +520,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.group_by_grouping_sets.test b/tests/ast/data/Dataframe.group_by_grouping_sets.test index 15f2e001e3..331a24e91f 100644 --- a/tests/ast/data/Dataframe.group_by_grouping_sets.test +++ b/tests/ast/data/Dataframe.group_by_grouping_sets.test @@ -1102,6 +1102,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.join.asof.test b/tests/ast/data/Dataframe.join.asof.test index b48188021f..cb5662b2f2 100644 --- a/tests/ast/data/Dataframe.join.asof.test +++ b/tests/ast/data/Dataframe.join.asof.test @@ -736,6 +736,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.join.prefix.test b/tests/ast/data/Dataframe.join.prefix.test index 98da051de8..aae7479cfb 100644 --- a/tests/ast/data/Dataframe.join.prefix.test +++ b/tests/ast/data/Dataframe.join.prefix.test @@ -819,6 +819,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.rollup.test b/tests/ast/data/Dataframe.rollup.test index a8b1f4b8fe..a44e466fc6 100644 --- a/tests/ast/data/Dataframe.rollup.test +++ b/tests/ast/data/Dataframe.rollup.test @@ -520,6 +520,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.show.test b/tests/ast/data/Dataframe.show.test index d8404254de..fddb2127a9 100644 --- a/tests/ast/data/Dataframe.show.test +++ b/tests/ast/data/Dataframe.show.test @@ -1132,6 +1132,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.to_snowpark_pandas.test.DISABLED b/tests/ast/data/Dataframe.to_snowpark_pandas.test.DISABLED index bc2e61a047..f7b0bcf937 100644 --- a/tests/ast/data/Dataframe.to_snowpark_pandas.test.DISABLED +++ b/tests/ast/data/Dataframe.to_snowpark_pandas.test.DISABLED @@ -183,6 +183,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Dataframe.with_col_fns.test b/tests/ast/data/Dataframe.with_col_fns.test index 08e213b8a6..ce125f0aab 100644 --- a/tests/ast/data/Dataframe.with_col_fns.test +++ b/tests/ast/data/Dataframe.with_col_fns.test @@ -928,6 +928,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/DataframeNaFunctions.test b/tests/ast/data/DataframeNaFunctions.test index 8ced225c4e..5e8a10f081 100644 --- a/tests/ast/data/DataframeNaFunctions.test +++ b/tests/ast/data/DataframeNaFunctions.test @@ -882,6 +882,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/RelationalGroupedDataFrame.agg.test b/tests/ast/data/RelationalGroupedDataFrame.agg.test index 846af64bb7..e21000addc 100644 --- a/tests/ast/data/RelationalGroupedDataFrame.agg.test +++ b/tests/ast/data/RelationalGroupedDataFrame.agg.test @@ -1144,6 +1144,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/RelationalGroupedDataFrame.ai_agg.test b/tests/ast/data/RelationalGroupedDataFrame.ai_agg.test index 73a36afbde..4a4a4cbcce 100644 --- a/tests/ast/data/RelationalGroupedDataFrame.ai_agg.test +++ b/tests/ast/data/RelationalGroupedDataFrame.ai_agg.test @@ -287,6 +287,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/RelationalGroupedDataFrame.test b/tests/ast/data/RelationalGroupedDataFrame.test index 95d1aeb55f..2cc80a94a6 100644 --- a/tests/ast/data/RelationalGroupedDataFrame.test +++ b/tests/ast/data/RelationalGroupedDataFrame.test @@ -3621,6 +3621,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Session.call.test b/tests/ast/data/Session.call.test index 7f484dcb3a..d1ec2cbb91 100644 --- a/tests/ast/data/Session.call.test +++ b/tests/ast/data/Session.call.test @@ -360,6 +360,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Session.create_dataframe.test b/tests/ast/data/Session.create_dataframe.test index c6a04ba387..6ac49e2f23 100644 --- a/tests/ast/data/Session.create_dataframe.test +++ b/tests/ast/data/Session.create_dataframe.test @@ -1272,6 +1272,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Session.create_dataframe_from_pandas.test b/tests/ast/data/Session.create_dataframe_from_pandas.test index 33db3d5962..cca9434de7 100644 --- a/tests/ast/data/Session.create_dataframe_from_pandas.test +++ b/tests/ast/data/Session.create_dataframe_from_pandas.test @@ -171,6 +171,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Session.flatten.test b/tests/ast/data/Session.flatten.test index 91e104b0f5..87727b65ad 100644 --- a/tests/ast/data/Session.flatten.test +++ b/tests/ast/data/Session.flatten.test @@ -174,6 +174,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Session.table_function.test b/tests/ast/data/Session.table_function.test index 099fa28b44..e2d659bb7d 100644 --- a/tests/ast/data/Session.table_function.test +++ b/tests/ast/data/Session.table_function.test @@ -990,6 +990,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Table.delete.test b/tests/ast/data/Table.delete.test index c485d259c6..3bf428e3d9 100644 --- a/tests/ast/data/Table.delete.test +++ b/tests/ast/data/Table.delete.test @@ -545,6 +545,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Table.drop_table.test b/tests/ast/data/Table.drop_table.test index c67058f745..ea36dd281e 100644 --- a/tests/ast/data/Table.drop_table.test +++ b/tests/ast/data/Table.drop_table.test @@ -93,6 +93,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Table.init.test b/tests/ast/data/Table.init.test index 9ae590ff2f..51e99417b3 100644 --- a/tests/ast/data/Table.init.test +++ b/tests/ast/data/Table.init.test @@ -423,6 +423,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Table.merge.test b/tests/ast/data/Table.merge.test index 8469a40af5..ac505656b0 100644 --- a/tests/ast/data/Table.merge.test +++ b/tests/ast/data/Table.merge.test @@ -2448,6 +2448,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Table.sample.test b/tests/ast/data/Table.sample.test index 3303e75887..1b8d998e15 100644 --- a/tests/ast/data/Table.sample.test +++ b/tests/ast/data/Table.sample.test @@ -168,6 +168,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/Table.update.test b/tests/ast/data/Table.update.test index fef7aa294c..6cad680879 100644 --- a/tests/ast/data/Table.update.test +++ b/tests/ast/data/Table.update.test @@ -1030,6 +1030,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/case_when.test b/tests/ast/data/case_when.test index d5df8f4c19..b7ce9b72a9 100644 --- a/tests/ast/data/case_when.test +++ b/tests/ast/data/case_when.test @@ -1913,6 +1913,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_alias.test b/tests/ast/data/col_alias.test index f78aea1079..0721a25816 100644 --- a/tests/ast/data/col_alias.test +++ b/tests/ast/data/col_alias.test @@ -409,6 +409,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_asc.test b/tests/ast/data/col_asc.test index 1fa0afd228..03b05a4951 100644 --- a/tests/ast/data/col_asc.test +++ b/tests/ast/data/col_asc.test @@ -302,6 +302,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_between.test b/tests/ast/data/col_between.test index be5266df07..0f2743e7ae 100644 --- a/tests/ast/data/col_between.test +++ b/tests/ast/data/col_between.test @@ -184,6 +184,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_binops.test b/tests/ast/data/col_binops.test index bfff1b93d6..ddfd28a712 100644 --- a/tests/ast/data/col_binops.test +++ b/tests/ast/data/col_binops.test @@ -1615,6 +1615,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_bitops.test b/tests/ast/data/col_bitops.test index ffdadfc42f..1957815cb7 100644 --- a/tests/ast/data/col_bitops.test +++ b/tests/ast/data/col_bitops.test @@ -394,6 +394,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_cast.test b/tests/ast/data/col_cast.test index 4f9b078170..1f502de4f8 100644 --- a/tests/ast/data/col_cast.test +++ b/tests/ast/data/col_cast.test @@ -2854,6 +2854,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_cast_coll.test b/tests/ast/data/col_cast_coll.test index fae47f99f2..d1029a98ae 100644 --- a/tests/ast/data/col_cast_coll.test +++ b/tests/ast/data/col_cast_coll.test @@ -806,6 +806,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_desc.test b/tests/ast/data/col_desc.test index 16b0ba9a17..c5db8ebf65 100644 --- a/tests/ast/data/col_desc.test +++ b/tests/ast/data/col_desc.test @@ -300,6 +300,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_getitem.test b/tests/ast/data/col_getitem.test index ac2647ffd3..b46ca3601a 100644 --- a/tests/ast/data/col_getitem.test +++ b/tests/ast/data/col_getitem.test @@ -185,6 +185,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_in_.test b/tests/ast/data/col_in_.test index 8b9a2c5672..64d6627841 100644 --- a/tests/ast/data/col_in_.test +++ b/tests/ast/data/col_in_.test @@ -358,6 +358,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_lit.test b/tests/ast/data/col_lit.test index 3112dc0d48..821388c2db 100644 --- a/tests/ast/data/col_lit.test +++ b/tests/ast/data/col_lit.test @@ -528,6 +528,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_literal.test b/tests/ast/data/col_literal.test index 83a9320505..bdc517eda5 100644 --- a/tests/ast/data/col_literal.test +++ b/tests/ast/data/col_literal.test @@ -3709,6 +3709,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_null_nan.test b/tests/ast/data/col_null_nan.test index 841ba4790d..70a1af610d 100644 --- a/tests/ast/data/col_null_nan.test +++ b/tests/ast/data/col_null_nan.test @@ -403,6 +403,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_rbinops.test b/tests/ast/data/col_rbinops.test index 986233a31f..c6da5830f1 100644 --- a/tests/ast/data/col_rbinops.test +++ b/tests/ast/data/col_rbinops.test @@ -773,6 +773,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_star.test b/tests/ast/data/col_star.test index e284f8d5ea..dfbb8bf5e2 100644 --- a/tests/ast/data/col_star.test +++ b/tests/ast/data/col_star.test @@ -127,6 +127,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_string.test b/tests/ast/data/col_string.test index 5be05258af..cbe99f1ba4 100644 --- a/tests/ast/data/col_string.test +++ b/tests/ast/data/col_string.test @@ -740,6 +740,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_try_cast.test b/tests/ast/data/col_try_cast.test index 2ec9a28837..ce73f89980 100644 --- a/tests/ast/data/col_try_cast.test +++ b/tests/ast/data/col_try_cast.test @@ -2514,6 +2514,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_udf.test b/tests/ast/data/col_udf.test index d785daa868..66c4ba2a4d 100644 --- a/tests/ast/data/col_udf.test +++ b/tests/ast/data/col_udf.test @@ -1487,6 +1487,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_unary_ops.test b/tests/ast/data/col_unary_ops.test index e11778df38..710c4845dd 100644 --- a/tests/ast/data/col_unary_ops.test +++ b/tests/ast/data/col_unary_ops.test @@ -215,6 +215,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/col_within_group.test b/tests/ast/data/col_within_group.test index 8bf304df5d..49f2591fb6 100644 --- a/tests/ast/data/col_within_group.test +++ b/tests/ast/data/col_within_group.test @@ -431,6 +431,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_alias.test b/tests/ast/data/df_alias.test index 130e504990..1e0864326c 100644 --- a/tests/ast/data/df_alias.test +++ b/tests/ast/data/df_alias.test @@ -90,6 +90,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_analytics_functions.test b/tests/ast/data/df_analytics_functions.test index dad8bb6d95..0ce680c627 100644 --- a/tests/ast/data/df_analytics_functions.test +++ b/tests/ast/data/df_analytics_functions.test @@ -950,6 +950,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_col.test b/tests/ast/data/df_col.test index 98dfd2d428..4f5265b261 100644 --- a/tests/ast/data/df_col.test +++ b/tests/ast/data/df_col.test @@ -144,6 +144,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_copy.test b/tests/ast/data/df_copy.test index 392ff51a42..c2e58e9715 100644 --- a/tests/ast/data/df_copy.test +++ b/tests/ast/data/df_copy.test @@ -778,6 +778,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_drop.test b/tests/ast/data/df_drop.test index 3b975d2532..858c447956 100644 --- a/tests/ast/data/df_drop.test +++ b/tests/ast/data/df_drop.test @@ -127,6 +127,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_except.test b/tests/ast/data/df_except.test index 696f19b42b..201008a60e 100644 --- a/tests/ast/data/df_except.test +++ b/tests/ast/data/df_except.test @@ -128,6 +128,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_first.test b/tests/ast/data/df_first.test index 00ee3f642e..dbb724b0b9 100644 --- a/tests/ast/data/df_first.test +++ b/tests/ast/data/df_first.test @@ -383,6 +383,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_intersect.test b/tests/ast/data/df_intersect.test index 7d3cc8466f..34e81329da 100644 --- a/tests/ast/data/df_intersect.test +++ b/tests/ast/data/df_intersect.test @@ -129,6 +129,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_limit.test b/tests/ast/data/df_limit.test index ebca9e1c80..be7805cc6a 100644 --- a/tests/ast/data/df_limit.test +++ b/tests/ast/data/df_limit.test @@ -342,6 +342,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_map.test b/tests/ast/data/df_map.test index 4bf008e4e8..f8d96de085 100644 --- a/tests/ast/data/df_map.test +++ b/tests/ast/data/df_map.test @@ -2142,6 +2142,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_random_split.test b/tests/ast/data/df_random_split.test index 8101034f1a..a45fb502e9 100644 --- a/tests/ast/data/df_random_split.test +++ b/tests/ast/data/df_random_split.test @@ -710,6 +710,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_sample.test b/tests/ast/data/df_sample.test index 1fe70d0c28..3688f4e0ea 100644 --- a/tests/ast/data/df_sample.test +++ b/tests/ast/data/df_sample.test @@ -124,6 +124,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_sort.test b/tests/ast/data/df_sort.test index ec77b201e9..08174ea644 100644 --- a/tests/ast/data/df_sort.test +++ b/tests/ast/data/df_sort.test @@ -833,6 +833,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/df_union.test b/tests/ast/data/df_union.test index a52fd9ab6c..0aa039c53e 100644 --- a/tests/ast/data/df_union.test +++ b/tests/ast/data/df_union.test @@ -375,6 +375,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/functions.table_functions.test b/tests/ast/data/functions.table_functions.test index 7495c43f96..d2064338a4 100644 --- a/tests/ast/data/functions.table_functions.test +++ b/tests/ast/data/functions.table_functions.test @@ -2212,6 +2212,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/functions1.test b/tests/ast/data/functions1.test index d345b0c6b2..57a2cc405e 100644 --- a/tests/ast/data/functions1.test +++ b/tests/ast/data/functions1.test @@ -18800,6 +18800,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/functions2.test b/tests/ast/data/functions2.test index e024efa6ba..fdccf060ff 100644 --- a/tests/ast/data/functions2.test +++ b/tests/ast/data/functions2.test @@ -29678,6 +29678,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/interval.test b/tests/ast/data/interval.test index 2a597319b1..f957e1ce3a 100644 --- a/tests/ast/data/interval.test +++ b/tests/ast/data/interval.test @@ -1069,6 +1069,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/select.test b/tests/ast/data/select.test index 3cc2b6b50e..e71d923721 100644 --- a/tests/ast/data/select.test +++ b/tests/ast/data/select.test @@ -139,6 +139,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session.read.test b/tests/ast/data/session.read.test index 797d6c8f04..657ffd2f7a 100644 --- a/tests/ast/data/session.read.test +++ b/tests/ast/data/session.read.test @@ -1772,6 +1772,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session.sql.test b/tests/ast/data/session.sql.test index c3565b4b12..0c7104f6f2 100644 --- a/tests/ast/data/session.sql.test +++ b/tests/ast/data/session.sql.test @@ -149,6 +149,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_directory.test b/tests/ast/data/session_directory.test index 2a26c1e90c..14470a088f 100644 --- a/tests/ast/data/session_directory.test +++ b/tests/ast/data/session_directory.test @@ -101,6 +101,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_generator.test b/tests/ast/data/session_generator.test index febe193373..4a70675f7d 100644 --- a/tests/ast/data/session_generator.test +++ b/tests/ast/data/session_generator.test @@ -362,6 +362,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_range.test b/tests/ast/data/session_range.test index cc3f8811a7..f77bde54fc 100644 --- a/tests/ast/data/session_range.test +++ b/tests/ast/data/session_range.test @@ -172,6 +172,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_dq_abs_l.test b/tests/ast/data/session_table_dq_abs_l.test index 69838b47be..fed2d9eb8f 100644 --- a/tests/ast/data/session_table_dq_abs_l.test +++ b/tests/ast/data/session_table_dq_abs_l.test @@ -105,6 +105,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_dq_abs_s.test b/tests/ast/data/session_table_dq_abs_s.test index fdd07f17bd..6ef6c892b3 100644 --- a/tests/ast/data/session_table_dq_abs_s.test +++ b/tests/ast/data/session_table_dq_abs_s.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_dq_rs_l.test b/tests/ast/data/session_table_dq_rs_l.test index ee49c83bc2..fd6f32af97 100644 --- a/tests/ast/data/session_table_dq_rs_l.test +++ b/tests/ast/data/session_table_dq_rs_l.test @@ -104,6 +104,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_dq_rs_s.test b/tests/ast/data/session_table_dq_rs_s.test index 32e9c31aec..e5f69ed9eb 100644 --- a/tests/ast/data/session_table_dq_rs_s.test +++ b/tests/ast/data/session_table_dq_rs_s.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_dq_rt_l.test b/tests/ast/data/session_table_dq_rt_l.test index d51560f9ea..4867470d99 100644 --- a/tests/ast/data/session_table_dq_rt_l.test +++ b/tests/ast/data/session_table_dq_rt_l.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_dq_rt_s.test b/tests/ast/data/session_table_dq_rt_s.test index 3a4714c69b..09b330d7f0 100644 --- a/tests/ast/data/session_table_dq_rt_s.test +++ b/tests/ast/data/session_table_dq_rt_s.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_temp_table_cleanup.test b/tests/ast/data/session_table_temp_table_cleanup.test index fa5dcf3b2d..3ca205012a 100644 --- a/tests/ast/data/session_table_temp_table_cleanup.test +++ b/tests/ast/data/session_table_temp_table_cleanup.test @@ -170,6 +170,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_uq_abs_l.test b/tests/ast/data/session_table_uq_abs_l.test index 1bc0382317..53361d6c22 100644 --- a/tests/ast/data/session_table_uq_abs_l.test +++ b/tests/ast/data/session_table_uq_abs_l.test @@ -105,6 +105,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_uq_abs_s.test b/tests/ast/data/session_table_uq_abs_s.test index 28a586daab..3ff27fa6e2 100644 --- a/tests/ast/data/session_table_uq_abs_s.test +++ b/tests/ast/data/session_table_uq_abs_s.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_uq_rs_l.test b/tests/ast/data/session_table_uq_rs_l.test index 66e427da10..51c92b0a54 100644 --- a/tests/ast/data/session_table_uq_rs_l.test +++ b/tests/ast/data/session_table_uq_rs_l.test @@ -104,6 +104,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_uq_rs_s.test b/tests/ast/data/session_table_uq_rs_s.test index ffb61b6eb4..024a4adfa9 100644 --- a/tests/ast/data/session_table_uq_rs_s.test +++ b/tests/ast/data/session_table_uq_rs_s.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_uq_rt_l.test b/tests/ast/data/session_table_uq_rt_l.test index 91da129f3f..91495f24a4 100644 --- a/tests/ast/data/session_table_uq_rt_l.test +++ b/tests/ast/data/session_table_uq_rt_l.test @@ -103,6 +103,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_table_uq_rt_s.test b/tests/ast/data/session_table_uq_rt_s.test index 2a77a6fb5a..2f5742f18a 100644 --- a/tests/ast/data/session_table_uq_rt_s.test +++ b/tests/ast/data/session_table_uq_rt_s.test @@ -388,6 +388,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_transaction.test b/tests/ast/data/session_transaction.test index ee1c243d08..73aaeecc0c 100644 --- a/tests/ast/data/session_transaction.test +++ b/tests/ast/data/session_transaction.test @@ -121,6 +121,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/session_write_pandas.test b/tests/ast/data/session_write_pandas.test index a059dbc3a3..58f8c7cdab 100644 --- a/tests/ast/data/session_write_pandas.test +++ b/tests/ast/data/session_write_pandas.test @@ -149,6 +149,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/shadowed_local_name.test b/tests/ast/data/shadowed_local_name.test index a5900ab778..e4e8294686 100644 --- a/tests/ast/data/shadowed_local_name.test +++ b/tests/ast/data/shadowed_local_name.test @@ -205,6 +205,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/smoke1.test b/tests/ast/data/smoke1.test index 13caaf0e95..c4a66d44e0 100644 --- a/tests/ast/data/smoke1.test +++ b/tests/ast/data/smoke1.test @@ -2192,6 +2192,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/smoke2.test b/tests/ast/data/smoke2.test index 0969bef82d..3e2bbe201d 100644 --- a/tests/ast/data/smoke2.test +++ b/tests/ast/data/smoke2.test @@ -2356,6 +2356,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/sproc.test b/tests/ast/data/sproc.test index 03d34ba827..3e39179a8c 100644 --- a/tests/ast/data/sproc.test +++ b/tests/ast/data/sproc.test @@ -2828,6 +2828,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/udaf.test b/tests/ast/data/udaf.test index a03029428c..bef5a66897 100644 --- a/tests/ast/data/udaf.test +++ b/tests/ast/data/udaf.test @@ -1277,6 +1277,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/udtf.test b/tests/ast/data/udtf.test index 8a9352c5f1..2478113789 100644 --- a/tests/ast/data/udtf.test +++ b/tests/ast/data/udtf.test @@ -3580,6 +3580,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/ast/data/windows.test b/tests/ast/data/windows.test index c56724f896..a8123a18ae 100644 --- a/tests/ast/data/windows.test +++ b/tests/ast/data/windows.test @@ -2091,6 +2091,6 @@ client_language { } client_version { major: 1 - minor: 49 + minor: 50 } id: "\003U\"\366q\366P\346\260\261?\234\303\254\316\353" diff --git a/tests/integ/test_simplifier_suite.py b/tests/integ/test_simplifier_suite.py index ffabd19947..b446347d51 100644 --- a/tests/integ/test_simplifier_suite.py +++ b/tests/integ/test_simplifier_suite.py @@ -2180,6 +2180,135 @@ def test_sort_not_flattened_on_new_column_with_dollar_or_all_dependency(session) Utils.check_answer(df_sorted_dollar, [Row(1, 1), Row(3, 3)]) +@pytest.mark.parametrize("is_snowpark_connect_compatible_mode", [True, False]) +def test_filter_after_limit_not_flattened_on_new_column( + session, monkeypatch, is_snowpark_connect_compatible_mode +): + """Filter on a NEW (aliased) column after LIMIT must not be flattened in + front of LIMIT, in either legacy or Snowpark Connect compatible mode. + Flattening WHERE across LIMIT changes the result set + (``LIMIT n ... WHERE c`` != ``WHERE c LIMIT n``). + + Regression test for the bug introduced by the + ``_snowpark_connect_flatten_select_after_sort`` loosening, which allowed + filter-through-LIMIT flattening on NEW columns in compatible mode. + + A small inline ``VALUES`` input preserves insertion order in practice for + Snowflake's planner, so with the correct (non-flattened) SQL the LIMIT + picks IDs 0..4 and only id=4 survives the filter. With the buggy + flattened SQL the filter runs first against IDs 0..9, LIMIT then picks 5 + of the 6 matching rows, and the result is 5 rows. Asserting an exact + single row ``[Row(4)]`` therefore catches the regression.""" + if is_snowpark_connect_compatible_mode: + import snowflake.snowpark.context as context + + monkeypatch.setattr(context, "_is_snowpark_connect_compatible_mode", True) + + df = session.create_dataframe([(i,) for i in range(10)], schema=["ID"]) + df1 = ( + df.select(col("ID").alias("id_a")) + .select(col("id_a").alias("id_b")) + .limit(5) + .filter(col("id_b") > 3) + ) + + # (a) WHERE must remain OUTSIDE the LIMIT subquery. + query = df1.queries["queries"][-1] + assert query.upper().rfind("WHERE") > query.upper().rfind( + "LIMIT" + ), f"WHERE flattened across LIMIT on NEW column: {query}" + assert ( + query.count("SELECT") >= 2 + ), f"Expected nested SELECT when filtering on NEW column after LIMIT: {query}" + + # (b) Exact row match -- only id=4 is in the first 5 rows AND > 3. + Utils.check_answer(df1, [Row(4)]) + + +@pytest.mark.parametrize("is_snowpark_connect_compatible_mode", [True, False]) +def test_filter_after_limit_on_range_matches_spark_semantics( + session, monkeypatch, is_snowpark_connect_compatible_mode +): + """Mirror of the original Spark SQL regression workload + ``SELECT * FROM (SELECT * FROM range(10) LIMIT 5) WHERE id > 3``. + + ``session.range()`` uses Snowflake's ``GENERATOR``, which makes no + ordering guarantees without an ``ORDER BY``. So unlike the VALUES-based + variant above we cannot assert an exact row set. We can still assert the + invariants that distinguish correct from regressed SQL: + + * correct semantics: ``LIMIT 5`` picks 5 of 0..9 then filter keeps those + > 3 -> **row count is 0..5** + * regressed (flattened) semantics: filter keeps 4..9 (6 rows), ``LIMIT + 5`` picks 5 of them -> **row count is always exactly 5** + + So ``count < 5`` (with any ordering of generator output) is a positive + signal the fix is working; ``count == 5`` plus ``rows == {4..8}`` would + indicate the regression. We also assert every row satisfies the filter + predicate and LIMIT is respected as additional invariants.""" + if is_snowpark_connect_compatible_mode: + import snowflake.snowpark.context as context + + monkeypatch.setattr(context, "_is_snowpark_connect_compatible_mode", True) + + df = ( + session.range(10) + .select(col("ID").alias("id_a")) + .select(col("id_a").alias("id_b")) + .limit(5) + .select("*") + .filter(col("id_b") > 3) + .select(col("id_b").alias("id_c")) + ) + + query = df.queries["queries"][-1] + assert query.upper().rfind("WHERE") > query.upper().rfind( + "LIMIT" + ), f"WHERE flattened across LIMIT on NEW column: {query}" + + rows = df.collect() + # Invariants that hold for correct semantics regardless of GENERATOR order. + assert len(rows) <= 5, f"LIMIT not respected: got {len(rows)} rows -> {rows}" + assert all(r[0] > 3 for r in rows), f"Row failing predicate id > 3 returned: {rows}" + # The buggy flattened SQL always returns exactly 5 rows from {4..8} + # regardless of generator ordering, which would violate both of the + # assertions below. + returned = {r[0] for r in rows} + assert returned <= set(range(10)), f"Unexpected value: {rows}" + assert not (len(rows) == 5 and returned == {4, 5, 6, 7, 8}), ( + f"Result matches the buggy flattened semantics (filter-before-LIMIT):" + f" {rows}" + ) + + +def test_filter_on_new_column_without_limit_still_flattens_compat_mode( + session, monkeypatch +): + """Sanity check: the Snowpark Connect compatible-mode loosening of + filter flattening on NEW columns is still active when there is no + LIMIT/OFFSET on the subquery. Only the narrow LIMIT/OFFSET case is + blocked by the fix.""" + import snowflake.snowpark.context as context + + monkeypatch.setattr(context, "_is_snowpark_connect_compatible_mode", True) + + df = session.create_dataframe([(i,) for i in range(10)], schema=["ID"]) + df1 = ( + df.select(col("ID").alias("id_a")) + .select(col("id_a").alias("id_b")) + .filter(col("id_b") > 3) + ) + + # filter flattened into a single level of projection (no nested SELECT + # around a standalone subquery for the filter step). + query = df1.queries["queries"][-1] + assert "LIMIT" not in query.upper() + assert "WHERE" in query.upper(), f"Expected filter to be emitted as WHERE: {query}" + + # Without LIMIT the result is fully deterministic -> exact check. + Utils.check_answer(df1, [Row(4), Row(5), Row(6), Row(7), Row(8), Row(9)], sort=True) + + def test_window_with_filter(session): df = session.create_dataframe([[0], [1]], schema=["A"]) df = ( diff --git a/tests/unit/test_selectable_queries.py b/tests/unit/test_selectable_queries.py index ad92ec916a..8c8310102b 100644 --- a/tests/unit/test_selectable_queries.py +++ b/tests/unit/test_selectable_queries.py @@ -227,3 +227,44 @@ def test_can_clause_dependent_columns_flatten_sort_new_dollar_or_all( frozenset({'"X"'}), col_states, "sort" ) assert result is False + + +@pytest.mark.parametrize( + "compat_mode, flatten_flag, subquery_has_limit_or_offset, expected", + [ + # Legacy mode: NEW column + filter is never flattened, regardless of limit. + (False, True, True, False), + (False, True, False, False), + # Compat mode with kill-switch OFF: falls back to legacy behavior. + (True, False, True, False), + (True, False, False, False), + # Compat mode ON: the loosening from SNOW-2203826 applies, except we + # must still block flattening across LIMIT/OFFSET (otherwise WHERE + # would move in front of LIMIT and change the result set). + (True, True, True, False), + (True, True, False, True), + ], +) +def test_can_clause_dependent_columns_flatten_filter_new_limit( + compat_mode, flatten_flag, subquery_has_limit_or_offset, expected, monkeypatch +): + """Filter on a NEW column must not flatten across LIMIT/OFFSET, even when + the Snowpark Connect compatible-mode loosening is active.""" + monkeypatch.setattr(context, "_is_snowpark_connect_compatible_mode", compat_mode) + monkeypatch.setattr( + context, "_snowpark_connect_flatten_select_after_sort", flatten_flag + ) + col_states = ColumnStateDict() + col_states['"X"'] = ColumnState( + col_name='"X"', + change_state=ColumnChangeState.NEW, + state_dict=col_states, + ) + + result = can_clause_dependent_columns_flatten( + frozenset({'"X"'}), + col_states, + "filter", + subquery_has_limit_or_offset=subquery_has_limit_or_offset, + ) + assert result is expected