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> 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>> > > 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> 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> > >> 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> > >>>> 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> > >> wrote: > >>>>>> > >>>>>> On Tue, Nov 20, 2018 at 5:02 PM Benedict Elliott Smith < > >>>>> 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> > >>>> 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 > > > >>>>>>> wrote: > >>>>>>>>> > >>>>>>>>> Sounds good to me. > >>>>>>>>> > >>>>>>>>> On Fri, Nov 16, 2018 at 5:09 AM Benedict Elliott Smith < > >>>>>>> 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> > >>>> 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> > >>>>> 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= > > > >> 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>::bigint*1.0::double > precision returns double > >>>>>>>>>>>>>> precision 2147483647 <tel:2147483647> > >>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647>::bigint*1.0 returns > numeric 2147483647.0 <tel:2147483647.0> > >>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647>::bigint*1.0::real > returns double > >>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647>::double > precision*1::bigint returns double > >>>>>>>>>> 2147483647 <tel:2147483647> > >>>>>>>>>>>>>> SELECT 2147483647 <tel:2147483647>::double > precision*1.0::bigint returns double > >>>>>>>>>> 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>> > >>>>>>>>>>>>>> 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>> > >>>>>>>>>>>>>>> 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 > >> > >>>>>>>>>>>>>>>> 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> > >>>>>>>>>>>>>>> For additional commands, e-mail: > >>>> 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> > >>>>>>>>>>>>> For additional commands, e-mail: > 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> > >>>>>>>>>>>> For additional commands, e-mail: > 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> > >>>>>>>>>>> For additional commands, e-mail: 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> > >>>>>>>>>> For additional commands, e-mail: 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= > > > >>>>>>>>> twitter: rustyrazorblade > >>>>>>>> > >>>>>>>> > >>>>>>>> > >> --------------------------------------------------------------------- > >>>>>>>> To unsubscribe, e-mail: 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> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > --------------------------------------------------------------------- > >>>>>>> To unsubscribe, e-mail: 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> > >>>>>>> > >>>>>>> > >>>>> > >>>>> -- > >>>> 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= > > > >>>> twitter: rustyrazorblade > >>>> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: 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> >