@@ -2610,6 +2610,7 @@ static void tracking_free(void *engine, void *xdata) {
26102610 free (engine );
26112611}
26122612
2613+ #ifndef DBMEM_OMIT_REMOTE_ENGINE
26132614TEST (sqlite_set_model_releases_previous_engine_on_class_switch ) {
26142615 sqlite3 * db = open_test_db ();
26152616 ASSERT (db != NULL );
@@ -2639,6 +2640,37 @@ TEST(sqlite_set_model_releases_previous_engine_on_class_switch) {
26392640 sqlite3_close (db );
26402641 ASSERT_EQ (state .free_count , 1 );
26412642}
2643+ #else
2644+ TEST (sqlite_set_model_failed_remote_switch_keeps_custom_engine ) {
2645+ sqlite3 * db = open_test_db ();
2646+ ASSERT (db != NULL );
2647+
2648+ sqlite3_int64 result = 0 ;
2649+ int rc = exec_get_int (db , "SELECT memory_set_apikey('test-key');" , & result );
2650+ ASSERT_EQ (rc , SQLITE_OK );
2651+
2652+ tracking_free_state_t state = {0 };
2653+ dbmem_provider_t prov = { .init = tracking_init , .compute = tracking_compute , .free = tracking_free , .xdata = & state };
2654+ rc = sqlite3_memory_register_provider (db , "tracker" , & prov );
2655+ ASSERT_EQ (rc , SQLITE_OK );
2656+
2657+ rc = exec_get_int (db , "SELECT memory_set_model('tracker', 'm1');" , & result );
2658+ ASSERT_EQ (rc , SQLITE_OK );
2659+ ASSERT_EQ (state .free_count , 0 );
2660+
2661+ sqlite3_stmt * stmt = NULL ;
2662+ rc = sqlite3_prepare_v2 (db , "SELECT memory_set_model('openai', 'text-embedding-3-small');" , -1 , & stmt , NULL );
2663+ ASSERT_EQ (rc , SQLITE_OK );
2664+ rc = sqlite3_step (stmt );
2665+ ASSERT_EQ (rc , SQLITE_ERROR );
2666+ sqlite3_finalize (stmt );
2667+
2668+ ASSERT_EQ (state .free_count , 0 );
2669+
2670+ sqlite3_close (db );
2671+ ASSERT_EQ (state .free_count , 1 );
2672+ }
2673+ #endif
26422674
26432675#endif // TEST_SQLITE_EXTENSION
26442676
@@ -2779,7 +2811,11 @@ int main(int argc, char *argv[]) {
27792811 RUN_TEST (sqlite_custom_provider_init_error );
27802812 RUN_TEST (sqlite_custom_provider_apikey_passed );
27812813 RUN_TEST (sqlite_set_model_failed_reindex_preserves_existing_rows );
2814+ #ifndef DBMEM_OMIT_REMOTE_ENGINE
27822815 RUN_TEST (sqlite_set_model_releases_previous_engine_on_class_switch );
2816+ #else
2817+ RUN_TEST (sqlite_set_model_failed_remote_switch_keeps_custom_engine );
2818+ #endif
27832819#endif
27842820
27852821 printf ("\n=== Results ===\n" );
0 commit comments