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
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
00016
00017
00018
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 char *s1,*s2,*s3;
00040 ierr = NMDReportObject
00041 (nmd,NMDFalse,&s1,&s2,'\n',NULL,NULL); NMD_ERR_RETURN(ierr);
00042 printf("keys:\n%s\nvalues:\n%s\n",s1,s2);
00043 ierr = NMDReportObject
00044 (nmd,NMDTrue,NULL,&s3,'\n',NULL,NULL); 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; char **cmps; NMDDataType *types;
00057 ierr = NMDCategoryGetComponents
00058 (nmd,cats[icat],&ncmp,&cmps,&types); CHKERRQ(ierr);
00059 for (icmp=0; icmp<ncmp; icmp++) {
00060 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; 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 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 }