Exemple #1
0
void SqlQuery::bindValue(int pos, const QVariant& value)
{
    int res = -1;
    Q_ASSERT(_stmt);
    if( _stmt ) {
        switch (value.type()) {
        case QVariant::Int:
        case QVariant::Bool:
            res = sqlite3_bind_int(_stmt, pos, value.toInt());
            break;
        case QVariant::Double:
            res = sqlite3_bind_double(_stmt, pos, value.toDouble());
            break;
        case QVariant::UInt:
        case QVariant::LongLong:
            res = sqlite3_bind_int64(_stmt, pos, value.toLongLong());
            break;
        case QVariant::DateTime: {
            const QDateTime dateTime = value.toDateTime();
            const QString str = dateTime.toString(QLatin1String("yyyy-MM-ddThh:mm:ss.zzz"));
            res = sqlite3_bind_text16(_stmt, pos, str.utf16(),
                                      str.size() * sizeof(ushort), SQLITE_TRANSIENT);
            break;
        }
        case QVariant::Time: {
            const QTime time = value.toTime();
            const QString str = time.toString(QLatin1String("hh:mm:ss.zzz"));
            res = sqlite3_bind_text16(_stmt, pos, str.utf16(),
                                      str.size() * sizeof(ushort), SQLITE_TRANSIENT);
            break;
        }
        case QVariant::String: {
            if( !value.toString().isNull() ) {
                // lifetime of string == lifetime of its qvariant
                const QString *str = static_cast<const QString*>(value.constData());
                res = sqlite3_bind_text16(_stmt, pos, str->utf16(),
                                          (str->size()) * sizeof(QChar), SQLITE_TRANSIENT);
            } else {
                res = sqlite3_bind_null(_stmt, pos);
            }
            break; }
        case QVariant::ByteArray: {
            auto ba = value.toByteArray();
            res = sqlite3_bind_text(_stmt, pos, ba.constData(), ba.size(), SQLITE_TRANSIENT);
            break;
        }
        default: {
            QString str = value.toString();
            // SQLITE_TRANSIENT makes sure that sqlite buffers the data
            res = sqlite3_bind_text16(_stmt, pos, str.utf16(),
                                      (str.size()) * sizeof(QChar), SQLITE_TRANSIENT);
            break; }
        }
    }
    if (res != SQLITE_OK) {
        qDebug() << Q_FUNC_INFO << "ERROR" << value << res;
    }
    Q_ASSERT( res == SQLITE_OK );
}
int RecorderDAO::DeleteRecorder(SITE_T * site, RECORDER_T * recorder, sqlite3 * connection)
{
	int value = DAO_FAIL;
	sqlite3_stmt *stmt;

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

	if (!site || !recorder)
		return value;

	begin(conn);

	if (sqlite3_prepare(conn, "DELETE FROM tb_site_recorder WHERE site_uuid=? and recorder_uuid=?;", -1, &stmt, 0) == SQLITE_OK)
	{
		sqlite3_bind_text16(stmt, 1, site->uuid, -1, 0);
		sqlite3_bind_text16(stmt, 2, recorder->uuid, -1, 0);
		int result = sqlite3_step(stmt);
		if (result == SQLITE_DONE)
		{
			value = DAO_SUCCESS;
		}
	}
	sqlite3_reset(stmt);
	sqlite3_finalize(stmt);
	if (value != DAO_SUCCESS)
	{
		rollback(conn);
		return value;
	}

	if (sqlite3_prepare(conn, "DELETE FROM tb_recorder WHERE uuid=?;", -1, &stmt, 0) == SQLITE_OK)
	{
		sqlite3_bind_text16(stmt, 1, recorder->uuid, -1, 0);
		int result = sqlite3_step(stmt);
		if (result == SQLITE_DONE)
		{
			value = DAO_SUCCESS;
		}
	}
	sqlite3_reset(stmt);
	sqlite3_finalize(stmt);
	if (value != DAO_SUCCESS)
	{
		rollback(conn);
		return value;
	}

	commit(conn);
	return value;
}
Exemple #3
0
bool CQueueStorage::Impl::Bind(sqlite3_stmt* statement, int index, const wxString& value)
{
#ifdef __WXMSW__
	return sqlite3_bind_text16(statement, index, value.wc_str(), value.length() * 2, SQLITE_TRANSIENT) == SQLITE_OK;
#else
	char* out = new char[value.size() * 2];
	size_t outlen = utf16_.FromWChar(out, value.size() * 2, value.c_str(), value.size());
	bool ret = sqlite3_bind_text16(statement, index, out, outlen, custom_free) == SQLITE_OK;
	return ret;
#endif
}
Exemple #4
0
void Session::_BindParameter(sqlite3_stmt *statement, const Param &param, int position)
{
	Param::ParamType type = param.GetType();
	int result;
	switch(type)
	{
	case Param::TYPE_STRING:
#ifdef UNICODE
		result = sqlite3_bind_text16(statement, position, param.GetValue(),-1,NULL);
#else 
		sqlite3_bind_text(statement, position, (TCHAR)param.GetValue()),-1,NULL);
#endif
		break;
	case Param::TYPE_INT:
		result = sqlite3_bind_int(statement, position, *((int*)param.GetValue()));
		break;
	default:
		result = sqlite3_bind_double(statement, position, *((double*)param.GetValue()));
		break;
	}

	if(result != SQLITE_OK)
	{
		throw SessionException(_T("Could not bind parameter"));
	}

}
Exemple #5
0
void CSqLite3StatementImpl::BindParameter(word no, CConstPointer value, int valueSize)
{
	if ((!_lpEnv) || (!_lpConn) || (!_lpStmt) || (no == 0) || (no > _siNumParams))
	{
		Ptr(CSqLite3Exception) pEx = OK_NEW_OPERATOR CSqLite3Exception(__FILE__LINE__ _T("[CSqLite3StatementImpl::BindParameter] Invalid arguments or programming sequence error"));

		if (_lpEnv)
			_lpEnv->set_LastError(pEx);
		throw pEx;
	}
	int res;

	if (PtrCheck(value) || (valueSize == 0))
	{
		res = sqlite3_bind_null(_lpStmt, no);

		if (res != SQLITE_OK)
			HandleError(__FILE__LINE__ res, _T("sqlite3_bind_null"));
	}
	else
	{
#ifdef UNICODE
		res = sqlite3_bind_text16(_lpStmt, no, CastAny(ConstPointer, value), valueSize, SQLITE_STATIC);

		if (res != SQLITE_OK)
			HandleError(__FILE__LINE__ res, _T("sqlite3_bind_text16"));
#else
		res = sqlite3_bind_text(_lpStmt, no, value, valueSize, SQLITE_STATIC);

		if (res != SQLITE_OK)
			HandleError(__FILE__LINE__ res, _T("sqlite3_bind_text"));
#endif
	}
}
int RecorderDAO::RetrieveRecorderCount(SITE_T * site, sqlite3 * connection)
{
	int count = 0;
	sqlite3_stmt *stmt;

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

	if (!site)
		return count;

	if (sqlite3_prepare(conn, "SELECT count(*) FROM tb_recorder WHERE uuid in (SELECT recorder_uuid FROM tb_site_recorder WHERE site_uuid=?);", -1, &stmt, 0) == SQLITE_OK)
	{
		sqlite3_bind_text16(stmt, 1, site->uuid, -1, 0);
		int result = SQLITE_ERROR;
		while (true)
		{
			result = sqlite3_step(stmt);
			if (result == SQLITE_ROW)
			{
				count = sqlite3_column_int(stmt, 0);
			}
			else
				break;
		}
	}
	sqlite3_reset(stmt);
	sqlite3_finalize(stmt);
	return count;
}
/*!
	パヤーンを受け取って、該当するIDを返す。
	@param[in]	ptName	パヤーン
	@param[in]	dStart	検索開始ID・このIDの次の値から検索開始
	@return	ヒットしたID・無かったら0
*/
UINT SqlTreeFileSearch( LPTSTR ptName, UINT dStart )
{
	TCHAR	atReqest[SUB_STRING];
	INT		rslt;
	UINT	dxID;
	sqlite3_stmt*	statement;

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

	rslt = sqlite3_prepare( gpDataBase, ("SELECT id FROM TreeNode WHERE nodename LIKE ? AND id > ? ORDER BY id ASC"), -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}

	sqlite3_reset( statement );

	StringCchPrintf( atReqest, SUB_STRING, TEXT("%%%s%%"), ptName );
	rslt = sqlite3_bind_text16( statement, 1, atReqest, -1, SQLITE_STATIC );	//	
	sqlite3_bind_int( statement, 2, dStart );

	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt ){	dxID = sqlite3_column_int( statement, 0 );	}
	else{	dxID = 0;	}

	sqlite3_finalize( statement );

	return dxID;
}
/*!
	使ったAAを記録
	@param[in]	ptBaseName	基点ディレクトリ名
	@param[in]	dHash		AA認識用のハッシュ値
	@param[in]	pcConts		AA本体
	@param[in]	rdLength	バイト数
	@return		HRESULT	終了状態コード
*/
HRESULT SqlFavInsert( LPTSTR ptBaseName, DWORD dHash, LPSTR pcConts, UINT rdLength )
{
	CONST CHAR	acArtInsert[] = { ("INSERT INTO ArtList ( count, folder, lastuse, hash, conts ) VALUES ( ?, ?, ?, ?, ? )") };

	INT		rslt;
	CHAR	acText[MAX_PATH];
	DOUBLE	ddJulius;
	sqlite3_stmt	*statement;

	ZeroMemory( acText, sizeof(acText) );

	//	今のユリウス時間をゲット
	rslt = sqlite3_prepare( gpDataBase, ("SELECT julianday('now')"), -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return E_OUTOFMEMORY;	}
	sqlite3_step( statement );
	ddJulius = sqlite3_column_double( statement, 0 );
	sqlite3_finalize( statement );


	rslt = sqlite3_prepare( gpDataBase, acArtInsert, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return E_OUTOFMEMORY;	}
	sqlite3_reset( statement );
	rslt = sqlite3_bind_int(    statement, 1, 1 );			//	count
	rslt = sqlite3_bind_text16( statement, 2, ptBaseName, -1, SQLITE_STATIC );	//	folder
	rslt = sqlite3_bind_double( statement, 3, ddJulius );	//	lastuse
	rslt = sqlite3_bind_int(    statement, 4, dHash );		//	hash
	rslt = sqlite3_bind_blob(   statement, 5, pcConts, rdLength, SQLITE_STATIC );	//	conts

	rslt = sqlite3_step( statement );
	if( SQLITE_DONE != rslt ){	SQL_DEBUG( gpDataBase );	}
	sqlite3_finalize(statement);

	return S_OK;
}
Exemple #9
0
SQLiteStmt& SQLiteStmt::Bind(const wchar_t *Value, bool bStatic)
{
	if (Value)
		sqlite3_bind_text16(pStmt,param++,Value,-1,bStatic?SQLITE_STATIC:SQLITE_TRANSIENT);
	else
		sqlite3_bind_null(pStmt,param++);
	return *this;
}
Exemple #10
0
bool
O2DatDB::
bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wstring &str)
{
	int err = sqlite3_bind_text16(
		stmt, index, str.c_str(), str.size()*sizeof(wchar_t), SQLITE_STATIC);
	return (err == SQLITE_OK ? true : false);
}
Exemple #11
0
 static void set_param(row r, const Text& val, int index)
 {
 #if defined(_UNICODE) || defined(UNICODE)
     int nResult = sqlite3_bind_text16(r, index + 1, val.c_str(), -1, SQLITE_TRANSIENT);
 #else
     int nResult = sqlite3_bind_text(r, index + 1, val.c_str(), -1, SQLITE_TRANSIENT);
 #endif
     assert(SQLITE_OK == nResult);
 }
