NMD
u21.c
Go to the documentation of this file.
00001 #include <stdlib.h>
00002 #include "memory.h"
00003 #include "nmd.h"
00004 #if defined(HAVE_MYSQL)
00005 #include "mysql.h"      
00006 MYSQL *dbase;
00007 #endif
00008 
00009 /*! Object database output */
00010 int main(int argc,char **argv) {
00011   NMD_metadata nmd; NMDErrorCode ierr; 
00012   int i=5; double r=6.7;
00013   int *ii; double *rr;
00014   PetscFunctionBegin;
00015 /* #if !defined(HAVE_MYSQL) */
00016 /*   printf("This test only works with MySQL enabled\n"); */
00017 /*   PetscFunctionReturn(0); */
00018 /* #endif */
00019   PetscInitialize(&argc,&argv,0,0);
00020 
00021   ierr = NMDCreateObject(&nmd); NMD_ERR_RETURN(ierr);
00022 
00023   ierr = NMDSetValue(nmd,"cat1","cmp1",NMDInt,&i); NMD_ERR_RETURN(ierr);
00024   ierr = NMDSetValue(nmd,"cat1","cmp2",NMDReal,&r); NMD_ERR_RETURN(ierr);
00025 
00026 #define ILEN 4
00027   NMD_MALLOC(ii,ILEN,int,"int array");
00028   for (i=0; i<ILEN; i++) ii[i] = 2*i;
00029   ierr = NMDSetArrayValue
00030     (nmd,"cat1","cmp3",NMDIntarray,&ii,ILEN); NMD_ERR_RETURN(ierr);
00031 
00032 #define RLEN 6
00033   NMD_MALLOC(rr,RLEN,NMDRealtype,"real array");
00034   for (i=0; i<RLEN; i++) rr[i] = i*i;
00035   ierr = NMDSetArrayValue
00036     (nmd,"cat1","cmp4",NMDRealarray,&rr,RLEN); NMD_ERR_RETURN(ierr);
00037 
00038   {
00039     const char *s1,*s2,*s3;
00040     ierr = NMDReportObject
00041       (nmd,NMDFalse,&s1,&s2,'\n',0,0); NMD_ERR_RETURN(ierr);
00042     printf("keys:\n%s\nvalues:\n%s\n",s1,s2);
00043     ierr = NMDReportObject
00044       (nmd,NMDTrue,NULL,&s3,'\n',0,0); NMD_ERR_RETURN(ierr);
00045     printf("values with arrays:\n%s\n",s3);
00046     NMD_FREE(s1);
00047     NMD_FREE(s2);
00048     NMD_FREE(s3);
00049   }
00050 
00051   printf("CREATE TABLE yourtable (\n");
00052   {
00053     int ncat,icat,iwrite=0; char **cats;
00054     ierr = NMDGetCategories(nmd,&ncat,&cats); CHKERRQ(ierr);
00055     for (icat=0; icat<ncat; icat++) {
00056       int ncmp,icmp; const char **cmps; NMDDataType *types;
00057       ierr = NMDCategoryGetComponents
00058         (nmd,cats[icat],&ncmp,&cmps,&types); CHKERRQ(ierr);
00059       for (icmp=0; icmp<ncmp; icmp++) {
00060         const char *type;
00061         if (iwrite>0) printf(",\n"); iwrite++;
00062         ierr = NMDGetTypeMySQLName(types[icmp],&type); CHKERRQ(ierr);
00063         printf("  `%s-%s` %s",cats[icat],cmps[icmp],type);
00064       }
00065       NMD_FREE(cmps); NMD_FREE(types);
00066     }
00067     NMD_FREE(cats);
00068   }
00069   printf("\n)\n");
00070 
00071   printf("simple printout\n");
00072   {
00073     int ncat,icat; char **cats;
00074     ierr = NMDGetCategories(nmd,&ncat,&cats); CHKERRQ(ierr);
00075     for (icat=0; icat<ncat; icat++) {
00076       int ncmp,icmp; const char **cmps; NMDDataType *types;
00077       ierr = NMDCategoryGetComponents
00078         (nmd,cats[icat],&ncmp,&cmps,&types); CHKERRQ(ierr);
00079       for (icmp=0; icmp<ncmp; icmp++) {
00080         NMDTruth success; int l;
00081         ierr = NMDIsArrayType(types[icmp],&success); CHKERRQ(ierr);
00082         if (success) {
00083           int *ii; double *rr;
00084           if (!success) NMD_ERR_REPORTss("Should have been able to retrieve",
00085                                          cats[icat],cmps[icmp]);
00086           switch (types[icmp]) {
00087           case NMDIntarray :
00088             ierr = NMDGetArrayValue
00089               (nmd,cats[icat],cmps[icmp],NULL,&ii,&l,&success); CHKERRQ(ierr);
00090             if (!success) NMD_ERR_REPORT("oops3");
00091             printf("  `%s-%s` %dints",cats[icat],cmps[icmp],l); break;
00092           case NMDRealarray :
00093             ierr = NMDGetArrayValue
00094               (nmd,cats[icat],cmps[icmp],NULL,&rr,&l,&success); CHKERRQ(ierr);
00095             if (!success) NMD_ERR_REPORT("oops3");
00096             printf("  `%s-%s` %dfloats",cats[icat],cmps[icmp],l); break;
00097           default:
00098             NMD_ERR_REPORT("Unexpected array type")
00099           }
00100         } else {
00101           int i; double r;
00102           switch (types[icmp]) {
00103           case NMDInt :  
00104             ierr = NMDGetValue
00105               (nmd,cats[icat],cmps[icmp],NULL,&i,&success); CHKERRQ(ierr);
00106             if (!success) NMD_ERR_REPORT("oops1");
00107             printf("  `%s-%s` %d",cats[icat],cmps[icmp],i); break;
00108           case NMDReal :
00109             ierr = NMDGetValue
00110               (nmd,cats[icat],cmps[icmp],NULL,&r,&success); CHKERRQ(ierr);
00111             if (!success) NMD_ERR_REPORT("oops2");
00112             printf("  `%s-%s` %9.4f",cats[icat],cmps[icmp],r); break;
00113           default :
00114             NMD_ERR_REPORT("Unexpected scalar type");
00115           }
00116         }
00117         printf("\n");
00118       }
00119       NMD_FREE(cmps); NMD_FREE(types);
00120     }
00121     NMD_FREE(cats);
00122   }
00123   printf("INSERT INTO yourtable (\n");
00124   {
00125     const char *keys,*vals;
00126     ierr = NMDReportObject(nmd,NMDFalse,&keys,&vals,',','`','`'); CHKERRQ(ierr);
00127     printf("(%s)\nVALUES\n(%s);\n",keys,vals);
00128     NMD_FREE(keys); NMD_FREE(vals);
00129   }
00130   printf("\n)\n");
00131 
00132   NMD_FREE(ii);
00133   NMD_FREE(rr);
00134   ierr = NMDDestroyObject(nmd); NMD_ERR_RETURN(ierr);
00135 
00136   PetscFinalize();
00137   PetscFunctionReturn(0);
00138 }