aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-01-14 09:43:38 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-14 09:43:38 +0200
commit5074a7ffdcae708ebd534fa7eaeb228813694a7c (patch)
tree73ad5c12b4562683d2d292b515c035a9dab5923c
parentfff95e7274ecee374f7471866d1587298d168d6e (diff)
Date-time part of Qt profile implementation for SQL Server
-rw-r--r--odb/qt/date-time-mssql.options15
-rw-r--r--odb/qt/date-time/mssql/default-mapping.hxx33
-rw-r--r--odb/qt/date-time/mssql/qdate-time-traits.hxx92
-rw-r--r--odb/qt/date-time/mssql/qdate-traits.hxx63
-rw-r--r--odb/qt/date-time/mssql/qtime-traits.hxx80
5 files changed, 283 insertions, 0 deletions
diff --git a/odb/qt/date-time-mssql.options b/odb/qt/date-time-mssql.options
new file mode 100644
index 0000000..d5a5e8e
--- /dev/null
+++ b/odb/qt/date-time-mssql.options
@@ -0,0 +1,15 @@
+# file : odb/qt/date-time-mssql.options
+# author : Constantin Michael <constantin@codesynthesis.com>
+# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+# license : GNU GPL v2; see accompanying LICENSE file
+
+--profile qt/version
+
+# Include the default mapping in prologue instead of epilogue to
+# allow the user to override the default mapping.
+#
+--odb-prologue '#include <odb/qt/date-time/mssql/default-mapping.hxx>'
+
+--hxx-prologue '#include <odb/qt/date-time/mssql/qdate-traits.hxx>'
+--hxx-prologue '#include <odb/qt/date-time/mssql/qtime-traits.hxx>'
+--hxx-prologue '#include <odb/qt/date-time/mssql/qdate-time-traits.hxx>'
diff --git a/odb/qt/date-time/mssql/default-mapping.hxx b/odb/qt/date-time/mssql/default-mapping.hxx
new file mode 100644
index 0000000..d51bb05
--- /dev/null
+++ b/odb/qt/date-time/mssql/default-mapping.hxx
@@ -0,0 +1,33 @@
+// file : odb/qt/date-time/mssql/default-mapping.hxx
+// author : Constantin Michael <constantin@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef ODB_QT_DATE_TIME_MSSQL_DEFAULT_MAPPING_HXX
+#define ODB_QT_DATE_TIME_MSSQL_DEFAULT_MAPPING_HXX
+
+#include <QtCore/QDate>
+#include <QtCore/QTime>
+#include <QtCore/QDateTime>
+
+// By default map QDate to SQL Server DATE (available only since SQL
+// Server 2008). QDate provides a null representation so allow NULL
+// values by default.
+//
+#pragma db value(QDate) type("DATE") null
+
+// By default map QTime to SQL Server TIME(3) (available only since SQL
+// Server 2008). QTime can only represent clock times with a maximum
+// precision of milliseconds. QTime provides a null representation so
+// allow NULL values by default.
+//
+#pragma db value(QTime) type("TIME(3)") null
+
+// By default map QDateTime to SQL Server DATETIME2(3) (available only
+// since SQL Server 2008). QDateTime can only represent clock times with
+// a maximum precision of milliseconds. QDateTime provides a null
+// representation so allow NULL values by default.
+//
+#pragma db value(QDateTime) type("DATETIME2(3)") null
+
+#endif // ODB_QT_DATE_TIME_MSSQL_DEFAULT_MAPPING_HXX
diff --git a/odb/qt/date-time/mssql/qdate-time-traits.hxx b/odb/qt/date-time/mssql/qdate-time-traits.hxx
new file mode 100644
index 0000000..afe821e
--- /dev/null
+++ b/odb/qt/date-time/mssql/qdate-time-traits.hxx
@@ -0,0 +1,92 @@
+// file : odb/qt/date-time/mssql/qdate-time-traits.hxx
+// author : Constantin Michael <constantin@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef ODB_QT_DATE_TIME_MSSQL_QDATETIME_TRAITS_HXX
+#define ODB_QT_DATE_TIME_MSSQL_QDATETIME_TRAITS_HXX
+
+#include <odb/pre.hxx>
+
+#include <QtCore/QDateTime>
+
+#include <odb/mssql/traits.hxx>
+
+namespace odb
+{
+ namespace mssql
+ {
+ template <>
+ struct default_value_traits<QDateTime, id_datetime>
+ {
+ typedef QDateTime value_type;
+ typedef QDateTime query_type;
+ typedef datetime image_type;
+
+ static void
+ set_value (QDateTime& v, const datetime& i, bool is_null)
+ {
+ if (is_null)
+ // Default constructor creates a null QDateTime.
+ //
+ v = QDateTime ();
+ else
+ v = QDateTime (QDate (i.year,
+ i.month,
+ i.day),
+ QTime (i.hour,
+ i.minute,
+ i.second,
+ static_cast<int> (i.fraction / 1000000)));
+ }
+
+ static void
+ set_image (datetime& i,
+ unsigned short s,
+ bool& is_null,
+ const QDateTime& v)
+ {
+ if (v.isNull ())
+ is_null = true;
+ else
+ {
+ is_null = false;
+
+ const QDate& d (v.date ());
+ const QTime& t (v.time ());
+
+ is_null = false;
+ i.year = static_cast<SQLSMALLINT> (d.year ());
+ i.month = static_cast<SQLUSMALLINT> (d.month ());
+ i.day = static_cast<SQLUSMALLINT> (d.day ());
+ i.hour = static_cast<SQLUSMALLINT> (t.hour ());
+ i.minute = static_cast<SQLUSMALLINT> (t.minute ());
+ i.second = static_cast<SQLUSMALLINT> (t.second ());
+
+ const unsigned int divider[8] =
+ {
+ 1000000000,
+ 100000000,
+ 10000000,
+ 1000000,
+ 100000,
+ 10000,
+ 1000,
+ 100
+ };
+
+ unsigned int ns (static_cast<unsigned int> (t.msec ()) * 1000000);
+ i.fraction = static_cast<SQLUINTEGER> (ns - ns % divider[s]);
+ }
+ }
+ };
+
+ template <>
+ struct default_type_traits<QDateTime>
+ {
+ static const database_type_id db_type_od = id_datetime;
+ };
+ }
+}
+
+#endif // ODB_QT_DATE_TIME_MSSQL_QDATETIME_TRAITS_HXX
diff --git a/odb/qt/date-time/mssql/qdate-traits.hxx b/odb/qt/date-time/mssql/qdate-traits.hxx
new file mode 100644
index 0000000..52fed5f
--- /dev/null
+++ b/odb/qt/date-time/mssql/qdate-traits.hxx
@@ -0,0 +1,63 @@
+// file : odb/qt/date-time/mssql/qdate-traits.hxx
+// author : Constantin Michael <constantin@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef ODB_QT_DATE_TIME_MSSQL_QDATE_TRAITS_HXX
+#define ODB_QT_DATE_TIME_MSSQL_QDATE_TRAITS_HXX
+
+#include <odb/pre.hxx>
+
+#include <QtCore/QDate>
+
+#include <odb/mssql/traits.hxx>
+
+#include <odb/qt/date-time/exceptions.hxx>
+
+namespace odb
+{
+ namespace mssql
+ {
+ template <>
+ struct default_value_traits<QDate, id_date>
+ {
+ typedef QDate value_type;
+ typedef QDate query_type;
+ typedef date image_type;
+
+ static void
+ set_value (QDate& v, const date& i, bool is_null)
+ {
+ if (is_null)
+ // A null QDate value is equivalent to an invalid QDate value.
+ // Set v to an invalid date to represent null.
+ //
+ v.setDate (0, 0, 0);
+ else
+ v.setDate (i.year, i.month, i.day);
+ }
+
+ static void
+ set_image (date& i, bool& is_null, const QDate& v)
+ {
+ if (v.isNull ())
+ is_null = true;
+ else
+ {
+ is_null = false;
+ i.year = static_cast<SQLSMALLINT> (v.year ());
+ i.month = static_cast<SQLUSMALLINT> (v.month ());
+ i.day = static_cast<SQLUSMALLINT> (v.day ());
+ }
+ }
+ };
+
+ template <>
+ struct default_type_traits<QDate>
+ {
+ static const database_type_id db_type_id = id_date;
+ };
+ }
+}
+
+#endif // ODB_QT_DATE_TIME_MSSQL_QDATE_TRAITS_HXX
diff --git a/odb/qt/date-time/mssql/qtime-traits.hxx b/odb/qt/date-time/mssql/qtime-traits.hxx
new file mode 100644
index 0000000..4bd022f
--- /dev/null
+++ b/odb/qt/date-time/mssql/qtime-traits.hxx
@@ -0,0 +1,80 @@
+// file : odb/qt/date-time/mssql/qtime-traits.hxx
+// author : Constantin Michael <constantin@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef ODB_QT_DATE_TIME_MSSQL_QTIME_TRAITS_HXX
+#define ODB_QT_DATE_TIME_MSSQL_QTIME_TRAITS_HXX
+
+#include <odb/pre.hxx>
+
+#include <QtCore/QTime>
+
+#include <odb/mssql/traits.hxx>
+
+namespace odb
+{
+ namespace mssql
+ {
+ template <>
+ struct default_value_traits<QTime, id_time>
+ {
+ typedef QTime value_type;
+ typedef QTime query_type;
+ typedef time image_type;
+
+ static void
+ set_value (QTime& v, const time& i, bool is_null)
+ {
+ if (is_null)
+ // A null QTime value is equivalent to an invalid QTime value.
+ // Set v to an invalid time to represent null (hour value of
+ // a valid time must be in the range 0-23).
+ //
+ v.setHMS (24, 0, 0);
+ else
+ v.setHMS (i.hour,
+ i.minute,
+ i.second,
+ static_cast<int> (i.fraction / 1000000));
+ }
+
+ static void
+ set_image (time& i, unsigned short s, bool& is_null, const QTime& v)
+ {
+ if (v.isNull ())
+ is_null = true;
+ else
+ {
+ is_null = false;
+ i.hour = static_cast<SQLUSMALLINT> (v.hour ());
+ i.minute = static_cast<SQLUSMALLINT> (v.minute ());
+ i.second = static_cast<SQLUSMALLINT> (v.second ());
+
+ const unsigned int divider[8] =
+ {
+ 1000000000,
+ 100000000,
+ 10000000,
+ 1000000,
+ 100000,
+ 10000,
+ 1000,
+ 100
+ };
+
+ unsigned int ns (static_cast<unsigned int> (v.msec ()) * 1000000);
+ i.fraction = static_cast<SQLUINTEGER> (ns - ns % divider[s]);
+ }
+ }
+ };
+
+ template <>
+ struct default_type_traits<QTime>
+ {
+ static const database_type_id db_type_id = id_time;
+ };
+ }
+}
+
+#endif // ODB_QT_DATE_TIME_MSSQL_QTIME_TRAITS_HXX