/*!
	IDを指定してデータゲット
	@param[in]	id			検索するID
	@param[out]	ptFilePath	ファイルパスバッファ・MAX_PATHであること
	@param[out]	ptBaseName	ルート直下のディレクトリ名バッファ・MAX_PATHであること
	@param[in]	ptDispName	タブの表示名・MAX_PATHであること
	@return	UINT	引っ張ったヤツのID番号・ヒットしなかったら0
*/
UINT SqlMultiTabSelect( INT id, LPTSTR ptFilePath, LPTSTR ptBaseName, LPTSTR ptDispName )
{
	CHAR	acQuery[MAX_STRING];
	INT		rslt;
	UINT	index = 0;
	sqlite3_stmt*	statement;


	if( !(gpDataBase) ){	return 0;	}

	StringCchPrintfA( acQuery, MAX_STRING, ("SELECT * FROM MultiTab WHERE id == %d"), id );

	rslt = sqlite3_prepare( gpDataBase, acQuery, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}

	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt )
	{
		index = sqlite3_column_int( statement , 0 );	//	id
		String_Cch_Copy( ptFilePath, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 1 ) );	//	filepath
		String_Cch_Copy( ptBaseName, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 2 ) );	//	basename
		String_Cch_Copy( ptDispName, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 3 ) );	//	dispname
	}

	sqlite3_finalize( statement );

	return index;
}
Пример #2
0
wxString CQueueStorage::Impl::GetColumnText(sqlite3_stmt* statement, int index, bool shrink)
{
	wxString ret;

#ifdef __WXMSW__
	(void)shrink;
	const wxChar* text = static_cast<const wxChar*>(sqlite3_column_text16(statement, index));
	if (text)
		ret = text;
#else
	const char* text = static_cast<const char*>(sqlite3_column_text16(statement, index));
	int len = sqlite3_column_bytes16(statement, index);
	if (text)
	{
		wxStringBuffer buffer(ret, len);
		wxChar* out = buffer;

		int outlen = utf16_.ToWChar( out, len, text, len );
		buffer[outlen] = 0;
	}
	if (shrink)
		ret.Shrink();
#endif

	return ret;
}
Пример #3
0
int RecorderDAO::RetrieveRecorders(SITE_T * site, RECORDER_T *** recorders, int & count, sqlite3 * connection)
{
	int value = DAO_FAIL;
	sqlite3_stmt *stmt;

	sqlite3 *conn;
	if (connection == 0)
		conn = _db;
	else
		conn = connection;

	if (!site)
		return value;

	count = RetrieveRecorderCount(site, conn);

	*recorders = static_cast<RECORDER_T**>(malloc(sizeof(RECORDER_T*)*count));
	std::string sql = "SELECT uuid, name, address, username, pwd FROM tb_recorder WHERE uuid in (SELECT recorder_uuid FROM tb_site_recorder WHERE site_uuid=?) ORDER BY name ASC;";
	if (sqlite3_prepare(conn, sql.c_str(), -1, &stmt, 0) == SQLITE_OK)
	{
		sqlite3_bind_text16(stmt, 1, site->uuid, -1, 0);
		int result = SQLITE_ERROR;
		int index = 0;
		while (true)
		{
			result = sqlite3_step(stmt);
			if (result == SQLITE_ROW)
			{
				(*recorders)[index] = static_cast<RECORDER_T*>(malloc(sizeof(RECORDER_T)));
				wchar_t * uuid = (wchar_t*)sqlite3_column_text16(stmt, 0);
				wchar_t * name = (wchar_t*)sqlite3_column_text16(stmt, 1);
				wchar_t * address = (wchar_t*)sqlite3_column_text16(stmt, 2);
				wchar_t * username = (wchar_t*)sqlite3_column_text16(stmt, 3);
				wchar_t * pwd = (wchar_t*)sqlite3_column_text16(stmt, 4);

				wcscpy((*recorders)[index]->uuid, uuid);
				wcscpy((*recorders)[index]->name, name);
				wcscpy((*recorders)[index]->address, address);
				wcscpy((*recorders)[index]->username, username);
				wcscpy((*recorders)[index]->pwd, pwd);
				index++;
				value = DAO_SUCCESS;
			}
			else
			{
				if (result == SQLITE_DONE)
					value = DAO_SUCCESS;
				break;
			}
		}
	}
	sqlite3_reset(stmt);
	sqlite3_finalize(stmt);
	return value;
}
Пример #4
0
uint64
O2DatDB::
select_datcount(wstrnummap &out)
{
#if TRACE_SQL_EXEC_TIME
	stopwatch sw("select datcount group by domain bbsname");
#endif

	sqlite3 *db = NULL;
	sqlite3_stmt *stmt = NULL;
	wstring domain_bbsname;
	uint64 total = 0;
	uint64 num;

	int err = sqlite3_open16(dbfilename.c_str(), &db);
	if (err != SQLITE_OK)
		goto error;
	sqlite3_busy_timeout(db, 5000);

	wchar_t *sql =
		L"select domain, bbsname, count(*) from dat group by domain, bbsname;";

	err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
	if (err != SQLITE_OK)
		goto error;

	while (sqlite3_step(stmt) == SQLITE_ROW) {
		domain_bbsname = (wchar_t*)sqlite3_column_text16(stmt, 0);
		domain_bbsname += L":";
		domain_bbsname += (wchar_t*)sqlite3_column_text16(stmt, 1);
		num = sqlite3_column_int64(stmt, 2);

		out.insert(wstrnummap::value_type(domain_bbsname, num));
		total += num;
	}

	sqlite3_finalize(stmt);
	stmt = NULL;

	err = sqlite3_close(db);
	if (err != SQLITE_OK)
		goto error;
	return (total);

error:
	log(db);
	if (stmt) sqlite3_finalize(stmt);
	if (db) sqlite3_close(db);
	return false;
}
Пример #5
0
void
O2DatDB::
get_columns(sqlite3_stmt* stmt, O2DatRec &rec)
{
	rec.hash.assign((byte*)sqlite3_column_blob(stmt, 0), HASHSIZE);
	rec.domain		= (wchar_t*)sqlite3_column_text16(stmt, 1);
	rec.bbsname		= (wchar_t*)sqlite3_column_text16(stmt, 2);
	rec.datname		= (wchar_t*)sqlite3_column_text16(stmt, 3);
	rec.size		=			sqlite3_column_int64 (stmt, 4);
	rec.disksize	=			sqlite3_column_int64 (stmt, 5);
	rec.url			= (wchar_t*)sqlite3_column_text16(stmt, 6);
	rec.title		= (wchar_t*)sqlite3_column_text16(stmt, 7);
	rec.res			=			sqlite3_column_int64 (stmt, 8);
	rec.lastupdate	=			sqlite3_column_int64 (stmt, 9);
	rec.lastpublish	=			sqlite3_column_int64 (stmt, 10);
}
/*!
	親ID指定してリストアップ
	@param[in]	dPrntID	親ID
	@param[in]	tgtID	この番号を超えて最初にヒットしたやつを返す
	@param[out]	pType	ディレクトリ(FILE_ATTRIBUTE_DIRECTORY)かファイルか(FILE_ATTRIBUTE_NORMAL)
	@param[out]	ptName	ノードの名称
	@return	UINT	引っ張ったやつのID・無かったら0
*/
UINT SqlChildNodePickUpID( UINT dPrntID, UINT tgtID, PUINT pType, LPTSTR ptName )
{
	CHAR	acQuery[MAX_PATH];
	INT		rslt;
	UINT	id = 0, dummy;
	sqlite3_stmt*	statement;

	StringCchPrintfA( acQuery, MAX_PATH, ("SELECT * FROM TreeNode WHERE parentid == %u AND id > %u ORDER BY id ASC"), dPrntID, tgtID );

	rslt = sqlite3_prepare( gpDataBase, acQuery, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}
	sqlite3_reset( statement );
	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt )
	{
		id     = sqlite3_column_int( statement, 0 );	//	id
		*pType = sqlite3_column_int( statement, 1 );	//	type
		dummy  = sqlite3_column_int( statement, 2 );	//	parentid
		String_Cch_Copy( ptName, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 3 ) );	//	nodename
	}

	sqlite3_finalize( statement );

	return id;
}
/**
Reads a record from security policies table.

@param aStmtHandle Statement handle. It cannot be NULL.
@param aSecurityPolicy Security policies container.
@param aObjType Output parameter, will be initialized with the database object type: KDefaultObjType,
				KDbObjType, RSqlSecurityPolicy::ETable.
@param aObjName Output parameter, database object name (for example, table name), which is protected by the
				current security policy.
@param aPolicyType Output parameter, will be initialized with the database policy type: RSqlSecurityPolicy::EReadPolicy,
				   RSqlSecurityPolicy::EWritePolicy, RSqlSecurityPolicy::ESchemaPolicy.
@return The created security policy object.

@leave KErrGeneral, invalid security policy data;
	   KErrNoMemory, Out of memory.
*/
TSecurityPolicy TSqlDbSysSettings::ReadCurrSecurityPolicyL(sqlite3_stmt* aStmtHandle, TInt& aObjType, 
														   TPtrC& aObjName, TInt& aPolicyType)
	{
	__ASSERT_DEBUG(aStmtHandle != NULL, __SQLPANIC(ESqlPanicBadArgument));
	aObjType = sqlite3_column_int(aStmtHandle, KObjTypeColIdx);
    //The "ObjectName" column type might be different than SQLITE_TEXT - malformed database.
    if(sqlite3_column_type(aStmtHandle, KObjNameColIdx) != SQLITE_TEXT)
        {
        __SQLLEAVE(KErrGeneral);   
        }
    const void* text = sqlite3_column_text16(aStmtHandle, KObjNameColIdx);
    //Null column value - this might be an indication of an "out of memory" problem, if the column text  
    //is in UTF8 format. (sqlite3_column_text16() may allocate memory for UTF8->UTF16 conversion)
    __SQLLEAVE_IF_NULL(const_cast<void*>(text));
	TInt len = (TUint)sqlite3_column_bytes16(aStmtHandle, KObjNameColIdx) / sizeof(TUint16);
	aObjName.Set(reinterpret_cast <const TUint16*> (text), len);
	aPolicyType = sqlite3_column_int(aStmtHandle, KObjPolicyTypeColIdx);
	len = sqlite3_column_bytes(aStmtHandle, KObjPolicyDataColIdx);
	if(len != sizeof(TSecurityPolicy))
		{
		//Check if the error is "out of memory" (which may happen when retrieving text column data
		//and the column encoding is different, in which case  the column text has to be converted 
		//and a new block of memory has to be allocated for the conversion).
		TInt err2 = ::StmtReset(aStmtHandle);
		__SQLLEAVE(err2 == KErrNoMemory ? KErrNoMemory : KErrGeneral);
		}
	const void* data = sqlite3_column_blob(aStmtHandle, KObjPolicyDataColIdx);
	TSecurityPolicy policy;
	policy.Set(TPtrC8(reinterpret_cast <const TUint8*> (data), len));
	return policy;
	}
