21 #include "MysqlCursor.h"
22 #include "MysqlConnection.h"
23 #include "MysqlConnection_p.h"
26 #include "KDbRecordData.h"
35 , d(new MysqlCursorData(conn))
41 , d(new MysqlCursorData(conn))
45 MysqlCursor::~MysqlCursor()
53 if (mysql_real_query(d->mysql, sql.constData(), sql.length()) == 0) {
54 if (mysql_errno(d->mysql) == 0) {
57 d->mysqlres = mysql_store_result(d->mysql);
58 m_fieldCount = mysql_num_fields(d->mysqlres);
59 m_fieldsToStoreInRecord = m_fieldCount;
60 d->numRows = mysql_num_rows(d->mysqlres);
62 m_records_in_buf = d->numRows;
63 m_buffering_completed =
true;
72 bool MysqlCursor::drv_close()
74 mysql_free_result(d->mysqlres);
75 d->mysqlres =
nullptr;
76 d->mysqlrow =
nullptr;
82 void MysqlCursor::drv_getNextRecord()
84 if (at() >= d->numRows) {
85 m_fetchResult = FetchResult::End;
90 m_fetchResult = FetchResult::End;
93 d->lengths = mysql_fetch_lengths(d->mysqlres);
94 m_fetchResult = FetchResult::Ok;
101 if (!d->mysqlrow || pos >= m_fieldCount || d->mysqlrow[pos] ==
nullptr)
104 KDbField *f = (m_visibleFieldsExpanded && pos < m_visibleFieldsExpanded->count())
105 ? m_visibleFieldsExpanded->at(pos)->field() :
nullptr;
111 &ok, d->lengths[pos]);
117 bool MysqlCursor::drv_storeCurrentRecord(
KDbRecordData* data)
const
123 if (!m_visibleFieldsExpanded) {
124 for (
int i = 0; i < m_fieldCount; ++i) {
129 for (
int i = 0; i < m_fieldCount; ++i) {
130 KDbField *f = m_visibleFieldsExpanded->at(i)->field();
141 void MysqlCursor::drv_appendCurrentRecordToBuffer()
146 void MysqlCursor::drv_bufferMovePointerNext()
148 d->mysqlrow = mysql_fetch_row(d->mysqlres);
149 d->lengths = mysql_fetch_lengths(d->mysqlres);
152 void MysqlCursor::drv_bufferMovePointerPrev()
154 mysql_data_seek(d->mysqlres, m_at - 1);
155 d->mysqlrow = mysql_fetch_row(d->mysqlres);
156 d->lengths = mysql_fetch_lengths(d->mysqlres);
160 void MysqlCursor::drv_bufferMovePointerTo(qint64 to)
162 mysql_data_seek(d->mysqlres, to);
163 d->mysqlrow = mysql_fetch_row(d->mysqlres);
164 d->lengths = mysql_fetch_lengths(d->mysqlres);
167 const char** MysqlCursor::recordData()
const
173 QString MysqlCursor::serverResultName()
const
175 return MysqlConnectionInternal::serverResultName(d->mysql);
178 void MysqlCursor::storeResult()
180 d->storeResult(&m_result);