MCPcopy Create free account
hub / github.com/audacity/audacity / Commit

Method Commit

libraries/lib-project-file-io/SqliteSampleBlock.cpp:770–839  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

768}
769
770void SqliteSampleBlock::Commit(Sizes sizes)
771{
772 const auto mSummary256Bytes = sizes.first;
773 const auto mSummary64kBytes = sizes.second;
774
775 auto db = DB();
776 int rc;
777
778 // Prepare and cache statement...automatically finalized at DB close
779 sqlite3_stmt *stmt = Conn()->Prepare(DBConnection::InsertSampleBlock,
780 "INSERT INTO sampleblocks (sampleformat, summin, summax, sumrms,"
781 " summary256, summary64k, samples)"
782 " VALUES(?1,?2,?3,?4,?5,?6,?7);");
783
784 // Bind statement parameters
785 // Might return SQLITE_MISUSE which means it's our mistake that we violated
786 // preconditions; should return SQL_OK which is 0
787 if (sqlite3_bind_int(stmt, 1, static_cast<int>(mSampleFormat)) ||
788 sqlite3_bind_double(stmt, 2, mSumMin) ||
789 sqlite3_bind_double(stmt, 3, mSumMax) ||
790 sqlite3_bind_double(stmt, 4, mSumRms) ||
791 sqlite3_bind_blob(stmt, 5, mSummary256.get(), mSummary256Bytes, SQLITE_STATIC) ||
792 sqlite3_bind_blob(stmt, 6, mSummary64k.get(), mSummary64kBytes, SQLITE_STATIC) ||
793 sqlite3_bind_blob(stmt, 7, mSamples.get(), mSampleBytes, SQLITE_STATIC))
794 {
795
796 ADD_EXCEPTION_CONTEXT(
797 "sqlite3.rc", std::to_string(sqlite3_errcode(Conn()->DB())));
798 ADD_EXCEPTION_CONTEXT("sqlite3.context", "SqliteSampleBlock::Commit::bind");
799
800
801 wxASSERT_MSG(false, wxT("Binding failed...bug!!!"));
802 }
803
804 // Execute the statement
805 rc = sqlite3_step(stmt);
806 if (rc != SQLITE_DONE)
807 {
808 ADD_EXCEPTION_CONTEXT("sqlite3.rc", std::to_string(rc));
809 ADD_EXCEPTION_CONTEXT("sqlite3.context", "SqliteSampleBlock::Commit::step");
810
811 wxLogDebug(wxT("SqliteSampleBlock::Commit - SQLITE error %s"), sqlite3_errmsg(db));
812
813 // Clear statement bindings and rewind statement
814 sqlite3_clear_bindings(stmt);
815 sqlite3_reset(stmt);
816
817 // Just showing the user a simple message, not the library error too
818 // which isn't internationalized
819 Conn()->ThrowException( true );
820 }
821
822 // Retrieve returned data
823 mBlockID = sqlite3_last_insert_rowid(db);
824
825 // Reset local arrays
826 mSamples.reset();
827 mSummary256.reset();

Callers

nothing calls this directly

Calls 6

to_stringFunction · 0.85
PrepareMethod · 0.80
ThrowExceptionMethod · 0.80
getMethod · 0.45
DBMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected