Changeset 8376 for trunk/ippTools/src/dettool.c
- Timestamp:
- Aug 15, 2006, 5:33:32 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/dettool.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/dettool.c
r8370 r8376 2034 2034 PS_ASSERT_PTR_NON_NULL(config, false); 2035 2035 2036 // det_id, class_id, uri, & recipe are required 2037 bool status = false; 2038 psString det_id = psMetadataLookupStr(&status, config->args, "-det_id"); 2039 if (!status) { 2040 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id"); 2041 return false; 2042 } 2043 if (!det_id) { 2044 psError(PS_ERR_UNKNOWN, true, "-det_id is required"); 2045 return false; 2046 } 2047 psString class_id = psMetadataLookupStr(&status, config->args, "-class_id"); 2048 if (!status) { 2049 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -class_id"); 2050 return false; 2051 } 2052 if (!class_id) { 2053 psError(PS_ERR_UNKNOWN, true, "-class_id is required"); 2054 return false; 2055 } 2056 psString uri = psMetadataLookupStr(&status, config->args, "-uri"); 2057 if (!status) { 2058 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri"); 2059 return false; 2060 } 2061 if (!uri) { 2062 psError(PS_ERR_UNKNOWN, true, "-uri is required"); 2063 return false; 2064 } 2065 psString recipe = psMetadataLookupStr(&status, config->args, "-recip"); 2066 if (!status) { 2067 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -recip"); 2068 return false; 2069 } 2070 if (!recipe) { 2071 psError(PS_ERR_UNKNOWN, true, "-recip is required"); 2072 return false; 2073 } 2074 2075 // iteration has a default value 2076 psS32 iteration = psMetadataLookupS32(&status, config->args, "-iteration"); 2077 if (!status) { 2078 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -iteration"); 2079 return false; 2080 } 2081 2082 // correlate the class_id against the det_id's detStackedImfiles 2083 2084 // we have to generate our own where claus as we want to search only by the 2085 // det_id & class_id 2086 psMetadata *where = psMetadataAlloc(); 2087 if (!psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", 2088 (psS32)atoi(det_id))) { 2089 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); 2090 psFree(where); 2091 return false; 2092 } 2093 if (!psMetadataAddStr(where, PS_LIST_TAIL, "class_id", 0, "==", class_id)) { 2094 psError(PS_ERR_UNKNOWN, false, "failed to add item class_id"); 2095 psFree(where); 2096 return false; 2097 } 2098 2099 psArray *stackedImfiles = detStackedImfileSelectRowObjects( 2100 config->dbh, where, 0); 2101 psFree(where); 2102 2103 bool valid_class_id = false; 2104 if (stackedImfiles) { 2105 for (long i = 0; i < psArrayLength(stackedImfiles); i++) { 2106 if (strcmp(class_id, 2107 ((detStackedImfileRow *)stackedImfiles->data[i])->class_id) 2108 == 0) { 2109 valid_class_id = true; 2110 break; 2036 // make sure that there is a respondoing entry in detNormalizedStatImfile 2037 // select * from detNormalizedStatImfile 2038 // by det_id, iteration, class_id 2039 // where det_id, iteration, class_id is not in detNormalizedImfile 2040 psString query = psStringCopy( 2041 "SELECT DISTINCT" 2042 " detNormalizedStatImfile.*" 2043 " FROM detNormalizedStatImfile" 2044 " LEFT JOIN detNormalizedStatImfile" 2045 " USING(det_id, iteration, class_id)" 2046 " WHERE" 2047 " detNormalizedImfile.det_id IS NULL" 2048 " AND detNormalizedImfile.iteration IS NULL" 2049 " AND detNormalizedImfile.class_id IS NULL" 2050 ); 2051 2052 # if 0 2053 if (config->where) { 2054 psString whereClaus = psDBGenerateWhereConditionSQL(config->where, "detStackedImfile"); 2055 psStringAppend(&query, " AND %s", whereClaus); 2056 psFree(whereClaus); 2057 } 2058 #endif 2059 2060 if (!p_psDBRunQuery(config->dbh, query)) { 2061 psError(PS_ERR_UNKNOWN, false, "database error"); 2062 psFree(query); 2063 return false; 2064 } 2065 psFree(query); 2066 2067 psArray *output = p_psDBFetchResult(config->dbh); 2068 if (!output) { 2069 // XXX check psError here 2070 psError(PS_ERR_UNKNOWN, false, "no pending rawDetrendExp rows found"); 2071 return false; 2072 } 2073 2074 // start a transaction so it's all rows or nothing 2075 if (!psDBTransaction(config->dbh)) { 2076 psError(PS_ERR_UNKNOWN, false, "database error"); 2077 psFree(output); 2078 return false; 2079 } 2080 2081 #if 0 2082 for (long i = 0; i < psArrayLength(output); i++) { 2083 psMetadata *row = output->data[i]; 2084 // convert metadata into a detStackedImfile object 2085 detStackedImfileRow *stackedImfile = detStackedImfileObjectFromMetadata(row); 2086 // convert detStackedImfile object into a detNormalizedStat object 2087 detNormalizedStatImfileRow *stat = detStackedToDetNormalizedStatImfile(config, stackedImfile); 2088 psFree(stackedImfile); 2089 if (!stat) { 2090 if (!psDBRollback(config->dbh)) { 2091 psError(PS_ERR_UNKNOWN, false, "database error"); 2111 2092 } 2112 } 2113 psFree(stackedImfiles); 2114 } 2115 2116 if (!valid_class_id) { 2117 psError(PS_ERR_UNKNOWN, true, 2118 "class_id can not be correlated with a detStackedImfile"); 2119 return false; 2120 } 2121 2122 // create a new detNormalizedImfile object 2123 detNormalizedImfileRow *masterImfile = detNormalizedImfileRowAlloc( 2124 (psS32)atol(det_id), iteration, class_id, uri, recipe 2125 ); 2126 2127 // insert the new row into the detProcessedImfile table 2128 if (!detNormalizedImfileInsertObject(config->dbh, masterImfile)) { 2093 psError(PS_ERR_UNKNOWN, false, "failed to convert detStackedImfile to detNormalizedStatImfile"); 2094 psFree(output); 2095 return false; 2096 } 2097 // insert detNormlized Stat object into the database 2098 if (!detNormalizedStatImfileInsertObject(config->dbh, stat)) { 2099 if (!psDBRollback(config->dbh)) { 2100 psError(PS_ERR_UNKNOWN, false, "database error"); 2101 } 2102 psError(PS_ERR_UNKNOWN, false, "database error"); 2103 psFree(stat); 2104 psFree(output); 2105 } 2106 psFree(stat); 2107 } 2108 2109 psFree(output); 2110 2111 if (!psDBCommit(config->dbh)) { 2129 2112 psError(PS_ERR_UNKNOWN, false, "database error"); 2130 psFree(masterImfile);2131 return false;2132 } 2133 2134 psFree(masterImfile); 2113 return false; 2114 } 2115 2116 return true; 2117 #endif 2135 2118 2136 2119 return true; … … 2168 2151 2169 2152 // mask out normalized imfiles that have residuals registered for them 2170 psArray *residImfiles = detResidImfile AnalysisSelectRowObjects(config->dbh,2153 psArray *residImfiles = detResidImfileSelectRowObjects(config->dbh, 2171 2154 config->where, 0); 2172 2155 if (residImfiles) { … … 2176 2159 (((detNormalizedImfileRow *)normalizedImfiles->data[i])->det_id 2177 2160 == 2178 ((detResidImfile AnalysisRow *)residImfiles->data[j])->det_id)2161 ((detResidImfileRow *)residImfiles->data[j])->det_id) 2179 2162 && 2180 2163 (((detNormalizedImfileRow *)normalizedImfiles->data[i])->iteration 2181 2164 == 2182 ((detResidImfile AnalysisRow *)residImfiles->data[j])->iteration)2165 ((detResidImfileRow *)residImfiles->data[j])->iteration) 2183 2166 && 2184 2167 (strcmp( 2185 2168 ((detNormalizedImfileRow *)normalizedImfiles->data[i])->class_id, 2186 ((detResidImfile AnalysisRow *)residImfiles->data[j])->class_id) == 0))2169 ((detResidImfileRow *)residImfiles->data[j])->class_id) == 0)) 2187 2170 { 2188 2171 … … 2427 2410 2428 2411 // create a new detResidImfileRow and insert it 2429 detResidImfile AnalysisRow *residImfile = detResidImfileAnalysisRowAlloc(2412 detResidImfileRow *residImfile = detResidImfileRowAlloc( 2430 2413 (psS32)atol(det_id), 2431 2414 iteration, … … 2438 2421 ); 2439 2422 2440 if (!detResidImfile AnalysisInsertObject(config->dbh, residImfile)) {2423 if (!detResidImfileInsertObject(config->dbh, residImfile)) { 2441 2424 psError(PS_ERR_UNKNOWN, false, "database error"); 2442 2425 psFree(residImfile); … … 2454 2437 2455 2438 // no options are required... use the default where statement 2456 psArray *residImfiles = detResidImfile AnalysisSelectRowObjects(config->dbh,2439 psArray *residImfiles = detResidImfileSelectRowObjects(config->dbh, 2457 2440 config->where, 0); 2458 2441 if (!residImfiles) { 2459 psError(PS_ERR_UNKNOWN, false, "no detResidImfile Analysisrows found");2442 psError(PS_ERR_UNKNOWN, false, "no detResidImfile rows found"); 2460 2443 return false; 2461 2444 } … … 2473 2456 // negative simple so the default is true 2474 2457 if (residImfiles->n) { 2475 if (!detResidImfile AnalysisPrintObjects(stdout, residImfiles, !simple)) {2458 if (!detResidImfilePrintObjects(stdout, residImfiles, !simple)) { 2476 2459 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2477 2460 psFree(residImfiles); … … 2569 2552 psFree(inputExp); 2570 2553 2571 // create a new detResidExp Analysisrow and insert it2572 detResidExp AnalysisRow *residExp = detResidExpAnalysisRowAlloc(2554 // create a new detResidExpg row and insert it 2555 detResidExpRow *residExp = detResidExpRowAlloc( 2573 2556 (psS32)atol(det_id), 2574 2557 iteration, … … 2579 2562 ); 2580 2563 2581 if (!detResidExp AnalysisInsertObject(config->dbh, residExp)) {2564 if (!detResidExpInsertObject(config->dbh, residExp)) { 2582 2565 psError(PS_ERR_UNKNOWN, false, "database error"); 2583 2566 psFree(residExp); … … 2595 2578 2596 2579 // no options are required... use the default where statement 2597 psArray *residExps = detResidExp AnalysisSelectRowObjects(config->dbh,2580 psArray *residExps = detResidExpSelectRowObjects(config->dbh, 2598 2581 config->where, 0); 2599 2582 if (!residExps) { 2600 psError(PS_ERR_UNKNOWN, false, "no detResidExp Analysisrows found");2583 psError(PS_ERR_UNKNOWN, false, "no detResidExpg rows found"); 2601 2584 return false; 2602 2585 } … … 2614 2597 // negative simple so the default is true 2615 2598 if (residExps->n) { 2616 if (!detResidExp AnalysisPrintObjects(stdout, residExps, !simple)) {2599 if (!detResidExpPrintObjects(stdout, residExps, !simple)) { 2617 2600 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2618 2601 psFree(residExps);
Note:
See TracChangeset
for help on using the changeset viewer.
