| 46 | // |
| 47 | |
| 48 | void JRDMET_init( gpre_dbb* db) |
| 49 | { |
| 50 | const int* relfld = relfields; |
| 51 | |
| 52 | while (relfld[RFLD_R_NAME]) |
| 53 | { |
| 54 | gpre_rel* relation = (gpre_rel*) MSC_alloc(REL_LEN); |
| 55 | relation->rel_database = db; |
| 56 | relation->rel_next = db->dbb_relations; |
| 57 | relation->rel_id = relfld[RFLD_R_ID]; |
| 58 | db->dbb_relations = relation; |
| 59 | gpre_sym* symbol = (gpre_sym*) MSC_alloc(SYM_LEN); |
| 60 | relation->rel_symbol = symbol; |
| 61 | symbol->sym_type = SYM_relation; |
| 62 | symbol->sym_object = (gpre_ctx*) relation; |
| 63 | |
| 64 | symbol->sym_string = names[relfld[RFLD_R_NAME]]; |
| 65 | HSH_insert(symbol); |
| 66 | |
| 67 | const int* fld = relfld + RFLD_RPT; |
| 68 | for (int n = 0; fld[RFLD_F_NAME]; ++n, fld += RFLD_F_LENGTH) |
| 69 | { |
| 70 | const gfld* gfield = &gfields[fld[RFLD_F_ID]]; |
| 71 | gpre_fld* field = (gpre_fld*) MSC_alloc(FLD_LEN); |
| 72 | relation->rel_fields = field; |
| 73 | field->fld_relation = relation; |
| 74 | field->fld_next = relation->rel_fields; |
| 75 | field->fld_id = n; |
| 76 | field->fld_length = gfield->gfld_length; |
| 77 | field->fld_dtype = gfield->gfld_dtype; |
| 78 | field->fld_sub_type = gfield->gfld_sub_type; |
| 79 | if (field->fld_dtype == dtype_varying || field->fld_dtype == dtype_text) |
| 80 | { |
| 81 | if (gfield->gfld_sub_type == dsc_text_type_fixed) |
| 82 | field->fld_dtype = dtype_text; |
| 83 | else |
| 84 | { |
| 85 | field->fld_dtype = dtype_cstring; |
| 86 | ++field->fld_length; |
| 87 | } |
| 88 | |
| 89 | field->fld_flags |= FLD_text; |
| 90 | |
| 91 | if (gfield->gfld_sub_type == dsc_text_type_metadata) |
| 92 | { |
| 93 | if (gpreGlob.sw_language == lang_internal) |
| 94 | field->fld_flags |= FLD_charset; |
| 95 | |
| 96 | field->fld_charset_id = CS_METADATA; |
| 97 | field->fld_collate_id = COLLATE_NONE; |
| 98 | field->fld_ttype = ttype_metadata; |
| 99 | } |
| 100 | else |
| 101 | { |
| 102 | if (gpreGlob.sw_language == lang_internal) |
| 103 | field->fld_flags |= FLD_charset; |
| 104 | |
| 105 | field->fld_charset_id = gfield->gfld_sub_type == dsc_text_type_fixed ? CS_BINARY : CS_NONE; |
no test coverage detected