dvander@1203: /** dvander@1203: * vim: set ts=4 : dvander@1203: * =============================================================== dvander@1203: * SourceMod SQLite Driver Extension dvander@1203: * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. dvander@1203: * =============================================================== dvander@1203: * dvander@1203: * This program is free software; you can redistribute it and/or dvander@1203: * modify it under the terms of the GNU General Public License dvander@1203: * as published by the Free Software Foundation; either version 2 dvander@1203: * of the License, or (at your option) any later version. dvander@1203: * This program is distributed in the hope that it will be useful, dvander@1203: * but WITHOUT ANY WARRANTY; without even the implied warranty of dvander@1203: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dvander@1203: * GNU General Public License for more details. dvander@1203: * dvander@1203: * You should have received a copy of the GNU General Public License dvander@1203: * along with this program; if not, write to the Free Software dvander@1203: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. dvander@1203: * dvander@1203: * Version: $Id$ dvander@1203: */ dvander@1203: dvander@1203: #ifndef _INCLUDE_SQLITE_SOURCEMOD_RESULT_SET_H_ dvander@1203: #define _INCLUDE_SQLITE_SOURCEMOD_RESULT_SET_H_ dvander@1203: dvander@1203: #include "SqDriver.h" dvander@1203: #include "sm_memtable.h" dvander@1203: dvander@1203: class SqQuery; dvander@1203: dvander@1203: struct SqField dvander@1203: { dvander@1203: int type; dvander@1203: union dvander@1203: { dvander@1203: int idx; dvander@1203: float f; dvander@1203: } u; dvander@1203: size_t size; dvander@1203: }; dvander@1203: dvander@1203: class SqResults : dvander@1203: public IResultSet, dvander@1203: public IResultRow dvander@1203: { dvander@1203: friend class SqQuery; dvander@1203: public: dvander@1203: SqResults(SqQuery *query); dvander@1203: ~SqResults(); dvander@1203: public: //IResultSet dvander@1203: unsigned int GetRowCount(); dvander@1203: unsigned int GetFieldCount(); dvander@1203: const char *FieldNumToName(unsigned int columnId); dvander@1203: bool FieldNameToNum(const char *name, unsigned int *columnId); dvander@1203: bool MoreRows(); dvander@1203: IResultRow *FetchRow(); dvander@1203: IResultRow *CurrentRow(); dvander@1203: bool Rewind(); dvander@1203: DBType GetFieldType(unsigned int field); dvander@1203: DBType GetFieldDataType(unsigned int field); dvander@1203: public: //IResultRow dvander@1203: DBResult GetString(unsigned int columnId, const char **pString, size_t *length); dvander@1203: DBResult CopyString(unsigned int columnId, dvander@1203: char *buffer, dvander@1203: size_t maxlength, dvander@1203: size_t *written); dvander@1203: DBResult GetFloat(unsigned int columnId, float *pFloat); dvander@1203: DBResult GetInt(unsigned int columnId, int *pInt); dvander@1203: bool IsNull(unsigned int columnId); dvander@1203: size_t GetDataSize(unsigned int columnId); dvander@1203: DBResult GetBlob(unsigned int columnId, const void **pData, size_t *length); dvander@1203: DBResult CopyBlob(unsigned int columnId, void *buffer, size_t maxlength, size_t *written); dvander@1203: public: dvander@1203: void ResetResultCount(); dvander@1203: void PushResult(); dvander@1203: private: dvander@1203: SqField *GetField(unsigned int col); dvander@1203: private: dvander@1203: sqlite3_stmt *m_pStmt; /** DOES NOT CHANGE */ dvander@1203: String *m_ColNames; /** DOES NOT CHANGE */ dvander@1203: unsigned int m_ColCount; /** DOES NOT CHANGE */ dvander@1206: BaseStringTable m_Strings; /** DOES NOT CHANGE */ dvander@1206: BaseMemTable *m_pMemory; /** DOES NOT CHANGE */ dvander@1203: unsigned int m_RowCount; dvander@1203: unsigned int m_MaxRows; dvander@1203: SqField *m_Rows; dvander@1203: unsigned int m_CurRow; dvander@1203: unsigned int m_NextRow; dvander@1203: }; dvander@1203: dvander@1203: #endif //_INCLUDE_SQLITE_SOURCEMOD_RESULT_SET_H_