Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}