IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 23, 2008, 11:50:48 AM (18 years ago)
Author:
Paul Price
Message:

OK, it wasn't as simple as that --- only 2/4 need special treatment.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/stacktool.c

    r18675 r18676  
    101101    psMetadata *whereRE = psMetadataAlloc(); // rawExp where
    102102    psMetadata *whereWSF = psMetadataAlloc(); // warpSkyfile where
     103    psMetadata *having = psMetadataAlloc(); // HAVING clause
    103104    // map -inst -> camera, etc
    104105    PXOPT_COPY_STR(config->args, whereRE, "-select_inst", "camera", "==");
     
    121122
    122123    PXOPT_COPY_STR(config->args, having, "-select_skycell_id", "skycell_id", "==");
     124    PXOPT_COPY_S32(config->args, having, "-min_num", "num_warp", ">=");
    123125
    124126    PXOPT_LOOKUP_S32(randomLimit, config->args, "-random", false, false);
    125127
    126     PXOPT_LOOKUP_S32(min_num, config->args, "-min_num", false, false);
    127128    PXOPT_LOOKUP_S32(min_new, config->args, "-min_new", false, false);
    128129    PXOPT_LOOKUP_F32(min_frac, config->args, "-min_frac", false, false);
     
    170171    psFree(groupby);
    171172
    172     psString having = NULL;             // HAVING string
    173     if (min_num > 0) {
    174         psStringAppend(&having, " min_num >= %d", min_num);
    175     }
    176     if (min_new > 0) {
    177         if (having) {
    178             psStringAppend(&having, " AND");
    179         }
    180         psStringAppend(&having, " ((num_warp - num_stack >= %d) OR num_stack IS NULL)", min_new);
    181     }
    182     if (isfinite(min_frac)) {
    183         if (having) {
    184             psStringAppend(&having, " AND");
    185         }
    186         // Avoiding division by zero
    187         psStringAppend(&select, " ((num_warp >= %f * num_stack) OR num_stack IS NULL)", (double)min_frac);
    188     }
    189     if (having) {
    190         psStringAppend(&select, " HAVING %s", having);
    191         psFree(having);
    192     }
     173    // Restriction on aggregated quantities using HAVING
     174    {
     175        psString havingClause = NULL;   // HAVING string
     176        if (psListLength(having->list)) {
     177            havingClause = psDBGenerateWhereConditionSQL(having, NULL);
     178        }
     179
     180        if (min_new > 0) {
     181            if (havingClause) {
     182                psStringAppend(&havingClause, " AND");
     183            }
     184            psStringAppend(&havingClause, " ((num_warp - num_stack >= %d) OR num_stack IS NULL)", min_new);
     185        }
     186        if (isfinite(min_frac)) {
     187            if (havingClause) {
     188                psStringAppend(&havingClause, " AND");
     189            }
     190            // Avoiding division by zero
     191            psStringAppend(&havingClause, " ((num_warp >= %f * num_stack) OR num_stack IS NULL)",
     192                           (double)min_frac);
     193        }
     194        if (havingClause) {
     195            psStringAppend(&select, " HAVING %s", havingClause);
     196            psFree(havingClause);
     197        }
     198    }
     199    psFree(having);
    193200
    194201
Note: See TracChangeset for help on using the changeset viewer.