int SQLiteStatement::bindText(int index, const String& text)
{
    ASSERT(m_isPrepared);
    ASSERT(index > 0);
    ASSERT(static_cast<unsigned>(index) <= bindParameterCount());

    // SQLite treats uses zero pointers to represent null strings, which means we need to make sure to map null WTFStrings to zero pointers.
    ASSERT(!String().charactersWithNullTermination().data());
    return sqlite3_bind_text16(m_statement, index, text.charactersWithNullTermination().data(), sizeof(UChar) * text.length(), SQLITE_TRANSIENT);
}
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;
}
Exemple #14
0
int SQLiteStatement::bindText(int index, const String& text) {
  ASSERT(m_isPrepared);
  ASSERT(index > 0);
  ASSERT(static_cast<unsigned>(index) <= bindParameterCount());

  String text16(text);
  text16.ensure16Bit();
  return restrictError(
      sqlite3_bind_text16(m_statement, index, text16.characters16(),
                          sizeof(UChar) * text16.length(), SQLITE_TRANSIENT));
}
Exemple #15
0
	void SQLiteQuery::BindValue(int index, const SQLiteValue& value)
	{
		if (!stmt) throw SQLiteError(SQL_ERRCODE_NO_INIT);
		if (!index) throw SQLiteError(SQL_ERRCODE_NO_PARAM);

		int result = 0;
		switch (value.type)
		{
		case TYPE_STRING:
			{
				ObjString& str = (ObjString&)*value.object;
				result = sqlite3_bind_text(stmt, index, str.GetValue(),
					-1, SQLITE_TRANSIENT);
			} break;
			
		case TYPE_WSTRING:
			{
				ObjWString& str = (ObjWString&)*value.object;
				result = sqlite3_bind_text16(stmt, index, str.GetValue(),
					-1, SQLITE_TRANSIENT);
			} break;
		case TYPE_INT:
			{
				ObjNumber& num = (ObjNumber&)value.object;
				result = sqlite3_bind_int(stmt, index, (int)num.GetValue());
			}break;
		case TYPE_DOUBLE:
			{
				ObjNumber& num = (ObjNumber&)value.object;
				result = sqlite3_bind_double(stmt, index, num.GetValue());

			}break;
		case TYPE_BLOB:
			{
				ObjBlob& blob = (ObjBlob&)value.object;
				size_t length;
				BYTE* data = blob.GetData(length);
				result = sqlite3_bind_blob(stmt, index, data, length,
					SQLITE_TRANSIENT);

			}break;
		}

		// Handle any errors
		switch (result)
		{
		case SQLITE_OK:
			break;
		default:
			throw SQLiteError(parent.LastError());
			break;
		}	
	}
