@@ -8915,6 +8915,111 @@ static int vec0Rollback(sqlite3_vtab *pVTab) {
89158915 return SQLITE_OK ;
89168916}
89178917
8918+ static int vec0Rename (sqlite3_vtab * pVTab , const char * zName ) {
8919+ vec0_vtab * p = (vec0_vtab * )pVTab ;
8920+ sqlite3_stmt * stmt ;
8921+ int rc ;
8922+ const char * zSql ;
8923+
8924+ vec0_free_resources (p );
8925+
8926+ zSql = sqlite3_mprintf ("ALTER TABLE " VEC0_SHADOW_CHUNKS_NAME " RENAME TO \"%w_chunks\"" ,
8927+ p -> schemaName , p -> tableName , zName );
8928+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
8929+ sqlite3_free ((void * )zSql );
8930+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
8931+ rc = SQLITE_ERROR ;
8932+ vtab_set_error (pVTab , "could not rename chunks shadow table" );
8933+ goto done ;
8934+ }
8935+ sqlite3_finalize (stmt );
8936+
8937+ zSql = sqlite3_mprintf ("ALTER TABLE " VEC0_SHADOW_INFO_NAME " RENAME TO \"%w_info\"" , p -> schemaName ,
8938+ p -> tableName , zName );
8939+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
8940+ sqlite3_free ((void * )zSql );
8941+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
8942+ rc = SQLITE_ERROR ;
8943+ vtab_set_error (pVTab , "could not rename info shadow table" );
8944+ goto done ;
8945+ }
8946+ sqlite3_finalize (stmt );
8947+
8948+ zSql = sqlite3_mprintf ("ALTER TABLE " VEC0_SHADOW_ROWIDS_NAME " RENAME TO \"%w_rowids\"" , p -> schemaName ,
8949+ p -> tableName , zName );
8950+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
8951+ sqlite3_free ((void * )zSql );
8952+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
8953+ rc = SQLITE_ERROR ;
8954+ vtab_set_error (pVTab , "could not rename rowids shadow table" );
8955+ goto done ;
8956+ }
8957+ sqlite3_finalize (stmt );
8958+
8959+ for (int i = 0 ; i < p -> numVectorColumns ; i ++ ) {
8960+ char * newShadowVectorChunksName = sqlite3_mprintf ("%s_vector_chunks%02d" , zName , i );
8961+ if (!newShadowVectorChunksName ) {
8962+ return SQLITE_NOMEM ;
8963+ }
8964+ zSql = sqlite3_mprintf ("ALTER TABLE \"%w\".\"%w\" RENAME TO \"%w\"" , p -> schemaName ,
8965+ p -> shadowVectorChunksNames [i ], newShadowVectorChunksName );
8966+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
8967+ sqlite3_free ((void * )zSql );
8968+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
8969+ rc = SQLITE_ERROR ;
8970+ vtab_set_error (pVTab , "could not rename vector_chunks shadow table" );
8971+ goto done ;
8972+ }
8973+ sqlite3_finalize (stmt );
8974+ }
8975+
8976+ if (p -> numAuxiliaryColumns > 0 ) {
8977+ zSql = sqlite3_mprintf ("ALTER TABLE " VEC0_SHADOW_AUXILIARY_NAME " RENAME TO \"%w_auxiliary\"" ,
8978+ p -> schemaName , p -> tableName , zName );
8979+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
8980+ sqlite3_free ((void * )zSql );
8981+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
8982+ rc = SQLITE_ERROR ;
8983+ vtab_set_error (pVTab , "could not rename auxiliary shadow table" );
8984+ goto done ;
8985+ }
8986+ sqlite3_finalize (stmt );
8987+ }
8988+
8989+ for (int i = 0 ; i < p -> numMetadataColumns ; i ++ ) {
8990+ zSql = sqlite3_mprintf ("ALTER TABLE " VEC0_SHADOW_METADATA_N_NAME " RENAME TO \"%w_metadatachunks%02d\"" ,
8991+ p -> schemaName , p -> tableName , i , zName , i );
8992+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
8993+ sqlite3_free ((void * )zSql );
8994+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
8995+ rc = SQLITE_ERROR ;
8996+ vtab_set_error (pVTab , "could not rename metadatachunks shadow table" );
8997+ goto done ;
8998+ }
8999+ sqlite3_finalize (stmt );
9000+
9001+ if (p -> metadata_columns [i ].kind == VEC0_METADATA_COLUMN_KIND_TEXT ) {
9002+ zSql = sqlite3_mprintf ("ALTER TABLE " VEC0_SHADOW_METADATA_TEXT_DATA_NAME " RENAME TO \"%w_metadatatext%02d\"" ,
9003+ p -> schemaName , p -> tableName , i , zName , i );
9004+ rc = sqlite3_prepare_v2 (p -> db , zSql , -1 , & stmt , 0 );
9005+ sqlite3_free ((void * )zSql );
9006+ if ((rc != SQLITE_OK ) || (sqlite3_step (stmt ) != SQLITE_DONE )) {
9007+ rc = SQLITE_ERROR ;
9008+ vtab_set_error (pVTab , "could not rename metadatatext shadow table" );
9009+ goto done ;
9010+ }
9011+ sqlite3_finalize (stmt );
9012+ }
9013+ }
9014+
9015+ stmt = NULL ;
9016+ rc = SQLITE_OK ;
9017+
9018+ done :
9019+ sqlite3_finalize (stmt );
9020+ return rc ;
9021+ }
9022+
89189023static sqlite3_module vec0Module = {
89199024 /* iVersion */ 3 ,
89209025 /* xCreate */ vec0Create ,
@@ -8935,7 +9040,7 @@ static sqlite3_module vec0Module = {
89359040 /* xCommit */ vec0Commit ,
89369041 /* xRollback */ vec0Rollback ,
89379042 /* xFindFunction */ 0 ,
8938- /* xRename */ 0 , // https://github.com/asg017/sqlite-vec/issues/43
9043+ /* xRename */ vec0Rename ,
89399044 /* xSavepoint */ 0 ,
89409045 /* xRelease */ 0 ,
89419046 /* xRollbackTo */ 0 ,
0 commit comments