Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/Makefile
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/Makefile	(revision 34994)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/Makefile	(revision 34995)
@@ -26,4 +26,5 @@
 $(SRC)/initialize_dvopsps.$(ARCH).o \
 $(SRC)/mysql_dvopsps.$(ARCH).o \
+$(SRC)/insert_skytable.$(ARCH).o \
 $(SRC)/insert_detections_dvopsps.$(ARCH).o \
 $(SRC)/insert_detections_dvopsps_catalog.$(ARCH).o
@@ -38,4 +39,5 @@
 $(SRC)/initialize_dvopsps.$(ARCH).o \
 $(SRC)/mysql_dvopsps.$(ARCH).o \
+$(SRC)/insert_skytable.$(ARCH).o \
 $(SRC)/insert_detections_dvopsps.$(ARCH).o \
 $(SRC)/insert_detections_dvopsps_catalog.$(ARCH).o
Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/include/dvopsps.h
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/include/dvopsps.h	(revision 34994)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/include/dvopsps.h	(revision 34995)
@@ -48,7 +48,11 @@
 MYSQL *mysql_dvopsps_connect              PROTO((MYSQL *mysqlBase));
 
-int    insert_detections_mysql            PROTO((Average *average, Measure *measure, MYSQL *mysql));
-
 int    insert_detections_mysql_commit     PROTO((IOBuffer *buffer, MYSQL *mysql));
 int    insert_detections_mysql_value      PROTO((IOBuffer *buffer, Average *average, Measure *measure));
 int    insert_detections_mysql_init       PROTO((IOBuffer *buffer));
+
+int    insert_skytable                    PROTO(());
+
+int    insert_skytable_mysql_commit       PROTO((IOBuffer *buffer, MYSQL *mysql));
+int    insert_skytable_mysql_value        PROTO((IOBuffer *buffer, SkyRegion *region));
+int    insert_skytable_mysql_init         PROTO((IOBuffer *buffer));
Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/dvopsps.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/dvopsps.c	(revision 34994)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/dvopsps.c	(revision 34995)
@@ -8,5 +8,16 @@
   initialize_dvopsps (argc, argv);
 
-  status = insert_detections_dvopsps ();
+  status = -1;
+  if (!strcasecmp (argv[1], "detections")) {
+    status = insert_detections_dvopsps ();
+  }
+  if (!strcasecmp (argv[1], "skytable")) {
+    status = insert_skytable ();
+  }
+  
+  if (status == -1) {
+    fprintf (stderr, "invalid mode, should be : detections, skytable\n");
+    exit (2);
+  }
 
   if (!status) exit (1);
Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/initialize_dvopsps.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/initialize_dvopsps.c	(revision 34994)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/initialize_dvopsps.c	(revision 34995)
@@ -2,5 +2,5 @@
 
 void usage_dvopsps () {
-  fprintf (stderr, "USAGE: dvopsps [dbinfo] [options]\n");
+  fprintf (stderr, "USAGE: dvopsps (mode) [dbinfo] (mode) [options]\n");
   fprintf (stderr, "    mysql database info is supplied with these:\n");
   fprintf (stderr, "    -dbhost : database host machine\n");
@@ -132,5 +132,5 @@
   }
 
-  if (argc != 1) usage_dvopsps();
+  if (argc != 2) usage_dvopsps();
 
   return (TRUE);
@@ -138,5 +138,5 @@
 
 void usage_dvopsps_client () {
-  fprintf (stderr, "USAGE: dvopsps_client [dbinfo] [hostinfo] [options]\n");
+  fprintf (stderr, "USAGE: dvopsps_client (mode) [dbinfo] [hostinfo] [options]\n");
   fprintf (stderr, "    dvo host info:\n");
   fprintf (stderr, "    -hostID (ID)   : dvo host ID\n");
@@ -268,5 +268,5 @@
   if (!CATDIR) usage_dvopsps_client();
 
-  if (argc != 1) usage_dvopsps_client();
+  if (argc != 2) usage_dvopsps_client();
   return (TRUE);
 }
Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps.c	(revision 34994)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps.c	(revision 34995)
@@ -109,5 +109,5 @@
 
     char command[1024];
-    snprintf (command, 1024, "dvopsps_client -hostID %d -catdir %s -hostdir %s -region %f %f %f %f", 
+    snprintf (command, 1024, "dvopsps_client detections -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);
Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c	(revision 34994)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c	(revision 34995)
@@ -26,5 +26,4 @@
 
   gettimeofday (&start, (void *) NULL);
-
   insert_detections_mysql_init (&buffer);
   int Ninsert = 0;
@@ -77,4 +76,6 @@
   }
 
+// XXX I need to add the fileID (catID) here
+
 # if (SQL_INSERT)
   PrintIOBuffer (buffer, "INSERT INTO dvoDetection (imageID, ippDetectID, detectID, ippObjID, objID, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES \n");
@@ -91,24 +92,28 @@
   PrintIOBuffer (buffer, "    (%d, %u, %lu, %lu, %lu, %u, %f, %f, %f, %f, %lf, %lf, %f, %f),\n",
 # else
-  PrintIOBuffer (buffer, "    %d %u %lu %lu %lu %u %f %f %f %f %lf %lf %f %f\n",
+		 PrintIOBuffer (buffer, "    %d %u %lu %lu %lu %u %f %f %f %f %lf %lf %f %f\n",
 # endif
-	  measure->imageID,    // imageID
-	  measure->detID,   // ippDetectID
-	  measure->extID,   // detectID
-	  ((uint64_t)average->catID << 32) + (uint64_t)average->objID, // ippObjID
-	  average->extID,   // objID
-	  measure->dbFlags,  // flags
-	  code->C * 0.001 + code->K * (measure->airmass - 1) - measure->Mcal,   // zp
-	  measure->dMcal,    // zpErr
-	  measure->airmass,
-	  pow(10.0, 0.4 * measure->dt),    // expTime
-	  average->R - measure->dR / 3600.,    // ra
-	  average->D - measure->dR / 3600.,    // dec
-	  measure->dXccd * 0.01 * fabs(measure->pltscale), // estimate of raErr
-	  measure->dYccd * 0.01 * fabs(measure->pltscale) // estimate of decErr
-    );
+				measure->imageID,    // imageID
+				measure->detID,   // ippDetectID
+				measure->extID,   // detectID
+				((uint64_t)average->catID << 32) + (uint64_t)average->objID, // ippObjID
+				average->extID,   // objID
+				measure->dbFlags,  // flags
+				code->C * 0.001 + code->K * (measure->airmass - 1) - measure->Mcal,   // zp
+				measure->dMcal,    // zpErr
+				measure->airmass,
+				pow(10.0, 0.4 * measure->dt),    // expTime
+				average->R - measure->dR / 3600.,    // ra
+				average->D - measure->dR / 3600.,    // dec
+				measure->dXccd * 0.01 * fabs(measure->pltscale), // estimate of raErr
+				measure->dYccd * 0.01 * fabs(measure->pltscale) // estimate of decErr
+# if (SQL_INSERT)
+		   ); 
+# else
+    ); 
+# endif
   return TRUE;
 }
