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; }
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 }
void Session::_BindParameter(sqlite3_stmt *statement, const Param ¶m, 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")); } }
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; }
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; }
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); }
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; }
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)); }
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; } }
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; }
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; } }
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; }
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); }