Пример #8
0
/**
	result_next : 'result -> object?
	<doc>Returns the next row in the result or [null] if no more result.</doc>
**/
HL_PRIM varray *HL_NAME(result_next)( sqlite_result *r ) {
	if( r->done )
		return NULL;
	switch( sqlite3_step(r->r) ) {
	case SQLITE_ROW:
		r->first = 0;
		varray *a = hl_alloc_array(&hlt_dyn, r->ncols);
		int i;
		for(i=0;i<r->ncols;i++)
		{
			vdynamic *v;
			switch( sqlite3_column_type(r->r,i) ) {
			case SQLITE_NULL:
				v = NULL;
				break;
			case SQLITE_INTEGER:
			{
				int vint = sqlite3_column_int(r->r, i);
				if (r->bools[i])
					v = hl_make_dyn(&vint, &hlt_bool);
				else
					v = hl_make_dyn(&vint, &hlt_i32);
				break;
			}
			case SQLITE_FLOAT:
			{
				double d = sqlite3_column_double(r->r, i);
				v = hl_make_dyn(&d, &hlt_f64);
				break;
			}
			case SQLITE_TEXT:
			{
				uchar *text16 = (uchar *)sqlite3_column_text16(r->r, i);
				v = hl_make_dyn(&text16, &hlt_bytes);
				break;
			}
			case SQLITE_BLOB:
			{
				vbyte *blob = (vbyte *)sqlite3_column_blob(r->r, i);
				v = hl_make_dyn(&blob, &hlt_bytes);
				break;
			}
			default:
				hl_error_msg(USTR("SQLite error: Unknown type #%d"), sqlite3_column_type(r->r,i));
			}
			hl_aptr(a, vdynamic*)[i] = v;
		}
		return a;
	case SQLITE_DONE:
		HL_NAME(finalize_request)(r, true);
		return NULL;
	case SQLITE_BUSY:
		hl_error("SQLite error: Database is busy");
	case SQLITE_ERROR:
		HL_NAME(error)(r->db->db, false);
	default:
		return NULL;
	}
	return NULL;
}
/*!
	登録されているルート名をリストアップしてコールバックする
	@param[in]	pfFolderNameSet	内容をコールバックする函数ポインター
	@return		HRESULT			終了状態コード
*/
HRESULT SqlFavFolderEnum( BUFFERBACK pfFolderNameSet )
{
	CONST CHAR	acQuery[] = { ("SELECT DISTINCT folder FROM ArtList") };

	INT		rslt, count, i;
	sqlite3_stmt	*statement;


	if( !(pfFolderNameSet) ){	return E_INVALIDARG;	}
	if( !(gpDataBase) ){	return E_OUTOFMEMORY;	}

	count = SqlFavCount( NULL, NULL );

	rslt = sqlite3_prepare( gpDataBase, acQuery, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return E_FAIL;	}
	rslt = sqlite3_reset( statement );

	for( i = 0; count > i; i++ )
	{
		rslt = sqlite3_step( statement );
		if( SQLITE_ROW == rslt )
		{
			pfFolderNameSet( i, 0, 0, sqlite3_column_text16( statement, 0 ) );
		}
		else{	break;	}
	}

	sqlite3_finalize(statement);

	return S_OK;
}
/* column bytes 16 */
const char16_t *
sqlite_statement::column_const_char16_t_ptr (
  int _index
){
return reinterpret_cast<const char16_t*>
(sqlite3_column_text16(this->stmt, _index));
}
Пример #11
0
/*!
	ID指定してリストアップ
	@param[in]	seekID	1以上の場合、このIDのを探す。こっち優先
	@param[in]	tgtID	この番号を超えて最初にヒットしたやつを返す・seekIDが0の場合
	@param[out]	ptName	ノードのパスいれるバッファ・MAX_PATHであること
	@return	UINT	引っ張ったやつのID・無かったら0
*/
UINT SqlTreeNodeExtraSelect( UINT seekID, UINT tgtID, LPTSTR ptName )
{
	//LPCTSTR	ptBuffer;
	CHAR	acQuery[MAX_STRING];
	INT		rslt;
	UINT	id = 0;
	sqlite3_stmt*	statement;

	if( !(gpDataBase) ){	TRACE( TEXT("NoDatabase") );	return 0;	}

	if( 1 <= seekID ){	StringCchPrintfA( acQuery, MAX_STRING, ("SELECT id, nodename FROM TreeNode WHERE id == %u"), seekID );	}
	else{	StringCchPrintfA( acQuery, MAX_STRING, ("SELECT id, nodename FROM TreeNode WHERE id > %u AND parentid == -1 ORDER BY id ASC"), tgtID );	}

	rslt = sqlite3_prepare( gpDataBase, acQuery, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}
	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt )
	{
		id = sqlite3_column_int( statement, 0 );	//	id
		String_Cch_Copy( ptName, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 1 ) );	//	nodename
		//ptBuffer = (LPCTSTR)sqlite3_column_text16( statement, 1 );	//	nodename
		//if( ptBuffer  ){	StringCchCopy( ptName, MAX_PATH, ptBuffer );	}
	}

	sqlite3_finalize( statement );

	return id;
}
Пример #12
0
static JSVAL sqlite_column_text16(JSARGS args) {
    HandleScope scope;
    Local<External>wrap = Local<External>::Cast(args[0]);
    sqlite3_stmt *stmt = (sqlite3_stmt *)wrap->Value();
    int iCol = args[1]->IntegerValue();
    return scope.Close(String::New((char *)sqlite3_column_text16(stmt, iCol)));
}
Пример #13
0
/*!
	ID指定してリストアップ
	@param[in]	tgtID	この番号を超えて最初にヒットしたやつを返す
	@param[out]	pType	ディレクトリ(FILE_ATTRIBUTE_DIRECTORY)かファイルか(FILE_ATTRIBUTE_NORMAL)
	@param[out]	pPrntID	親ツリーノードのSQL的ID番号
	@param[out]	ptName	ノードの名称
	@param[in]	bStyle	0x01通常 0x00ツリーキャッシュ / 0x10ID一致 0x00ID超えた
	@return	UINT	引っ張ったやつのID・無かったら0
*/
UINT SqlTreeNodePickUpID( UINT tgtID, PUINT pType, PUINT pPrntID, LPTSTR ptName, UINT bStyle ) 
{
	CHAR	acQuery[MAX_STRING];
	INT		rslt;
	UINT	id = 0;
	sqlite3_stmt*	statement;

	sqlite3	*pDB;

	if( bStyle & 0x01 ){	pDB = gpDataBase;	}
	else{					pDB = gpTreeCache;	}

	if( !(pDB) ){	return 0;	}

	if( bStyle & 0x10 ){	StringCchPrintfA( acQuery, MAX_STRING, ("SELECT * FROM TreeNode WHERE id == %u"), tgtID );	}
	else{	StringCchPrintfA( acQuery, MAX_STRING, ("SELECT * FROM TreeNode WHERE id > %u ORDER BY id ASC"), tgtID );	}

	rslt = sqlite3_prepare( pDB, acQuery, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( pDB );	return 0;	}
	sqlite3_reset( statement );
	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt )
	{
		id       = sqlite3_column_int( statement, 0 );	//	id
		*pType   = sqlite3_column_int( statement, 1 );	//	type
		*pPrntID = sqlite3_column_int( statement, 2 );	//	parentid
		String_Cch_Copy( ptName, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 3 ) );	//	nodename
	}

	sqlite3_finalize( statement );

	return id;
}
Пример #14
0
 static void get_column_Text(row r, int index, Text& val)
 {
 #if defined(_UNICODE) || defined(UNICODE)
    val = (const TCHAR*)sqlite3_column_text16(r, index);
 #else
    val = (const TCHAR*)sqlite3_column_text(r, index);
 #endif
 }
