DB_STATUS adc_1getempty_rti( ADF_CB *adf_scb, DB_DATA_VALUE *adc_emptydv) /* Ptr to empty data value */ { #ifdef xDEBUG DB_STATUS db_stat; /* check the validity of the length of the data value */ if (db_stat = adc_lenchk(adf_scb, FALSE, adc_emptydv, NULL)) return(db_stat); #endif /* xDEBUG */ /* fill up the data value with the "default-default" value. */ switch (adc_emptydv->db_datatype) { case DB_CHA_TYPE: case DB_CHR_TYPE: /* fill character data with blanks. */ MEfill(adc_emptydv->db_length, (u_char)' ', adc_emptydv->db_data); break; case DB_NCHR_TYPE: *(UCS2 *) adc_emptydv->db_data = U_BLANK; break; case DB_LOGKEY_TYPE: case DB_TABKEY_TYPE: /* fill character data with zeros. */ MEfill(adc_emptydv->db_length, (u_char)0, adc_emptydv->db_data); break; case DB_DTE_TYPE: { AD_DATENTRNL *dp = (AD_DATENTRNL *) adc_emptydv->db_data; /* Date datatypes are defaultable by set status to AD_DN_NULL. */ dp->dn_status = AD_DN_NULL; dp->dn_year = 0; dp->dn_month = 0; dp->dn_highday = 0; dp->dn_lowday = 0; dp->dn_time = 0; } break; case DB_ADTE_TYPE: { AD_ADATE *ad = (AD_ADATE *) adc_emptydv->db_data; ad->dn_year = 0; ad->dn_month = 0; ad->dn_day = 0; } break; case DB_TMWO_TYPE: case DB_TMW_TYPE: case DB_TME_TYPE: { AD_TIME *adtm = (AD_TIME *) adc_emptydv->db_data; adtm->dn_seconds = 0; adtm->dn_nsecond = 0; AD_TZ_SET(adtm, 0); } break; case DB_TSWO_TYPE: case DB_TSW_TYPE: case DB_TSTMP_TYPE: { AD_TIMESTAMP *atstmp = (AD_TIMESTAMP *) adc_emptydv->db_data; atstmp->dn_year = 0; atstmp->dn_month = 0; atstmp->dn_day = 0; atstmp->dn_seconds = 0; atstmp->dn_nsecond = 0; AD_TZ_SET(atstmp, 0); } break; case DB_INYM_TYPE: { AD_INTYM *aintym = (AD_INTYM *) adc_emptydv->db_data; aintym->dn_years = 0; aintym->dn_months = 0; } break; case DB_INDS_TYPE: { AD_INTDS *aintds = (AD_INTDS *) adc_emptydv->db_data; aintds->dn_days = 0; aintds->dn_seconds = 0; aintds->dn_nseconds = 0; } break; case DB_BOO_TYPE: ((DB_ANYTYPE *)adc_emptydv->db_data)->db_booltype = DB_FALSE; break; case DB_INT_TYPE: if (adc_emptydv->db_length == 1) *(i1 *) adc_emptydv->db_data = 0; else if (adc_emptydv->db_length == 2) *(i2 *) adc_emptydv->db_data = 0; else if (adc_emptydv->db_length == 4) *(i4 *) adc_emptydv->db_data = 0; else if (adc_emptydv->db_length == 8) *(i8 *) adc_emptydv->db_data = 0; break; case DB_DEC_TYPE: MEfill(adc_emptydv->db_length, (u_char)0, adc_emptydv->db_data); ((u_char *)adc_emptydv->db_data)[adc_emptydv->db_length-1] = MH_PK_PLUS; break; case DB_FLT_TYPE: if (adc_emptydv->db_length == 4) *(f4 *) adc_emptydv->db_data = 0.0; else *(f8 *) adc_emptydv->db_data = 0.0; break; case DB_MNY_TYPE: ((AD_MONEYNTRNL *) adc_emptydv->db_data)->mny_cents= 0.0; break; case DB_VCH_TYPE: case DB_TXT_TYPE: case DB_LTXT_TYPE: case DB_VBYTE_TYPE: ((DB_TEXT_STRING *) adc_emptydv->db_data)->db_t_count = 0; *((DB_TEXT_STRING *)adc_emptydv->db_data)->db_t_text = '\0'; break; case DB_LVCH_TYPE: case DB_LBYTE_TYPE: case DB_GEOM_TYPE: case DB_POINT_TYPE: case DB_MPOINT_TYPE: case DB_LINE_TYPE: case DB_MLINE_TYPE: case DB_POLY_TYPE: case DB_MPOLY_TYPE: case DB_GEOMC_TYPE: case DB_LBIT_TYPE: case DB_LNVCHR_TYPE: { ADP_PERIPHERAL *periph = (ADP_PERIPHERAL *) adc_emptydv->db_data; periph->per_tag = ADP_P_DATA; periph->per_length0 = periph->per_length1 = 0; } break; case DB_LBLOC_TYPE: case DB_LCLOC_TYPE: case DB_LNLOC_TYPE: { ADP_PERIPHERAL *periph = (ADP_PERIPHERAL *) adc_emptydv->db_data; periph->per_tag = ADP_P_LOC_L_UNK; periph->per_length0 = periph->per_length1 = 0; MEfill (sizeof(ADP_LOCATOR), 0, ((char *)periph + ADP_HDR_SIZE)); } break; case DB_VBIT_TYPE: ((DB_BIT_STRING *) adc_emptydv->db_data)->db_b_count = 0; break; case DB_BIT_TYPE: case DB_BYTE_TYPE: case DB_NBR_TYPE: MEfill(adc_emptydv->db_length, (u_char)0, adc_emptydv->db_data); break; case DB_NVCHR_TYPE: ((DB_NVCHR_STRING *) adc_emptydv->db_data)->count = 0; break; default: return(adu_error(adf_scb, E_AD9999_INTERNAL_ERROR, 0)); } return(E_DB_OK); }
DB_STATUS adc_hg_dtln( ADF_CB *adf_scb, DB_DATA_VALUE *adc_fromdv, DB_DATA_VALUE *adc_hgdv) { DB_STATUS db_stat; i4 bdt = abs((i4) adc_fromdv->db_datatype); i4 bdtv; i4 dtinfo; /* Data type status bits for this type */ for (;;) { /* Check the consistency of the input datatype id */ bdtv = ADI_DT_MAP_MACRO(bdt); if (bdtv <= 0 || bdtv > ADI_MXDTS || Adf_globs->Adi_dtptrs[bdtv] == NULL) { db_stat = adu_error(adf_scb, E_AD2004_BAD_DTID, 0); break; } /* Return error for datatypes that cannot be used in a relation or ** do not support histograms */ /* Get datatype status bits into dtinfo */ db_stat = adi_dtinfo(adf_scb, adc_fromdv->db_datatype, &dtinfo); if (!(dtinfo & AD_INDB) || (dtinfo & AD_NOHISTOGRAM)) { /* This datatype can't be used in a relation or doesn't support ** histograms */ db_stat = adu_error(adf_scb, E_AD3011_BAD_HG_DTID, 0); break; } #ifdef xDEBUG /* Check the consistency of adc_fromdv's length */ if (db_stat = adc_lenchk(adf_scb, FALSE, adc_fromdv, NULL)) break; #endif /* xDEBUG */ /* ** Now call the low-level routine to do the work. Note that if the ** datatype is nullable, we use a temp DV_DATA_VALUE which gets set ** to the corresponding base datatype and length. */ if (adc_fromdv->db_datatype > 0) /* non-nullable */ { db_stat = (*Adf_globs->Adi_dtptrs[ADI_DT_MAP_MACRO(bdt)]-> adi_dt_com_vect.adp_hg_dtln_addr) (adf_scb, adc_fromdv, adc_hgdv); } else /* nullable */ { DB_DATA_VALUE tmp_dv = *adc_fromdv; tmp_dv.db_datatype = bdt; tmp_dv.db_length--; db_stat = (*Adf_globs->Adi_dtptrs[ADI_DT_MAP_MACRO(bdt)]-> adi_dt_com_vect.adp_hg_dtln_addr) (adf_scb, &tmp_dv, adc_hgdv); } break; } /* end of for stmt */ return(db_stat); }