NMD
|
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 }