Also, we should be incorporating Heri's deep equal extensions going forward in this area! On Aug 19, 2015 3:09 PM, "Mike Carey" <[email protected]> wrote:
> This all sounds somewhat wrong to me! It's not what I remember from > design discussions of old... I don't think we should be doing byte by byte > comparison between disparate types. Why would users want or expect that? > Note that I'm talking about predicate cases - not internal needs like order > by or routing of data. > On Aug 19, 2015 11:47 AM, "Ildar Absalyamov" <[email protected]> > wrote: > >> @Steven >> Index rewrite will not fire in this case, because of type mismatch. Hence >> it will fallback to non-indexed query results. >> >> 2015-08-19 11:25 GMT-07:00 Taewoo Kim <[email protected]>: >> >> > @Steven: I never tried. However, it's worthwhile to check. If the query >> > semantic is correct, the optimizer will try to utilize the index >> regardless >> > of its type. My guess is, at the end, byte-by-byte comparison will >> occur. >> > >> > Best, >> > Taewoo >> > >> > On Wed, Aug 19, 2015 at 11:19 AM, Steven Jacobs <[email protected]> >> wrote: >> > >> > > I think this is because the serialized versions of the list have their >> > > lengths among the beginning bytes, so this would make sense, since we >> > don't >> > > have a comparator for lists. >> > > >> > > @Taewoo-What about the case of an index search? Is it okay to pass the >> > > wrong type to the search (which will obviously yield unknown results) >> > > >> > > Steven >> > > >> > > On Wed, Aug 19, 2015 at 11:12 AM, Wail Alkowaileet < >> [email protected]> >> > > wrote: >> > > >> > > > Actually I observed some strange behavior while comparing >> orderedLists >> > in >> > > > the order by clause. >> > > > >> > > > Input (dataset json): >> > > > { "a": 1i32, "b": [ 1, "hello" ] } >> > > > { "a": 2i32, "b": [ 1, "hello" ] } >> > > > { "a": 3i32, "b": [ 1, "hi" ] } >> > > > >> > > > Query: >> > > > for $x in dataset json >> > > > order by $x.b >> > > > return $x >> > > > >> > > > Result: >> > > > { "a": 3i32, "b": [ 1, "hi" ] } >> > > > { "a": 1i32, "b": [ 1, "hello" ] } >> > > > { "a": 2i32, "b": [ 1, "hello" ] } >> > > > >> > > > it seems the behavior is comparing by the length of the list not the >> > > values >> > > > themselves? is it expected? >> > > > >> > > > But if I do something like this: >> > > > for $x in dataset json >> > > > order by $x.b[1] >> > > > return $x >> > > > >> > > > Result: >> > > > { "a": 1i32, "b": [ 1, "hello" ] } >> > > > { "a": 2i32, "b": [ 1, "hello" ] } >> > > > { "a": 3i32, "b": [ 1, "hi" ] } >> > > > >> > > > >> > > > >> > > > On Wed, Aug 19, 2015 at 1:50 PM, Taewoo Kim <[email protected]> >> > wrote: >> > > > >> > > > > Sorry. The direction of inequality operator was misleading. >> STRING 13 >> > > is >> > > > > smaller than (<) POINT 20. >> > > > > >> > > > > Best, >> > > > > Taewoo >> > > > > >> > > > > On Wed, Aug 19, 2015 at 10:49 AM, Taewoo Kim <[email protected]> >> > > wrote: >> > > > > >> > > > > > Yes. Type conversion (casting) only happens among numeric types >> so >> > > far. >> > > > > > Actually, since there is a type-tag, if you try to compare two >> non >> > > > > numeric >> > > > > > types, it stops the comparing as soon as it sees the first byte >> > from >> > > > both >> > > > > > side since type-tag itself has the given order (e.g., STRING 13 >> > >> > > POINT >> > > > > > 20). This is required for ORDER BY, too. >> > > > > > >> > > > > > Best, >> > > > > > Taewoo >> > > > > > >> > > > > > On Wed, Aug 19, 2015 at 10:45 AM, Steven Jacobs < >> [email protected]> >> > > > > wrote: >> > > > > > >> > > > > >> I see, so we are technically allowed to compare anything to >> > > anything? >> > > > > >> >> > > > > >> Steven >> > > > > >> >> > > > > >> On Wed, Aug 19, 2015 at 10:37 AM, Taewoo Kim < >> [email protected]> >> > > > > wrote: >> > > > > >> >> > > > > >> > If there is no right comparator for the given types (STRING >> vs >> > > > POINT), >> > > > > >> then >> > > > > >> > it does the "byte by byte" comparison. >> > > > > >> > >> > > > > >> > Best, >> > > > > >> > Taewoo >> > > > > >> > >> > > > > >> > On Wed, Aug 19, 2015 at 10:32 AM, Steven Jacobs < >> > [email protected] >> > > > >> > > > > >> wrote: >> > > > > >> > >> > > > > >> > > This is currently working in master: >> > > > > >> > > >> > > > > >> > > create type CSXType as closed { >> > > > > >> > > id: int32, >> > > > > >> > > csxid: string >> > > > > >> > > } >> > > > > >> > > create dataset CSX(CSXType) primary key id; >> > > > > >> > > >> > > > > >> > > for $b in dataset('CSX') >> > > > > >> > > where $b.id > point("3,5") >> > > > > >> > > return $b; >> > > > > >> > > >> > > > > >> > > Is this supposed to be working? >> > > > > >> > > Steven >> > > > > >> > > >> > > > > >> > >> > > > > >> >> > > > > > >> > > > > > >> > > > > >> > > > >> > > > >> > > > >> > > > -- >> > > > >> > > > *Regards,* >> > > > Wail Alkowaileet >> > > > >> > > >> > >> >> >> >> -- >> Best regards, >> Ildar >> >
