/*	
 *	SqliteHelper.h
 *
 *	SQLiteサポートモジュール
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2015-2016 Naoyuki Sawa
 *
 *	* Sun Jul 19 17:54:39 JST 2015 Naoyuki Sawa
 *	- Win32プロジェクト用のSQLiteサポートモジュールです。
 *	  test.win/extclip.hを参照してください。
 *	- 現時点では、P/ECEプロジェクトでは使用しません。
 *	  もし将来、P/ECEでSQLiteが動作するように出来たら、使用するかも知れません。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 *	* Fri Mar 11 21:58:48 JST 2016 Naoyuki Sawa
 *	- ファイル名を、recordset.h,recordset.c⇒SqliteHelper.h,SqliteHelper.cに変更しました。
 *	  ファイル名を変更した理由は、当モジュールがSQLite用のサポートモジュールである事を、判り易くするためです。
 */
#ifndef __SQLITEHELPER_H__
#define __SQLITEHELPER_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/****************************************************************************
 *	
 ****************************************************************************/
int sqlite_compile_vprintf(sqlite* db, const char* sqlFormat, const char** pzTail, sqlite_vm** ppVm, char** pzErrmsg, va_list ap);
int sqlite_compile_printf(sqlite* db, const char* sqlFormat, const char** pzTail, sqlite_vm** ppVm, char** pzErrmsg, ...);
/****************************************************************************
 *	
 ****************************************************************************/
typedef struct _ST_Recordset_r {
	sqlite_vm*		vm;		//仮想マシン
	int			nCol;		//カラム数
	const char**		aVal;		//カラム値の配列
	const char**		aCol;		//カラム名の配列
} ST_Recordset_r;
/*--------------------------------------------------------------------------*/
ST_Recordset_r* Recordset_Open(sqlite* db, const char* sSql, ...);
void Recordset_Close(ST_Recordset_r* rs);
ST_Recordset_r* Recordset_Next(ST_Recordset_r* rs);
/*--------------------------------------------------------------------------*/
int Recordset_Count(ST_Recordset_r* rs);
int Recordset_ColNI(ST_Recordset_r* rs, const char* sNam);			//Name→Index
int Recordset_ColVI(ST_Recordset_r* rs, const char* sFmt, va_list ap);		//va_list→Index
int Recordset_ColFI(ST_Recordset_r* rs, const char* sNam, ...);			//NameFormat→Index
const char* Recordset_ColIN(ST_Recordset_r* rs, int iIdx);			//Index→Name
/*--------------------------------------------------------------------------*/
int Recordset_GetIN(ST_Recordset_r* rs, int iIdx);				//Index→Numeric
int Recordset_GetNN(ST_Recordset_r* rs, const char* sNam);			//Name→Numeric
int Recordset_GetVN(ST_Recordset_r* rs, const char* sFmt, va_list ap);		//va_list→Numeric
int Recordset_GetFN(ST_Recordset_r* rs, const char* sFmt, ...);			//Format→Numeric
const char* Recordset_GetIT(ST_Recordset_r* rs, int iIdx);			//Index→Text
const char* Recordset_GetNT(ST_Recordset_r* rs, const char* sNam);		//Name→Text
const char* Recordset_GetVT(ST_Recordset_r* rs, const char* sFmt, va_list ap);	//va_list→Text
const char* Recordset_GetFT(ST_Recordset_r* rs, const char* sFmt, ...);		//Format→Text
/****************************************************************************
 *	
 ****************************************************************************/
typedef struct _ST_Recordset_w {
	sqlite*			db;		//データベース
	char*			sTbl;		//テーブル名
	ght_hash_table_t*	ht;		//ハッシュテーブル	カラム名→カラム値
} ST_Recordset_w;
/*--------------------------------------------------------------------------*/
ST_Recordset_w* Recordset_New(sqlite* db, const char* sTbl);
void Recordset_Cancel(ST_Recordset_w* rs);
void Recordset_Insert(ST_Recordset_w* rs);
void Recordset_Update(ST_Recordset_w* rs, const char* sWhere/*NULL可*/, ...);
/*--------------------------------------------------------------------------*/
void Recordset_SetNN(ST_Recordset_w* rs, int iNum, const char* sNam);					//Name←Numeric
void Recordset_SetVN(ST_Recordset_w* rs, int iNum, const char* sFmt, va_list ap);			//va_list←Numeric
void Recordset_SetFN(ST_Recordset_w* rs, int iNum, const char* sFmt, ...);				//Format←Numeric
void Recordset_SetNT(ST_Recordset_w* rs, const char* sTxt/*NULL可*/, const char* sNam);			//Name←Text
void Recordset_SetVT(ST_Recordset_w* rs, const char* sTxt/*NULL可*/, const char* sFmt, va_list ap);	//va_list←Text
void Recordset_SetFT(ST_Recordset_w* rs, const char* sTxt/*NULL可*/, const char* sFmt, ...);		//Format←Text
void Recordset_SetNE(ST_Recordset_w* rs, const char* sExp, const char* sNam);				//Name←Expr
void Recordset_SetVE(ST_Recordset_w* rs, const char* sExp, const char* sFmt, va_list ap);		//va_list←Expr
void Recordset_SetFE(ST_Recordset_w* rs, const char* sExp, const char* sFmt, ...);			//Format←Expr
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__SQLITEHELPER_H__
