Index: trunk/ippTools/src/releasetool.c
===================================================================
--- trunk/ippTools/src/releasetool.c	(revision 34909)
+++ trunk/ippTools/src/releasetool.c	(revision 34910)
@@ -97,34 +97,213 @@
     return false;
 }
+
 static bool listsurveyMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, NULL);
+
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_STR(config->args, where, "-surveyName", "surveyName", "LIKE");
+
+    psString query = pxDataGet("releasetool_listsurvey.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, " WHERE %s", whereClause);
+        psFree(whereClause);
+    } else {
+        // The list of surveys is short there is no need to require parameters
+#ifdef notdef
+        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
+        psFree(where);
+        return false;
+#endif
+    }
+
+    if (limit) {
+        psString limitString = psDBGenerateLimitSQL(limit);
+        psStringAppend(&query, " %s", limitString);
+        psFree(limitString);
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+    if (!psArrayLength(output)) {
+        psTrace("releasetool", PS_LOG_INFO, "no rows found");
+        psFree(output);
+        return true;
+    }
+
+    if (!ippdbPrintMetadatas(stdout, output, "survey", !simple)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print array");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
+
+    return true;
+}
+
+static bool definereleaseMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(releaseName, config->args, "-set_releaseName", true, false);
+    PXOPT_LOOKUP_S32(surveyID,    config->args, "-set_surveyID", true, false);
+    PXOPT_LOOKUP_S32(dataRelease, config->args, "-set_dataRelease", false, false);
+    PXOPT_LOOKUP_STR(state,       config->args, "-set_state",  true, false);
+
+    if (!ippReleaseInsert(config->dbh,
+        0,      // rel_id (auto_increment)
+        surveyID,
+        releaseName,
+        state,
+        dataRelease
+    )) {
+        psError(PS_ERR_UNKNOWN, false, "failed to insert ippRelease");
+        return false;
+    }
+
+    return true;
+}
+
+static bool updatereleaseMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(releaseName, config->args, "-releaseName", false, false);
+    PXOPT_LOOKUP_S32(rel_id, config->args,      "-rel_id", false, false);
+
+    if (!releaseName && !rel_id) {
+        psError(PXTOOLS_ERR_CONFIG, true, "either -releaseName or -rel_id is required\n");
+        return false;
+    }
+    PXOPT_LOOKUP_STR(state,       config->args, "-set_state",  true, false);
+
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S32(config->args, where, "-rel_id",  "rel_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-releaseName", "releaseName", "==");
+
+    psString query = NULL;
+    psStringAppend(&query, "UPDATE ippRelease SET state = '%s'", state);
+
+    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+    psStringAppend(&query, " WHERE %s", whereClause);
+    psFree(whereClause);
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+
+    psU64 affected = psDBAffectedRows(config->dbh);
+    psLogMsg("releasetool", PS_LOG_INFO, "Updated %" PRIu64 " ippReleases", affected);
+
+
+    psFree(query);
+
+    return true;
+}
+
+static bool listreleaseMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, NULL);
+
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_STR(config->args, where, "-surveyName",  "surveyName", "LIKE");
+    PXOPT_COPY_STR(config->args, where, "-releaseName", "releaseName", "LIKE");
+    PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
+    PXOPT_COPY_S32(config->args, where, "-rel_id",  "rel_id", "==");
+
+    psString query = pxDataGet("releasetool_listrelease.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, " WHERE %s", whereClause);
+        psFree(whereClause);
+    } else {
+        // The list of releases is short there is no need to require parameters
+#ifdef notdef
+        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
+        psFree(where);
+        return false;
+#endif
+    }
+
+    if (limit) {
+        psString limitString = psDBGenerateLimitSQL(limit);
+        psStringAppend(&query, " %s", limitString);
+        psFree(limitString);
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+    if (!psArrayLength(output)) {
+        psTrace("releasetool", PS_LOG_INFO, "no rows found");
+        psFree(output);
+        return true;
+    }
+
+    if (!ippdbPrintMetadatas(stdout, output, "ippRelease", !simple)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print array");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
+
+    return true;
+}
+
+static bool definerelexpMode(pxConfig *config)
 {
     psError(PS_ERR_UNKNOWN, true, "not yet implemented");
     return false;
 }
-static bool definereleaseMode(pxConfig *config)
+
+static bool updaterelexpMode(pxConfig *config)
 {
     psError(PS_ERR_UNKNOWN, true, "not yet implemented");
     return false;
 }
-static bool updatereleaseMode(pxConfig *config)
-{
-    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
-    return false;
-}
-static bool listreleaseMode(pxConfig *config)
-{
-    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
-    return false;
-}
-static bool definerelexpMode(pxConfig *config)
-{
-    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
-    return false;
-}
-static bool updaterelexpMode(pxConfig *config)
-{
-    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
-    return false;
-}
+
 static bool listrelexpMode(pxConfig *config)
 {
@@ -208,5 +387,5 @@
 
     if (!psListLength(where->list)) {
-        psError(PXTOOLS_ERR_CONFIG, false, "search paramters are required\n");
+        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
         psFree(where);
         return false;
Index: trunk/ippTools/src/releasetoolConfig.c
===================================================================
--- trunk/ippTools/src/releasetoolConfig.c	(revision 34909)
+++ trunk/ippTools/src/releasetoolConfig.c	(revision 34910)
@@ -47,11 +47,11 @@
     // -definesurvey
     psMetadata *definesurveyArgs = psMetadataAlloc();
-    psMetadataAddS32(definesurveyArgs, PS_LIST_TAIL, "-set_survey_id",   0, "define survey ID (required)", 0);
-    psMetadataAddStr(definesurveyArgs, PS_LIST_TAIL, "-set_survey_name", 0, "define survey name (required)", NULL);
+    psMetadataAddS32(definesurveyArgs, PS_LIST_TAIL, "-set_surveyID",   0, "define survey ID (required)", 0);
+    psMetadataAddStr(definesurveyArgs, PS_LIST_TAIL, "-set_surveyName", 0, "define survey name (required)", NULL);
     psMetadataAddStr(definesurveyArgs, PS_LIST_TAIL, "-set_description", 0, "define survey description", NULL);
 
     // -listsurvey
     psMetadata *listsurveyArgs = psMetadataAlloc();
-    psMetadataAddStr(listsurveyArgs,  PS_LIST_TAIL, "-survey_name", 0, "search by survey name (LIKE comparision)", NULL);
+    psMetadataAddStr(listsurveyArgs,  PS_LIST_TAIL, "-surveyName", 0, "select by survey name (LIKE comparision)", NULL);
     psMetadataAddU64(listsurveyArgs,  PS_LIST_TAIL, "-limit",       0, "limit result set to N items", 0);
     psMetadataAddBool(listsurveyArgs, PS_LIST_TAIL, "-simple",      0, "use the simple output format", false);
@@ -59,14 +59,14 @@
     // -definerelease
     psMetadata *definereleaseArgs = psMetadataAlloc();
-    psMetadataAddS32(definereleaseArgs, PS_LIST_TAIL, "-set_survey_id", 0,      "define survey ID (required)", 0);
-    psMetadataAddStr(definereleaseArgs, PS_LIST_TAIL, "-set_release_name", 0,   "define release name (required)", NULL);
-    psMetadataAddS32(definereleaseArgs, PS_LIST_TAIL, "-set_dataRelease", 0,    "define dataRelease", -1);
-    psMetadataAddStr(definereleaseArgs, PS_LIST_TAIL, "-set_state", 0,          "define survey state", NULL);
+    psMetadataAddS32(definereleaseArgs, PS_LIST_TAIL, "-set_surveyID", 0,      "define survey ID (required)", 0);
+    psMetadataAddStr(definereleaseArgs, PS_LIST_TAIL, "-set_releaseName", 0,   "define release name (required)", NULL);
+    psMetadataAddS32(definereleaseArgs, PS_LIST_TAIL, "-set_dataRelease", 0,   "define dataRelease", -1);
+    psMetadataAddStr(definereleaseArgs, PS_LIST_TAIL, "-set_state", 0,         "define survey state", NULL);
 
     // -uptdaterelease
     psMetadata *updatereleaseArgs = psMetadataAlloc();
 
-    // release_name and/or rel_id is required. This is handled in updatereleaseMode
-    psMetadataAddStr(updatereleaseArgs, PS_LIST_TAIL, "-release_name", 0,       "select by release name", NULL);
+    // releaseName and/or rel_id is required. This is handled in updatereleaseMode
+    psMetadataAddStr(updatereleaseArgs, PS_LIST_TAIL, "-releaseName", 0,        "select by release name", NULL);
     psMetadataAddS32(updatereleaseArgs, PS_LIST_TAIL, "-rel_id", 0,             "select by release ID", 0);
 
@@ -75,5 +75,5 @@
 
 //    psMetadataAddS32(updatereleaseArgs, PS_LIST_TAIL, "-set_surveyID", 0,       "define surveyID (required)", 0);
-//    psMetadataAddStr(updatereleaseArgs, PS_LIST_TAIL, "-set_release_name", 0,    "define release name (required)", NULL);
+//    psMetadataAddStr(updatereleaseArgs, PS_LIST_TAIL, "-set_releaseName", 0,    "define release name (required)", NULL);
 //    psMetadataAddS32(updatereleaseArgs, PS_LIST_TAIL, "-set_dataRelease", 0,    "define dataRelease", -1);
 
@@ -81,18 +81,20 @@
     // -listrelease
     psMetadata *listreleaseArgs = psMetadataAlloc();
-    psMetadataAddStr(listreleaseArgs,  PS_LIST_TAIL, "-survey_name", 0, "search by survey name (LIKE comparision)", NULL);
-    psMetadataAddStr(listreleaseArgs,  PS_LIST_TAIL, "-release_name", 0, "search by survey name (LIKE comparision)", NULL);
-    psMetadataAddStr(listreleaseArgs,  PS_LIST_TAIL, "-state",       0, "search by release state", NULL);
+    psMetadataAddStr(listreleaseArgs,  PS_LIST_TAIL, "-surveyName", 0,  "select by survey name (LIKE comparision)", NULL);
+    psMetadataAddStr(listreleaseArgs,  PS_LIST_TAIL, "-releaseName", 0, "select by survey name (LIKE comparision)", NULL);
+    psMetadataAddStr(listreleaseArgs,  PS_LIST_TAIL, "-state",       0, "select by release state", NULL);
+    psMetadataAddS32(listreleaseArgs, PS_LIST_TAIL,  "-rel_id", 0,      "select by release ID", 0);
+
     psMetadataAddU64(listreleaseArgs,  PS_LIST_TAIL, "-limit",       0, "limit result set to N items", 0);
     psMetadataAddBool(listreleaseArgs, PS_LIST_TAIL, "-simple",      0, "use the simple output format", false);
 
     psMetadata *definerelexpArgs = psMetadataAlloc();
-    psMetadataAddStr(definerelexpArgs,  PS_LIST_TAIL, "-release_name", 0, "search by survey name (LIKE comparision)", NULL);
+    psMetadataAddStr(definerelexpArgs,  PS_LIST_TAIL, "-releaseName", 0, "select by survey name (LIKE comparision)", NULL);
 
     psMetadata *updaterelexpArgs = psMetadataAlloc();
-    psMetadataAddStr(updaterelexpArgs,  PS_LIST_TAIL, "-release_name", 0, "search by survey name (LIKE comparision)", NULL);
+    psMetadataAddStr(updaterelexpArgs,  PS_LIST_TAIL, "-releaseName", 0, "select by survey name (LIKE comparision)", NULL);
 
     psMetadata *listrelexpArgs = psMetadataAlloc();
-    psMetadataAddStr(listrelexpArgs,  PS_LIST_TAIL, "-release_name", 0, "search by survey name (LIKE comparision)", NULL);
+    psMetadataAddStr(listrelexpArgs,  PS_LIST_TAIL, "-releaseName", 0, "select by survey name (LIKE comparision)", NULL);
 
 
