Transform to CMake project.
This commit is contained in:
119
LSQResultSet.h
Normal file
119
LSQResultSet.h
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* File: LSQResultSet.h
|
||||
* Author: SET - nmset@yandex.com
|
||||
* License : LGPL version 2.1
|
||||
* Copyright SET, M. D. - © 2014
|
||||
*
|
||||
* Created on 1 juin 2014, 11:42
|
||||
*/
|
||||
#ifdef USE_LIBSQ
|
||||
#ifndef LSQRESULTSET_H
|
||||
#define LSQRESULTSET_H
|
||||
|
||||
#include "LResultSet.h"
|
||||
#include <sqlite3.h>
|
||||
#include "LSQresult.h"
|
||||
/**
|
||||
* SQLite namespace.
|
||||
*
|
||||
* Please note USE_LIBSQ pre-processor directive must be defined to include the SQLite backend.
|
||||
*/
|
||||
namespace SQ
|
||||
{
|
||||
#define RSSQMC wxString(_T("RSSQM"))
|
||||
#define RSSQ000C wxString(_T("RS000"))
|
||||
#define RSSQ000M wxString(_("Result set is NULL."))
|
||||
#define RSSQ001C wxString(_T("RS001"))
|
||||
#define RSSQ001M wxString(_("Insert started\nPlease SAVE or CANCEL first"))
|
||||
#define RSSQ002C wxString(_T("RS002"))
|
||||
#define RSSQ002M wxString(_("Unknown error"))
|
||||
#define RSSQ003C wxString(_T("RS003"))
|
||||
#define RSSQ003M wxString(_("Data altered\nPlease SAVE or CANCEL first"))
|
||||
#define RSSQ004C wxString(_T("RS004"))
|
||||
#define RSSQ004M wxString(_("Invalid column name :\n"))
|
||||
|
||||
/**
|
||||
* Scrollable resultset for the SQLite backend.
|
||||
*
|
||||
* This class allows data modification through GUI elements.
|
||||
* The underlying SQL query must not contain table aliases.
|
||||
*
|
||||
* A column alias must still be a real column name of the table specified in SetTableName.
|
||||
*
|
||||
* Ex : SELECT tbl1.pk1, tbl1.text1, list2.text2 AS num1 FROM tbl1 LEFT JOIN list2 ON tbl1.num1 = list2.pk2
|
||||
*/
|
||||
class LSQResultSet : public LResultSet
|
||||
{
|
||||
public:
|
||||
LSQResultSet();
|
||||
LSQResultSet(LConnection * newConnection);
|
||||
virtual ~LSQResultSet();
|
||||
/**
|
||||
* Updates and runs the SQL string.
|
||||
* @param newSql
|
||||
* @return
|
||||
*/
|
||||
bool SetSQL(const wxString& newSql);
|
||||
bool HasData() const;
|
||||
bool Absolute(const unsigned int newRowIndex);
|
||||
bool IsFirst() const;
|
||||
bool IsLast() const;
|
||||
bool First();
|
||||
bool Next();
|
||||
bool Previous();
|
||||
bool Last();
|
||||
const unsigned int GetRowCount() const;
|
||||
const unsigned int GetColumnCount() const;
|
||||
const wxString GetColumnName(const unsigned int colIndex) const;
|
||||
const int GetColumnIndex(const wxString& colName) const;
|
||||
const wxAny GetData(const unsigned int rowIdx, const unsigned int colIdx) const;
|
||||
/**
|
||||
* At current row.
|
||||
* @param colName
|
||||
* @return database table value or wxEmptyString.
|
||||
*/
|
||||
const wxAny GetData(const wxString& colName) const;
|
||||
/**
|
||||
* Updates registered controls on screen.
|
||||
*/
|
||||
void Display();
|
||||
bool Save();
|
||||
|
||||
inline void InformInserting() const
|
||||
{
|
||||
InformLibMessage(LInformation(RSSQ001C, RSSQ001M));
|
||||
}
|
||||
|
||||
inline void InformDirty() const
|
||||
{
|
||||
InformLibMessage(LInformation(RSSQ003C, RSSQ003M));
|
||||
};
|
||||
|
||||
/**
|
||||
* Replaces a single quote ' by two single quotes '' .
|
||||
* @param literal
|
||||
* @return the number of single quotes replaced
|
||||
*/
|
||||
static int EscapeChar(wxString& literal)
|
||||
{
|
||||
return literal.Replace(_T("'"), _T("''"));
|
||||
}
|
||||
|
||||
private:
|
||||
bool RunSQL();
|
||||
const wxString MakeUpdateSQL() const;
|
||||
const wxString MakeDeleteSQL() const;
|
||||
/**
|
||||
* Locates a row by the primary key value and returns its index.
|
||||
* @param pkValue
|
||||
* @return row index or -1 if not found.
|
||||
*/
|
||||
const int GetRowByPKValue(const wxAny& pkValue) const;
|
||||
|
||||
wxArrayString m_colNames;
|
||||
bool RetrieveColNames(SQresult * emptyResult);
|
||||
};
|
||||
|
||||
}
|
||||
#endif /* LSQRESULTSET_H */
|
||||
#endif
|
||||
Reference in New Issue
Block a user