1 #ifndef TIANCHI_TCDATAACCESS_H
2 #define TIANCHI_TCDATAACCESS_H
4 #include <tianchi/tcglobal.h>
7 #include <QLatin1String>
11 #include <QSqlDatabase>
12 #include <QVariantMap>
13 #include <QStringList>
14 #include <QVariantList>
26 const QString &fields = QString(
"*"));
41 const QVariantList &bind = QVariantList());
45 const QVariantList &bind = QVariantList());
49 const QVariantList &bind = QVariantList());
64 QString toString()
const;
67 QString whereString()
const;
70 QVariantList whereBind()
const;
73 QVariantList bind()
const;
79 QStringList _leftJoin;
85 QVariantList _leftJoinBind;
86 QVariantList _whereBind;
108 = QLatin1String(QSqlDatabase::defaultConnection));
113 static AttrCase attrCase() {
return _attrCase;}
115 static AttrTrim attrTrim() {
return _attrTrim;}
117 static void setAttrCase(AttrCase attrCase){_attrCase = attrCase;}
119 static void setAttrTrim(AttrTrim attrTrim){_attrTrim = attrTrim;}
123 = QLatin1String(QSqlDatabase::defaultConnection));
126 QString connectionName()
const {
return _db->connectionName();}
129 QSqlQuery sqlQuery()
const {
return QSqlQuery(*_db);}
131 QSqlDatabase sqlDatabase()
const {
return *_db;}
134 QList<QVariantMap> fetchAll(
const QString &sql,
135 const QVariantList &bind = QVariantList());
137 const QVariantList &bind = QVariantList());
141 QList<QVariantList> fetchAllList(
const QString &sql,
142 const QVariantList &bind = QVariantList());
144 const QVariantList &bind = QVariantList());
148 QVariantMap fetchRow(
const QString &sql,
149 const QVariantList &bind = QVariantList());
151 const QVariantList &bind = QVariantList());
155 QVariantList fetchCol(
const QString &sql,
156 const QVariantList &bind = QVariantList());
158 const QVariantList &bind = QVariantList());
161 QVariant fetchOne(
const QString &sql,
162 const QVariantList &bind = QVariantList());
164 const QVariantList &bind = QVariantList());
167 template <
typename T> QMap<T, QVariant> fetchPairs(
169 const QVariantList &bind = QVariantList())
171 _prepareExec(sql, bind);
173 QMap<T,QVariant> rows;
174 while (_query->next())
176 rows[qvariant_cast<T>(_trim(_query->value(0)))] =
177 _trim(_query->value(1));
182 template <
typename T> QMap<T, QVariant> fetchPairs(
184 const QVariantList &bind = QVariantList())
186 return fetchPairs<T>(stat.toString(),
187 QVariantList() << stat.bind() << bind);
191 template <
typename T> QMap<T, QVariantMap> fetchAssoc(
193 const QVariantList &bind = QVariantList())
195 _prepareExec(sql, bind);
197 QMap<T,QVariantMap> rows;
200 while (_query->next())
202 QSqlRecord rec = _query->record();
203 for (
int i = rec.count() - 1; i > -1; i--)
205 row[_case(rec.fieldName(i))] = _trim(rec.value(i));
207 rows[qvariant_cast<T>(_trim(rec.value(0)))] = row;
213 template <
typename T> QMap<T, QVariantMap> fetchAssoc(
215 const QVariantList &bind = QVariantList())
217 return fetchAssoc<T>(stat.toString(),
218 QVariantList() << stat.bind() << bind);
223 QString limitPage(
const QString &sql,
int page,
int rowCount)
const;
224 QString limit(
const QString &sql,
int count,
int offset = 0)
const;
227 QVariant lastInsertId(
const QString &table = QString(),
228 const QString &primaryKey = QString())
const;
230 QSqlError lastError()
const;
233 int doDelete(
const QString &table,
234 const QString &where = QString(),
235 const QVariantList &bind = QVariantList());
239 int doUpdate(
const QString &table,
const QVariantMap &field,
240 const QString &where = QString(),
241 const QVariantList &bind = QVariantList());
244 int doInsert(
const QString &table,
const QVariantMap &field);
248 QVariant _trim(
const QVariant &val);
249 QString _case(
const QString &field);
251 static AttrCase _attrCase;
252 static AttrTrim _attrTrim;
255 void _prepareExec(
const QString &sql,
const QVariantList &bind);