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>> > >