home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / serial_utl.tcl < prev    next >
Text File  |  1997-09-25  |  3KB  |  102 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1993-1995 by Cadre Technologies Inc.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Cadre Technologies Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #    File        : @(#)serial_utl.tcl    /main/titanic/3
  17. #    Author        : peku
  18. #    Original date    : 28-7-1993
  19. #    Description    : procedures to support the serial data type
  20. #
  21. #---------------------------------------------------------------------------
  22. #
  23. # @(#)serial_utl.tcl    /main/titanic/3 25 Sep 1997 Copyright 1992-1995 Cadre Technologies Inc.
  24. #
  25. #---------------------------------------------------------------------------
  26.  
  27.  
  28. #---------------------------------------------------------------------------
  29. #
  30. # PROCEDURES TO SUPPORT MAPPING OF TYPE "serial" TO "integer" WHEN NEEDED
  31. #
  32. #---------------------------------------------------------------------------
  33.  
  34. # Is 'type' serial?
  35. #
  36. proc is_serial {type} {
  37.     return [regexp -nocase {^ *serial( *\( *[0-9]+ *\))?} $type]
  38. }
  39.  
  40. global get_type_4gl
  41. set get_type_4gl get_inf_type_4gl
  42.  
  43. # The "normal" way to get the 4gl type. Always does the mapping
  44. #
  45. proc get_inf_type_4gl {column} {
  46.     set type [get_type_4gl $column]
  47.     if [is_serial $type] {
  48.     return INTEGER
  49.     }
  50.     return $type
  51. }
  52.  
  53. # A special variant of get_type_4gl for create table statements. Type "serial"
  54. # is mapped to integer for all imported columns
  55. #
  56. proc get_table_type {column} {
  57.     if {[$column get_obj_type] == "column"} {
  58.     return [get_type_4gl $column]
  59.     }
  60.     return [get_inf_type_4gl $column]
  61. }
  62.  
  63. # find the serial column
  64.  
  65. proc get_serial_column_name {table} {
  66.     foreach col [ $table columnSet] {
  67.         set col_type [get_table_type $col]
  68.         if [is_serial $col_type] {
  69.             return [$col getUniqueName]
  70.         }
  71.     }
  72.     return ""
  73. }
  74.  
  75. # update the data field which is a serial in the base class
  76.  
  77. proc call_for_all_bases_set_serial {class sect} {
  78.     set supers [$class genNodeSet]
  79.     if [lempty $supers] {
  80.         return
  81.     }
  82.     foreach super $supers {
  83.         set superClass [$super superClass]
  84.         if {![$superClass isPersistent]} {
  85.             continue
  86.         }
  87.         call_for_all_bases_set_serial $superClass $sect
  88.         set table [$superClass table]
  89.         set serial_name [get_serial_column_name $table]
  90.         if {$serial_name == ""} {
  91.             continue
  92.         }
  93.         set name [$super getSuperClassName]
  94.         $sect indent +
  95.         expand_text $sect {
  96.             data.~$serial_name = ~$name::data.~$serial_name;
  97.         }
  98.         $sect indent -
  99.     }
  100. }
  101.  
  102.