home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / upgrade_database.tcl < prev    next >
Text File  |  1996-06-03  |  7KB  |  285 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #    (c) Cadre Technologies Inc. 1996
  4. #
  5. #    File:        %W%
  6. #    Author:        Harm Leijendeckers
  7. #    Description:    Upgrade an Ot4OMT-4.0/00 repository database
  8. #            structure to an Ot4OMT-4.0/01 repository
  9. #
  10. #---------------------------------------------------------------------------
  11. # SccsId = %W%    %G%    Copyright 1996 Cadre Technologies Inc.
  12.  
  13. source [m4_path_name tcl libocl.tcl]
  14.  
  15. require upgrade_tools.tcl
  16. require upgrade_labels.tcl
  17.  
  18.  
  19. proc create_fipropref { tableId } {
  20.     catch {
  21.     db query "create table fipropref$tableId ("
  22.     db query     "c_id       varchar(64) primary key,"
  23.     db query     "c_hasacl   smallint,"
  24.     db query     "c_name     varchar(80),"
  25.     db query     "c_type     varchar(20),"
  26.     db query     "c_systemv  varchar(64),"
  27.     db query     "c_status   smallint,"
  28.     db query     "c_reffile  varchar(64),"
  29.     db query     "c_reffilev varchar(64) )"
  30.     db run
  31.     }
  32. }
  33.  
  34.  
  35. proc create_itpropref { tableId } {
  36.     catch {
  37.     db query "create table itpropref$tableId ("
  38.     db query     "c_id        varchar(64) primary key,"
  39.     db query     "c_hasacl    smallint,"
  40.     db query     "c_name      varchar(80),"
  41.     db query     "c_type      varchar(20),"
  42.     db query     "c_systemv   varchar(64),"
  43.     db query     "c_proprefst varchar(64),"
  44.     db query     "c_status    smallint,"
  45.     db query     "c_refobject varchar(64),"
  46.     db query     "c_refitem   varchar(64) )"
  47.     db run
  48.     }
  49. }
  50.  
  51.  
  52. proc create_proprefst { tableId } {
  53.     catch {
  54.     db query "create table proprefst$tableId ("
  55.     db query     "c_id      varchar(64) primary key,"
  56.     db query     "c_propref varchar(64) )"
  57.     db run
  58.     }
  59. }
  60.  
  61.  
  62. proc create_proprefl { tableId } {
  63.     catch {
  64.     db query "create table proprefl$tableId ("
  65.     db query     "c_id       varchar(64) primary key,"
  66.     db query     "c_hasacl   smallint,"
  67.     db query     "c_owner    varchar(64),"
  68.     db query     "c_hasncacl smallint )"
  69.     db run
  70.     }
  71. }
  72.  
  73.  
  74. proc update_extlink { tableId } {
  75.     #add_field extlink$tableId c_name varchar(80) c_systemv
  76.     #add_field extlink$tableId c_type varchar(20) c_systemv
  77.  
  78.     db select c_id
  79.     db select c_path
  80.     db from   extlink$tableId
  81.     set allLinks [db runLoop]
  82.  
  83.     foreach link $allLinks {
  84.     set id [lvarpop link]
  85.     set path [lvarpop link]
  86.     set name [path_name base $path]
  87.     set type [path_name type $path]
  88.  
  89.     db update extlink$tableId
  90.     db set    -s c_name $name
  91.     db set    -s c_type $type
  92.     db where  -s "c_id =" $id
  93.     db run
  94.     }
  95. }
  96.  
  97.  
  98. proc update_sysfiref { tableId } {
  99.     #add_field sysfiref$tableId c_name varchar(80) c_systemv
  100.     #add_field sysfiref$tableId c_type varchar(20) c_systemv
  101.  
  102.     # new name = 'sysfiref.reffile.item.name'_'sysfiref.reffile.type'
  103.     # new type = 'sysfiref.reffile.type'
  104.     db select c_id
  105.     db select c_reffile
  106.     db from   sysfiref$tableId
  107.     set firefdatas [db runLoop]
  108.  
  109.     foreach firefdata $firefdatas {
  110.     set refid   [lvarpop firefdata]
  111.     set reffile [lvarpop firefdata]
  112.  
  113.     # construct new name
  114.     db select -s c_item
  115.     db select -s c_type
  116.     db from   file$tableId
  117.     db where  -s c_id= $reffile
  118.     set result [db run]
  119.     set itemid   [lvarpop result]
  120.     set filetype [lvarpop result]
  121.  
  122.     db select -s c_name
  123.     db from   item$tableId
  124.     db where  -s c_id= $itemid
  125.     set itemname [db run]
  126.  
  127.     db update sysfiref$tableId
  128.     db set    -s c_name $itemname\_$filetype
  129.     db set    -s c_type $filetype
  130.     db where  -s c_id= $refid
  131.     db run
  132.     }
  133. }
  134.  
  135.  
  136. proc update_systemv { tableId } {
  137.     #add_field systemv$tableId c_proprefl varchar(64) c_iscope
  138.  
  139.     db select c_id
  140.     db from systemv$tableId
  141.     set allSystemVersions [db runLoop]
  142.  
  143.     foreach sv $allSystemVersions {
  144.     set newObid [gen_obid PropertyReferenceList $tableId]
  145.     db query "update systemv$tableId"
  146.     db query     "set c_proprefl = '$newObid'"
  147.     db query     "where c_id = '$sv'"
  148.     db run
  149.  
  150.     db query "insert into proprefl$tableId values ("
  151.     db query     "'$newObid', 1, '$sv', 0 )"
  152.     db run
  153.     }
  154. }
  155.  
  156.  
  157. proc update_release { release } {
  158.     db update corporate0
  159.     db set -s c_release $release
  160.     db run
  161. }
  162.  
  163.  
  164. proc upgrade_corporate { release } {
  165.     update_release $release
  166. }
  167.  
  168.  
  169. proc update_project { tableId projectId } {
  170.  
  171.     puts "    Updating tables"
  172.  
  173.     update_extlink  $tableId
  174.     update_sysfiref $tableId
  175.     update_systemv  $tableId
  176.  
  177.     set newObid [gen_obid ControlledClass $tableId]
  178.     db query "insert into controlc$tableId values ("
  179.     db query     "'$newObid', 1, 'PropertyReferenceList',"
  180.     db query     "'PropertyReferenceList', 121, '$projectId' )"
  181.     db run
  182.  
  183.     set newObid [gen_obid ControlledClass $tableId]
  184.     db query "insert into controlc$tableId values ("
  185.     db query     "'$newObid', 1, 'FilePropertyReference',"
  186.     db query     "'FilePropertyReference', 543, '$projectId' )"
  187.     db run
  188.  
  189.     set newObid [gen_obid ControlledClass $tableId]
  190.     db query "insert into controlc$tableId values ("
  191.     db query     "'$newObid', 1, 'ItemPropertyReference',"
  192.     db query     "'ItemPropertyReference', 543, '$projectId' )"
  193.     db run
  194.  
  195.     puts "    Updating labels"
  196.  
  197.     update_labels $tableId
  198. }
  199.  
  200.  
  201. # Update structure of tables for a project
  202. #
  203. proc update_tables { tableId } {
  204.     puts "    Adding new fields"
  205.  
  206.     add_field systemv$tableId  c_proprefl varchar(64) c_iscope
  207.     add_field extlink$tableId  c_name      varchar(80) c_systemv
  208.     add_field extlink$tableId  c_type      varchar(20) c_systemv
  209.     add_field sysfiref$tableId c_name      varchar(80) c_systemv
  210.     add_field sysfiref$tableId c_type      varchar(20) c_systemv
  211.     add_field systemv$tableId  c_proprefl varchar(64) c_iscope
  212.  
  213.     puts "    Creating new tables"
  214.  
  215.     create_fipropref $tableId
  216.     create_itpropref $tableId
  217.     create_proprefst $tableId
  218.     create_proprefl  $tableId
  219. }
  220.  
  221.  
  222. proc upgrade40 {} {
  223.     # global var initialization
  224.     set from_release Ot4OMT-4.0/00
  225.     set to_release   Ot4OMT-4.0/01
  226.  
  227.     puts "Upgrading repository structure of database '[db name]'"
  228.     puts ""
  229.  
  230.     if ![lempty $argv] {
  231.     puts "Usage: dbserver -f upgrade40.tcl <databaseName>"
  232.     return 1
  233.     }
  234.  
  235.     set this_release [get_release]
  236.  
  237.     # do nothing if the release of the repository is the same as the one
  238.     # we're upgrading to
  239.     if { $this_release == $to_release } {
  240.     puts "Repository is already of release '$to_release'"
  241.     return 0
  242.     }
  243.  
  244.     if { $this_release != $from_release } {
  245.     puts "Can only upgrade from release '$release'"
  246.     return 1
  247.     }
  248.  
  249.     # SQL Server only:
  250.     #    update tables outside transaction
  251.     #
  252.     foreach project [get_projects] {
  253.     puts "Upgrading project (structure) '[lvarpop project]'"
  254.     set projectId [lvarpop project]
  255.     set tableId [lvarpop project]
  256.     update_tables $tableId
  257.     }
  258.  
  259.     db begin
  260.  
  261.     upgrade_corporate $to_release
  262.  
  263.     foreach project [get_projects] {
  264.     puts "Upgrading project (default contents) '[lvarpop project]'"
  265.     set projectId [lvarpop project]
  266.     set tableId [lvarpop project]
  267.     update_project $tableId $projectId
  268.     }
  269.  
  270.     db commit
  271.  
  272.     puts ""
  273.     puts "Upgrading repository structure finished"
  274.  
  275.     return 0
  276. }
  277.  
  278.  
  279. if { [catch { set retval [upgrade40] } string] == 1 } {
  280.     puts $errorInfo
  281.     exit 1
  282. }
  283.  
  284. exit $retval
  285.