@@ -412,6 +412,38 @@ pub fn drop_project_view(job_name: &str) -> String {
412412 format ! ( "DROP VIEW IF EXISTS vectorize.{job_name}_view;" )
413413}
414414
415+ pub fn drop_embeddings_table ( job_name : & str ) -> String {
416+ format ! ( "DROP TABLE IF EXISTS vectorize._embeddings_{job_name} CASCADE;" )
417+ }
418+
419+ pub fn drop_search_tokens_table ( job_name : & str ) -> String {
420+ format ! ( "DROP TABLE IF EXISTS vectorize._search_tokens_{job_name} CASCADE;" )
421+ }
422+
423+ pub fn drop_trigger_handler ( job_name : & str ) -> String {
424+ format ! ( "DROP FUNCTION IF EXISTS {TRIGGER_FN_PREFIX}{job_name}() CASCADE;" )
425+ }
426+
427+ pub fn drop_event_trigger (
428+ job_name : & str ,
429+ src_schema : & str ,
430+ src_table : & str ,
431+ event : & str ,
432+ ) -> String {
433+ format ! (
434+ "DROP TRIGGER IF EXISTS vectorize_{event_name}_trigger_{job_name} ON {src_schema}.{src_table};" ,
435+ event_name = event. to_lowercase( )
436+ )
437+ }
438+
439+ pub fn drop_search_tokens_trigger ( job_name : & str , src_schema : & str , src_table : & str ) -> String {
440+ format ! ( "DROP TRIGGER IF EXISTS {job_name}_search_tokens_trigger ON {src_schema}.{src_table};" )
441+ }
442+
443+ pub fn delete_job_record ( job_name : & str ) -> String {
444+ format ! ( "DELETE FROM vectorize.job WHERE job_name = '{job_name}';" )
445+ }
446+
415447/// creates a function that can be called by trigger
416448pub fn create_trigger_handler ( job_name : & str , pkey : & str ) -> String {
417449 format ! (
@@ -1406,4 +1438,97 @@ EXECUTE FUNCTION vectorize.handle_update_another_job();"
14061438 assert_eq ! ( filter. operator, FilterOperator :: Equal ) ;
14071439 }
14081440 }
1441+
1442+ #[ test]
1443+ fn test_drop_embeddings_table ( ) {
1444+ let job_name = "test_job" ;
1445+ let result = drop_embeddings_table ( job_name) ;
1446+ assert_eq ! (
1447+ result,
1448+ "DROP TABLE IF EXISTS vectorize._embeddings_test_job CASCADE;"
1449+ ) ;
1450+ }
1451+
1452+ #[ test]
1453+ fn test_drop_search_tokens_table ( ) {
1454+ let job_name = "test_job" ;
1455+ let result = drop_search_tokens_table ( job_name) ;
1456+ assert_eq ! (
1457+ result,
1458+ "DROP TABLE IF EXISTS vectorize._search_tokens_test_job CASCADE;"
1459+ ) ;
1460+ }
1461+
1462+ #[ test]
1463+ fn test_drop_trigger_handler ( ) {
1464+ let job_name = "test_job" ;
1465+ let result = drop_trigger_handler ( job_name) ;
1466+ assert ! ( result. contains( "DROP FUNCTION IF EXISTS" ) ) ;
1467+ assert ! ( result. contains( "vectorize.handle_update_test_job()" ) ) ;
1468+ assert ! ( result. contains( "CASCADE" ) ) ;
1469+ }
1470+
1471+ #[ test]
1472+ fn test_drop_event_trigger ( ) {
1473+ let job_name = "test_job" ;
1474+ let src_schema = "public" ;
1475+ let src_table = "my_table" ;
1476+
1477+ let insert_trigger = drop_event_trigger ( job_name, src_schema, src_table, "INSERT" ) ;
1478+ assert_eq ! (
1479+ insert_trigger,
1480+ "DROP TRIGGER IF EXISTS vectorize_insert_trigger_test_job ON public.my_table;"
1481+ ) ;
1482+
1483+ let update_trigger = drop_event_trigger ( job_name, src_schema, src_table, "UPDATE" ) ;
1484+ assert_eq ! (
1485+ update_trigger,
1486+ "DROP TRIGGER IF EXISTS vectorize_update_trigger_test_job ON public.my_table;"
1487+ ) ;
1488+ }
1489+
1490+ #[ test]
1491+ fn test_drop_search_tokens_trigger ( ) {
1492+ let job_name = "test_job" ;
1493+ let src_schema = "public" ;
1494+ let src_table = "my_table" ;
1495+
1496+ let result = drop_search_tokens_trigger ( job_name, src_schema, src_table) ;
1497+ assert_eq ! (
1498+ result,
1499+ "DROP TRIGGER IF EXISTS test_job_search_tokens_trigger ON public.my_table;"
1500+ ) ;
1501+ }
1502+
1503+ #[ test]
1504+ fn test_delete_job_record ( ) {
1505+ let job_name = "test_job" ;
1506+ let result = delete_job_record ( job_name) ;
1507+ assert_eq ! (
1508+ result,
1509+ "DELETE FROM vectorize.job WHERE job_name = 'test_job';"
1510+ ) ;
1511+ }
1512+
1513+ #[ test]
1514+ fn test_drop_project_view ( ) {
1515+ let job_name = "test_job" ;
1516+ let result = drop_project_view ( job_name) ;
1517+ assert_eq ! ( result, "DROP VIEW IF EXISTS vectorize.test_job_view;" ) ;
1518+ }
1519+
1520+ #[ test]
1521+ fn test_cleanup_sql_with_special_chars ( ) {
1522+ // Test that job names with underscores work correctly
1523+ let job_name = "my_test_job_123" ;
1524+
1525+ let embeddings = drop_embeddings_table ( job_name) ;
1526+ assert ! ( embeddings. contains( "_embeddings_my_test_job_123" ) ) ;
1527+
1528+ let tokens = drop_search_tokens_table ( job_name) ;
1529+ assert ! ( tokens. contains( "_search_tokens_my_test_job_123" ) ) ;
1530+
1531+ let view = drop_project_view ( job_name) ;
1532+ assert ! ( view. contains( "my_test_job_123_view" ) ) ;
1533+ }
14091534}
0 commit comments