Exemple #16
0
BOOL SQLiteCommand::BindParam(int index, LPCTSTR szValue)
{
#ifdef  UNICODE 
	if (sqlite3_bind_text16(m_pStmt, index, szValue, -1, SQLITE_TRANSIENT) != SQLITE_OK)
#else
	if (sqlite3_bind_text(m_pStmt, index, szValue, -1, SQLITE_TRANSIENT) != SQLITE_OK)
#endif
	{
		return FALSE;
	}
	return TRUE;
}
void SqliteStatement::bind(int index, const QString &text)
{
    int resultCode;
    if (databaseTextEncoding() == Utf8) {
        QByteArray textUtf8 = text.toUtf8();
        resultCode = sqlite3_bind_text(compiledStatement.get(), index, textUtf8.constData(), textUtf8.size(), SQLITE_TRANSIENT);
    } else {
        resultCode = sqlite3_bind_text16(compiledStatement.get(), index, text.constData(), text.size() * 2, SQLITE_TRANSIENT);
    }

    if (resultCode != SQLITE_OK)
        throwException("SqliteStatement::bind: cant' not bind text!");
}
static void nativeBindString(JNIEnv* env, jclass clazz, jlong connectionPtr,
        jlong statementPtr, jint index, jstring valueString) {
    SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
    sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr);

    jsize valueLength = env->GetStringLength(valueString);
    const jchar* value = env->GetStringCritical(valueString, NULL);
    int err = sqlite3_bind_text16(statement, index, value, valueLength * sizeof(jchar),
            SQLITE_TRANSIENT);
    env->ReleaseStringCritical(valueString, value);
    if (err != SQLITE_OK) {
        throw_sqlite3_exception(env, connection->db, NULL);
    }
}
/*!
	お気に入りリストを基点ごと削除
	@param[in]	ptBaseName	基点ディレクトリ名
	@return		HRESULT		終了状態コード
*/
HRESULT SqlFavFolderDelete( LPTSTR ptBaseName )
{
	CONST CHAR	acFolderDelete[] = { ("DELETE FROM ArtList WHERE folder == ?") };
	INT		rslt;
	sqlite3_stmt	*statement;

	rslt = sqlite3_prepare( gpDataBase, acFolderDelete, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return E_OUTOFMEMORY;	}
	sqlite3_reset( statement );
	sqlite3_bind_text16( statement, 1, ptBaseName, -1, SQLITE_STATIC );	//	folder
	rslt = sqlite3_step( statement );
	sqlite3_finalize( statement );

	return S_OK;
}
/*!
	副タブ情報を追加
	@param[in]	ptFilePath	ファイルパス・空なら使用から開いた
	@param[in]	ptBaseName	ルート直下のディレクトリ名
	@param[in]	ptDispName	タブの表示名
	@return	UINT	いま登録したID番号・余り意味はない
*/
UINT SqlMultiTabInsert( LPCTSTR ptFilePath, LPCTSTR ptBaseName, LPCTSTR ptDispName )
{
	CONST CHAR	acMultitabInsert[] = { ("INSERT INTO MultiTab ( filepath, basename, dispname ) VALUES ( ?, ?, ? )") };
	CONST CHAR	acAddNumCheck[] = { ("SELECT LAST_INSERT_ROWID( ) FROM MultiTab") };

	INT		rslt;
	UINT	iRast = 0;
	sqlite3_stmt	*statement;

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

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

	sqlite3_reset( statement );
	rslt = sqlite3_bind_text16( statement, 1, ptFilePath, -1, SQLITE_STATIC );	//	filepath
	rslt = sqlite3_bind_text16( statement, 2, ptBaseName, -1, SQLITE_STATIC );	//	basename
	rslt = sqlite3_bind_text16( statement, 3, ptDispName, -1, SQLITE_STATIC );	//	dispname

	rslt = sqlite3_step( statement );
	if( SQLITE_DONE != rslt ){	SQL_DEBUG( gpDataBase );	}

	sqlite3_finalize( statement );

	//	今追加したやつのアレを取得
	rslt = sqlite3_prepare( gpDataBase, acAddNumCheck, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}

	rslt = sqlite3_step( statement );

	iRast = sqlite3_column_int( statement, 0 );

	sqlite3_finalize( statement );

	return iRast;
}
Exemple #21
0
void CppSQLite3Statement::bind(int nParam, const TCHAR* szValue)
{
	checkVM();
#ifdef _UNICODE
	int nRes = sqlite3_bind_text16(mpVM, nParam, szValue, -1, SQLITE_TRANSIENT);
#else
	int nRes = sqlite3_bind_text(mpVM, nParam, szValue, -1, SQLITE_TRANSIENT);
#endif

	if (nRes != SQLITE_OK)
	{
		throw CppSQLite3Exception(nRes,
								_T("Error binding string param"),
								DONT_DELETE_MSG);
	}
}
int SQLiteStatement::bindText(int index, const String& text)
{
    ASSERT(m_isPrepared);
    ASSERT(index > 0);
    ASSERT(static_cast<unsigned>(index) <= bindParameterCount());

    // String::characters() returns 0 for the empty string, which SQLite
    // treats as a null, so we supply a non-null pointer for that case.
    UChar anyCharacter = 0;
    const UChar* characters;
    if (text.isEmpty() && !text.isNull())
        characters = &anyCharacter;
    else
        characters = text.characters();

    return sqlite3_bind_text16(m_statement, index, characters, sizeof(UChar) * text.length(), SQLITE_TRANSIENT);
}
static void native_bind_string(JNIEnv* env, jobject object,
                               jint index, jstring sqlString)
{
    int err;
    jchar const * sql;
    jsize sqlLen;
    sqlite3_stmt * statement= GET_STATEMENT(env, object);

    sql = env->GetStringChars(sqlString, NULL);
    sqlLen = env->GetStringLength(sqlString);
    err = sqlite3_bind_text16(statement, index, sql, sqlLen * 2, SQLITE_TRANSIENT);
    env->ReleaseStringChars(sqlString, sql);
    if (err != SQLITE_OK) {
        char buf[32];
        sprintf(buf, "handle %p", statement);
        throw_sqlite3_exception(env, GET_HANDLE(env, object), buf);
        return;
    }
}
Exemple #24
0
void Sqlite3Connection::BindParam(int i, const Value& r) {
	if (IsNull(r))
		sqlite3_bind_null(current_stmt,i);
	else switch (r.GetType()) {
		case SQLRAW_V: {
			SqlRaw p = r;
			sqlite3_bind_blob(current_stmt, i, p, p.GetLength(), SQLITE_TRANSIENT);
			break;
		}
		case STRING_V:
		case WSTRING_V: {
			WString p = r;
			sqlite3_bind_text16(current_stmt,i,p,2*p.GetLength(),SQLITE_TRANSIENT);
			break;
		}
		case BOOL_V:
		case INT_V:
			sqlite3_bind_int(current_stmt, i, int(r));
			break;
		case INT64_V:
			sqlite3_bind_int64(current_stmt, i, int64(r));
			break;
		case DOUBLE_V:
			sqlite3_bind_double(current_stmt, i, double(r));
			break;
		case DATE_V: {
				Date d = r;
				String p = Format("%04d-%02d-%02d", d.year, d.month, d.day);
				sqlite3_bind_text(current_stmt,i,p,p.GetLength(),SQLITE_TRANSIENT);
			}
			break;
		case TIME_V: {
				Time t = r;
				String p = Format("%04d-%02d-%02d %02d:%02d:%02d",
						          t.year, t.month, t.day, t.hour, t.minute, t.second);
				sqlite3_bind_text(current_stmt,i,p,p.GetLength(),SQLITE_TRANSIENT);
			}
			break;
		default:
			NEVER();
	}
}
/**
Binds the parameter values for the insert SQL statement for security policies table.

@param aStmtHandle Statement handle.
@param aObjType Database object type: default security policy, database security policies, table security policies
@param aObjName Database object name. It is expected to be a non-empty string only for tables.
@param aPolicyType Security policy type: schema, write, read.
@param aPolicy Security policy object.

@see TSqlDbSysSettings::StoreSecurityPolicyL()

@panic SqlDb 4 In _DEBUG mode if aHandle argument is NULL.
*/
TInt TSqlDbSysSettings::BindSecurityPolicyPrm(sqlite3_stmt* aStmtHandle, TInt aObjType, const TDesC& aObjName, 
												  TInt aPolicyType, const TSecurityPolicy& aPolicy)
	{
	(void)sqlite3SymbianLastOsError();//clear last OS error
	TInt err = sqlite3_bind_int(aStmtHandle, KObjTypePrmIdx, aObjType);
	if(err == SQLITE_OK)
		{
		err = sqlite3_bind_text16(aStmtHandle, KObjNamePrmIdx, aObjName.Ptr(), aObjName.Length() * sizeof(TText), SQLITE_STATIC);
		if(err == SQLITE_OK)
			{
			err = sqlite3_bind_int(aStmtHandle, KObjPolicyTypePrmIdx, aPolicyType);
			if(err == SQLITE_OK)
				{
				TPtrC8 policyData(aPolicy.Package());
				err = sqlite3_bind_blob(aStmtHandle, KObjPolicyDataPrmIdx, policyData.Ptr(), policyData.Length(), SQLITE_STATIC);
				}
			}
		}
	return ::Sql2OsErrCode(err, sqlite3SymbianLastOsError());
	}