Пример #15
0
    DBString asString() const
    {
#ifdef DB_UTF16
        return (const wchar_t*)sqlite3_column_text16(_stmt, _fieldIndex);
#else
        return (const char*)sqlite3_column_text(_stmt, _fieldIndex);
#endif
    }
Пример #16
0
// 获取某列的值(字符串)
LPCTSTR SQLiteDataReader::GetStringValue(int nCol)
{
#ifdef  UNICODE 
	return (LPCTSTR)sqlite3_column_text16(m_pStmt, nCol);
#else
	return (LPCTSTR)sqlite3_column_text(m_pStmt, nCol);
#endif
}
Пример #17
0
	bool Reader::GetString(int index, CString & val)
	{
		if(! IsValidIndex(index))
		{
			return false;
		}
		val = (LPCTSTR) sqlite3_column_text16(m_cmd->m_st, index);
		return true;
	}
Пример #18
0
/**
	result_get : 'result -> n:int -> string
	<doc>Return the [n]th field of the current result row.</doc>
**/
HL_PRIM vbyte *HL_NAME(result_get)( sqlite_result *r, int n ) {
	if (n < 0 || n >= r->ncols)
		return NULL;
	if( r->first )
		HL_NAME(result_next)(r);
	if( r->done )
		return NULL;
	return (vbyte*)sqlite3_column_text16(r->r, n);
}
Пример #19
0
	std::unique_ptr<SQLiteResult> SQLiteQuery::Execute() 
	{		
		std::unique_ptr<SQLiteResult> out_result(new SQLiteResult());
		char* err_info = query;

		while (1)
		{
			int result = sqlite3_step(stmt);
			if (result == SQLITE_DONE) break;

			if (result == SQLITE_ROW) { // data!
				/*if (!out_result) { // no data was expected
					error = SQL_ERRCODE_NDE;
					break;
				}*/
				std::unique_ptr<SQLiteRow> row(new SQLiteRow());

				int columns = sqlite3_column_count(stmt);
				for (int x = 0; x < columns; x++) {
					int type = sqlite3_column_type(stmt, x);
					const char* name = sqlite3_column_name(stmt, x);
					switch (type)
					{
					case SQLITE_INTEGER:
						row->AddColumn(Object::unique_ptr(
							new ObjNumber(sqlite3_column_int(stmt, x))), name);
						break;
					case SQLITE_FLOAT:
						row->AddColumn(Object::unique_ptr(
							new ObjNumber(sqlite3_column_double(stmt, x))), name);
						break;
					case SQLITE_TEXT:
						row->AddColumn(Object::unique_ptr(
							new ObjWString((const wchar_t*)sqlite3_column_text16(stmt, x))),
							name);
						break;
					case SQLITE_BLOB:
						row->AddColumn(Object::unique_ptr(
							new ObjBlob((BYTE*)sqlite3_column_blob(stmt, x),
										sqlite3_column_bytes(stmt, x))),
							name);
						break;
					}
				}
				out_result->AddRow(std::move(row));
			}
			else { // error
				throw SQLiteError(parent.LastError());
			}
		}

		sqlite3_finalize(stmt);
		stmt = NULL;

		return out_result;
	}
