DomExtract.ibeblock

execute ibeblock (
    CodeDir varchar(1000) = 'D:\IBEBlocks\' comment 'Path to necessary IBEBlocks',
    FileStrm variant)
 as
 begin
    FldTypeFunc = bec_LoadFromFile(CodeDir || 'FldType.ibeblock');

    if (FileStrm is not null) then
       FS = FileStrm;
    else
       FS = ibec_fs_OpenFile('D:\BlockScript.sql', __fmCreate);

 for select f.rdb$field_name, -- 0
            f.rdb$validation_source, -- 1
            f.rdb$computed_source, -- 2
            f.rdb$default_source, -- 3
            f.rdb$field_length, -- 4
            f.rdb$field_scale, -- 5
            f.rdb$field_type, -- 6
            f.rdb$field_sub_type, -- 7
            f.rdb$description, -- 8
            f.rdb$segment_length, -- 9
            f.rdb$dimensions, -- 10
            f.rdb$null_flag, -- 11
            f.rdb$character_length, -- 12
            f.rdb$collation_id, -- 13
            f.rdb$character_set_id, -- 14
            f.rdb$field_precision, -- 15
            ch.rdb$character_set_name, -- 16
            co.rdb$collation_name -- 17
       from rdb$fields fleft join rdb$character_sets ch on (f.rdb$character_set_id =  ch.rdb$character_set_id)
       left join rdb$collations co on ((f.rdb$collation_id = co.rdb$collation_id) and 
            (f.rdb$character_set_id = co.rdb$character_set_id))
       where not (f.rdb$field_name starting with 'RDB$')
       order by rdb$field_name
       into :DomProps
   do
   begin
      DomName = DomProps[0];
          execute ibeblock FldTypeFunc(DomProps[6], DomProps[7], DomProps[4], DomProps[5], DomProps[9],
                                       DomProps[12], DomProps[15], 3)
          returning_values :FieldType;
      DomType = FieldType;

      -- Character Set
      if ((DomProps[6] in (14, 37, 261)) and (DomProps[16] is not null)) then
         DomType = DomType || ' CHARACTER SET ' || ibec_trim(DomProps[16]) || ibec_Chr(13) || ibec_Chr (10);

      -- Default Value
      if ((DomProps[3] is not null) and (DomProps[3] <> '')) then
         DomType = DomType || ibec_trim(DomProps[3]) || ibec_Chr(13) || ibec_Chr(10);

      -- NOT NULL flag
      if (DomProps[11] is not null) then
         DomType = DomType || 'NOT NULL' || ibec_Chr(13) || ibec_Chr(10);

      -- Check source
      if ((DomProps[1] is not null) and (DomProps[1] <> '')) then
         DomType = DomType || ibec_trim(DomProps[1]) || ibec_Chr(13) || ibec_Chr(10);

      -- Collate
      if ((DomProps[17] is not null) and (DomProps[17] <> '')) then
         DomType = DomType || 'COLLATE ' || ibec_trim(DomProps[17]) || ibec_Chr(13) || ibec_Chr(10);

      DomType = ibec_Chr(13) || ibec_Chr(10) || ibec_Trim(DomType) || ';';
      ibec_progress('Writing domain ' || DomName);
      ibec_fs_Writeln(FS, 'CREATE DOMAIN ' || ibec_Trim(DomProps[0]) || DomType);
      ibec_fs_Writeln(FS, '');
   end

   if (FileStrm is null) then
      ibec_fs_CloseFile(FS);
 end

back to top of page
<< Extract metadata using IBEBlock | IBEBlock | FldType.ibeblock >>