Changeset 29553 for trunk/ippTools/src/difftool.c
- Timestamp:
- Oct 25, 2010, 3:27:09 PM (16 years ago)
- Location:
- trunk/ippTools
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20100823/ippTools (added) merged: 29124,29232,29324,29515,29536
- Property svn:mergeinfo changed
-
trunk/ippTools/src
- Property svn:ignore
-
old new 41 41 bgtool 42 42 diffphottool 43 minidvodbtool
-
- Property svn:ignore
-
trunk/ippTools/src/difftool.c
r29416 r29553 1244 1244 PXOPT_COPY_STR(config->args, stackWhere, "-stack_data_group", "stackRun.data_group", "=="); 1245 1245 1246 PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false); 1247 1246 1248 PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option 1247 1249 PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option … … 1505 1507 // ok we've got one create the diffRun 1506 1508 diffRunRow *run = diffRunRowAlloc( 1507 0, // ID1508 "reg", // state1509 0, // ID 1510 "reg", // state 1509 1511 workdir, 1510 1512 label, … … 1512 1514 dist_group, 1513 1515 reduction, 1514 NULL, // dvodb1516 NULL, // dvodb 1515 1517 registered, 1516 1518 tess_id, 1517 false, // bothways1518 true, // exposure1519 0, // magicked1520 NULL, // software version1521 0, // mask stat npix1522 NAN, // static1523 NAN, // dynamic1524 NAN, // magic1525 NAN, // advisory1519 bothways, // bothways (default is false) 1520 true, // exposure 1521 0, // magicked 1522 NULL, // software version 1523 0, // mask stat npix 1524 NAN, // static 1525 NAN, // dynamic 1526 NAN, // magic 1527 NAN, // advisory 1526 1528 IPP_DIFF_MODE_WARP_STACK, 1527 1529 note … … 1656 1658 PXOPT_COPY_STR(config->args, selectWhere, "-template_comment", "templateRawExp.comment", "LIKE"); 1657 1659 1660 PXOPT_LOOKUP_BOOL(not_bothways, config->args, "-not-bothways", false); 1661 1658 1662 // Haversine formula for great circle distance 1659 1663 PXOPT_COPY_F32(config->args, selectWhere, "-distance", … … 1879 1883 registered, 1880 1884 tess_id, 1881 true, // bothways1885 !not_bothways, // bothways (default is true, ie not_bothways is false) 1882 1886 true, // exposure 1883 1887 false, // magicked … … 1962 1966 1963 1967 static bool definestackstackMode(pxConfig *config) { 1964 PS_ASSERT_PTR_NON_NULL(config, false); 1965 1966 psMetadata *stack1Where = psMetadataAlloc(); 1967 psMetadata *stack2Where = psMetadataAlloc(); 1968 1969 PXOPT_COPY_STR(config->args, stack1Where, "-tess_id", "stackRun.tess_id", "=="); 1970 PXOPT_COPY_STR(config->args, stack2Where, "-tess_id", "stackRun.tess_id", "=="); 1971 PXOPT_COPY_STR(config->args, stack1Where, "-filter", "stackRun.filter", "=="); 1972 PXOPT_COPY_STR(config->args, stack2Where, "-filter", "stackRun.filter", "=="); 1973 PXOPT_COPY_STR(config->args, stack1Where, "-skycell_id", "stackRun.skycell_id", "=="); 1974 PXOPT_COPY_STR(config->args, stack2Where, "-skycell_id", "stackRun.skycell_id", "=="); 1975 PXOPT_COPY_STR(config->args, stack1Where, "-input_label", "stackRun.label","=="); 1976 PXOPT_COPY_STR(config->args, stack2Where, "-template_label", "stackRun.label","=="); 1977 PXOPT_COPY_F32(config->args, stack1Where, "-good_frac", "stackSumSkyfile.good_frac", ">="); 1978 PXOPT_COPY_F32(config->args, stack2Where, "-good_frac", "stackSumSkyfile.good_frac", ">="); 1979 1980 PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option 1981 PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); // option 1982 PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option 1983 PXOPT_LOOKUP_TIME(registered, config->args, "-set_registered", false, false); 1984 PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false); 1985 PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false); 1986 PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false); 1987 1988 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1989 PXOPT_LOOKUP_BOOL(reRun, config->args, "-rerun", false); 1990 PXOPT_LOOKUP_BOOL(newTemplates,config->args,"-new-templates", false); 1991 1992 PXOPT_LOOKUP_BOOL(available, config->args, "-available", false); 1993 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 1994 1995 if (!(label)) { 1996 PXOPT_LOOKUP_STR(label,config->args, "-input_label",true,false); 1997 } 1998 1999 // Organize the config information into queries. 2000 psString stack1Query = NULL; 2001 psString stack2Query = NULL; 2002 2003 if (psListLength(stack1Where->list)) { 2004 psString whereClause = psDBGenerateWhereConditionSQL(stack1Where, NULL); 2005 psStringAppend(&stack1Query, "\n AND %s", whereClause); 2006 psFree(whereClause); 2007 } else { 2008 stack1Query = psStringCopy("\n"); 2009 } 2010 psFree(stack1Where); 2011 2012 if (psListLength(stack2Where->list)) { 2013 psString whereClause = psDBGenerateWhereConditionSQL(stack2Where, NULL); 2014 psStringAppend(&stack2Query, "\n AND %s", whereClause); 2015 psFree(whereClause); 2016 } else { 2017 stack2Query = psStringCopy("\n"); 2018 } 2019 psFree(stack2Where); 2020 2021 // don't queue for stacks that have already been diffed unless requested 2022 psString diffQuery = NULL; 2023 if (! (reRun || newTemplates) ) { 2024 psStringAppend(&diffQuery, "\n AND diffExp.diff_id IS NULL"); 2025 } else { 2026 diffQuery = psStringCopy("\n"); 2027 } 2028 2029 // find the distinct set of data_groups and filters 2030 psString query = pxDataGet("difftool_definestackstack_part0.sql"); 2031 if (!query) { 2032 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2033 return(false); 2034 } 2035 psTrace("difftool",1,query,stack2Query,stack1Query,diffQuery,stack1Query); 2036 /* exit(10); */ 2037 2038 if (!psDBTransaction(config->dbh)) { 2039 psError(PS_ERR_UNKNOWN, false, "database error"); 2040 return(false); 2041 } 2042 2043 if (!p_psDBRunQueryF(config->dbh, query, stack2Query, stack1Query, diffQuery, stack1Query)) { 2044 psError(PS_ERR_UNKNOWN, false, "database error"); 1968 PS_ASSERT_PTR_NON_NULL(config, false); 1969 1970 psMetadata *stack1Where = psMetadataAlloc(); 1971 psMetadata *stack2Where = psMetadataAlloc(); 1972 1973 PXOPT_COPY_STR(config->args, stack1Where, "-tess_id", "stackRun.tess_id", "=="); 1974 PXOPT_COPY_STR(config->args, stack2Where, "-tess_id", "stackRun.tess_id", "=="); 1975 PXOPT_COPY_STR(config->args, stack1Where, "-filter", "stackRun.filter", "=="); 1976 PXOPT_COPY_STR(config->args, stack2Where, "-filter", "stackRun.filter", "=="); 1977 PXOPT_COPY_STR(config->args, stack1Where, "-skycell_id", "stackRun.skycell_id", "=="); 1978 PXOPT_COPY_STR(config->args, stack2Where, "-skycell_id", "stackRun.skycell_id", "=="); 1979 PXOPT_COPY_STR(config->args, stack1Where, "-input_label", "stackRun.label","=="); 1980 PXOPT_COPY_STR(config->args, stack2Where, "-template_label", "stackRun.label","=="); 1981 PXOPT_COPY_F32(config->args, stack1Where, "-good_frac", "stackSumSkyfile.good_frac", ">="); 1982 PXOPT_COPY_F32(config->args, stack2Where, "-good_frac", "stackSumSkyfile.good_frac", ">="); 1983 1984 PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option 1985 PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); // option 1986 PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option 1987 PXOPT_LOOKUP_TIME(registered, config->args, "-set_registered", false, false); 1988 PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false); 1989 PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false); 1990 PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false); 1991 1992 PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false); 1993 1994 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1995 PXOPT_LOOKUP_BOOL(reRun, config->args, "-rerun", false); 1996 PXOPT_LOOKUP_BOOL(newTemplates,config->args,"-new-templates", false); 1997 1998 PXOPT_LOOKUP_BOOL(available, config->args, "-available", false); 1999 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 2000 2001 if (!(label)) { 2002 PXOPT_LOOKUP_STR(label,config->args, "-input_label",true,false); 2003 } 2004 2005 // Organize the config information into queries. 2006 psString stack1Query = NULL; 2007 psString stack2Query = NULL; 2008 2009 if (psListLength(stack1Where->list)) { 2010 psString whereClause = psDBGenerateWhereConditionSQL(stack1Where, NULL); 2011 psStringAppend(&stack1Query, "\n AND %s", whereClause); 2012 psFree(whereClause); 2013 } else { 2014 stack1Query = psStringCopy("\n"); 2015 } 2016 psFree(stack1Where); 2017 2018 if (psListLength(stack2Where->list)) { 2019 psString whereClause = psDBGenerateWhereConditionSQL(stack2Where, NULL); 2020 psStringAppend(&stack2Query, "\n AND %s", whereClause); 2021 psFree(whereClause); 2022 } else { 2023 stack2Query = psStringCopy("\n"); 2024 } 2025 psFree(stack2Where); 2026 2027 2028 // don't queue for stacks that have already been diffed unless requested 2029 psString diffQuery0 = NULL; 2030 psString diffQuery1 = NULL; 2031 if (! (reRun || newTemplates) ) { 2032 psStringAppend(&diffQuery0, "\n AND diffExp.diff_id IS NULL"); 2033 psStringAppend(&diffQuery1, "\n AND n_diff = 0"); 2034 } else { 2035 diffQuery0 = psStringCopy("\n"); 2036 diffQuery1 = psStringCopy("\n"); 2037 } 2038 2039 // find the distinct set of data_groups and filters 2040 psString query = pxDataGet("difftool_definestackstack_part0.sql"); 2041 if (!query) { 2042 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2043 return(false); 2044 } 2045 psTrace("difftool",1,query,stack2Query,stack1Query,diffQuery0,stack1Query); 2046 2047 if (!psDBTransaction(config->dbh)) { 2048 psError(PS_ERR_UNKNOWN, false, "database error"); 2049 return(false); 2050 } 2051 2052 if (!p_psDBRunQueryF(config->dbh, query, stack2Query, stack1Query, diffQuery0, stack1Query)) { 2053 psError(PS_ERR_UNKNOWN, false, "database error"); 2054 psFree(query); 2055 if (!psDBRollback(config->dbh)) { 2056 psError(PS_ERR_UNKNOWN, false, "database error"); 2057 } 2058 return false; 2059 } 2060 2045 2061 psFree(query); 2046 if (!psDBRollback(config->dbh)) { 2047 psError(PS_ERR_UNKNOWN, false, "database error"); 2048 } 2049 return false; 2050 } 2051 2052 psFree(query); 2053 2054 psArray *output = p_psDBFetchResult(config->dbh); 2055 if (!output) { 2056 psErrorCode err = psErrorCodeLast(); 2057 switch (err) { 2058 case PS_ERR_DB_CLIENT: 2059 psError(PXTOOLS_ERR_SYS, false, "database error"); 2060 break; 2061 case PS_ERR_DB_SERVER: 2062 psError(PXTOOLS_ERR_PROG, false, "database error"); 2063 break; 2064 default: 2065 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2066 break; 2067 } 2068 if (!psDBRollback(config->dbh)) { 2069 psError(PS_ERR_UNKNOWN, false, "database error"); 2070 } 2071 return false; 2072 } 2073 if (!psArrayLength(output)) { 2074 psTrace("difftool", PS_LOG_INFO, "no rows found"); 2062 2063 psArray *output = p_psDBFetchResult(config->dbh); 2064 if (!output) { 2065 psErrorCode err = psErrorCodeLast(); 2066 switch (err) { 2067 case PS_ERR_DB_CLIENT: 2068 psError(PXTOOLS_ERR_SYS, false, "database error"); 2069 break; 2070 case PS_ERR_DB_SERVER: 2071 psError(PXTOOLS_ERR_PROG, false, "database error"); 2072 break; 2073 default: 2074 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2075 break; 2076 } 2077 if (!psDBRollback(config->dbh)) { 2078 psError(PS_ERR_UNKNOWN, false, "database error"); 2079 } 2080 return false; 2081 } 2082 if (!psArrayLength(output)) { 2083 psTrace("difftool", PS_LOG_INFO, "no rows found"); 2084 psFree(output); 2085 if (!psDBCommit(config->dbh)) { 2086 psError(PS_ERR_UNKNOWN, false, "database error"); 2087 return false; 2088 } 2089 return true; 2090 } 2091 2092 query = pxDataGet("difftool_definestackstack_part1.sql"); 2093 if (pretend) { 2094 // negative simple so the default is true 2095 if (!ippdbPrintMetadatas(stdout, output, "diffRunTemp", !simple)) { 2096 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2097 psFree(output); 2098 return false; 2099 } 2100 psFree(output); 2101 return true; 2102 } 2103 2104 psArray *list = psArrayAllocEmpty(16); // List of runs defined, to print 2105 for (long i = 0; i < output->n; i++) { 2106 psMetadata *row = output->data[i]; // Output row from query 2107 bool mdok; // Status of MD lookup 2108 2109 // psMetadataPrint(stderr, row, 1); 2110 2111 psString tess_id = psMetadataLookupStr(&mdok,row,"INPUT_tess_id"); 2112 psString this_data_group = psMetadataLookupStr(&mdok,row,"INPUT_data_group"); 2113 psString this_dist_group = psMetadataLookupStr(&mdok,row,"INPUT_dist_group"); 2114 psString this_label = psMetadataLookupStr(&mdok,row,"INPUT_label"); 2115 2116 psString this_stack1Query = psStringCopy(stack1Query); 2117 2118 psString thisWhere = psDBGenerateWhereConditionSQL(row,NULL); 2119 psStringSubstitute(&thisWhere,"stackRun.","INPUT_"); 2120 psStringAppend(&this_stack1Query,"\n AND %s", thisWhere); 2121 psFree(thisWhere); 2122 2123 psTrace("difftool",1, query,stack2Query,this_stack1Query,diffQuery1,this_stack1Query); 2124 if (!psDBTransaction(config->dbh)) { 2125 psError(PS_ERR_UNKNOWN, false, "database error"); 2126 return(false); 2127 } 2128 2129 if (!p_psDBRunQueryF(config->dbh, query, stack2Query, this_stack1Query, diffQuery1, this_stack1Query)) { 2130 psError(PS_ERR_UNKNOWN, false, "database error"); 2131 psFree(query); 2132 if (!psDBRollback(config->dbh)) { 2133 psError(PS_ERR_UNKNOWN, false, "database error"); 2134 } 2135 return false; 2136 } 2137 psFree(this_stack1Query); 2138 2139 psArray *diff_id_output = p_psDBFetchResult(config->dbh); 2140 if (!diff_id_output) { 2141 psErrorCode err = psErrorCodeLast(); 2142 switch (err) { 2143 case PS_ERR_DB_CLIENT: 2144 psError(PXTOOLS_ERR_SYS, false, "database error"); 2145 break; 2146 case PS_ERR_DB_SERVER: 2147 psError(PXTOOLS_ERR_PROG, false, "database error"); 2148 break; 2149 default: 2150 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2151 break; 2152 } 2153 if (!psDBRollback(config->dbh)) { 2154 psError(PS_ERR_UNKNOWN, false, "database error"); 2155 } 2156 return false; 2157 } 2158 if (!psArrayLength(diff_id_output)) { 2159 psTrace("difftool", PS_LOG_INFO, "no rows found"); 2160 psFree(diff_id_output); 2161 if (!psDBCommit(config->dbh)) { 2162 psError(PS_ERR_UNKNOWN, false, "database error"); 2163 return false; 2164 } 2165 return true; 2166 } 2167 2168 // ok we've got one create the diffRun 2169 diffRunRow *run = diffRunRowAlloc( 2170 0, // ID 2171 "reg", // state 2172 workdir, 2173 label ? label : this_label, 2174 data_group ? data_group : this_data_group, 2175 dist_group ? dist_group : this_dist_group, 2176 reduction, 2177 NULL, // dvodb 2178 registered, 2179 tess_id, 2180 bothways, // bothways 2181 false, // exposure 2182 0, // magicked 2183 NULL, // software version 2184 0, // mask stat npix 2185 NAN, // static 2186 NAN, // dynamic 2187 NAN, // magic 2188 NAN, // advisory 2189 IPP_DIFF_MODE_STACK_STACK, // diff_mode 2190 note 2191 ); 2192 // Commit to database 2193 if (!diffRunInsertObject(config->dbh, run)) { 2194 psError(PS_ERR_UNKNOWN, false, "database error"); 2195 psFree(run); 2196 if (!psDBRollback(config->dbh)) { 2197 psError(PS_ERR_UNKNOWN, false, "database error"); 2198 } 2199 return false; 2200 } 2201 // diffRunPrintObject(stdout,run,1); 2202 run->diff_id = psDBLastInsertID(config->dbh); 2203 2204 for (long j = 0; j < diff_id_output->n; j++) { 2205 psMetadata *input_row = diff_id_output->data[j]; // Output row from query 2206 bool mdok; 2207 psString in_skycell_id = psMetadataLookupStr(&mdok,input_row,"skycell_id"); 2208 psS64 in_input_stack_id = psMetadataLookupS64(&mdok,input_row,"stack_id"); 2209 psS64 in_template_stack_id = psMetadataLookupS64(&mdok,input_row,"max_stack_id"); 2210 psString in_tess_id = psMetadataLookupStr(&mdok,input_row,"tess_id"); 2211 psTrace("difftool",1,"%s %" PRId64 " %" PRId64 " %s\n", 2212 in_skycell_id, in_input_stack_id, in_template_stack_id, in_tess_id); 2213 diffInputSkyfileRow *input = diffInputSkyfileRowAlloc( 2214 run->diff_id, // ID 2215 in_skycell_id, 2216 PS_MAX_S64, // warp1_id -> NULL 2217 in_input_stack_id, // stack1 2218 PS_MAX_S64, // warp2_id -> NULL 2219 in_template_stack_id, // stack2 2220 in_tess_id, 2221 0 // diff_skyfile_id 2222 ); 2223 2224 // Commit to database the input 2225 if (!diffInputSkyfileInsertObject(config->dbh, input)) { 2226 psError(PS_ERR_UNKNOWN, false, "database error"); 2227 psFree(input); 2228 if (!psDBRollback(config->dbh)) { 2229 psError(PS_ERR_UNKNOWN, false, "database error"); 2230 } 2231 return false; 2232 } 2233 2234 /* diffInputSkyfilePrintObject(stdout,input,1); */ 2235 psFree(input); 2236 } 2237 2238 if (!setdiffRunState(config, run->diff_id, "new", false)) { 2239 psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64, run->diff_id); 2240 psFree(stack1Query); 2241 psFree(stack2Query); 2242 psFree(diffQuery0); 2243 psFree(diffQuery1); 2244 psFree(run); 2245 psFree(list); 2246 if (!psDBRollback(config->dbh)) { 2247 psError(PS_ERR_UNKNOWN, false, "database error"); 2248 } 2249 return false; 2250 } 2251 psArrayAdd(list, list->n, run); 2252 psFree(run); 2253 } 2254 2255 if (!psDBCommit(config->dbh)) { 2256 psError(PS_ERR_UNKNOWN, false, "database error"); 2257 psFree(list); 2258 return false; 2259 } 2260 2261 if (!diffRunPrintObjects(stdout, list, !simple)) { 2262 psError(PS_ERR_UNKNOWN, false, "failed to print object"); 2263 psFree(list); 2264 return false; 2265 } 2266 2267 psFree(query); 2268 psFree(stack1Query); 2269 psFree(stack2Query); 2270 psFree(diffQuery0); 2271 psFree(diffQuery1); 2075 2272 psFree(output); 2273 psFree(list); 2274 2076 2275 if (!psDBCommit(config->dbh)) { 2077 psError(PS_ERR_UNKNOWN, false, "database error"); 2078 return false; 2079 } 2080 return true; 2081 } 2082 2083 query = pxDataGet("difftool_definestackstack_part1.sql"); 2084 if (pretend) { 2085 // negative simple so the default is true 2086 if (!ippdbPrintMetadatas(stdout, output, "diffRunTemp", !simple)) { 2087 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2088 psFree(output); 2089 return false; 2090 } 2091 psFree(output); 2092 return true; 2093 } 2094 2095 psArray *list = psArrayAllocEmpty(16); // List of runs defined, to print 2096 for (long i = 0; i < output->n; i++) { 2097 psMetadata *row = output->data[i]; // Output row from query 2098 bool mdok; // Status of MD lookup 2099 2100 psString tess_id = psMetadataLookupStr(&mdok,row,"INPUT_tess_id"); 2101 psString this_data_group = psMetadataLookupStr(&mdok,row,"INPUT_data_group"); 2102 psString this_dist_group = psMetadataLookupStr(&mdok,row,"INPUT_dist_group"); 2103 psString this_label = psMetadataLookupStr(&mdok,row,"INPUT_label"); 2104 2105 psString this_stack1Query = psStringCopy(stack1Query); 2106 2107 psString thisWhere = psDBGenerateWhereConditionSQL(row,NULL); 2108 psStringSubstitute(&thisWhere,"stackRun.","INPUT_"); 2109 psStringAppend(&this_stack1Query,"\n AND %s", thisWhere); 2110 psFree(thisWhere); 2111 2112 psTrace("difftool",1, query,stack2Query,this_stack1Query,diffQuery,this_stack1Query); 2113 if (!psDBTransaction(config->dbh)) { 2114 psError(PS_ERR_UNKNOWN, false, "database error"); 2115 return(false); 2116 } 2117 2118 if (!p_psDBRunQueryF(config->dbh, query, stack2Query, this_stack1Query, diffQuery, this_stack1Query)) { 2119 psError(PS_ERR_UNKNOWN, false, "database error"); 2120 psFree(query); 2121 if (!psDBRollback(config->dbh)) { 2122 psError(PS_ERR_UNKNOWN, false, "database error"); 2123 } 2124 return false; 2125 } 2126 psFree(this_stack1Query); 2127 2128 psArray *diff_id_output = p_psDBFetchResult(config->dbh); 2129 if (!diff_id_output) { 2130 psErrorCode err = psErrorCodeLast(); 2131 switch (err) { 2132 case PS_ERR_DB_CLIENT: 2133 psError(PXTOOLS_ERR_SYS, false, "database error"); 2134 break; 2135 case PS_ERR_DB_SERVER: 2136 psError(PXTOOLS_ERR_PROG, false, "database error"); 2137 break; 2138 default: 2139 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2140 break; 2141 } 2142 if (!psDBRollback(config->dbh)) { 2143 psError(PS_ERR_UNKNOWN, false, "database error"); 2144 } 2145 return false; 2146 } 2147 if (!psArrayLength(diff_id_output)) { 2148 psTrace("difftool", PS_LOG_INFO, "no rows found"); 2149 psFree(diff_id_output); 2150 if (!psDBCommit(config->dbh)) { 2151 psError(PS_ERR_UNKNOWN, false, "database error"); 2152 return false; 2153 } 2154 return true; 2155 } 2156 2157 // ok we've got one create the diffRun 2158 diffRunRow *run = diffRunRowAlloc( 2159 0, // ID 2160 "reg", // state 2161 workdir, 2162 label ? label : this_label, 2163 data_group ? data_group : this_data_group, 2164 dist_group ? dist_group : this_dist_group, 2165 reduction, 2166 NULL, // dvodb 2167 registered, 2168 tess_id, 2169 false, // bothways 2170 false, // exposure 2171 0, // magicked 2172 NULL, // software version 2173 0, // mask stat npix 2174 NAN, // static 2175 NAN, // dynamic 2176 NAN, // magic 2177 NAN, // advisory 2178 IPP_DIFF_MODE_STACK_STACK, // diff_mode 2179 note 2180 ); 2181 // Commit to database 2182 if (!diffRunInsertObject(config->dbh, run)) { 2183 psError(PS_ERR_UNKNOWN, false, "database error"); 2184 psFree(run); 2185 if (!psDBRollback(config->dbh)) { 2186 psError(PS_ERR_UNKNOWN, false, "database error"); 2187 } 2188 return false; 2189 } 2190 /* diffRunPrintObject(stdout,run,1); */ 2191 run->diff_id = psDBLastInsertID(config->dbh); 2192 for (long j = 0; j < diff_id_output->n; j++) { 2193 psMetadata *input_row = diff_id_output->data[j]; // Output row from query 2194 bool mdok; 2195 psString in_skycell_id = psMetadataLookupStr(&mdok,input_row,"skycell_id"); 2196 psS64 in_input_stack_id = psMetadataLookupS64(&mdok,input_row,"stack_id"); 2197 psS64 in_template_stack_id = psMetadataLookupS64(&mdok,input_row,"max_stack_id"); 2198 psString in_tess_id = psMetadataLookupStr(&mdok,input_row,"tess_id"); 2199 psTrace("difftool",1,"%s %" PRId64 " %" PRId64 " %s\n", 2200 in_skycell_id, in_input_stack_id, in_template_stack_id, in_tess_id); 2201 diffInputSkyfileRow *input = diffInputSkyfileRowAlloc( 2202 run->diff_id, // ID 2203 in_skycell_id, 2204 PS_MAX_S64, // warp1_id -> NULL 2205 in_input_stack_id, // stack1 2206 PS_MAX_S64, // warp2_id -> NULL 2207 in_template_stack_id, // stack2 2208 in_tess_id, 2209 0 // diff_skyfile_id 2210 ); 2211 // Commit to database the input 2212 if (!diffInputSkyfileInsertObject(config->dbh, input)) { 2213 psError(PS_ERR_UNKNOWN, false, "database error"); 2214 psFree(input); 2215 if (!psDBRollback(config->dbh)) { 2216 psError(PS_ERR_UNKNOWN, false, "database error"); 2217 } 2218 return false; 2219 } 2220 2221 /* diffInputSkyfilePrintObject(stdout,input,1); */ 2222 psFree(input); 2223 } 2224 2225 if (!setdiffRunState(config, run->diff_id, "new", false)) { 2226 psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64, run->diff_id); 2227 psFree(stack1Query); 2228 psFree(stack2Query); 2229 psFree(diffQuery); 2230 psFree(run); 2231 psFree(list); 2232 if (!psDBRollback(config->dbh)) { 2233 psError(PS_ERR_UNKNOWN, false, "database error"); 2234 } 2235 return false; 2236 } 2237 psArrayAdd(list, list->n, run); 2238 psFree(run); 2239 } 2240 2241 if (!psDBCommit(config->dbh)) { 2242 psError(PS_ERR_UNKNOWN, false, "database error"); 2243 psFree(list); 2244 return false; 2245 } 2246 2247 if (!diffRunPrintObjects(stdout, list, !simple)) { 2248 psError(PS_ERR_UNKNOWN, false, "failed to print object"); 2249 psFree(list); 2250 return false; 2251 } 2252 2253 psFree(query); 2254 psFree(stack1Query); 2255 psFree(stack2Query); 2256 psFree(diffQuery); 2257 psFree(output); 2258 psFree(list); 2259 2260 if (!psDBCommit(config->dbh)) { 2261 psError(PS_ERR_UNKNOWN, false, "database error"); 2262 psFree(list); 2263 return false; 2264 } 2265 2266 return(true); 2276 psError(PS_ERR_UNKNOWN, false, "database error"); 2277 psFree(list); 2278 return false; 2279 } 2280 2281 return(true); 2267 2282 } 2268 2283
Note:
See TracChangeset
for help on using the changeset viewer.
