NMD
Defines | Functions
u21.c File Reference
#include <stdlib.h>
#include "memory.h"
#include "nmd.h"
Include dependency graph for u21.c:

Go to the source code of this file.

Defines

#define ILEN   4
#define RLEN   6

Functions

int main (int argc, char **argv)

Define Documentation

#define ILEN   4
#define RLEN   6

Function Documentation

int main ( int  argc,
char **  argv 
)

Object database output

Definition at line 10 of file u21.c.

References ILEN, NMD_FREE, NMD_MALLOC, NMDCategoryGetComponents(), NMDCreateObject(), NMDDestroyObject(), NMDFalse, NMDGetArrayValue(), NMDGetCategories(), NMDGetTypeMySQLName(), NMDGetValue(), NMDInt, NMDIntarray, NMDIsArrayType(), NMDReal, NMDRealarray, NMDReportObject(), NMDSetArrayValue(), NMDSetValue(), NMDTrue, and RLEN.

                               {
  NMD_metadata nmd; NMDErrorCode ierr; 
  int i=5; double r=6.7;
  int *ii; double *rr;
  PetscFunctionBegin;
/* #if !defined(HAVE_MYSQL) */
/*   printf("This test only works with MySQL enabled\n"); */
/*   PetscFunctionReturn(0); */
/* #endif */
  PetscInitialize(&argc,&argv,0,0);

  ierr = NMDCreateObject(&nmd); NMD_ERR_RETURN(ierr);

  ierr = NMDSetValue(nmd,"cat1","cmp1",NMDInt,&i); NMD_ERR_RETURN(ierr);
  ierr = NMDSetValue(nmd,"cat1","cmp2",NMDReal,&r); NMD_ERR_RETURN(ierr);

#define ILEN 4
  NMD_MALLOC(ii,ILEN,int,"int array");
  for (i=0; i<ILEN; i++) ii[i] = 2*i;
  ierr = NMDSetArrayValue
    (nmd,"cat1","cmp3",NMDIntarray,&ii,ILEN); NMD_ERR_RETURN(ierr);

#define RLEN 6
  NMD_MALLOC(rr,RLEN,NMDRealtype,"real array");
  for (i=0; i<RLEN; i++) rr[i] = i*i;
  ierr = NMDSetArrayValue
    (nmd,"cat1","cmp4",NMDRealarray,&rr,RLEN); NMD_ERR_RETURN(ierr);

  {
    const char *s1,*s2,*s3;
    ierr = NMDReportObject
      (nmd,NMDFalse,&s1,&s2,'\n',0,0); NMD_ERR_RETURN(ierr);
    printf("keys:\n%s\nvalues:\n%s\n",s1,s2);
    ierr = NMDReportObject
      (nmd,NMDTrue,NULL,&s3,'\n',0,0); NMD_ERR_RETURN(ierr);
    printf("values with arrays:\n%s\n",s3);
    NMD_FREE(s1);
    NMD_FREE(s2);
    NMD_FREE(s3);
  }

  printf("CREATE TABLE yourtable (\n");
  {
    int ncat,icat,iwrite=0; char **cats;
    ierr = NMDGetCategories(nmd,&ncat,&cats); CHKERRQ(ierr);
    for (icat=0; icat<ncat; icat++) {
      int ncmp,icmp; const char **cmps; NMDDataType *types;
      ierr = NMDCategoryGetComponents
        (nmd,cats[icat],&ncmp,&cmps,&types); CHKERRQ(ierr);
      for (icmp=0; icmp<ncmp; icmp++) {
        const char *type;
        if (iwrite>0) printf(",\n"); iwrite++;
        ierr = NMDGetTypeMySQLName(types[icmp],&type); CHKERRQ(ierr);
        printf("  `%s-%s` %s",cats[icat],cmps[icmp],type);
      }
      NMD_FREE(cmps); NMD_FREE(types);
    }
    NMD_FREE(cats);
  }
  printf("\n)\n");

  printf("simple printout\n");
  {
    int ncat,icat; char **cats;
    ierr = NMDGetCategories(nmd,&ncat,&cats); CHKERRQ(ierr);
    for (icat=0; icat<ncat; icat++) {
      int ncmp,icmp; const char **cmps; NMDDataType *types;
      ierr = NMDCategoryGetComponents
        (nmd,cats[icat],&ncmp,&cmps,&types); CHKERRQ(ierr);
      for (icmp=0; icmp<ncmp; icmp++) {
        NMDTruth success; int l;
        ierr = NMDIsArrayType(types[icmp],&success); CHKERRQ(ierr);
        if (success) {
          int *ii; double *rr;
          if (!success) NMD_ERR_REPORTss("Should have been able to retrieve",
                                         cats[icat],cmps[icmp]);
          switch (types[icmp]) {
          case NMDIntarray :
            ierr = NMDGetArrayValue
              (nmd,cats[icat],cmps[icmp],NULL,&ii,&l,&success); CHKERRQ(ierr);
            if (!success) NMD_ERR_REPORT("oops3");
            printf("  `%s-%s` %dints",cats[icat],cmps[icmp],l); break;
          case NMDRealarray :
            ierr = NMDGetArrayValue
              (nmd,cats[icat],cmps[icmp],NULL,&rr,&l,&success); CHKERRQ(ierr);
            if (!success) NMD_ERR_REPORT("oops3");
            printf("  `%s-%s` %dfloats",cats[icat],cmps[icmp],l); break;
          default:
            NMD_ERR_REPORT("Unexpected array type")
          }
        } else {
          int i; double r;
          switch (types[icmp]) {
          case NMDInt :  
            ierr = NMDGetValue
              (nmd,cats[icat],cmps[icmp],NULL,&i,&success); CHKERRQ(ierr);
            if (!success) NMD_ERR_REPORT("oops1");
            printf("  `%s-%s` %d",cats[icat],cmps[icmp],i); break;
          case NMDReal :
            ierr = NMDGetValue
              (nmd,cats[icat],cmps[icmp],NULL,&r,&success); CHKERRQ(ierr);
            if (!success) NMD_ERR_REPORT("oops2");
            printf("  `%s-%s` %9.4f",cats[icat],cmps[icmp],r); break;
          default :
            NMD_ERR_REPORT("Unexpected scalar type");
          }
        }
        printf("\n");
      }
      NMD_FREE(cmps); NMD_FREE(types);
    }
    NMD_FREE(cats);
  }
  printf("INSERT INTO yourtable (\n");
  {
    const char *keys,*vals;
    ierr = NMDReportObject(nmd,NMDFalse,&keys,&vals,',','`','`'); CHKERRQ(ierr);
    printf("(%s)\nVALUES\n(%s);\n",keys,vals);
    NMD_FREE(keys); NMD_FREE(vals);
  }
  printf("\n)\n");

  NMD_FREE(ii);
  NMD_FREE(rr);
  ierr = NMDDestroyObject(nmd); NMD_ERR_RETURN(ierr);

  PetscFinalize();
  PetscFunctionReturn(0);
}

Here is the call graph for this function: