[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16790307#comment-16790307 ] Danny Chan commented on CALCITE-2302: - Hi [~julianhyde] is there any possibility that this patch can be merged into master ? We have use this patch for about 1 year and it works great for product. Hope for your reply. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16895534#comment-16895534 ] Julian Hyde commented on CALCITE-2302: -- Let's get this reviewed and into 1.21. It's a useful change, and it has been lingering for too long. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 40m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16896156#comment-16896156 ] Danny Chan commented on CALCITE-2302: - Thanks, [~julianhyde], i have rebase the code again ~ > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 40m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16907122#comment-16907122 ] Stamatis Zampetakis commented on CALCITE-2302: -- Hey [~hyuan], it seems that you reviewed the PR; is it ready to go? Will it make it for 1.21.0? > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 4h 40m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16908576#comment-16908576 ] Haisheng Yuan commented on CALCITE-2302: Let me repeat my comment here. My only concern is that should we provide the option of implicit cast strategy or dialect? Different databases has some different cast strategies. like '9'/2, PostgreSQL will cast '9' to integer, which returns 4, while other database (HIVE? IIRC) may cast '9' to decimal and returns 4.5. The current implementation will break many Postgres queries, and generate wrong results. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 5h 20m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16908903#comment-16908903 ] Danny Chan commented on CALCITE-2302: - Thanks so much for your review [~hyuan] ! I have add a new SqlConformance for PostgreSql and SqlServer which seem the only engine that returns integer for 2 integers division. I checked again for the behavior: * Hive and Spark all return double, Hive also have a "A DIV B" function to returns integer * PostgreSql and SQL_SERVER returns integer. * Mysql returns double while it has a DIV() function to returns integer > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 6.5h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16909601#comment-16909601 ] Stamatis Zampetakis commented on CALCITE-2302: -- I think we agreed that it should be possible to enable/disable all implicit casts on demand; if that's the case then in principle we shouldn't break any of the existing queries in Postgres and other DBMS if the casts are disabled. If we are afraid that there are many cases that this may happen then we could choose to have type casts disabled by default for now. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Major > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 6.5h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16910144#comment-16910144 ] Danny Chan commented on CALCITE-2302: - Thanks [~zabetak], most of the sql contexts that need implicit type coercion are common in the popular DB engines, what we need to be caution is the different behaviors of some cast cases. We can fix them for specific dialects if we find any. But AFAIK, this kind of cases are really few. I think we should keep the casts default enabled, which is also adopted by all the other DB engines. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 6.5h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.14#76016)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16911921#comment-16911921 ] Haisheng Yuan commented on CALCITE-2302: +1 on the patch, overall. Given the default behavior change for queries running on Postgres, ('9'/2 returns 4.5 instead of 4), we'd better underscore or warn the important default behavior change for implicit cast and integer division in the release notes. Thanks for the great work! > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 6h 40m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16911987#comment-16911987 ] Danny Chan commented on CALCITE-2302: - [~julianhyde] Personally i propose to add this policy to SqlConformance, because it is very about the execution behavior of a SqlDialect, the RelDataTypeSystem defines some type deriving behaviors of the entire type system in methods like "deriveXXX", but strictly to say, "two integers division returns what kind of data" not only is relative with "what sql type we should return" but "what data we should return". We can say that "9/2 should return double", then 4.5 and 4.0 can both be seen as double type. For an implicit type coercion, what we really changed is the runtime/execution behavior, not only the type inferring. Another reason is that RelDataTypeSystem is about Calcite type system behaviors which are not designed pluggable for all kinds of SQL dialects. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16911967#comment-16911967 ] Julian Hyde commented on CALCITE-2302: -- [~danny0405] Not sure that the policy for deriving the return type of divide should be in conformance. (Maybe RelDataTypeSystem?) Nor whether it should be done as part of this change. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16912839#comment-16912839 ] Danny Chan commented on CALCITE-2302: - For "9/2 returns 4.5", we indeed do the type coercion because we need to coerce all the operands of "/" to double. So this change definitely belongs to the implicit type coercion scope. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16912840#comment-16912840 ] Danny Chan commented on CALCITE-2302: - [~julianhyde] Does my reply answer your questions ? I'm planning to merge this PR if there are no more comments in 24 hours. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16913576#comment-16913576 ] Julian Hyde commented on CALCITE-2302: -- I just noticed that we have {{RelDataTypeSystem.deriveDecimalDivideType}} already. Suppose that method says that "9/2 should return DOUBLE". Then the result should be the most accurate value that fits within DOUBLE, i.e. 4.5, not 4.0. Don't think of it as integer division followed by a cast to DOUBLE i.e. "CAST((9 / 2) AS DOUBLE)". Also don't think of it as implicitly converting the arguments, i.e. "CAST(9 AS DOUBLE) / CAST(2 AS DOUBLE)". I think of it as defining "/" as an operator "double myDivide(int arg1, int arg2)". If you agree with this, do you think that we could leverage the existing {{RelDataTypeSystem.deriveDecimalDivideType}} method, and we can get the behavior you want without adding any methods to {{SqlConformance}}. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16913843#comment-16913843 ] Danny Chan commented on CALCITE-2302: - Thanks, [~julianhyde] I kind of agree with your point that the "DIVIDE" operator is the role to decide what kind of data it should return, not the implicit type casts. Even though the implicit casts can implement as the same behavior with configurable sql dialects. Personally I have no strong objections on leverage the return type inferring of RelDataTypeSystem.deriveDecimalDivideType method, just one question: # How to support different sql dialects ? Because PostgreSQL and SQL-SERVER return integer and the others return double ? Especially for our JDBC connectors, do we need add a control flag or something ? > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16914070#comment-16914070 ] Danny Chan commented on CALCITE-2302: - I have made the latest change in commit [7b03ac7|https://github.com/apache/calcite/pull/706/commits/7b03ac7f466c248a0765447ce4a18c9d9393aa95] ! Instead of leveraging the existing RelDataTypeSystem.deriveDecimalDivideType method, i add a new SqlReturnTypeInference named EXACT_INTEGER_QUOTIENT chained into the exists return type inference of "DIVIDE" operator. Also i modified the expression to make them returns double(2 QuidemTest changes because of this change, their results become more accurate). > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16915414#comment-16915414 ] Danny Chan commented on CALCITE-2302: - [~julianhyde] Does the latest commit solve your review objections ? I'm planning to merge this PR if there are no more comments in 24 hours. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 10m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16917850#comment-16917850 ] Stamatis Zampetakis commented on CALCITE-2302: -- Hey Danny, this issue is going to have a lot of impact so please before pushing to master verify that there are no new failures in integration tests ( -Pit). > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7.5h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16917951#comment-16917951 ] Julian Hyde commented on CALCITE-2302: -- [~danny0405] Do I understand correctly that after this change, the type of integer / integer will be double? If so, I think that is a mistake. Floating-point numbers are inherently imprecise, and so people in industries like finance avoid them. We should not introduce them implicitly. Note that there is no exact representation of 1 / 3 in INTEGER, DECIMAL, REAL or DOUBLE. So it's kind of more honest to return 0. I would be OK with making the result of / a decimal of some precision, if there are other databases that do that. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7.5h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16918405#comment-16918405 ] Danny Chan commented on CALCITE-2302: - [~julianhyde] Thanks. There seems to be 2 style type coercions for binary arithmetic with strings: * For MySQL and Oracle style: coerce all the STRING operand to DOUBLE type * PostgreSQL and SQL-SERVER style: coerce the STRING operand to the type of the other operand(if it is a NUMERIC) The SQL standard[1] says that, bq. When the declared type of both operands of the addition, subtraction, multiplication, or division operator is exact numeric, the declared type of the result is an implementation-defined exact numeric type So i agree that the PostgreSQL style is more in line with the SQL standard. Let's choose the PostgreSQL style coercion, that means '9'/2 return INTEGER and '9'/cast(2.1 as float) returns FLOAT. For two integers divide, let's keep the return type same as before(9/2 returns 4). [1] SQL-2011 Subclause 6.27, "" > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7.5h > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16919078#comment-16919078 ] Julian Hyde commented on CALCITE-2302: -- Thanks for your patience in getting this to completion, [~danny0405]. I'm glad we're staying with PostgreSQL/MSSQL style. And now people have the means to switch Calcite to MySQL/Oracle style if they wish. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Danny Chan >Assignee: Danny Chan >Priority: Critical > Labels: pull-request-available > Fix For: 1.21.0 > > Time Spent: 7h 40m > Remaining Estimate: 0h > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16466270#comment-16466270 ] Julian Hyde commented on CALCITE-2302: -- Calcite already does some implicit conversions. I agree we could do more. Can you describe your use cases more fully? > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Yuzhao Chen >Assignee: Julian Hyde >Priority: Major > Fix For: 1.17.0 > > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then modify > the RelNode/RexNodes tree converted from a validated SqlNode tree to add in > casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16466732#comment-16466732 ] Yuzhao Chen commented on CALCITE-2302: -- Most common cases are: # 1='1' comparison # UDF/UDAF which accepts double but we passed in an int type # set operations like union a type (int, varchar) with (int, int) Calcite will validate cases above as fails, but our user think is should be passed, just like Hive or Mysql. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Yuzhao Chen >Assignee: Julian Hyde >Priority: Major > Fix For: 1.17.0 > > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then modify > the RelNode/RexNodes tree converted from a validated SqlNode tree to add in > casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16494723#comment-16494723 ] Yuzhao Chen commented on CALCITE-2302: -- hi, [~julianhyde] I have made a PR here [CALCITE-2302|https://github.com/apache/calcite/pull/706], really appreciate that you can give me some suggestions. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Yuzhao Chen >Assignee: Julian Hyde >Priority: Major > Fix For: 1.17.0 > > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in [https://github.com/apache/calcite/pull/706,] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16495975#comment-16495975 ] Yuzhao Chen commented on CALCITE-2302: -- Hi, [~julianhyde] Can you give me some suggestions? I'm really appreciate for it. This is design doc: [Calcite Implicit Type Cast Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. This is the conversion types mapping: [Conversion Types Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Yuzhao Chen >Assignee: Julian Hyde >Priority: Major > Fix For: 1.17.0 > > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in [https://github.com/apache/calcite/pull/706,] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2302) Implicit type cast support
[ https://issues.apache.org/jira/browse/CALCITE-2302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16497520#comment-16497520 ] Yuzhao Chen commented on CALCITE-2302: -- Hi, committers, can you give me some suggestions? Our users really need this implicit type coercion, i considered to implement this function outside Calcite but it always validates fails, finally i added it in the Calcite validation process, and this seems the only way to, so i really appreciate for your suggestions. In total, i wanna know if this implementation is ok for now the Calcite architecture, and if there are some hidden trouble or negative effects. The test cases in Calcite are all ok and desirable, also the Cases i added in TypeCoercionTest.java. But i think this need more cases which computing real dataset and output the right answers. I plan to add more test cases from Hive/Mysql/Spark in and then let this function default open in our product cluster. So really look forward to your suggestions if you have time. > Implicit type cast support > -- > > Key: CALCITE-2302 > URL: https://issues.apache.org/jira/browse/CALCITE-2302 > Project: Calcite > Issue Type: Improvement > Components: core >Affects Versions: 1.17.0 >Reporter: Yuzhao Chen >Assignee: Julian Hyde >Priority: Major > Fix For: 1.17.0 > > > Now many DBs have support implicit type cast, eg: SqlServer, Oracle, Hive. > Implicit type cast is an useful function for many cases, So we should support > this. > I checkout Calcite code and found that: > # Now we use a validator to validate our operands types[ through kinds of > namespaces and scopes ] > # Most of the validations will finally goes to > {code:java} > SqlOperator.validateOperands > {code} > # which will use validation logic defined in corresponding > SqlOperandTypeChecker > What i'm confused about is where should i put the implicit type cast logic > in? I figured out 2 ways: > # Supply a tool class/rules to add casts into a parsed SqlNode tree which > will then go through the validation logic later on. > # Unleash the validation logic in kinds of SqlOperandTypeChecker, then > modify the RelNode/RexNodes tree converted from a validated SqlNode tree to > add in casts through custom RelOptRules. > So guys, which of the 2 ways should i go, or if there are better way to do > this? > I need your help. > > Updated 18-05-30: > Hi guys, i have made a PR in > [CALCITE-2302|https://github.com/apache/calcite/pull/706] > This is design doc: [Calcite Implicit Type Cast > Design|https://docs.google.com/document/d/1g2RUnLXyp_LjUlO-wbblKuP5hqEu3a_2Mt2k4dh6RwU/edit?usp=sharing]. > This is the conversion types mapping: [Conversion Types > Mapping|https://docs.google.com/spreadsheets/d/1GhleX5h5W8-kJKh7NMJ4vtoE78pwfaZRJl88ULX_MgU/edit?usp=sharing]. > I really appreciate your suggestions, thx. -- This message was sent by Atlassian JIRA (v7.6.3#76005)