-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix fb_reshape_row for ArrayType equal comparisom #11169
Conversation
This pull request was exported from Phabricator. Differential Revision: D63883106 |
✅ Deploy Preview for meta-velox canceled.
|
a5b4d28
to
9ea35da
Compare
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for ArrayType and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Differential Revision: D63883106
This pull request was exported from Phabricator. Differential Revision: D63883106 |
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for `ArrayType` and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Differential Revision: D63883106
9ea35da
to
ebfae12
Compare
This pull request was exported from Phabricator. Differential Revision: D63883106 |
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for `ArrayType` and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Differential Revision: D63883106
ebfae12
to
daefda1
Compare
This pull request was exported from Phabricator. Differential Revision: D63883106 |
daefda1
to
1cd2daf
Compare
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for `ArrayType` and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Differential Revision: D63883106
This pull request was exported from Phabricator. Differential Revision: D63883106 |
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for `ArrayType` and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Differential Revision: D63883106
1cd2daf
to
acce604
Compare
This pull request was exported from Phabricator. Differential Revision: D63883106 |
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for `ArrayType` and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Differential Revision: D63883106
acce604
to
4ba189d
Compare
This pull request was exported from Phabricator. Differential Revision: D63883106 |
…11169) Summary: fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For `RowType::equals` comparison, it will iterate its children and apply `operator==` for equal comparison. However `operator==` is not defined for `ArrayType` and the equal logic fall back to use ArrayType::equivalent which is weakly matched. Change `operator==` to use `equals` for complex type to ensure strongly matching for equal comparison Differential Revision: D63993116
Summary: X-link: #11169 fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names. For example: ``` SELECT fb_reshape_row( col, CAST(NULL AS ROW(arr ARRAY(ROW(b VARCHAR, a VARCHAR)))) ) as col FROM ( SELECT CAST(ROW(x) AS ROW(arr ARRAY(ROW(a VARCHAR, b VARCHAR)))) AS col FROM ( VALUES (ARRAY[('1', '2')]) ) t(x) ); ``` In fb_reshape_row::reshapeRow, if it finds fromType is equal to toType, it will not do transformation ``` if (fromVector->type()->asRow().equals(toType->asRow())) { return fromVector; } ``` For RowType equal comparison, it will iterate its children and apply `operator==`. In this case, the child is `ArrayType`. However `operator==` is not defined for `ArrayType` and the logic falls back to use ArrayType::equivalent which is weakly matched. Change `operator==` to use `equals` for all complex types to ensure strongly matching for equal comparison Reviewed By: kevinwilfong Differential Revision: D63993116 fbshipit-source-id: 24348eb7325d4460c8f481904950d40e0e405f08
Summary:
fb_reshape_row returns wrong result for array of row when "from" and "to" row types are the same size and same type but different names.
For example:
This is because == operator is not defined for ArrayType and the equal logic fall back to use ArrayType::equivalent which is weakly matched.
Differential Revision: D63883106