Changeset 18467

Show
Ignore:
Timestamp:
06.02.2009 18:16:32 (11 years ago)
Author:
davidb
Message:

Additions made to dbutil so various DB backends can support deletion from database

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/perllib/dbutil.pm

    r18441 r18467  
    168168 
    169169 
     170sub delete_infodb_entry 
     171{ 
     172  my $infodb_type = shift(@_); 
     173  my $infodb_handle = shift(@_); 
     174  my $infodb_key = shift(@_); 
     175 
     176  if ($infodb_type eq "sqlite") 
     177  { 
     178    return &delete_infodb_entry_sqlite($infodb_handle, $infodb_key); 
     179  } 
     180  elsif ($infodb_type eq "gdbm-txtgz") 
     181  { 
     182    return &delete_infodb_entry_gdbm_txtgz($infodb_handle, $infodb_key); 
     183  } 
     184  elsif ($infodb_type eq "mssql") 
     185  { 
     186    return &delete_infodb_entry_mssql($infodb_handle, $infodb_key); 
     187  } 
     188 
     189  # Use GDBM if the infodb type is empty or not one of the values above 
     190  return &delete_infodb_entry_gdbm($infodb_handle, $infodb_key); 
     191} 
     192 
     193 
    170194 
    171195# ----------------------------------------------------------------------------- 
     
    276300 
    277301 
     302sub delete_infodb_entry_gdbm_txtgz 
     303{ 
     304 
     305  my $infodb_handle = shift(@_); 
     306  my $infodb_key = shift(@_); 
     307   
     308 
     309  # A minus at the end of a key (after the ]) signifies 'delete' 
     310  print $infodb_handle "[$infodb_key]-\n";  
     311 
     312  # The 70 minus signs are also needed, to help make the parsing by db2txt simple 
     313  print $infodb_handle '-' x 70, "\n"; 
     314} 
     315 
     316 
    278317 
    279318# ----------------------------------------------------------------------------- 
     
    369408  # With infodb_handle already set up, works the same as _gdbm_txtgz version 
    370409  write_infodb_entry_gdbm_txtgz(@_); 
     410} 
     411 
     412sub delete_infodb_entry_gdbm 
     413{ 
     414  # With infodb_handle already set up, works the same as _gdbm_txtgz version 
     415  delete_infodb_entry_gdbm_txtgz(@_); 
    371416} 
    372417 
     
    486531  } 
    487532} 
     533 
     534 
     535 
     536sub delete_infodb_entry_sqlite 
     537{ 
     538  my $infodb_handle = shift(@_); 
     539  my $infodb_key = shift(@_); 
     540 
     541  # Delete the key from the "data" table 
     542 
     543  my $safe_infodb_key = &sqlite_safe($infodb_key); 
     544 
     545  print $infodb_handle "DELETE FROM data WHERE key='" . $safe_infodb_key . "';\n"; 
     546 
     547  # If this infodb entry is for a document, delete the 
     548  #   "document_metadata" table entry also (for use by the dynamic classifiers) 
     549  if ($infodb_key !~ /\./) 
     550  { 
     551      # Possible for there not to be a docOID matching this infodb_key 
     552      # (entries are only made when <doctype> == doc 
     553      # Attempt to delete it, and don't complain if one isn't found 
     554 
     555      print $infodb_handle "DELETE FROM document_metadata WHERE docOID='" . $safe_infodb_key . "';\n"; 
     556 
     557  } 
     558} 
     559 
     560 
     561 
     562 
    488563 
    489564 
     
    667742} 
    668743 
     744sub delete_infodb_entry_mssql 
     745{ 
     746  my $infodb_handle = shift(@_); 
     747  my $infodb_key = shift(@_); 
     748   
     749  # Delete the key from the "data" table 
     750 
     751   
     752  # Prepare the query 
     753  my $safe_infodb_key = &mssql_safe($infodb_key); 
     754  my $query = "DELETE FROM " . $mssql_data_table_name . " WHERE one_key=N'" . $safe_infodb_key . "'"; 
     755  dbquery($infodb_handle, $query); 
     756   
     757  # If this infodb entry is for a document, add all the interesting document metadata to the 
     758  # "document_metadata" table (for use by the dynamic classifiers) 
     759  if ($infodb_key !~ /\./) 
     760  { 
     761      # Possible for there not to be a docOID matching this infodb_key 
     762      # (entries are only made when <doctype> == doc 
     763      # Attempt to delete it, and don't complain if one isn't found 
     764 
     765      dbquery($infodb_handle, "DELETE FROM " . $mssql_document_metadata_table_name . " WHERE docOID=N'" . $safe_infodb_key . "'"); 
     766       
     767  } 
     768} 
     769 
     770 
    669771 
    670772sub mssql_safe