Index: /trunk/Ohana/src/dvopsps/Makefile
===================================================================
--- /trunk/Ohana/src/dvopsps/Makefile	(revision 38673)
+++ /trunk/Ohana/src/dvopsps/Makefile	(revision 38674)
@@ -32,4 +32,6 @@
 $(SRC)/insert_FWobjects_dvopsps.$(ARCH).o \
 $(SRC)/insert_FWobjects_dvopsps_catalog.$(ARCH).o \
+$(SRC)/insert_FGshape_dvopsps.$(ARCH).o \
+$(SRC)/insert_FGshape_dvopsps_catalog.$(ARCH).o \
 $(SRC)/insert_diffobj_dvopsps.$(ARCH).o \
 $(SRC)/insert_diffobj_dvopsps_catalog.$(ARCH).o \
@@ -52,4 +54,6 @@
 $(SRC)/insert_FWobjects_dvopsps.$(ARCH).o \
 $(SRC)/insert_FWobjects_dvopsps_catalog.$(ARCH).o \
+$(SRC)/insert_FGshape_dvopsps.$(ARCH).o \
+$(SRC)/insert_FGshape_dvopsps_catalog.$(ARCH).o \
 $(SRC)/insert_diffobj_dvopsps.$(ARCH).o \
 $(SRC)/insert_diffobj_dvopsps_catalog.$(ARCH).o \
Index: /trunk/Ohana/src/dvopsps/include/dvopsps.h
===================================================================
--- /trunk/Ohana/src/dvopsps/include/dvopsps.h	(revision 38673)
+++ /trunk/Ohana/src/dvopsps/include/dvopsps.h	(revision 38674)
@@ -115,4 +115,13 @@
 int    insert_FWobjects_mysql_commit 	    PROTO((IOBuffer *ave_buffer, IOBuffer *sec_buffer, IOBuffer *cpy_buffer, MYSQL *mysql));
 
+int    insert_FGshape_dvopsps               PROTO(());
+int    insert_FGshape_dvopsps_parallel      PROTO((SkyList *sky));
+int    insert_FGshape_dvopsps_catalog       PROTO((Catalog *catalog, char *basename, MYSQL *mysql));
+      				          
+int    insert_FGshape_mysql_create_tables   PROTO((char *basename, MYSQL *mysql));
+int    insert_FGshape_mysql_init   	    PROTO((IOBuffer *ave_buffer, IOBuffer *cpy_buffer, char *basename));
+int    insert_FGshape_mysql_value  	    PROTO((IOBuffer *ave_buffer, IOBuffer *cpy_buffer, Average *average, GalPhot *galphot, int Ngalphot));
+int    insert_FGshape_mysql_commit 	    PROTO((IOBuffer *ave_buffer, IOBuffer *cpy_buffer, MYSQL *mysql));
+
 int    insert_skytable                    PROTO(());
 
Index: /trunk/Ohana/src/dvopsps/src/dvopsps.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/dvopsps.c	(revision 38673)
+++ /trunk/Ohana/src/dvopsps/src/dvopsps.c	(revision 38674)
@@ -21,4 +21,7 @@
     status = insert_FWobjects_dvopsps ();
   }
+  if (!strcasecmp (argv[1], "forced_galaxy_shape")) {
+    status = insert_FGshape_dvopsps ();
+  }
   if (!strcasecmp (argv[1], "skytable")) {
     status = insert_skytable ();
Index: /trunk/Ohana/src/dvopsps/src/dvopsps_client.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/dvopsps_client.c	(revision 38673)
+++ /trunk/Ohana/src/dvopsps/src/dvopsps_client.c	(revision 38674)
@@ -28,4 +28,7 @@
     status = insert_FWobjects_dvopsps ();
   }
