NMD
Functions
nmdmysql.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "nmd_impl.h"
#include "nmd.h"
Include dependency graph for nmdmysql.c:

Go to the source code of this file.

Functions

NMDErrorCode NMDObjectDumpToMySQL (NMD_metadata obj)

Function Documentation

NMDErrorCode NMDObjectDumpToMySQL ( NMD_metadata  obj)

Generate an mysql dump of an object

Definition at line 11 of file nmdmysql.c.

References NMD_metadata_::cats, CHECKHASNMDCOOKIE, NMD_metadata_category_::cmps, NMD_metadata_item_::i, NMD_metadata_item_::name, NMD_metadata_category_::name, NMD_metadata_::ncat, NMD_metadata_category_::ncmp, NMDInt, NMDReal, NMDStringAppend(), NMDStringConcat(), NMDStringCreate(), NMDStringDestroy(), NMDStringGetString(), NMD_metadata_item_::r, and NMD_metadata_item_::t.

{
  NMD_string namesstring,valuesstring;
  int icat,icmp; NMDErrorCode ierr;
  CHECKHASNMDCOOKIE(obj);

  ierr = NMDStringCreate("",&namesstring); NMD_ERR_RETURN(ierr);
  ierr = NMDStringCreate("",&valuesstring); NMD_ERR_RETURN(ierr);

  for (icat=0; icat<obj->ncat; icat++) {
    NMD_metadata_category cat = obj->cats[icat];
    NMD_string catstring;
    CHECKHASNMDCOOKIE(cat);
    ierr = NMDStringCreate(cat->name,&catstring); NMD_ERR_RETURN(ierr);
    for (icmp=0; icmp<cat->ncmp; icmp++) {
      char cmpvalue[45];
      NMD_metadata_item cmp = cat->cmps[icmp];
      CHECKHASNMDCOOKIE(cmp);
      memset(cmpvalue,0,45);
      switch (cmp->t) {
      case NMDInt : sprintf(cmpvalue,"%d",cmp->i); break;
      case NMDReal : sprintf(cmpvalue,"%e",cmp->r); break;
      default :
        continue;
      }
      if (cmpvalue[0]) {
        NMD_string cmpstring,cmpcatstring;
        /* name */
        ierr = NMDStringCreate(cmp->name,&cmpstring); NMD_ERR_RETURN(ierr);
        ierr = NMDStringConcat
          (0,catstring,':',cmpstring,0,&cmpcatstring); NMD_ERR_RETURN(ierr);
        ierr = NMDStringAppend
          (0,&namesstring,0,cmpcatstring,','); NMD_ERR_RETURN(ierr);
        ierr = NMDStringDestroy(cmpstring); NMD_ERR_RETURN(ierr);
        ierr = NMDStringDestroy(cmpcatstring); NMD_ERR_RETURN(ierr);
        /* value */
        ierr = NMDStringCreate(cmpvalue,&cmpcatstring); NMD_ERR_RETURN(ierr);
        ierr = NMDStringAppend
          (0,&valuesstring,0,cmpcatstring,','); NMD_ERR_RETURN(ierr);
        ierr = NMDStringDestroy(cmpcatstring); NMD_ERR_RETURN(ierr);
      }
    }
    ierr = NMDStringDestroy(catstring); NMD_ERR_RETURN(ierr);
  }

  {
    const char *c;
    ierr = NMDStringGetString(namesstring,&c); NMD_ERR_RETURN(ierr);
    printf("INSERT INTO yourtable (%s)\n",c);
    ierr = NMDStringGetString(valuesstring,&c); NMD_ERR_RETURN(ierr);
    printf("VALUES (%s);\n",c);
  }

  return 0;
}

Here is the call graph for this function: