qt5base-lts/tests/auto/sql/kernel
Julien Blanc 190f64aab3 Added timezone support for datetime fields in PSQL
This patch adds correct timezone support in PSQL plugin. Prior to this
patch, no timezone support was provided, so only the following case
worked :
 * using local time in both client application and postgresql server
 * datetime were using second precision

This patch tries to take care that postgresql has two different
datatypes for date time, respectively :
 * timestamp with time zone
 * timestamp without time zone

Both are internally stored as UTC values, but are not parsed the same.
 * timestamp with time zone assumes that there is a time zone
   information and will parse date time accordingly, and then, convert
   into UTC before storing them
 * timestamp without time zone assumes that there is no time zone
   information and will silently ignore any, unless the datetime is
   explicitly specified as having a time zone, in case it will convert
   it into UTC before storing it

Both are retrieved as local time values, with the following difference
 * timestamp with time zone includes the timezone information
   (2014-02-12 10:20:12+0100 for example)
 * timestamp without time zone does not include it

The patch does the following :
 * parse the date retrieved by postgresql server using QDateTime
   functions, which work correctly
 * always convert the date to UTC before giving it to postgresql
 * force time zone so that timezone information is taken into account
   by postgresql
 * also adds the milliseconds when storing QDateTime values

The following configurations are tested to work :
 * client and server using same timezone, timestamp with or without tz
 * client and server using different timezone, timestamp with tz

The following configuration will *not* work :
 * client and server using different timezones, timestamp without tz

Because data will be converted to local time by the postgresql server,
so when returned it will be different from what had been serialized.
Prior to this patch, it gave the illusion to work because since TZ
information was lost, time was stored as local time from postgresql.
Lots of inconsistencies occurred, though, in case client tz changes...

I don't expect this to be an issue since having different TZ in server
and client and *not* handling this is a broken setup anyway.

Almost based on changes proposed by julien.blanc@nmc-company.fr

[ChangeLog][QtSql] Added timezone support for datetime fields in PSQL

Task-number: QTBUG-36211
Change-Id: I5650a5ef60cb3f14f0ab619825612831c7e90c12
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
2014-12-30 23:49:14 +01:00
..
qsql Update license headers and add new license files 2014-09-24 12:26:19 +02:00
qsqldatabase Added timezone support for datetime fields in PSQL 2014-12-30 23:49:14 +01:00
qsqldriver Adjust DBMSType to DbmsType to follow conventions 2014-11-26 10:47:32 +01:00
qsqlerror Update license headers and add new license files 2014-09-24 12:26:19 +02:00
qsqlfield Update license headers and add new license files 2014-09-24 12:26:19 +02:00
qsqlquery Added timezone support for datetime fields in PSQL 2014-12-30 23:49:14 +01:00
qsqlrecord Update license headers and add new license files 2014-09-24 12:26:19 +02:00
qsqlresult Expose QSqlDriverPrivate dbmsType in public QSqlDriver api 2014-09-24 14:44:49 +02:00
qsqlthread Update license headers and add new license files 2014-09-24 12:26:19 +02:00
kernel.pro SQL: Change in QSqlResultPrivate::positionalToNamedBinding() 2012-12-10 21:23:35 +01:00