README
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:4k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. Here are general trigger functions provided as workable examples
  2. of using SPI and triggers. "General" means that functions may be
  3. used for defining triggers for any tables but you have to specify
  4. table/field names (as described below) while creating a trigger.
  5. 1. refint.c - functions for implementing referential integrity.
  6. check_primary_key () is to used for foreign keys of a table.
  7.    
  8.    You are to create trigger (BEFORE INSERT OR UPDATE) using this 
  9. function on a table referencing another table. You are to specify
  10. as function arguments: triggered table column names which correspond
  11. to foreign key, referenced table name and column names in referenced
  12. table which correspond to primary/unique key.
  13.    You may create as many triggers as you need - one trigger for
  14. one reference.
  15. check_foreign_key () is to used for primary/unique keys of a table.
  16.    You are to create trigger (BEFORE DELETE OR UPDATE) using this
  17. function on a table referenced by another table(s). You are to specify
  18. as function arguments: number of references for which function has to
  19. performe checking, action if referencing key found ('cascade' - to delete
  20. corresponding foreign key, 'restrict' - to abort transaction if foreign keys 
  21. exist, 'setnull' - to set foreign key referencing primary/unique key
  22. being deleted to null), triggered table column names which correspond
  23. to primary/unique key, referencing table name and column names corresponding
  24. to foreign key (, ... - as many referencing tables/keys as specified
  25. by first argument).
  26.    Note, that NOT NULL constraint and unique index have to be defined by
  27. youself.
  28.    There are examples in refint.example and regression tests
  29. (sql/triggers.sql).
  30.    To CREATE FUNCTIONs use refint.sql (will be made by gmake from
  31. refint.source).
  32. 2. timetravel.c - functions for implementing time travel feature.
  33.    Old internally supported time-travel (TT) used insert/delete
  34. transaction commit times. To get the same feature using triggers
  35. you are to add to a table two columns of abstime type to store
  36. date when a tuple was inserted (start_date) and changed/deleted 
  37. (stop_date):
  38. CREATE TABLE XXX (
  39. ... ...
  40. date_on abstime default currabstime(),
  41. date_off abstime default 'infinity'
  42. ... ...
  43. );
  44. - so, tuples being inserted with NULLs in date_on/date_off will get
  45. _current_date_ in date_on (name of start_date column in XXX) and INFINITY in
  46. date_off (name of stop_date column in XXX).
  47.    Tuples with stop_date equal INFINITY are "valid now": when trigger will
  48. be fired for UPDATE/DELETE of a tuple with stop_date NOT equal INFINITY then
  49. this tuple will not be changed/deleted!
  50.    If stop_date equal INFINITY then on
  51. UPDATE: only stop_date in tuple being updated will be changed to current
  52. date and new tuple with new data (coming from SET ... in UPDATE) will be
  53. inserted. Start_date in this new tuple will be setted to current date and
  54. stop_date - to INFINITY.
  55. DELETE: new tuple will be inserted with stop_date setted to current date
  56. (and with the same data in other columns as in tuple being deleted).
  57.    NOTE:
  58. 1. To get tuples "valid now" you are to add _stop_date_ = 'infinity'
  59.    to WHERE. Internally supported TT allowed to avoid this...
  60.    Fixed rewriting RULEs could help here...
  61.    As work arround you may use VIEWs...
  62. 2. You can't change start/stop date columns with UPDATE! 
  63.    Use set_timetravel (below) if you need in this.
  64.    FUNCTIONs:
  65. timetravel() is general trigger function.
  66.    You are to create trigger BEFORE (!!!) UPDATE OR DELETE using this
  67. function on a time-traveled table. You are to specify two arguments: name of
  68. start_date column and name of stop_date column in triggered table.
  69. currabstime() may be used in DEFAULT for start_date column to get
  70. current date.
  71. set_timetravel() allows you turn time-travel ON/OFF for a table:
  72.    set_timetravel('XXX', 1) will turn TT ON for table XXX (and report
  73. old status).
  74.    set_timetravel('XXX', 0) will turn TT OFF for table XXX (-"-).
  75. Turning TT OFF allows you do with a table ALL what you want.
  76.    There is example in timetravel.example.
  77.    To CREATE FUNCTIONs use timetravel.sql (will be made by gmake from
  78. timetravel.source).