Пример #20
0
String SQLiteStatement::getColumnText(int col)
{
    ASSERT(col >= 0);
    if (!m_statement)
        if (prepareAndStep() != SQLITE_ROW)
            return String();
    if (columnCount() <= col)
        return String();
    return String(reinterpret_cast<const UChar*>(sqlite3_column_text16(m_statement, col)), sqlite3_column_bytes16(m_statement, col) / sizeof(UChar));
}
Пример #21
0
const TCHAR* CppSQLite3Query::fieldValue(const TCHAR* szField)
{
	int nField = fieldIndex(szField);

#ifdef _UNICODE
	return (const TCHAR*)sqlite3_column_text16(mpVM, nField);
#else
	return (const TCHAR*)sqlite3_column_text(mpVM, nField);
#endif
}
Пример #22
0
/*
* Class:     com_sabo_sqlite_SQLiteDatabase_SQLiteQuery
* Method:    nativeQuery
* Signature: (J)[Ljava/lang/String;
*/
JNIEXPORT jobjectArray JNICALL Java_com_sabo_sqlite_SQLiteDatabase_00024SQLiteQuery_nativeQuery
(JNIEnv *env, jobject clazz, jlong statementPtr) {
	sqlite3_stmt *pStmt;
	jobjectArray objArray;
	int nCol;
	int i;
	int rc;
	int nLen;
	jchar *zVal;

	jclass clazzString;
	jstring val;

	assert(statementPtr != 0);
	pStmt = (sqlite3_stmt *)statementPtr;
	nCol = sqlite3_column_count(pStmt);
	assert(nCol > 0);
	clazzString = env->FindClass("java/lang/String");
	assert(clazzString != NULL);
	/**
	  Ignore to check clazzString.
	*/
	if (nCol <= 0) throw_sqlite3_exception(env, "[SQLite]: nCol is less than 1.");
	objArray = env->NewObjectArray(nCol, clazzString, NULL);
	if (objArray == NULL) throw_sqlite3_exception(env, "[SQLite]: Allocate objArray failed (No enough memory)");
	rc = sqlite3_step(pStmt);	
	if (rc == SQLITE_ROW) {
		for (i = 0; i < nCol; ++i) {
			zVal = (jchar *)sqlite3_column_text16(pStmt, i);
			nLen = 0;
			if (zVal) {
				nLen = sqlite3_column_bytes16(pStmt, i);
				assert(nLen > 0);
			}
			if (nLen > 0) {
				val = env->NewString(zVal, nLen/sizeof(jchar));
				assert(val != NULL);
				if (val == NULL) throw_sqlite3_exception(env, "[SQLite]: NewString failed...");
			}
			else {
				val = NULL;
			}
			env->SetObjectArrayElement(objArray, i, val);
		}
	}
	else {
		if (rc == SQLITE_OK || rc == SQLITE_DONE) {
			return NULL;
		}
		throw_sqlite3_exception(env, "[SQLITE]: Fail to run sqltie3_step.");
	}

	return objArray;
}
Пример #23
0
void Sqlite3Connection::GetColumn(int i, Ref f) const {
	ASSERT(NULL != current_stmt);
	if(i == -1) {
		f = Value(sqlite3_last_insert_rowid(db));
		return;
	}

	ASSERT(got_row_data);
	String coltype;
	const char *s = sqlite3_column_decltype(current_stmt,i);
	if(s) coltype = ToLower(s);
	switch (sqlite3_column_type(current_stmt,i)) {
		case SQLITE_INTEGER:
			f = sqlite3_column_int64(current_stmt,i);
			break;
		case SQLITE_FLOAT:
			f = sqlite3_column_double(current_stmt,i);
			break;
		case SQLITE_TEXT:
			if(coltype == "date" || f.GetType() == DATE_V){
				const char *s = (const char *)sqlite3_column_text(current_stmt, i);
				if(strlen(s) >= 10)
					f = Value(Date(atoi(s), atoi(s + 5), atoi(s + 8)));
				else
					f = Null;
			}
			else
			if(coltype == "datetime" || f.GetType() == TIME_V) {
				const char *s = (const char *)sqlite3_column_text(current_stmt, i);
				if(strlen(s) >= 19)
					f = Value(Time(atoi(s), atoi(s + 5), atoi(s + 8), atoi(s + 11), atoi(s + 14), atoi(s + 17)));
				else
				if(strlen(s) >= 10)
					f = Value(ToTime(Date(atoi(s), atoi(s + 5), atoi(s + 8))));
				else
					f = Null;
			}
			else
				f = Value(WString((const wchar*)sqlite3_column_text16(current_stmt,i)));
			break;
		case SQLITE_NULL:
			f = Null;
			break;
		case SQLITE_BLOB:
			f = Value(String( (const byte*)sqlite3_column_blob(current_stmt,i),
			                  sqlite3_column_bytes(current_stmt,i)                ));
			break;
		default:
			NEVER();
			break;
	}
	return;
}
Пример #24
0
const unsigned short* CppSQLite3Query::fieldValue16(const CString& szField)
{
    checkVM();

    int nField = fieldIndex(szField);
    if (nField < 0 || nField > mnCols-1)
    {
        throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested");
    }

    return (const unsigned short*)sqlite3_column_text16(mpVM, nField);
}
Пример #25
0
/*!
	使ったAAを、リスト確認して追加したり更新したり
	@param[in]	ptBaseName	基点ディレクトリ名
	@param[in]	dHash		AA認識用のハッシュ値
	@param[in]	pcConts		AA本体
	@param[in]	rdLength	バイト数
	@return		HRESULT	終了状態コード
*/
HRESULT SqlFavUpload( LPTSTR ptBaseName, DWORD dHash, LPSTR pcConts, UINT rdLength )
{
	CONST CHAR	acArtSelect[] = { ("SELECT id, folder FROM ArtList WHERE hash == ?") };
	INT		rslt;
	UINT	index, cntID, d;
	//LPCTSTR	ptFolder;
	TCHAR	atFolder[MAX_PATH];
	BOOLEAN	bIsExist;
	sqlite3_stmt	*statement;

	rslt = sqlite3_prepare( gpDataBase, acArtSelect, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return E_OUTOFMEMORY;	}

	bIsExist = FALSE;
	cntID = SqlFavCount( NULL, NULL );

//先に登録した後、そのAAのベースネームが変わった場合、新しい名前で出てこない問題
//ハッシュで見てるので、AA自体は一つしか登録されない
//>ベース名まで確認すればいい。ヒットしなくなるまで回して、ベース名がなかったら新規追加
	sqlite3_reset( statement );
	sqlite3_bind_int( statement, 1, dHash );	//	hash

	for( d = 0; cntID >  d; d++ )	//	全数回せばおk
	{
		rslt = sqlite3_step( statement );
		if( SQLITE_ROW == rslt )	//	存在した
		{
			ZeroMemory( atFolder, sizeof(atFolder) );

			index = sqlite3_column_int( statement , 0 );	//	id
			String_Cch_Copy( atFolder, MAX_PATH, (LPCTSTR)sqlite3_column_text16( statement, 1 ) );	//	folder
			//ptFolder = (LPCTSTR)sqlite3_column_text16( statement, 1 );
			//if( ptFolder ){	StringCchCopy( atFolder, MAX_PATH, ptFolder );	}

			SqlFavUpdate( index );	//	内容更新

			//	ベース名チェキ・同じのがあればおk
			if( !( StrCmp( ptBaseName, atFolder ) ) ){	bIsExist = TRUE;	}
		}
		else{	break;	}	//	それ以上ないなら終わる
	}

	sqlite3_finalize( statement );


	if( !(bIsExist) )	//	未記録のなら項目追加
	{
		SqlFavInsert( ptBaseName, dHash, pcConts, rdLength );
	}

	return S_OK;
}
Пример #26
0
		bool					sqlite_db::step()
		{
			if(!_stmt)
				return false;
			sqlite3_stmt* stmt=(sqlite3_stmt*)_stmt;
			int ret=sqlite3_step(stmt);
			if(ret==SQLITE_DONE)
			{
				if(sqlite3_column_count(stmt))
					_array_res.push_back(sqlite_res());						// check if the statement will produce resultset, add a blank even if no rows to keep consistent
				return true;
			}
			if(ret!=SQLITE_ROW)
			{
				_err_msg=(const wchar_t*)sqlite3_errmsg16((sqlite3*)_handle);
				return false;
			}

			if(ret==SQLITE_ROW)
				_array_res.push_back(sqlite_res());
			sqlite_res& res=*(_array_res.end()-1);
			int row=0;
			while(ret==SQLITE_ROW)
			{
				res._res.push_back(vector<sqlite_res::VALUE>());
				int i;
				int count=sqlite3_column_count(stmt);
				for(i=0;i<count;++i)
				{
					res._res[row].push_back(sqlite_res::VALUE());
					int type=sqlite3_column_type(stmt,i);
					if(type==SQLITE_NULL)
						continue;
					if(type==SQLITE_BLOB)
					{
						if(!sqlite3_column_bytes(stmt,i))
							continue;
						vector<char>& blob=res._res[row][i].blob;
						blob.resize(sqlite3_column_bytes(stmt,i));
						memcpy(&blob[0],sqlite3_column_blob(stmt,i),sqlite3_column_bytes(stmt,i));
						continue;
					}
					res._res[row][i].text=(const wchar_t*)sqlite3_column_text16(stmt,i);
				}
				++row;
				ret=sqlite3_step(stmt);
			}
			return true;
		}