/*!
	ディレクトリかファイルのデータをドピュッ
	@param[in]	uqID	割当済のID番号
	@param[in]	dType	ディレクトリかファイルか
	@param[in]	dPrnt	親ツリーノードのSQL的ID番号
	@param[in]	ptName	ノードの名称
	@return	UINT	いま登録したID番号
*/
UINT SqlTreeNodeInsert( UINT uqID, UINT dType, UINT dPrnt, LPTSTR ptName )
{
	CONST CHAR	acTreeNodeInsert[] = { ("INSERT INTO TreeNode ( id, type, parentid, nodename ) VALUES ( ?, ?, ?, ? )") };
	CONST CHAR	acAddNumCheck[] = { ("SELECT LAST_INSERT_ROWID( ) FROM TreeNode") };

	INT		rslt;
	UINT	iRast = 0;
	sqlite3_stmt	*statement;
	

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

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

	sqlite3_reset( statement );
	rslt = sqlite3_bind_int(    statement, 1, uqID );	//	id
	rslt = sqlite3_bind_int(    statement, 2, dType );	//	type
	rslt = sqlite3_bind_int(    statement, 3, dPrnt );	//	parentid
	rslt = sqlite3_bind_text16( statement, 4, ptName, -1, SQLITE_STATIC );	//	nodename

	rslt = sqlite3_step( statement );
	if( SQLITE_DONE != rslt ){	SQL_DEBUG( gpDataBase );	}

	sqlite3_finalize( statement );

	//	今追加したやつのアレを取得
	rslt = sqlite3_prepare( gpDataBase, acAddNumCheck, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}

	rslt = sqlite3_step( statement );

	iRast = sqlite3_column_int( statement, 0 );

	sqlite3_finalize( statement );

	return iRast;
}
/*!
	エキストラファイルのデータをドピュッ
	@param[in]	dType	1ディレクトリか0ファイルか・とりあえず無視
	@param[in]	ptName	ノードの名称
	@return	UINT	いま登録したID番号
*/
UINT SqlTreeNodeExtraInsert( UINT dType, LPCTSTR ptName )
{
	CONST CHAR	acTreeNodeExIns[] = { ("INSERT INTO TreeNode ( type, parentid, nodename ) VALUES ( ?, ?, ? )") };
	CONST CHAR	acAddNumCheck[] = { ("SELECT LAST_INSERT_ROWID( ) FROM TreeNode") };

	INT		rslt;
	UINT	iRast = 0;
	sqlite3_stmt	*statement;

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

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

	//	ファイル固定、親IDは−1固定
	sqlite3_reset( statement );
	rslt = sqlite3_bind_int(    statement, 1, 0 );	//	type
	rslt = sqlite3_bind_int(    statement, 2, -1 );	//	parentid
	rslt = sqlite3_bind_text16( statement, 3, ptName, -1, SQLITE_STATIC );	//	nodename

	rslt = sqlite3_step( statement );
	if( SQLITE_DONE != rslt ){	SQL_DEBUG( gpDataBase );	}

	sqlite3_finalize( statement );

	//	今追加したやつのアレを取得・IDはいつでもユニークである
	rslt = sqlite3_prepare( gpDataBase, acAddNumCheck, -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}

	rslt = sqlite3_step( statement );

	iRast = sqlite3_column_int( statement, 0 );

	sqlite3_finalize( statement );

	return iRast;
}
/*!
	ファイル名指定して、同じのがあるかどうか
	@param[out]	ptName	ノードのパスいれるバッファ・MAX_PATHであること
	@return	UINT	ヒットしたやつのID・無かったら0
*/
UINT SqlTreeNodeExtraIsFileExist( LPCTSTR ptName ) 
{
	CONST CHAR	cacNameSearch[] = { ("SELECT id FROM TreeNode WHERE nodename == ?") };

	INT		rslt;
	UINT	id = 0;
	sqlite3_stmt*	statement;

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

	sqlite3_reset( statement );
	rslt = sqlite3_bind_text16( statement, 1, ptName, -1, SQLITE_STATIC );	//	nodename

	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt )
	{
		id = sqlite3_column_int( statement, 0 );	//	id
	}

	sqlite3_finalize( statement );

	return id;
}
/*!
	特定の親IDを持つノード名称を探して、該当するIDを返す。
	@param[in]	ptName	パヤーン
	@param[in]	dPrntID	特定の親ID
	@return	ヒットしたID・無かったら0
*/
UINT SqlTreeFileGetOnParent( LPTSTR ptName, UINT dPrntID )
{
	INT		rslt;
	UINT	dxID;
	sqlite3_stmt*	statement;

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

	rslt = sqlite3_prepare( gpDataBase, ("SELECT id FROM TreeNode WHERE nodename == ? AND parentid == ?"), -1, &statement, NULL );
	if( SQLITE_OK != rslt ){	SQL_DEBUG( gpDataBase );	return 0;	}

	sqlite3_reset( statement );

	rslt = sqlite3_bind_text16( statement, 1, ptName, -1, SQLITE_STATIC );	//	
	sqlite3_bind_int( statement, 2, dPrntID );

	rslt = sqlite3_step( statement );
	if( SQLITE_ROW == rslt ){	dxID = sqlite3_column_int( statement, 0 );	}
	else{	dxID = 0;	}

	sqlite3_finalize( statement );

	return dxID;
}
Exemple #30
0
void sqlite3_command::bind(int index, const wchar_t *data, int datalen) {
	if(sqlite3_bind_text16(this->stmt, index, data, datalen, SQLITE_TRANSIENT)!=SQLITE_OK)
		throw database_error(this->con);
}