Well, to expand my glib statement, standards exist for at least two reasons that I endorse in this case:
1) They are well thought out, with a great deal more consideration than we have time to give to a problem 2) They are widely implemented, understood and used. So our users and developers have a common point of reference. > On 22 Nov 2018, at 11:42, Benjamin Lerer <benjamin.le...@datastax.com> wrote: > > Sorry, following a standard for the sake of following a standard does not > make sense to me. > > On Thu, Nov 22, 2018 at 12:33 PM Benedict Elliott Smith <bened...@apache.org> > wrote: > >> Yes. >> >>> On 22 Nov 2018, at 11:32, Benjamin Lerer <benjamin.le...@datastax.com> >> wrote: >>> >>> Then I would be interested in knowing `where we should be`. If the answer >>> is `ANSI SQL92` then my question is: Why? Simply for the sake of >> following >>> a standard? >>> >>> >>> On Thu, Nov 22, 2018 at 12:19 PM Benedict Elliott Smith < >> bened...@apache.org <mailto:bened...@apache.org>> >>> wrote: >>> >>>> As I say, for me this is explicitly unhelpful, so I have no intention of >>>> producing it (though, of course, I cannot prevent you from producing it) >>>> >>>> For me, the correct approach is to decide where we should be, and then >>>> figure out how to get there. Where we are has no bearing on where we >>>> should be, in my view. >>>> >>>> >>>> >>>>> On 22 Nov 2018, at 11:12, Benjamin Lerer <benjamin.le...@datastax.com> >>>> wrote: >>>>> >>>>> I would also like to see an analysis of what being ANSI SQL 92 >> compliant >>>>> means in term of change of behavior (for arithmetics and *any features >> we >>>>> have already released*). >>>>> Simply because without it, I find the decision pretty hard to make. >>>>> >>>>> On Thu, Nov 22, 2018 at 11:51 AM Benedict Elliott Smith < >>>> bened...@apache.org <mailto:bened...@apache.org> <mailto: >> bened...@apache.org <mailto:bened...@apache.org>>> >>>>> wrote: >>>>> >>>>>> We’re not presently voting*; we’re only discussing, whether we should >>>> base >>>>>> our behaviour on a widely agreed upon standard. >>>>>> >>>>>> I think perhaps the nub of our disagreement is that, in my view, this >> is >>>>>> the only relevant fact to decide. There is no data to base this >>>> decision >>>>>> upon. It’s axiomatic, or ideological; procedural, not technical: Do >> we >>>>>> think we should try to hew to standards (where appropriate), or do we >>>> think >>>>>> we should stick with what we arrived at in an adhoc manner? >>>>>> >>>>>> If we believe the former, as I now do, then the current state is only >>>>>> relevant when we come to implement the decision. >>>>>> >>>>>> >>>>>> * But given how peripheral and inherently ideological this decision >> is, >>>>>> and how meandering the discussion was with no clear consensus, it >>>> seemed to >>>>>> need a vote in the near future. The prospect of a vote seems to have >>>>>> brought some healthy debate forward too, which is great, but I >>>> apologise if >>>>>> this somehow came across as presumptuous. >>>>>> >>>>>> >>>>>>> On 22 Nov 2018, at 09:26, Sylvain Lebresne <lebre...@gmail.com >> <mailto:lebre...@gmail.com>> wrote: >>>>>>> >>>>>>> I'm not saying "let's not do this no matter what and ever fix >> technical >>>>>>> debt", nor am I fearing decision. >>>>>>> >>>>>>> But I *do* think decisions, technical ones at least, should be fact >> and >>>>>>> data driven. And I'm not even sure why we're talking of having a vote >>>>>> here. >>>>>>> The Apache Way is *not* meant to be primarily vote-driven, votes are >>>>>>> supposed to be a last resort when, after having debated facts and >> data, >>>>>> no >>>>>>> consensus can be reached. Can we have the debate on facts and data >>>> first? >>>>>>> Please. >>>>>>> >>>>>>> At the of the day, I object to: "There are still a number of >> unresolved >>>>>>> issues, but to make progress I wonder if it would first be helpful to >>>>>> have >>>>>>> a vote on ensuring we are ANSI SQL 92 compliant for our arithmetic?". >>>>>> More >>>>>>> specifically, I disagree that such vote is a good starting point. >> Let's >>>>>>> identify and discuss the unresolved issues first. Let's check >> precisely >>>>>>> what getting our arithmetic ANSI SQL 92 compliant means and how we >> can >>>>>> get >>>>>>> it. I do support the idea of making such analysis btw, it would be >> good >>>>>>> data, but no vote is needed whatsoever to make it. Again, I object to >>>>>>> voting first and doing the analysis 2nd. >>>>>>> >>>>>>> -- >>>>>>> Sylvain >>>>>>> >>>>>>> >>>>>>> On Thu, Nov 22, 2018 at 1:25 AM Jonathan Haddad <j...@jonhaddad.com >> <mailto:j...@jonhaddad.com>> >>>>>> wrote: >>>>>>> >>>>>>>> I can’t agree more. We should be able to make changes in a manner >> that >>>>>>>> improves the DB In the long term, rather than live with the >> technical >>>>>> debt >>>>>>>> of arbitrary decisions made by a handful of people. >>>>>>>> >>>>>>>> I also agree that putting a knob in place to let people migrate over >>>> is >>>>>> a >>>>>>>> reasonable decision. >>>>>>>> >>>>>>>> Jon >>>>>>>> >>>>>>>> On Wed, Nov 21, 2018 at 4:54 PM Benedict Elliott Smith < >>>>>>>> bened...@apache.org <mailto:bened...@apache.org>> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> The goal is simply to agree on a set of well-defined principles for >>>> how >>>>>>>> we >>>>>>>>> should behave. If we don’t like the implications that arise, we’ll >>>>>> have >>>>>>>>> another vote? A democracy cannot bind itself, so I never >> understood >>>>>> this >>>>>>>>> fear of a decision. >>>>>>>>> >>>>>>>>> A database also has a thousand toggles. If we absolutely need to, >> we >>>>>> can >>>>>>>>> introduce one more. >>>>>>>>> >>>>>>>>> We should be doing this upfront a great deal more often. Doing it >>>>>>>>> retrospectively sucks, but in my opinion it's a bad reason to bind >>>>>>>>> ourselves to whatever made it in. >>>>>>>>> >>>>>>>>> Do we anywhere define the principles of our current behaviour? I >>>>>>>> couldn’t >>>>>>>>> find it. >>>>>>>>> >>>>>>>>> >>>>>>>>>> On 21 Nov 2018, at 21:08, Sylvain Lebresne <lebre...@gmail.com >> <mailto:lebre...@gmail.com>> >>>>>> wrote: >>>>>>>>>> >>>>>>>>>> On Tue, Nov 20, 2018 at 5:02 PM Benedict Elliott Smith < >>>>>>>>> bened...@apache.org <mailto:bened...@apache.org>> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> FWIW, my meaning of arithmetic in this context extends to any >>>>>> features >>>>>>>>> we >>>>>>>>>>> have already released (such as aggregates, and perhaps other >>>> built-in >>>>>>>>>>> functions) that operate on the same domain. We should be >>>> consistent, >>>>>>>>> after >>>>>>>>>>> all. >>>>>>>>>>> >>>>>>>>>>> Whether or not we need to revisit any existing functionality we >> can >>>>>>>>> figure >>>>>>>>>>> out after the fact, once we have agreed what our behaviour should >>>> be. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I'm not sure I correctly understand the process suggested, but I >>>> don't >>>>>>>>>> particularly like/agree with what I understand. What I understand >>>> is a >>>>>>>>>> suggestion for voting on agreeing to be ANSI SQL 92 compliant, >> with >>>> no >>>>>>>>> real >>>>>>>>>> evaluation of what that entails (at least I haven't seen one), and >>>>>> that >>>>>>>>>> this vote, if passed, would imply we'd then make any backward >>>>>>>>> incompatible >>>>>>>>>> change necessary to achieve compliance ("my meaning of arithmetic >> in >>>>>>>> this >>>>>>>>>> context extends to any features we have already released" and >>>> "Whether >>>>>>>> or >>>>>>>>>> not we need to revisit any existing functionality we can figure >> out >>>>>>>> after >>>>>>>>>> the fact, once we have agreed what our behaviour should be"). >>>>>>>>>> >>>>>>>>>> This might make sense of a new product, but at our stage that >> seems >>>>>>>>>> backward to me. I think we owe our users to first make the effort >> of >>>>>>>>>> identifying what "inconsistencies" our existing arithmetic has[1] >>>> and >>>>>>>>>> _then_ consider what options we have to fix those, with their pros >>>> and >>>>>>>>> cons >>>>>>>>>> (including how bad they break backward compatibility). And if >> _then_ >>>>>>>>>> getting ANSI SQL 92 compliant proves to not be disruptive (or at >>>> least >>>>>>>>>> acceptably so), then sure, that's great. >>>>>>>>>> >>>>>>>>>> [1]: one possibly efficient way to do that could actually be to >>>>>> compare >>>>>>>>> our >>>>>>>>>> arithmetic to ANSI SQL 92. Not that all differences found would >>>> imply >>>>>>>>>> inconsistencies/wrongness of our arithmetic, but still, it should >> be >>>>>>>>>> helpful. And I guess my whole point is that we should that >> analysis >>>>>>>>> first, >>>>>>>>>> and then maybe decide that being ANSI SQL 92 is a reasonable >> option, >>>>>>>> not >>>>>>>>>> decide first and live with the consequences no matter what they >> are. >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Sylvain >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> I will make this more explicit for the vote, but just to clarify >>>> the >>>>>>>>>>> intention so that we are all discussing the same thing. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> On 20 Nov 2018, at 14:18, Ariel Weisberg <adwei...@fastmail.fm >> <mailto:adwei...@fastmail.fm>> >>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> +1 >>>>>>>>>>>> >>>>>>>>>>>> This is a public API so we will be much better off if we get it >>>>>> right >>>>>>>>>>> the first time. >>>>>>>>>>>> >>>>>>>>>>>> Ariel >>>>>>>>>>>> >>>>>>>>>>>>> On Nov 16, 2018, at 10:36 AM, Jonathan Haddad < >> j...@jonhaddad.com <mailto:j...@jonhaddad.com> >>>>> >>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Sounds good to me. >>>>>>>>>>>>> >>>>>>>>>>>>> On Fri, Nov 16, 2018 at 5:09 AM Benedict Elliott Smith < >>>>>>>>>>> bened...@apache.org <mailto:bened...@apache.org>> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> So, this thread somewhat petered out. >>>>>>>>>>>>>> >>>>>>>>>>>>>> There are still a number of unresolved issues, but to make >>>>>>>> progress I >>>>>>>>>>>>>> wonder if it would first be helpful to have a vote on ensuring >>>> we >>>>>>>> are >>>>>>>>>>> ANSI >>>>>>>>>>>>>> SQL 92 compliant for our arithmetic? This seems like a >> sensible >>>>>>>>>>> baseline, >>>>>>>>>>>>>> since we will hopefully minimise surprise to operators this >> way. >>>>>>>>>>>>>> >>>>>>>>>>>>>> If people largely agree, I will call a vote, and we can pick >> up >>>> a >>>>>>>>>>> couple >>>>>>>>>>>>>> of more focused discussions afterwards on how we interpret the >>>>>>>> leeway >>>>>>>>>>> it >>>>>>>>>>>>>> gives. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> On 12 Oct 2018, at 18:10, Ariel Weisberg <ar...@weisberg.ws >> <mailto:ar...@weisberg.ws>> >>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> From reading the spec. Precision is always implementation >>>>>> defined. >>>>>>>>> The >>>>>>>>>>>>>> spec specifies scale in several cases, but never precision for >>>> any >>>>>>>>>>> type or >>>>>>>>>>>>>> operation (addition/subtraction, multiplication, division). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> So we don't implement anything remotely approaching precision >>>> and >>>>>>>>>>> scale >>>>>>>>>>>>>> in CQL when it comes to numbers I think? So we aren't going to >>>>>>>> follow >>>>>>>>>>> the >>>>>>>>>>>>>> spec for scale. We are already pretty far down that road so I >>>>>> would >>>>>>>>>>> leave >>>>>>>>>>>>>> it alone. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I don't think the spec is asking for the most approximate >> type. >>>>>>>> It's >>>>>>>>>>>>>> just saying the result is approximate, and the precision is >>>>>>>>>>> implementation >>>>>>>>>>>>>> defined. We could return either float or double. I think if >> one >>>> of >>>>>>>>> the >>>>>>>>>>>>>> operands is a double we should return a double because clearly >>>> the >>>>>>>>>>> schema >>>>>>>>>>>>>> thought a double was required to represent that number. I >> would >>>>>>>> also >>>>>>>>>>> be in >>>>>>>>>>>>>> favor of returning a double all the time so that people can >>>> expect >>>>>>>> a >>>>>>>>>>>>>> consistent type from expressions involving approximate >> numbers. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I am a big fan of widening for arithmetic expressions in a >>>>>>>> database >>>>>>>>> to >>>>>>>>>>>>>> avoid having to error on overflow. You can go to the trouble >> of >>>>>>>> only >>>>>>>>>>>>>> widening the minimum amount, but I think it's simpler if we >>>> always >>>>>>>>>>> widen to >>>>>>>>>>>>>> bigint and double. This would be something the spec allows. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Definitely if we can make overflow not occur we should and >> the >>>>>>>> spec >>>>>>>>>>>>>> allows that. We should also not return different types for the >>>>>> same >>>>>>>>>>> operand >>>>>>>>>>>>>> types just to work around overflow if we detect we need more >>>>>>>>> precision. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Ariel >>>>>>>>>>>>>>>> On Fri, Oct 12, 2018, at 12:45 PM, Benedict Elliott Smith >>>> wrote: >>>>>>>>>>>>>>>> If it’s in the SQL spec, I’m fairly convinced. Thanks for >>>>>>>> digging >>>>>>>>>>> this >>>>>>>>>>>>>>>> out (and Mike for getting some empirical examples). >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> We still have to decide on the approximate data type to >>>> return; >>>>>>>>> right >>>>>>>>>>>>>>>> now, we have float+bigint=double, but float+int=float. I >>>> think >>>>>>>>> this >>>>>>>>>>> is >>>>>>>>>>>>>>>> fairly inconsistent, and either the approximate type should >>>>>>>> always >>>>>>>>>>> win, >>>>>>>>>>>>>>>> or we should always upgrade to double for mixed operands. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> The quoted spec also suggests that decimal+float=float, and >>>>>>>> decimal >>>>>>>>>>>>>>>> +double=double, whereas we currently have >>>> decimal+float=decimal, >>>>>>>>> and >>>>>>>>>>>>>>>> decimal+double=decimal >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> If we’re going to go with an approximate operand implying an >>>>>>>>>>>>>> approximate >>>>>>>>>>>>>>>> result, I think we should do it consistently (and consistent >>>>>> with >>>>>>>>> the >>>>>>>>>>>>>>>> SQL92 spec), and have the type of the approximate operand >>>> always >>>>>>>> be >>>>>>>>>>> the >>>>>>>>>>>>>>>> return type. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> This would still leave a decision for float+double, though. >>>> The >>>>>>>>> most >>>>>>>>>>>>>>>> consistent behaviour with that stated above would be to >> always >>>>>>>> take >>>>>>>>>>> the >>>>>>>>>>>>>>>> most approximate type to return (i.e. float), but this would >>>>>> seem >>>>>>>>> to >>>>>>>>>>> me >>>>>>>>>>>>>>>> to be fairly unexpected for the user. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On 12 Oct 2018, at 17:23, Ariel Weisberg < >> ar...@weisberg.ws <mailto:ar...@weisberg.ws>> >>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I agree with what's been said about expectations regarding >>>>>>>>>>> expressions >>>>>>>>>>>>>> involving floating point numbers. I think that if one of the >>>>>> inputs >>>>>>>>> is >>>>>>>>>>>>>> approximate then the result should be approximate. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> One thing we could look at for inspiration is the SQL spec. >>>> Not >>>>>>>> to >>>>>>>>>>>>>> follow dogmatically necessarily. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> From the SQL 92 spec regarding assignment >>>>>>>>>>>>>> >>>>>> >>>> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.contrib.andrew.cmu.edu_-7Eshadow_sql_sql1992.txt&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=2dMzYnFvO5Wf7J74IbDE27vxjfOX2xYT4-u7MEXUqHg&e= >> < >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.contrib.andrew.cmu.edu_-7Eshadow_sql_sql1992.txt&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=2dMzYnFvO5Wf7J74IbDE27vxjfOX2xYT4-u7MEXUqHg&e= >>> >>>> < >>>> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.contrib.andrew.cmu.edu_-7Eshadow_sql_sql1992.txt&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=2dMzYnFvO5Wf7J74IbDE27vxjfOX2xYT4-u7MEXUqHg&e= >> < >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.contrib.andrew.cmu.edu_-7Eshadow_sql_sql1992.txt&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=2dMzYnFvO5Wf7J74IbDE27vxjfOX2xYT4-u7MEXUqHg&e= >>> >>>>> >>>>>> section >>>>>>>>> 4.6: >>>>>>>>>>>>>>>>> " >>>>>>>>>>>>>>>>> Values of the data types NUMERIC, DECIMAL, INTEGER, >>>>>>>> SMALLINT, >>>>>>>>>>>>>>>>> FLOAT, REAL, and DOUBLE PRECISION are numbers and are all >>>>>>>>>>>>>> mutually >>>>>>>>>>>>>>>>> comparable and mutually assignable. If an assignment would >>>>>>>>>>>>>> result >>>>>>>>>>>>>>>>> in a loss of the most significant digits, an exception >>>>>>>>>>> condition >>>>>>>>>>>>>>>>> is raised. If least significant digits are lost, >>>>>>>>>>> implementation- >>>>>>>>>>>>>>>>> defined rounding or truncating occurs with no exception >>>>>>>>>>>>>> condition >>>>>>>>>>>>>>>>> being raised. The rules for arithmetic are generally >>>>>>>> governed >>>>>>>>>>> by >>>>>>>>>>>>>>>>> Subclause 6.12, "<numeric value expression>". >>>>>>>>>>>>>>>>> " >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Section 6.12 numeric value expressions: >>>>>>>>>>>>>>>>> " >>>>>>>>>>>>>>>>> 1) If the data type of both operands of a dyadic >> arithmetic >>>>>>>>>>>>>> opera- >>>>>>>>>>>>>>>>> tor is exact numeric, then the data type of the result >>>> is >>>>>>>>>>>>>> exact >>>>>>>>>>>>>>>>> numeric, with precision and scale determined as >> follows: >>>>>>>>>>>>>>>>> ... >>>>>>>>>>>>>>>>> 2) If the data type of either operand of a dyadic >>>> arithmetic >>>>>>>>>>> op- >>>>>>>>>>>>>>>>> erator is approximate numeric, then the data type of >> the >>>>>>>>> re- >>>>>>>>>>>>>>>>> sult is approximate numeric. The precision of the >> result >>>>>>>> is >>>>>>>>>>>>>>>>> implementation-defined. >>>>>>>>>>>>>>>>> " >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> And this makes sense to me. I think we should only return >> an >>>>>>>> exact >>>>>>>>>>>>>> result if both of the inputs are exact. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I think we might want to look closely at the SQL spec and >>>>>>>>> especially >>>>>>>>>>>>>> when the spec requires an error to be generated. Those are >>>>>>>> sometimes >>>>>>>>>>> in the >>>>>>>>>>>>>> spec to prevent subtle paths to wrong answers. Any time we >>>> deviate >>>>>>>>>>> from the >>>>>>>>>>>>>> spec we should be asking why is it in the spec and why are we >>>>>>>>>>> deviating. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Another issue besides overflow handling is how we determine >>>>>>>>>>> precision >>>>>>>>>>>>>> and scale for expressions involving two exact types. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Ariel >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Fri, Oct 12, 2018, at 11:51 AM, Michael Burman wrote: >>>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I'm not sure if I would prefer the Postgres way of doing >>>>>>>> things, >>>>>>>>>>>>>> which is >>>>>>>>>>>>>>>>>> returning just about any type depending on the order of >>>>>>>>> operators. >>>>>>>>>>>>>>>>>> Considering it actually mentions in the docs that using >>>>>>>>>>>>>> numeric/decimal is >>>>>>>>>>>>>>>>>> slow and also multiple times that floating points are >>>> inexact. >>>>>>>> So >>>>>>>>>>>>>> doing >>>>>>>>>>>>>>>>>> some math with Postgres (9.6.5): >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647> <tel:2147483647 >> <tel:2147483647>>::bigint*1.0::double >>>> precision returns double >>>>>>>>>>>>>>>>>> precision 2147483647 <tel:2147483647> <tel:2147483647 >> <tel:2147483647>> >>>>>>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647> <tel:2147483647 >> <tel:2147483647>>::bigint*1.0 returns >>>> numeric 2147483647.0 <tel:2147483647.0> <tel:2147483647.0 >> <tel:2147483647.0>> >>>>>>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647> <tel:2147483647 >> <tel:2147483647>>::bigint*1.0::real >>>> returns double >>>>>>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647> <tel:2147483647 >> <tel:2147483647>>::double >>>> precision*1::bigint returns double >>>>>>>>>>>>>> 2147483647 <tel:2147483647> <tel:2147483647 <tel:2147483647>> >>>>>>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647> <tel:2147483647 >> <tel:2147483647>>::double >>>> precision*1.0::bigint returns double >>>>>>>>>>>>>> 2147483647 <tel:2147483647> <tel:2147483647 <tel:2147483647>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> With + - we can get the same amount of mixture of returned >>>>>>>> types. >>>>>>>>>>>>>> There's >>>>>>>>>>>>>>>>>> no difference in those calculations, just some casting. To >>>> me >>>>>>>>>>>>>>>>>> floating-point math indicates inexactness and has errors >> and >>>>>>>>>>> whoever >>>>>>>>>>>>>> mixes >>>>>>>>>>>>>>>>>> up two different types should understand that. If one >> didn't >>>>>>>> want >>>>>>>>>>>>>> exact >>>>>>>>>>>>>>>>>> numeric type, why would the server return such? The >> floating >>>>>>>>> point >>>>>>>>>>>>>> value >>>>>>>>>>>>>>>>>> itself could be wrong already before the calculation - >>>> trying >>>>>>>> to >>>>>>>>>>> say >>>>>>>>>>>>>> we do >>>>>>>>>>>>>>>>>> it lossless is just wrong. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Fun with 2.65: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SELECT 2.65::real * 1::int returns double 2.65000009536743 >>>>>>>>>>>>>>>>>> SELECT 2.65::double precision * 1::int returns double 2.65 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SELECT round(2.65) returns numeric 4 >>>>>>>>>>>>>>>>>> SELECT round(2.65::double precision) returns double 4 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SELECT 2.65 * 1 returns double 2.65 >>>>>>>>>>>>>>>>>> SELECT 2.65 * 1::bigint returns numeric 2.65 >>>>>>>>>>>>>>>>>> SELECT 2.65 * 1.0 returns numeric 2.650 >>>>>>>>>>>>>>>>>> SELECT 2.65 * 1.0::double precision returns double 2.65 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SELECT round(2.65) * 1 returns numeric 3 >>>>>>>>>>>>>>>>>> SELECT round(2.65) * round(1) returns double 3 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> So as we're going to have silly values in any case, why >>>>>> pretend >>>>>>>>>>>>>> something >>>>>>>>>>>>>>>>>> else? Also, exact calculations are slow if we crunch large >>>>>>>> amount >>>>>>>>>>> of >>>>>>>>>>>>>>>>>> numbers. I guess I slightly deviated towards Postgres' >>>>>>>>> implemention >>>>>>>>>>>>>> in this >>>>>>>>>>>>>>>>>> case, but I wish it wasn't used as a benchmark in this >> case. >>>>>>>> And >>>>>>>>>>> most >>>>>>>>>>>>>>>>>> importantly, I would definitely want the exact same type >>>>>>>> returned >>>>>>>>>>>>>> each time >>>>>>>>>>>>>>>>>> I do a calculation. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> - Micke >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Fri, Oct 12, 2018 at 4:29 PM Benedict Elliott Smith < >>>>>>>>>>>>>> bened...@apache.org <mailto:bened...@apache.org> <mailto: >> bened...@apache.org <mailto:bened...@apache.org>>> >>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> As far as I can tell we reached a relatively strong >>>> consensus >>>>>>>>>>> that we >>>>>>>>>>>>>>>>>>> should implement lossless casts by default? Does anyone >>>> have >>>>>>>>>>>>>> anything more >>>>>>>>>>>>>>>>>>> to add? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Looking at the emails, everyone who participated and >>>>>>>> expressed a >>>>>>>>>>>>>>>>>>> preference was in favour of the “Postgres approach” of >>>>>>>> upcasting >>>>>>>>>>> to >>>>>>>>>>>>>> decimal >>>>>>>>>>>>>>>>>>> for mixed float/int operands? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> I’d like to get a clear-cut decision on this, so we know >>>> what >>>>>>>>>>> we’re >>>>>>>>>>>>>> doing >>>>>>>>>>>>>>>>>>> for 4.0. Then hopefully we can move on to a collective >>>>>>>> decision >>>>>>>>>>> on >>>>>>>>>>>>>> Ariel’s >>>>>>>>>>>>>>>>>>> concerns about overflow, which I think are also pressing >> - >>>>>>>>>>>>>> particularly for >>>>>>>>>>>>>>>>>>> tinyint and smallint. This does also impact implicit >> casts >>>>>>>> for >>>>>>>>>>> mixed >>>>>>>>>>>>>>>>>>> integer type operations, but an approach for these will >>>>>>>> probably >>>>>>>>>>>>>> fall out >>>>>>>>>>>>>>>>>>> of any decision on overflow. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On 3 Oct 2018, at 11:38, Murukesh Mohanan < >>>>>>>>>>>>>> murukesh.moha...@gmail.com <mailto:murukesh.moha...@gmail.com> >> <mailto:murukesh.moha...@gmail.com <mailto:murukesh.moha...@gmail.com>>> >>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I think you're conflating two things here. There's the >>>> loss >>>>>>>>>>>>>> resulting >>>>>>>>>>>>>>>>>>> from >>>>>>>>>>>>>>>>>>>> using some operators, and loss involved in casting. >>>> Dividing >>>>>>>> an >>>>>>>>>>>>>> integer >>>>>>>>>>>>>>>>>>> by >>>>>>>>>>>>>>>>>>>> another integer to obtain an integer result can result >> in >>>>>>>> loss, >>>>>>>>>>> but >>>>>>>>>>>>>>>>>>> there's >>>>>>>>>>>>>>>>>>>> no implicit casting there and no loss due to casting. >>>>>>>> Casting >>>>>>>>> an >>>>>>>>>>>>>> integer >>>>>>>>>>>>>>>>>>>> to a float can also result in loss. So dividing an >> integer >>>>>>>> by a >>>>>>>>>>>>>> float, >>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>> example, with an implicit cast has an additional avenue >>>> for >>>>>>>>> loss: >>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> implicit cast for the operands so that they're of the >> same >>>>>>>>> type. >>>>>>>>>>> I >>>>>>>>>>>>>>>>>>> believe >>>>>>>>>>>>>>>>>>>> this discussion so far has been about the latter, not >> the >>>>>>>> loss >>>>>>>>>>> from >>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> operations themselves. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On Wed, 3 Oct 2018 at 18:35 Benjamin Lerer < >>>>>>>>>>>>>> benjamin.le...@datastax.com <mailto: >> benjamin.le...@datastax.com> <mailto:benjamin.le...@datastax.com <mailto: >> benjamin.le...@datastax.com> >>>>>> >>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> I would like to try to clarify things a bit to help >>>> people >>>>>>>> to >>>>>>>>>>>>>> understand >>>>>>>>>>>>>>>>>>>>> the true complexity of the problem. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> The *float *and *double *types are inexact numeric >> types. >>>>>>>> Not >>>>>>>>>>> only >>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>> operation level. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> If you insert 676543.21 in a *float* column and then >> read >>>>>>>> it, >>>>>>>>>>> you >>>>>>>>>>>>>> will >>>>>>>>>>>>>>>>>>>>> realize that the value has been truncated to 676543.2. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> If you want accuracy the only way is to avoid those >>>> inexact >>>>>>>>>>> types. >>>>>>>>>>>>>>>>>>>>> Using *decimals >>>>>>>>>>>>>>>>>>>>> *during operations will mitigate the problem but will >> not >>>>>>>>> remove >>>>>>>>>>>>>> it. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> I do not recall PostgreSQL behaving has described. If I >>>> am >>>>>>>> not >>>>>>>>>>>>>> mistaken >>>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>>> PostgreSQL *SELECT 3/2* will return *1*. Which is >> similar >>>>>> to >>>>>>>>>>> what >>>>>>>>>>>>>> MS SQL >>>>>>>>>>>>>>>>>>>>> server and Oracle do. So all thoses databases will lose >>>>>>>>>>> precision >>>>>>>>>>>>>> if you >>>>>>>>>>>>>>>>>>>>> are not carefull. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> If you truly need precision you can have it by using >>>> exact >>>>>>>>>>> numeric >>>>>>>>>>>>>> types >>>>>>>>>>>>>>>>>>>>> for your data types. Of course it has a cost on >>>>>> performance, >>>>>>>>>>>>>> memory and >>>>>>>>>>>>>>>>>>>>> disk usage. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> The advantage of the current approach is that it give >> you >>>>>>>> the >>>>>>>>>>>>>> choice. >>>>>>>>>>>>>>>>>>> It is >>>>>>>>>>>>>>>>>>>>> up to you to decide what you need for your application. >>>> It >>>>>>>> is >>>>>>>>>>> also >>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>>>>>>> with the way CQL behave everywhere else. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Muru >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>> >>>> --------------------------------------------------------------------- >>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail: >>>> dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org> <mailto: >>>> dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>>>>>>>>>> For additional commands, e-mail: >>>>>>>> dev-h...@cassandra.apache.org <mailto:dev-h...@cassandra.apache.org> >> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>> >>>> --------------------------------------------------------------------- >>>>>>>>>>>>>>>>> To unsubscribe, e-mail: >> dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org> >>>> <mailto:dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>>>>>>>> For additional commands, e-mail: >>>> dev-h...@cassandra.apache.org <mailto:dev-h...@cassandra.apache.org> >> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>> >> --------------------------------------------------------------------- >>>>>>>>>>>>>>>> To unsubscribe, e-mail: >> dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org> >>>> <mailto:dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>>>>>>> For additional commands, e-mail: >>>> dev-h...@cassandra.apache.org <mailto:dev-h...@cassandra.apache.org> >> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>> >> --------------------------------------------------------------------- >>>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org >> <mailto:dev-unsubscr...@cassandra.apache.org> >>>> <mailto:dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>>>>>> For additional commands, e-mail: >> dev-h...@cassandra.apache.org <mailto:dev-h...@cassandra.apache.org> >>>> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>> >> --------------------------------------------------------------------- >>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org >> <mailto:dev-unsubscr...@cassandra.apache.org> >>>> <mailto:dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>>>>> For additional commands, e-mail: >> dev-h...@cassandra.apache.org <mailto:dev-h...@cassandra.apache.org> >>>> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>> Jon Haddad >>>>>>>>>>>>> >>>>>> >>>> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >> < >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >>> >>>> < >>>> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >> < >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >>> >>>>> >>>>>>>>>>>>> twitter: rustyrazorblade >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>> --------------------------------------------------------------------- >>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org >> <mailto:dev-unsubscr...@cassandra.apache.org> >>>> <mailto:dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org >> <mailto:dev-h...@cassandra.apache.org> >>>> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>> --------------------------------------------------------------------- >>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org >> <mailto:dev-unsubscr...@cassandra.apache.org> >>>> <mailto:dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>>>>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org >> <mailto:dev-h...@cassandra.apache.org> >>>> <mailto:dev-h...@cassandra.apache.org <mailto: >> dev-h...@cassandra.apache.org>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>> Jon Haddad >>>>>>>> >>>>>> >>>> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >> < >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >>> >>>> < >>>> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >> < >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.rustyrazorblade.com&d=DwIFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=Jad7nE1Oab1mebx31r7AOfSsa0by8th6tCxpykmmOBA&m=vuYFCiEg1Hk9RcozkHxMcCqfg4quy5zdS6jn4LoxIog&s=nIwl4l-6xszzYOOWiSHkxLYvgGVVdlf_izS5h1pfOck&e= >>> >>>>> >>>>>>>> twitter: rustyrazorblade >>>>>>>> >>>>>> >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org> <mailto: >>>> dev-unsubscr...@cassandra.apache.org <mailto: >> dev-unsubscr...@cassandra.apache.org>> >>>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org >> <mailto:dev-h...@cassandra.apache.org> <mailto: >>>> dev-h...@cassandra.apache.org <mailto:dev-h...@cassandra.apache.org>> >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org For additional commands, e-mail: dev-h...@cassandra.apache.org