Пример #27
0
const TCHAR* CppSQLite3Query::getStringField(int nField, const TCHAR* szNullValue/*=""*/)
{
	if (fieldDataType(nField) == SQLITE_NULL)
	{
		return szNullValue;
	}
	else
	{
#ifdef _UNICODE
		return (const TCHAR*)sqlite3_column_text16(mpVM, nField);
#else
		return (const TCHAR*)sqlite3_column_text(mpVM, nField);
#endif
	}
}
Пример #28
0
/*!
	プロフ名、ルートパスを確保
	@param[out]	ptProfName	プロフ名入れる
	@param[in]	szName		プロフ名の文字数
	@param[out]	ptRootPath	AAのルートダディレクトリ名
	@param[in]	szRoot		ルートダディの文字数
	@return	HRESULT	終了状態コード
*/
HRESULT SqlTreeProfSelect( LPTSTR ptProfName, UINT szName, LPTSTR ptRootPath, UINT szRoot )
{
	CONST CHAR	cacSelectQuery[] = { ("SELECT * FROM Profiles WHERE id == 1") };

	//LPTSTR	ptBuf;
	TCHAR	atName[MAX_STRING], atRoot[MAX_PATH];
	INT		index;
	INT		rslt;
	sqlite3_stmt	*statement;

	ZeroMemory( atName, sizeof(atName) );
	ZeroMemory( atRoot, sizeof(atRoot) );

	//	クェリセット
	rslt = sqlite3_prepare( gpDataBase, cacSelectQuery, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return E_OUTOFMEMORY;	}

	rslt = sqlite3_reset( statement );

	//	内容を読み出し
	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt )
	{
		index = sqlite3_column_int( statement , 0 );	//	id
		String_Cch_Copy( atName , MAX_STRING, (LPTSTR)sqlite3_column_text16( statement, 1 ) );	//	profname
		String_Cch_Copy( atRoot , MAX_STRING, (LPTSTR)sqlite3_column_text16( statement, 2 ) );	//	rootpath
		//ptBuf = (LPTSTR)sqlite3_column_text16( statement, 2 );	//	rootpath
		//if( ptBuf ){	StringCchCopy( atRoot , MAX_PATH, ptBuf );	}
	}
	sqlite3_finalize( statement );

	if( ptProfName )	StringCchCopy( ptProfName, szName, atName );
	if( ptRootPath )	StringCchCopy( ptRootPath, szRoot, atRoot );

	return S_OK;
}
static jstring nativeExecuteForString(JNIEnv* env, jclass clazz,
        jlong connectionPtr, jlong statementPtr) {
    SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
    sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr);

    int err = executeOneRowQuery(env, connection, statement);
    if (err == SQLITE_ROW && sqlite3_column_count(statement) >= 1) {
        const jchar* text = static_cast<const jchar*>(sqlite3_column_text16(statement, 0));
        if (text) {
            size_t length = sqlite3_column_bytes16(statement, 0) / sizeof(jchar);
            return env->NewString(text, length);
        }
    }
    return NULL;
}
Пример #30
0
/**
@SYMTestCaseID			SYSLIB-SQLITE3-UT-4025
@SYMTestCaseDesc		SQLite library single-select performance test.
						The test selects one record and stores 
						the execution time for later use (comparison and printing).
						The ID of the selected record is exactly the same as the ID of the selected
						record, used by SYSLIB-SQLITE3-UT-4017 test case.
						The results of this test case will be compared against the results of
						the SYSLIB-SQLITE3-UT-4017 test case - "SQL server single-select performance test".
@SYMTestPriority		High
@SYMTestActions			SQLite library single-select performance test.
@SYMTestExpectedResults Test must not fail
@SYMREQ					REQ8782
*/
void SqliteSingleSelectTest(TPerfTestMode aPerfTestMode, const char aSingleSelectSql[], TInt aSelectRecId)
	{
	int err;
	const char* tail = 0;
	sqlite3_stmt* stmt = 0;
	int recCnt = 0;
	unsigned int fc;
	char tmp[10];
	
	TEST(aPerfTestMode > EPerfTestSqlMode && aPerfTestMode < EPerfTestModeCnt);
	TEST(!TheDb2);
	err = sqlite3_open(TestDbName(), &TheDb2);
	TEST2(err, SQLITE_OK);
	ExecSqliteConfig(aPerfTestMode);

	sprintf(tmp, "%d", aSelectRecId);
	strcpy(TheSqlBuf2, aSingleSelectSql);
	strcat(TheSqlBuf2, tmp);
	
	err = sqlite3_prepare(TheDb2, TheSqlBuf2, -1, &stmt, &tail);
	TEST2(err, SQLITE_OK);
	
	fc = FastCounterValue();
	while((err = sqlite3_step(stmt)) == SQLITE_ROW)
		{
		__int64 i64;
		double d;
		const unsigned short* t;
		const unsigned char* b;
		
		i64 = sqlite3_column_int64(stmt, 0);
		UNUSED_VAR(i64);
		d = sqlite3_column_double(stmt, 1);
		UNUSED_VAR(d);
		t = (const unsigned short*)sqlite3_column_text16(stmt, 2);
		UNUSED_VAR(t);
		b = (const unsigned char*)sqlite3_column_blob(stmt, 3);
		UNUSED_VAR(b);
		++recCnt;
		}
	StorePerfTestResult(aPerfTestMode, EPerfTestSingleSelect, FastCounterValue() - fc);
	TEST2(err, SQLITE_DONE);
	TEST2(recCnt, 1);

	sqlite3_finalize(stmt);	
	sqlite3_close(TheDb2);
	TheDb2 = 0;
	}