+  if (!strcasecmp (argv[1], "forced_galaxy_shape")) {
+    status = insert_FGshape_dvopsps ();
+  }
   if (status == -1) {
     fprintf (stderr, "invalid mode, should be : detections, skytable\n");
Index: /trunk/Ohana/src/dvopsps/src/initialize_dvopsps.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/initialize_dvopsps.c	(revision 38673)
+++ /trunk/Ohana/src/dvopsps/src/initialize_dvopsps.c	(revision 38674)
@@ -21,5 +21,5 @@
   fprintf (stderr, "\n");
 
-  fprintf (stderr, " (mode) is one of detections, objects, forced_warp_objects, skytable\n");
+  fprintf (stderr, " (mode) is one of detections, objects, forced_warp_objects, forced_galaxy_shaoe, skytable\n");
 
   fprintf (stderr, "\n");
Index: /trunk/Ohana/src/dvopsps/src/insert_FGshape_dvopsps.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/insert_FGshape_dvopsps.c	(revision 38674)
+++ /trunk/Ohana/src/dvopsps/src/insert_FGshape_dvopsps.c	(revision 38674)
@@ -0,0 +1,173 @@
+# include "dvopsps.h"
+# define USE_MYSQL 1
+
+// determine the relevant catalogs, launch parallel clients if desired
+int insert_FGshape_dvopsps () {
+
+  SkyTable *sky = NULL;
+  SkyList *skylist = NULL;
+  Catalog catalog;
+  off_t i;
+
+  // load the current sky table (layout of all SkyRegions) 
+  sky = SkyTableLoadOptimal (CATDIR, NULL, NULL, FALSE, -1, VERBOSE);
+  SkyTableSetFilenames (sky, CATDIR, "cpt");
+  
+  // determine the populated SkyRegions overlapping the requested area (default depth)
+  if (SINGLE_CPT) {
+      skylist = SkyRegionByCPT (sky, SINGLE_CPT);
+  } else {
+      skylist = SkyListByPatch (sky, -1, &UserPatch);
+  }
+  myAssert (skylist, "ooops!");
+
+  // pass the skylist to the parallel version, and only launch on relevant hosts 
+  if (PARALLEL && !HOST_ID) {
+    int status = insert_FGshape_dvopsps_parallel (skylist);
+    return status;
+  }
+
+# if (USE_MYSQL)
+  // NOTE: mysql connection happens here since each dvopsps_client makes its own connection
+  MYSQL  mysqlBase;
+  MYSQL *mysqlReal = mysql_dvopsps_connect (&mysqlBase);
+  if (!mysqlReal) {
+    fprintf (stderr, "failed to connect to mysql\n");
+    exit (1);
+  }
+# else
+  MYSQL *mysqlReal = NULL;
+# endif
+
+  // select measurements for each populated catalog
+  for (i = 0; i < skylist[0].Nregions; i++) {
+
+    // does this host ID match the desired location for the table?
+    if (!HostTableTestHost(skylist[0].regions[i], HOST_ID)) continue;
+
+    char localFilename[1024];
+    snprintf (localFilename, 1024, "%s/%s.cpt", HOSTDIR, skylist->regions[i]->name);
+
+    // set up the basic catalog info
+    dvo_catalog_init (&catalog, TRUE);
+    catalog.filename  = HOST_ID ? localFilename : skylist[0].filename[i];
+    catalog.catflags  = DVO_LOAD_AVERAGE | DVO_LOAD_GALPHOT;
+
+    if (!dvo_catalog_open (&catalog, skylist[0].regions[i], VERBOSE, "r")) {
+      fprintf (stderr, "ERROR: failure reading catalog %s\n", catalog.filename);
+      exit (1);
+    }
+    if (!catalog.Naverage_disk) {
+      if (VERBOSE) fprintf (stderr, "no data in %s, skipping\n", catalog.filename);
+      dvo_catalog_unlock (&catalog);
+      dvo_catalog_free (&catalog);
+      continue;
+    }
+
+    // NOTE: this is where the real action happens
+    insert_FGshape_dvopsps_catalog (&catalog, skylist->regions[i]->name, mysqlReal);
+
+    // NOTE : unlike setastrom or relphot, this program is read-only wrt dvo
+    dvo_catalog_unlock (&catalog);
+    dvo_catalog_free (&catalog);
+  }
+
+  if (0) {
+    char query[256];
+    MYSQL_RES *result;
+
+    sprintf (query, "commit;");
+    if (mysql_query (mysqlReal, query)) {
+      fprintf (stderr, "failed to turn off autocommit\n");
+      fprintf (stderr, "%s\n", mysql_error (mysqlReal));
+      return FALSE;
+    }
+    result = mysql_store_result (mysqlReal);
+    mysql_free_result (result);
+  }
+    
+  return (TRUE);
+}      
+
+# define DEBUG 1
+
+int insert_FGshape_dvopsps_parallel (SkyList *sky) {
+
+  // launch the dvopsps_client jobs to the parallel hosts
+
+  // load the list of hosts
+  HostTable *table = HostTableLoad (CATDIR, sky->hosts);
+
+  // if sky->Nregions < 0.5*Nhosts, check if the host used before launching...
+
+  int i, j;
+  for (i = 0; i < table->Nhosts; i++) {
+
+    if (sky->Nregions < table->Nhosts) {
+      // do any of the regions want this host?
+      int wantThisHost = FALSE;
+      for (j = 0; j < sky->Nregions; j++) {
+	if (HostTableTestHost (sky->regions[j], table->hosts[i].hostID)) {
+	  wantThisHost = TRUE;
+	  break;
+	}
+      }
+      if (!wantThisHost) {
+	// fprintf (stderr, "skip host %s\n", table->hosts[i].hostname);
+	continue;
+      }
+    }
+
+    // ensure that the paths are absolute path names
+    char *tmppath = abspath (table->hosts[i].pathname, DVO_MAX_PATH);
+    free (table->hosts[i].pathname);
+    table->hosts[i].pathname = tmppath;
+
+    char command[1024];
+    snprintf (command, 1024, "dvopsps_client forced_galaxy_shape -hostID %d -catdir %s -hostdir %s -region %f %f %f %f", 
+	      table->hosts[i].hostID, CATDIR, table->hosts[i].pathname, 
+	      UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax);
+
+    char tmpline[1024];
+    snprintf (tmpline, 1024, "%s -dbhost %s", command, DATABASE_HOST); strcpy (command, tmpline);
+    snprintf (tmpline, 1024, "%s -dbuser %s", command, DATABASE_USER); strcpy (command, tmpline);
+    snprintf (tmpline, 1024, "%s -dbpass %s", command, DATABASE_PASS); strcpy (command, tmpline);
+    snprintf (tmpline, 1024, "%s -dbname %s", command, DATABASE_NAME); strcpy (command, tmpline);
+
+    if (VERBOSE)    { snprintf (tmpline, 1024, "%s -v",      command);             strcpy (command, tmpline); }
+    if (SINGLE_CPT) { snprintf (tmpline, 1024, "%s -cpt %s", command, SINGLE_CPT); strcpy (command, tmpline); }
+
+    fprintf (stderr, "command: %s\n", command);
+
+    if (PARALLEL_MANUAL) continue;
+
+    if (PARALLEL_SERIAL) {
+      int status = system (command);
+      if (status) {
+	fprintf (stderr, "ERROR running dvopsps_client\n");
+	exit (2);
+      }
+    } else {
+      // launch the job on the remote machine (no handshake)
+      int errorInfo = 0;
+      int pid = rconnect ("ssh", table->hosts[i].hostname, command, table->hosts[i].stdio, &errorInfo, FALSE);
+      if (!pid) {
+	if (DEBUG) fprintf (stderr, "failure to start %s (error %d)\n", table->hosts[i].hostname, errorInfo);
+	exit (1);
+      }
+      table->hosts[i].pid = pid; // save for future reference
+    }
+  }
+
+  // wait for the remote jobs to be completed
+  if (PARALLEL_MANUAL) {
+    fprintf (stderr, "run the dvopsps_client commands above.  when these are done, hit return\n");
+    getchar();
+  }
+  if (!PARALLEL_MANUAL && !PARALLEL_SERIAL) {
+    int status = HostTableWaitJobsGetIO (table, __FILE__, __LINE__, VERBOSE);
+    if (!status) return FALSE;
+  }
+
+  return (TRUE);
+}      
Index: /trunk/Ohana/src/dvopsps/src/insert_FGshape_dvopsps_catalog.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/insert_FGshape_dvopsps_catalog.c	(revision 38674)
+++ /trunk/Ohana/src/dvopsps/src/insert_FGshape_dvopsps_catalog.c	(revision 38674)
@@ -0,0 +1,289 @@
+# include "dvopsps.h"
+# define DEBUG 0
+
+int insert_FGshape_dvopsps_catalog (Catalog *catalog, char *basename, MYSQL *mysql) {
+
+  off_t i;
+  int missingID = 0;
+  int noGalphot = 0;
+
+  IOBuffer ave_buffer, gal_buffer;
+  ave_buffer.Nalloc = 0;
+  gal_buffer.Nalloc = 0;
+
+  Average *average = catalog->average;
+  GalPhot *galphot = catalog->galphot;
+
+  off_t found = 0;
+
+  char *cleanname = strcreate (basename);
+  for (i = 0; i < strlen(cleanname); i++) {
+    if (cleanname[i] == '.') cleanname[i] = '_';
+    if (cleanname[i] == '/') cleanname[i] = '_';
+  }
+  insert_FGshape_mysql_create_tables (cleanname, mysql);
+
+  INITTIME;
+  insert_FGshape_mysql_init (&ave_buffer, &gal_buffer, cleanname);
+  int Ninsert = 0;
+
+  // NOTE for testing, just do a few objects
+  if (!mysql) {
+    catalog[0].Naverage = 5;
+  }
+  for (i = 0; i < catalog[0].Naverage; i++) {
+
+    if (average[i].extID == 0) {
+      missingID ++;
+    }
+
+    off_t m = average[i].galphotOffset;
+    off_t Ngalphot = average[i].Ngalphot;
+
+    // skip objects with no lensing object
+    if (!Ngalphot) {
+      noGalphot ++;
+      continue;
+    }
+
+    // XXX check return status
+    insert_FGshape_mysql_value (&ave_buffer, &gal_buffer, &average[i], &galphot[m], Ngalphot);
+
+    // Average is a big table, but Ngalphot*galphot might be bigger, so check both
+    int fullBuffer = FALSE;
+    fullBuffer = fullBuffer || (ave_buffer.Nbuffer > MAX_BUFFER);
+    fullBuffer = fullBuffer || (gal_buffer.Nbuffer > MAX_BUFFER);
+
+    if (fullBuffer) {
+      insert_FGshape_mysql_commit (&ave_buffer, &gal_buffer, mysql);
+      if (DEBUG) fprintf (stderr, "inserted %d rows\n", Ninsert);
+      Ninsert = 0;
+      // empty buffers but do not use FlushBuffer as that resets the allocation
+      ave_buffer.Nbuffer = 0;
+      bzero (ave_buffer.buffer, ave_buffer.Nalloc);
+      gal_buffer.Nbuffer = 0;
+      bzero (gal_buffer.buffer, gal_buffer.Nalloc);
+      insert_FGshape_mysql_init (&ave_buffer, &gal_buffer, cleanname);
+    }
+    Ninsert ++;
+    found ++;
+  }
+  if (Ninsert) {
+    insert_FGshape_mysql_commit (&ave_buffer, &gal_buffer, mysql);
+  }
+  if (VERBOSE) fprintf (stderr, "inserted "OFF_T_FMT" average, "OFF_T_FMT" galphot\n", 
+			catalog[0].Naverage, catalog[0].Ngalphot);
+  FreeIOBuffer (&ave_buffer);
+  FreeIOBuffer (&gal_buffer);
+  free (cleanname);
+
+  MARKTIME("-- inserted "OFF_T_FMT" objects in %f sec, skipped %d without IDs, %d with no galphot\n", found, dtime, missingID, noGalphot);
+  return (TRUE);
+}
+
+int insert_FGshape_mysql_create_tables (char *basename, MYSQL *mysql) {
+
+  int status;
+  IOBuffer buffer;
+  InitIOBuffer (&buffer, 1024);
+  // MYSQL_RES *result;
+
+  // *** Average / cpt *** 
+  PrintIOBuffer (&buffer, "DROP TABLE %s_cpt\n", basename);
+  status = mysql_query(mysql, buffer.buffer); 
+  if (status) {
+    fprintf (stderr, "failed to drop table:\n");
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+  }
+  buffer.Nbuffer = 0;
+  bzero (buffer.buffer, buffer.Nalloc);
+
+  // Only send the necessary fields (eg, do not sent parallax and pm)
+  PrintIOBuffer (&buffer, "CREATE TABLE %s_cpt ("
+		 "EXT_ID        BIGINT,   "
+		 "OBJ_ID        INT,      "      
+		 "CAT_ID        INT       " 
+		 ")\n", basename);
+
+  if (DEBUG) fprintf (stderr, "%s\n", buffer.buffer);
+  status = mysql_query(mysql, buffer.buffer); 
+  if (status) {
+    fprintf (stderr, "failed to create table:\n");
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+    fprintf (stderr, "Nbuffer: %d\n", buffer.Nbuffer);
+  }
+  buffer.Nbuffer = 0;
+  bzero (buffer.buffer, buffer.Nalloc);
+
+  // *** Galphot / cpq ***
+  PrintIOBuffer (&buffer, "DROP TABLE %s_cpq\n", basename);
+  status = mysql_query(mysql, buffer.buffer); 
+  if (status) {
+    fprintf (stderr, "failed to drop table:\n");
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+  }
+  buffer.Nbuffer = 0;
+  bzero (buffer.buffer, buffer.Nalloc);
+
+  PrintIOBuffer (&buffer, "CREATE TABLE %s_cpq ("
+		 "OBJ_ID             INT, "      
+		 "CAT_ID             INT, " 
+		 "DET_ID             INT, "
+		 "PHOTCODE           SMALLINT, "
+		 "MODEL_TYPE         SMALLINT, "
+
+		 "MAG                FLOAT, "
+		 "MAG_ERR            FLOAT, "
+		 "MAJOR_AXIS         FLOAT, "
+		 "MINOR_AXIS         FLOAT, "
+		 "MAJOR_AXIS_ERR     FLOAT, "
+		 "MINOR_AXIS_ERR     FLOAT, "
+		 "THETA              FLOAT, "
+		 "THETA_ERR          FLOAT, "
+		 "INDEX              FLOAT, "
+		 "CHISQ              FLOAT  "
+
+		 "NPIX               INT "
+		 ")\n", basename);
+
+  if (DEBUG) fprintf (stderr, "%s\n", buffer.buffer);
+  status = mysql_query(mysql, buffer.buffer); 
+  if (status) {
+    fprintf (stderr, "failed to create table:\n");
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+    fprintf (stderr, "Nbuffer: %d\n", buffer.Nbuffer);
+  }
+
+  FreeIOBuffer (&buffer);
+  return TRUE;
+}
+
+int insert_FGshape_mysql_init (IOBuffer *ave_buffer, IOBuffer *gal_buffer, char *basename) {
+
+  // *** Average / cpt *** 
+  if (ave_buffer->Nalloc == 0) {
+    InitIOBuffer (ave_buffer, 1024);
+  }
+  PrintIOBuffer (ave_buffer, "INSERT INTO %s_cpt ("
+		 "EXT_ID,        "
+		 "OBJ_ID,        "      
+		 "CAT_ID         "      
+		 ") VALUES \n", basename);
+
+  // *** Galphot / cpq ***
+  if (gal_buffer->Nalloc == 0) {
+    InitIOBuffer (gal_buffer, 1024);
+  }
+  PrintIOBuffer (gal_buffer, "INSERT INTO %s_cpq ("
+		 "OBJ_ID, "      
+		 "CAT_ID, " 
+		 "DET_ID, "
+		 "NPIX,   "
+
+		 "PHOTCODE, "
+		 "MODEL_TYPE, "
+		 "MAG, "
+		 "MAG_ERR, "
+
+		 "MAJOR_AXIS, "
+		 "MINOR_AXIS, "
+		 "MAJOR_AXIS_ERR, "
+		 "MINOR_AXIS_ERR, "
+
+		 "THETA, "
+		 "THETA_ERR, "
+		 "INDEX, "
+		 "CHISQ"
+		 ") VALUES \n", basename);
+
+  return TRUE;
+}
+
+# define PRINT_FLOAT(BUFFER,FIELD,FORMAT)		  \
+  if (isinf(FIELD) || isnan(FIELD)) PrintIOBuffer (BUFFER, "NULL, ");	\
+  else PrintIOBuffer (BUFFER, FORMAT, FIELD); 
+
+int insert_FGshape_mysql_value (IOBuffer *ave_buffer, IOBuffer *gal_buffer, Average *average, GalPhot *galphot, int Ngalphot) {
+
+  int i;
+
+  PrintIOBuffer (ave_buffer, " (");
+  PrintIOBuffer (ave_buffer, "%lu, ", average->extID);          
+  PrintIOBuffer (ave_buffer, "%u,  ", average->objID);          
+  PrintIOBuffer (ave_buffer, "%u   ", average->catID);          
+  PrintIOBuffer (ave_buffer, "),\n");
+
+  for (i = 0; i < Ngalphot; i++) {
+    PrintIOBuffer (gal_buffer, " (");
+    PrintIOBuffer (gal_buffer, "%u,  ", galphot->objID);          
+    PrintIOBuffer (gal_buffer, "%u,  ", galphot->catID);          
+    PrintIOBuffer (gal_buffer, "%u,  ", galphot->detID);          
+
+    PrintIOBuffer (gal_buffer, "%hd, ", galphot->photcode);          
+    PrintIOBuffer (gal_buffer, "%hd, ", galphot->modelType);          
+
+    PRINT_FLOAT(gal_buffer, galphot->mag,          "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->magErr,       "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->majorAxis,    "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->minorAxis,    "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->majorAxisErr, "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->minorAxisErr, "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->theta,        "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->thetaErr,     "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->index,        "%.6e, ");
+    PRINT_FLOAT(gal_buffer, galphot->chisq,        "%.6e, ");
+
+    PrintIOBuffer (gal_buffer, "%d ", (int) galphot->Npix); // NOTE: PRINT_FLOAT always adds a trailing comma -- need to use a different method on the last entry          
+    PrintIOBuffer (gal_buffer, "),\n");
+    galphot ++;
+  }
+
+  return TRUE;
+}
+    
+int insert_FGshape_mysql_commit (IOBuffer *ave_buffer, IOBuffer *gal_buffer, MYSQL *mysql) {
+
+  MYSQL_RES *result;
+
+  // check that the last two chars are ,\n and replace with ;\n
+  if (!strcmp(&ave_buffer->buffer[ave_buffer->Nbuffer-2], ",\n")) {
+    ave_buffer->buffer[ave_buffer->Nbuffer-2] = ';';
+  } else {
+    fprintf (stderr, "invalid sql?\n");
+    return FALSE;
+  }
+
+  // check that the last two chars are ,\n and replace with ;\n
+  if (!strcmp(&gal_buffer->buffer[gal_buffer->Nbuffer-2], ",\n")) {
+    gal_buffer->buffer[gal_buffer->Nbuffer-2] = ';';
+  } else {
+    fprintf (stderr, "invalid sql?\n");
+    return FALSE;
+  }
+
+  // XXX check return status
+  if (mysql) {
+    int status;
+    if (DEBUG) fprintf (stderr, "%s\n", ave_buffer->buffer);
+    status = mysql_query(mysql, ave_buffer->buffer); 
+    if (status) {
+      fprintf (stderr, "error with insert:\n");
+      fprintf (stderr, "%s\n", mysql_error(mysql));
+      fprintf (stderr, "Nbuffer: %d\n", ave_buffer->Nbuffer);
+    }
+    result = mysql_store_result (mysql);
+    if (result) mysql_free_result (result);
+
+    if (DEBUG) fprintf (stderr, "%s\n", gal_buffer->buffer);
+    status = mysql_query(mysql, gal_buffer->buffer); 
+    if (status) {
+      fprintf (stderr, "error with insert:\n");
+      fprintf (stderr, "%s\n", mysql_error(mysql));
+      fprintf (stderr, "Nbuffer: %d\n", gal_buffer->Nbuffer);
+    }
+    result = mysql_store_result (mysql);
+    if (result) mysql_free_result (result);
+  }
+
+  return TRUE;
+}
Index: /trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c	(revision 38673)
+++ /trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c	(revision 38674)
@@ -43,18 +43,13 @@
     // fprintf (stderr, "%f : %d %d %d\n", average[i].ChiSqPM, isinf(average[i].ChiSqPM), isnan(average[i].ChiSqPM), isfinite(average[i].ChiSqPM));
 
-    // Average is a bigger table, but Nsecfilt*secfilt might be bigger, so check both
+    // Average is a big table, but Nsecfilt*secfilt might be bigger, so check both
     if ((ave_buffer.Nbuffer > MAX_BUFFER) || (sec_buffer.Nbuffer > MAX_BUFFER)) {
       insert_objects_mysql_commit (&ave_buffer, &sec_buffer, mysql);
       if (DEBUG) fprintf (stderr, "inserted %d rows\n", Ninsert);
       Ninsert = 0;
-      if (0) {
-	FlushIOBuffer (&ave_buffer);
-	FlushIOBuffer (&sec_buffer);
-      } else {
-	ave_buffer.Nbuffer = 0;
-	bzero (ave_buffer.buffer, ave_buffer.Nalloc);
-	sec_buffer.Nbuffer = 0;
-	bzero (sec_buffer.buffer, sec_buffer.Nalloc);
-      }
+      ave_buffer.Nbuffer = 0;
+      bzero (ave_buffer.buffer, ave_buffer.Nalloc);
+      sec_buffer.Nbuffer = 0;
+      bzero (sec_buffer.buffer, sec_buffer.Nalloc);
       insert_objects_mysql_init (&ave_buffer, &sec_buffer, cleanname);
     }