-
+    
 int insert_detections_mysql_commit (IOBuffer *buffer, MYSQL *mysql) {
 
Index: /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_skytable.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_skytable.c	(revision 34995)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_skytable.c	(revision 34995)
@@ -0,0 +1,118 @@
+# include "dvopsps.h"
+# define DEBUG 1
+# define USE_MYSQL 1
+
+# define MARKTIME(MSG,...) {			\
+    float dtime;				\
+    gettimeofday (&stop, (void *) NULL);	\
+    dtime = DTIME (stop, start);		\
+    fprintf (stderr, MSG, __VA_ARGS__); }
+
+// determine the relevant catalogs, launch parallel clients if desired
+int insert_skytable () {
+
+  off_t i;
+  struct timeval start, stop;
+  SkyTable *sky = NULL;
+
+  IOBuffer buffer;
+  buffer.Nalloc = 0;
+
+  // load the current sky table (layout of all SkyRegions) 
+  sky = SkyTableLoadOptimal (CATDIR, NULL, NULL, FALSE, -1, VERBOSE);
+  
+# 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
+
+  gettimeofday (&start, (void *) NULL);
+  insert_skytable_mysql_init (&buffer);
+  int Ninsert = 0;
+
+  for (i = 0; i < sky->Nregions; i++) {
+    insert_skytable_mysql_value (&buffer, &sky->regions[i]);
+
+    // if (buffer.Nbuffer > 1024) {
+    if (buffer.Nbuffer > MAX_BUFFER) {
+	insert_skytable_mysql_commit (&buffer, mysqlReal);
+	if (DEBUG) fprintf (stderr, "inserted %d rows\n", Ninsert);
+	Ninsert = 0;
+	if (0) {
+	  FlushIOBuffer (&buffer);
+	} else {
+	  buffer.Nbuffer = 0;
+	  bzero (buffer.buffer, buffer.Nalloc);
+	}
+	insert_skytable_mysql_init (&buffer);
+      }
+      Ninsert ++;
+  }
+
+  insert_skytable_mysql_commit (&buffer, mysqlReal);
+  FreeIOBuffer (&buffer);
+
+  MARKTIME("-- inserted %d rows in %f sec\n", Ninsert, dtime);
+  return (TRUE);
+}
+
+int insert_skytable_mysql_init (IOBuffer *buffer) {
+
+  if (buffer->Nalloc == 0) {
+    InitIOBuffer (buffer, 1024);
+  }
+
+  PrintIOBuffer (buffer, "INSERT INTO dvoSkyTable (R_MIN, R_MAX, D_MIN, D_MAX, INDEX_, NAME) VALUES \n");
+
+  return TRUE;
+}
+
+int insert_skytable_mysql_value (IOBuffer *buffer, SkyRegion *region) {
+  
+  PrintIOBuffer (buffer, "    (%f, %f, %f, %f, %d, '%s'),\n",
+		 region->Rmin,    // Rmin
+		 region->Rmax,    // Rmax
+		 region->Dmin,    // Dmin
+		 region->Dmax,    // Dmax
+		 region->index,   // index
+		 region->name     // name
+    ); 
+  return TRUE;
+}
+    
+int insert_skytable_mysql_commit (IOBuffer *buffer, MYSQL *mysql) {
+
+  MYSQL_RES *result;
+
+  // check that the last two chars are ,\n and replace with ;\n
+  if (!strcmp(&buffer->buffer[buffer->Nbuffer-2], ",\n")) {
+    buffer->buffer[buffer->Nbuffer-2] = ';';
+  } else {
+    fprintf (stderr, "invalid sql?\n");
+    return FALSE;
+  }
+
+  // XXX check return status
+  if (mysql) {
+    // if (DEBUG) fprintf (stderr, "%s\n", buffer->buffer);
+    int status = mysql_query(mysql, buffer->buffer); 
+    if (status) {
+      fprintf (stderr, "error with insert:\n");
+      fprintf (stderr, "%s\n", mysql_error(mysql));
+      fprintf (stderr, "Nbuffer: %d\n", buffer->Nbuffer);
+    }
+    result = mysql_store_result (mysql);
+    mysql_free_result (result);
+  } else {
+    fprintf (stderr, "%s\n", buffer->buffer);
+  }
+
+  return TRUE;
+}
