QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
get_sql_type.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** https://www.qxorm.com/
4** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
5**
6** This file is part of the QxOrm library
7**
8** This software is provided 'as-is', without any express or implied
9** warranty. In no event will the authors be held liable for any
10** damages arising from the use of this software
11**
12** Commercial Usage
13** Licensees holding valid commercial QxOrm licenses may use this file in
14** accordance with the commercial license agreement provided with the
15** Software or, alternatively, in accordance with the terms contained in
16** a written agreement between you and Lionel Marty
17**
18** GNU General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU
20** General Public License version 3.0 as published by the Free Software
21** Foundation and appearing in the file 'license.gpl3.txt' included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU General Public License version 3.0 requirements will be
24** met : http://www.gnu.org/copyleft/gpl.html
25**
26** If you are unsure which license is appropriate for your use, or
27** if you have questions regarding the use of this file, please contact :
28** contact@qxorm.com
29**
30****************************************************************************/
31
32#ifndef _QX_GET_SQL_TYPE_H_
33#define _QX_GET_SQL_TYPE_H_
34
35#ifdef _MSC_VER
36#pragma once
37#endif
38
46#include <QtCore/qsharedpointer.h>
47
48#if (QT_VERSION >= QT_VERSION_CHECK(4, 6, 0))
49#include <QtCore/qscopedpointer.h>
50#endif // (QT_VERSION >= QT_VERSION_CHECK(4, 6, 0))
51
56
57#include <QxDao/QxDaoPointer.h>
58#include <QxDao/QxDateNeutral.h>
59#include <QxDao/QxTimeNeutral.h>
61
62#include <QxCommon/QxBool.h>
63
64namespace qx {
65namespace trait {
66namespace detail {
67
68template <typename T>
70{
71
72private:
73
75 typedef typename std::conditional< qx::trait::is_qx_registered<type_1>::value, typename qx::trait::get_primary_key<type_1>::type, type_1 >::type type_2;
76 typedef typename std::conditional< std::is_enum<type_2>::value, long, type_2 >::type type_3;
77
78public:
79
81
82};
83
84template <typename T>
86{ static inline const char * get() { return ""; } };
87
88/* Implemented into './src/QxRegister/QxClassX.cpp' file */
89QX_DLL_EXPORT const char * get_sql_type_by_class_name(const char * sClassName, const char * sDefaultValue);
90
91} // namespace detail
92
97template <typename T>
99{
101 static inline const char * get() { return (std::is_same<T, type_sql>::value ? qx::trait::detail::get_sql_type<type_sql>::get() : qx::trait::get_sql_type<type_sql>::get()); }
102};
103
104#ifdef _QX_ENABLE_BOOST
105
106template <typename T>
107struct get_sql_type< boost::optional<T> >
108{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
109
110template <typename T>
111struct get_sql_type< boost::scoped_ptr<T> >
112{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
113
114template <typename T>
115struct get_sql_type< boost::shared_ptr<T> >
116{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
117
118template <typename T>
119struct get_sql_type< boost::intrusive_ptr<T> >
120{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
121
122#endif // _QX_ENABLE_BOOST
123
124template <typename T>
125struct get_sql_type< QSharedPointer<T> >
126{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
127
128#if (QT_VERSION >= QT_VERSION_CHECK(4, 6, 0))
129template <typename T>
130struct get_sql_type< QScopedPointer<T> >
131{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
132#endif // (QT_VERSION >= QT_VERSION_CHECK(4, 6, 0))
133
134template <typename T>
135struct get_sql_type< std::unique_ptr<T> >
136{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
137
138template <typename T>
139struct get_sql_type< std::shared_ptr<T> >
140{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
141
142template <typename T>
144{ static inline const char * get() { return qx::trait::get_sql_type<T>::get(); } };
145
146template <typename T1, typename T2>
147struct get_sql_type< std::pair<T1, T2> >
148{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get())); return s.c_str(); } };
149
150#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
151template <typename T1, typename T2>
152struct get_sql_type< QPair<T1, T2> >
153{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get())); return s.c_str(); } };
154#endif // (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
155
156#ifdef _QX_ENABLE_BOOST
157
158template <typename T1, typename T2>
159struct get_sql_type< boost::tuple<T1, T2> >
160{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get())); return s.c_str(); } };
161
162template <typename T1, typename T2, typename T3>
163struct get_sql_type< boost::tuple<T1, T2, T3> >
164{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get())); return s.c_str(); } };
165
166template <typename T1, typename T2, typename T3, typename T4>
167struct get_sql_type< boost::tuple<T1, T2, T3, T4> >
168{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get())); return s.c_str(); } };
169
170template <typename T1, typename T2, typename T3, typename T4, typename T5>
171struct get_sql_type< boost::tuple<T1, T2, T3, T4, T5> >
172{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get())); return s.c_str(); } };
173
174template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
175struct get_sql_type< boost::tuple<T1, T2, T3, T4, T5, T6> >
176{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get())); return s.c_str(); } };
177
178template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
179struct get_sql_type< boost::tuple<T1, T2, T3, T4, T5, T6, T7> >
180{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get()) + "|" + std::string(qx::trait::get_sql_type<T7>::get())); return s.c_str(); } };
181
182template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
183struct get_sql_type< boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >
184{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get()) + "|" + std::string(qx::trait::get_sql_type<T7>::get()) + "|" + std::string(qx::trait::get_sql_type<T8>::get())); return s.c_str(); } };
185
186template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
187struct get_sql_type< boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> >
188{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get()) + "|" + std::string(qx::trait::get_sql_type<T7>::get()) + "|" + std::string(qx::trait::get_sql_type<T8>::get()) + "|" + std::string(qx::trait::get_sql_type<T9>::get())); return s.c_str(); } };
189
190#endif // _QX_ENABLE_BOOST
191
192template <typename T1, typename T2>
193struct get_sql_type< std::tuple<T1, T2> >
194{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get())); return s.c_str(); } };
195
196template <typename T1, typename T2, typename T3>
197struct get_sql_type< std::tuple<T1, T2, T3> >
198{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get())); return s.c_str(); } };
199
200template <typename T1, typename T2, typename T3, typename T4>
201struct get_sql_type< std::tuple<T1, T2, T3, T4> >
202{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get())); return s.c_str(); } };
203
204template <typename T1, typename T2, typename T3, typename T4, typename T5>
205struct get_sql_type< std::tuple<T1, T2, T3, T4, T5> >
206{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get())); return s.c_str(); } };
207
208template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
209struct get_sql_type< std::tuple<T1, T2, T3, T4, T5, T6> >
210{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get())); return s.c_str(); } };
211
212template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
213struct get_sql_type< std::tuple<T1, T2, T3, T4, T5, T6, T7> >
214{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get()) + "|" + std::string(qx::trait::get_sql_type<T7>::get())); return s.c_str(); } };
215
216template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
217struct get_sql_type< std::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >
218{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get()) + "|" + std::string(qx::trait::get_sql_type<T7>::get()) + "|" + std::string(qx::trait::get_sql_type<T8>::get())); return s.c_str(); } };
219
220template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
221struct get_sql_type< std::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> >
222{ static inline const char * get() { static std::string s; s = (std::string(qx::trait::get_sql_type<T1>::get()) + "|" + std::string(qx::trait::get_sql_type<T2>::get()) + "|" + std::string(qx::trait::get_sql_type<T3>::get()) + "|" + std::string(qx::trait::get_sql_type<T4>::get()) + "|" + std::string(qx::trait::get_sql_type<T5>::get()) + "|" + std::string(qx::trait::get_sql_type<T6>::get()) + "|" + std::string(qx::trait::get_sql_type<T7>::get()) + "|" + std::string(qx::trait::get_sql_type<T8>::get()) + "|" + std::string(qx::trait::get_sql_type<T9>::get())); return s.c_str(); } };
223
224} // namespace trait
225} // namespace qx
226
227#define QX_REGISTER_TRAIT_GET_SQL_TYPE(className, sqlType) \
228namespace qx { namespace trait { namespace detail { \
229template <> \
230struct get_sql_type< className > \
231{ static inline const char * get() { return get_sql_type_by_class_name(#className, sqlType); } }; }}}
232
233QX_REGISTER_TRAIT_GET_SQL_TYPE(bool, "SMALLINT")
235QX_REGISTER_TRAIT_GET_SQL_TYPE(char, "SMALLINT")
236QX_REGISTER_TRAIT_GET_SQL_TYPE(short, "SMALLINT")
237QX_REGISTER_TRAIT_GET_SQL_TYPE(int, "INTEGER")
238QX_REGISTER_TRAIT_GET_SQL_TYPE(long, "INTEGER")
239QX_REGISTER_TRAIT_GET_SQL_TYPE(long long, "INTEGER")
240QX_REGISTER_TRAIT_GET_SQL_TYPE(float, "FLOAT")
241QX_REGISTER_TRAIT_GET_SQL_TYPE(double, "FLOAT")
242QX_REGISTER_TRAIT_GET_SQL_TYPE(long double, "FLOAT")
243QX_REGISTER_TRAIT_GET_SQL_TYPE(unsigned short, "SMALLINT")
244QX_REGISTER_TRAIT_GET_SQL_TYPE(unsigned int, "INTEGER")
245QX_REGISTER_TRAIT_GET_SQL_TYPE(unsigned long, "INTEGER")
246QX_REGISTER_TRAIT_GET_SQL_TYPE(unsigned long long, "INTEGER")
247QX_REGISTER_TRAIT_GET_SQL_TYPE(std::string, "TEXT")
248QX_REGISTER_TRAIT_GET_SQL_TYPE(std::wstring, "TEXT")
249QX_REGISTER_TRAIT_GET_SQL_TYPE(QString, "TEXT")
250QX_REGISTER_TRAIT_GET_SQL_TYPE(QVariant, "TEXT")
254QX_REGISTER_TRAIT_GET_SQL_TYPE(QDateTime, "TIMESTAMP")
255QX_REGISTER_TRAIT_GET_SQL_TYPE(QByteArray, "BLOB")
256QX_REGISTER_TRAIT_GET_SQL_TYPE(qx::QxDateNeutral, "TEXT")
257QX_REGISTER_TRAIT_GET_SQL_TYPE(qx::QxTimeNeutral, "TEXT")
258QX_REGISTER_TRAIT_GET_SQL_TYPE(qx::QxDateTimeNeutral, "TEXT")
259
260#endif // _QX_GET_SQL_TYPE_H_
qx_bool : QxOrm library boolean type with code and description message when an error occured
qx::dao::ptr<T> : provide a classic smart-pointer (like boost::shared_ptr<T> or QSharedPointer<T>) wi...
Helper class to store a date value into database under neutral format (YYYYMMDD) => cross database co...
Helper class to store a date-time value into database under neutral format (YYYYMMDDHHMMSS) => cross ...
#define QX_DLL_EXPORT
Definition QxMacro.h:182
Helper class to store a time value into database under neutral format (HHMMSS) => cross database comp...
qx_bool : boolean type with code and description message when an error occured
Definition QxBool.h:71
qx::dao::ptr<T> : provide a classic smart-pointer (like boost::shared_ptr<T> or QSharedPointer<T>) wi...
Register all primitive and useful types of stl, boost and Qt libraries using QX_REGISTER_CLASS_NAME(T...
qx::trait::get_primary_key<T>::type : return primary key type of T, by default primary key is long ty...
#define QX_REGISTER_TRAIT_GET_SQL_TYPE(className, sqlType)
qx::trait::is_qx_registered<T>::value : return true if T is registered into QxOrm context to provide ...
QX_DLL_EXPORT const char * get_sql_type_by_class_name(const char *sClassName, const char *sDefaultValue)
Root namespace for all QxOrm library features.
qx::trait::remove_attr<T>::type : return a type without pointer, const, reference and/or volatile att...
qx::trait::detail::get_sql_type_helper< T >::type_3 type
std::conditional< qx::trait::is_qx_registered< type_1 >::value, typenameqx::trait::get_primary_key< type_1 >::type, type_1 >::type type_2
std::conditional< std::is_enum< type_2 >::value, long, type_2 >::type type_3
qx::trait::remove_attr< T >::type type_1
static const char * get()
qx::trait::get_sql_type<T>::get() : return type name under const char * format used by database engin...
static const char * get()
qx::trait::detail::get_sql_type_helper< T >::type type_sql