Mark, I hope you never release a Jaybird version that converts named
regions to offsets in Java, because if you do you misunderstood the thing
completely and Jaybird users will need to have a very wrong behavior
forever.


Adriano

Em qui, 5 de mar de 2020 11:50, Mark Rotteveel <m...@lawinegevaar.nl>
escreveu:

> On 2020-03-05 11:48, Alex Peshkoff via Firebird-devel wrote:
> > On 2020-03-04 20:35, Mark Rotteveel wrote:
> >> On 04-03-2020 18:16, Alex Peshkoff via Firebird-devel wrote:
> >>> No. Use of them is very restricted - the _ONLY_ place where they can
> >>> be used in SQL is SET BIND statement.
> >>
> >> I had missed that, but why not just always put those two bytes in the
> >> WITH TIME ZONE data?
> >
> > Yes, we thought about such way. Main reason not to go that way for me
> > was that Adriano was strongly against that and I did not want to
> > continue that discussion.
>
> And yet, here we are, discussing this.
>
> > Other reasons is that this "extended" slution is sooner of all
> > temporal. ICU becomes a natural part of all OSes (for posix that
> > already hapepned a few years ago, new windows also contains ICU). I.e.
> > long term everything will work just fine by default with std type. But
> > we need something working today (hard to imagine a noise @sql.ru when
> > people noticed that they receive GMT-time using fb4), therefore such
> > temporal extension.
>
> > But due to it's temporal nature always adding 2 more bytes may really
> > appear wrong, is not it?
>
> I see general benefits of communicating the actual offset always, see
> also below. And I don't think it is a good idea to add a new datatype
> which can have meaningful uses, only to remove it again at a later time.
> That will surely break applications or libraries that would rely on that
> datatype. Right now (bit of hyperbole), it sounds like this solution was
> only written to solve the display problem in ISQL, and considering this
> as a temporary solution, is too much as if Firebird and its wire
> protocol are only consumed by ISQL.
>
> >> Why introduce an extra datatype, when you could also do it always for
> >> this new data type (the WITH TIME ZONE types have 2 bytes of padding
> >> anyway).
> >
> > That's also not completely true. If you use gpre - yes, that's
> > correct. But in SQL message format each field is always followed by
> > NULL indicator which is exactly 2 bytes and ideally fits after WITH
> > TIME ZONE data.
>
>  From a wire protocol perspective, the NULL indicator is written
> separately from the data, after the padded buffer of the datatype, and
> that is only in the v12 and earlier protocol. The v13+ protocol writes a
> null bitvector instead and doesn't write a null indicator, so it doesn't
> fit after the WITH TIME ZONE data, which means it is padded anyway.
> But I forgot that in the wire protocol, the 2 bytes with the zone
> information is actually written out as 4 bytes, so the padding isn't
> actually relevant, and this would then be more of discussion if we
> encode the information in a way that yields 4 bytes extra in the wire
> protocol, or would share the same 4 bytes in the wire protocol. The
> 'original' time zone types are 8/12 bytes, and the 'extended' time zone
> type is now 12/16 bytes in the wire protocol, while given the actual
> data size, both could be 8/12 bytes.
>
>
> I see a general benefit of always including the offset (or including the
> offset for named zones). For example, drivers or users who don't want to
> (or cannot) implement named zone support can correctly read values with
> named zones with the actual offset. I can think of quite a bit of code
> in Jaybird I can throw away by using those last 2 bytes for the offset
> and relying on Firebird to determine the offset. I could set the bind on
> connect, but having the BIND configurable after connect means that a
> user can change it, which would require the driver to either support
> named zones, or just fallback to UTC. And if this datatype is intended
> as a temporary, transitional, measure, then it means that I can't rely
> on it, as it means it is essentially without value to invest time to
> support it.
>
> To be honest, if the main argument for this is the display problem in
> ISQL, then I think we can just as well do without this type, and the
> users of ISQL should just learn to live with the fallback behaviour to
> render in GMT (or UTC) if ICU is not available.
>
> In short, I don't see why this should be a separate type. Unifying it in
> a single type reduces complexity(*), which makes things simpler.
>
> *: Though having 2x 2 bytes (or 2x 4 bytes in the current wire protocol)
> with an offset is a bit confusing, but that also applies to the current
> EXTENDED time zone types.
> For example, it isn't entirely clear to me yet how those last two bytes
> are handled in client-to-server communication, do they need to be set to
> a meaningful value or for example set to 0xFFFF, or will those bytes
> just be ignored?
>
> Mark
>
>
> Firebird-Devel mailing list, web interface at
> https://lists.sourceforge.net/lists/listinfo/firebird-devel
>
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to