Changeset 28003 for branches/pap/ippTools/src/difftool.c
- Timestamp:
- May 18, 2010, 12:49:05 PM (16 years ago)
- Location:
- branches/pap
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippTools/src/difftool.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap
- Property svn:mergeinfo changed
-
branches/pap/ippTools/src/difftool.c
r27445 r28003 57 57 static bool toscrubbedskyfileMode(pxConfig *config); 58 58 static bool tofullskyfileMode(pxConfig *config); 59 static bool listrunMode(pxConfig *config); 60 static bool setskyfiletoupdateMode(pxConfig *config); 59 61 60 62 … … 101 103 MODECASE(DIFFTOOL_MODE_TOSCRUBBEDSKYFILE, toscrubbedskyfileMode); 102 104 MODECASE(DIFFTOOL_MODE_TOFULLSKYFILE, tofullskyfileMode); 105 MODECASE(DIFFTOOL_MODE_LISTRUN, listrunMode); 106 MODECASE(DIFFTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateMode); 103 107 104 108 default: … … 194 198 PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "=="); 195 199 PXOPT_COPY_STR(config->args, where, "-label", "label", "=="); 200 PXOPT_COPY_STR(config->args, where, "-data_group","data_group", "=="); 196 201 PXOPT_COPY_STR(config->args, where, "-state", "state", "=="); 197 202 if (!psListLength(where->list)) { … … 702 707 pxAddLabelSearchArgs (config, where, "-data_group", "diffRun.data_group", "LIKE"); 703 708 709 PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false); 704 710 PXOPT_LOOKUP_BOOL(template, config->args, "-template", false); 705 711 if (!template) { … … 745 751 psFree(where); 746 752 753 if (pstamp_order) { 754 if (template) { 755 psStringAppend(&query, " ORDER BY rawTemplate.exp_id, diff_id DESC"); 756 } else { 757 psStringAppend(&query, " ORDER BY rawInput.exp_id, diff_id DESC"); 758 } 759 } 760 747 761 // treat limit == 0 as "no limit" 748 762 if (limit) { … … 810 824 } 811 825 812 if (!psDBTransaction(config->dbh)) {813 psError(PS_ERR_UNKNOWN, false, "database error");814 psFree(where);815 return false;816 }817 818 // Update state to 'new'819 {820 psString query = pxDataGet("difftool_revertdiffskyfile_update.sql");821 if (!query) {822 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");823 if (!psDBRollback(config->dbh)) {824 psError(PS_ERR_UNKNOWN, false, "database error");825 }826 return false;827 }828 829 if (psListLength(where->list)) {830 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);831 psStringAppend(&query, " AND %s", whereClause);832 psFree(whereClause);833 }834 835 if (!p_psDBRunQuery(config->dbh, query)) {836 psError(PS_ERR_UNKNOWN, false, "database error");837 psFree(query);838 if (!psDBRollback(config->dbh)) {839 psError(PS_ERR_UNKNOWN, false, "database error");840 }841 return false;842 }843 psFree(query);844 845 psLogMsg("difftool", PS_LOG_INFO, "Updated %" PRIu64 " rows", psDBAffectedRows(config->dbh));846 }847 848 // Delete product849 826 { 850 827 psString query = pxDataGet("difftool_revertdiffskyfile_delete.sql"); 851 828 if (!query) { 852 829 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 853 if (!psDBRollback(config->dbh)) { 854 psError(PS_ERR_UNKNOWN, false, "database error"); 855 } 830 return false; 831 } 832 psString query_updated = pxDataGet("difftool_revertdiffskyfile_updated.sql"); 833 if (!query_updated) { 834 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 856 835 return false; 857 836 } … … 860 839 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 861 840 psStringAppend(&query, " AND %s", whereClause); 841 psStringAppend(&query_updated, " AND %s", whereClause); 862 842 psFree(whereClause); 863 843 } … … 866 846 psError(PS_ERR_UNKNOWN, false, "database error"); 867 847 psFree(query); 868 if (!psDBRollback(config->dbh)) {869 psError(PS_ERR_UNKNOWN, false, "database error");870 }871 848 return false; 872 849 } 873 850 psFree(query); 874 875 851 psLogMsg("difftool", PS_LOG_INFO, "Deleted %" PRIu64 " rows", psDBAffectedRows(config->dbh)); 852 853 if (!p_psDBRunQuery(config->dbh, query_updated)) { 854 psError(PS_ERR_UNKNOWN, false, "database error"); 855 psFree(query_updated); 856 return false; 857 } 858 psFree(query_updated); 859 860 psLogMsg("difftool", PS_LOG_INFO, "Updated %" PRIu64 " rows", psDBAffectedRows(config->dbh)); 876 861 } 877 862 878 863 psFree(where); 879 864 880 if (!psDBCommit(config->dbh)) {881 psError(PS_ERR_UNKNOWN, false, "database error");882 return false;883 }884 865 885 866 return true; … … 971 952 return false; 972 953 } 973 psS16 diff_mode = 0;954 psS16 diff_mode = IPP_DIFF_MODE_UNDEFINED; 974 955 if ((input_warp_id != PS_MAX_S64) && (template_warp_id != PS_MAX_S64)) { 975 diff_mode = 1;956 diff_mode = IPP_DIFF_MODE_WARP_WARP; 976 957 } 977 958 else if ((input_warp_id != PS_MAX_S64) && (template_stack_id != PS_MAX_S64)) { 978 diff_mode = 2;959 diff_mode = IPP_DIFF_MODE_WARP_STACK; 979 960 } 980 961 else if ((input_stack_id != PS_MAX_S64) && (template_warp_id != PS_MAX_S64)) { 981 diff_mode = 3;962 diff_mode = IPP_DIFF_MODE_STACK_WARP; 982 963 } 983 964 else if ((input_stack_id != PS_MAX_S64) && (template_stack_id != PS_MAX_S64)) { 984 diff_mode = 4;965 diff_mode = IPP_DIFF_MODE_STACK_STACK; 985 966 } 986 967 … … 1366 1347 } 1367 1348 1368 1369 1349 psString filter = psMetadataLookupStr(&mdok, row, "filter"); 1370 1350 if (!mdok) { … … 1378 1358 return false; 1379 1359 } 1360 1361 psString warp_data_group = psMetadataLookupStr(&mdok, row, "data_group"); 1362 if (!mdok) { 1363 psError(PXTOOLS_ERR_PROG, false, "warp data_group not found"); 1364 psFree(warp2Query); 1365 psFree(stackQuery); 1366 psFree(skycell_query); 1367 if (!psDBRollback(config->dbh)) { 1368 psError(PS_ERR_UNKNOWN, false, "database error"); 1369 } 1370 return false; 1371 } 1372 if (warp_data_group) { 1373 data_group = warp_data_group; 1374 } 1375 1380 1376 if (!p_psDBRunQueryF(config->dbh, skycell_query, stackQuery, warp_id, filter, warp2Query)) { 1381 1377 psError(PS_ERR_UNKNOWN, false, "database error"); … … 1416 1412 true, // exposure 1417 1413 0, // magicked 1418 2, // diff_mode for warp-stack difference1414 IPP_DIFF_MODE_WARP_STACK, 1419 1415 note 1420 1416 ); … … 1739 1735 const char *template = psMetadataLookupStr(NULL, row, "template_warp_id"); 1740 1736 const char *tess_id = psMetadataLookupStr(NULL, row, "tess_id"); 1737 psString input_data_group = psMetadataLookupStr(NULL, row, "input_data_group"); 1738 if (input_data_group) { 1739 data_group = input_data_group; 1740 } 1741 1741 1742 if (!input_id || !template || !tess_id) { 1742 1743 psError(PXTOOLS_ERR_PROG, false, "Identifiers not found"); … … 1749 1750 return false; 1750 1751 } 1751 1752 1752 1753 diffRunRow *run = diffRunRowAlloc(0, 1753 1754 "reg", … … 1763 1764 true, // exposure 1764 1765 false, // magicked 1765 1, // diff_mode for warp-warp diff1766 IPP_DIFF_MODE_WARP_WARP, 1766 1767 note); // Run to insert 1767 1768 if (!diffRunInsertObject(config->dbh, run)) { … … 2045 2046 false, // exposure 2046 2047 0, // magicked 2047 4,// diff_mode2048 IPP_DIFF_MODE_STACK_STACK, // diff_mode 2048 2049 note 2049 2050 ); … … 2338 2339 psMetadata *where = psMetadataAlloc(); 2339 2340 PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "=="); 2341 PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell_id", "=="); 2340 2342 2341 2343 if (!pxSetFaultCode(config->dbh, "diffSkyfile", where, fault)) { … … 2606 2608 return true; 2607 2609 } 2610 2611 static bool listrunMode(pxConfig *config) 2612 { 2613 PS_ASSERT_PTR_NON_NULL(config, false); 2614 2615 psMetadata *where = psMetadataAlloc(); 2616 PXOPT_COPY_S64(config->args, where, "-diff_id", "diffRun.diff_id", "=="); 2617 PXOPT_COPY_STR(config->args, where, "-tess_id", "diffRun.tess_id", "=="); 2618 PXOPT_COPY_S64(config->args, where, "-magicked", "diffRun.magicked", "=="); 2619 pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "LIKE"); 2620 pxAddLabelSearchArgs (config, where, "-data_group", "diffRun.data_group", "LIKE"); 2621 pxAddLabelSearchArgs (config, where, "-dist_group", "diffRun.dist_group", "LIKE"); 2622 2623 PXOPT_LOOKUP_BOOL(template, config->args, "-template", false); 2624 if (!template) { 2625 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawInput.exp_id", "=="); 2626 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawInput.exp_name", "=="); 2627 PXOPT_COPY_STR(config->args, where, "-warp_id", "warpInput.warp_id", "=="); 2628 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawInput.dateobs", ">="); 2629 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawInput.dateobs", "<="); 2630 PXOPT_COPY_STR(config->args, where, "-filter", "rawInput.filter", "LIKE"); 2631 } else { 2632 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawTemplate.exp_id", "=="); 2633 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawTemplate.exp_name", "=="); 2634 PXOPT_COPY_STR(config->args, where, "-warp_id", "warpTemplate.warp_id", "=="); 2635 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawTemplate.dateobs", ">="); 2636 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawTemplate.dateobs", "<="); 2637 PXOPT_COPY_STR(config->args, where, "-filter", "rawTemplate.filter", "LIKE"); 2638 } 2639 2640 PXOPT_LOOKUP_BOOL(all, config->args, "-all", false); 2641 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 2642 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 2643 PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false); 2644 2645 2646 psString where2 = NULL; 2647 pxmagicAddWhere(config, &where2, "diffRun"); 2648 pxspaceAddWhere(config, &where2, template ? "rawTemplate" : "rawInput"); 2649 psString query = pxDataGet("difftool_listrun.sql"); 2650 if (!query) { 2651 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2652 return false; 2653 } 2654 2655 if (psListLength(where->list)) { 2656 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 2657 psStringAppend(&query, " WHERE %s", whereClause); 2658 psFree(whereClause); 2659 } else if (where2) { 2660 psStringAppend(&query, " WHERE diffRun.diff_id is not null %s", where2); 2661 } else if (!all) { 2662 psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required"); 2663 return false; 2664 } 2665 psFree(where); 2666 2667 if (pstamp_order) { 2668 if (template) { 2669 psStringAppend(&query, " ORDER BY rawTemplate.exp_id, diff_id DESC"); 2670 } else { 2671 psStringAppend(&query, " ORDER BY rawInput.exp_id, diff_id DESC"); 2672 } 2673 } 2674 2675 // treat limit == 0 as "no limit" 2676 if (limit) { 2677 psString limitString = psDBGenerateLimitSQL(limit); 2678 psStringAppend(&query, " %s", limitString); 2679 psFree(limitString); 2680 } 2681 2682 if (!p_psDBRunQuery(config->dbh, query)) { 2683 psError(PS_ERR_UNKNOWN, false, "database error"); 2684 psFree(query); 2685 return false; 2686 } 2687 psFree(query); 2688 2689 psArray *output = p_psDBFetchResult(config->dbh); 2690 if (!output) { 2691 psErrorCode err = psErrorCodeLast(); 2692 switch (err) { 2693 case PS_ERR_DB_CLIENT: 2694 psError(PXTOOLS_ERR_SYS, false, "database error"); 2695 case PS_ERR_DB_SERVER: 2696 psError(PXTOOLS_ERR_PROG, false, "database error"); 2697 default: 2698 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2699 } 2700 2701 return false; 2702 } 2703 if (!psArrayLength(output)) { 2704 psTrace("difftool", PS_LOG_INFO, "no rows found"); 2705 psFree(output); 2706 return true; 2707 } 2708 2709 if (psArrayLength(output)) { 2710 // negative simple so the default is true 2711 if (!ippdbPrintMetadatas(stdout, output, "diffRun", !simple)) { 2712 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2713 psFree(output); 2714 return false; 2715 } 2716 } 2717 2718 psFree(output); 2719 2720 return true; 2721 } 2722 // a very specfic function to queue a cleaned warpSkyfile to be updated 2723 static bool setskyfiletoupdateMode(pxConfig *config) 2724 { 2725 PS_ASSERT_PTR_NON_NULL(config, NULL); 2726 2727 PXOPT_LOOKUP_S64(diff_id, config->args, "-diff_id", true, false); 2728 PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false); 2729 PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); 2730 2731 psString query = pxDataGet("difftool_setskyfiletoupdate.sql"); 2732 if (!query) { 2733 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2734 return false; 2735 } 2736 2737 psString setHook = psStringCopy(""); 2738 if (label) { 2739 psStringAppend(&setHook, "\n , diffRun.label = '%s'", label); 2740 } 2741 2742 if (skycell_id) { 2743 psStringAppend(&query, " AND (diffSkyfile.skycell_id = '%s')", skycell_id); 2744 } 2745 2746 if (!p_psDBRunQueryF(config->dbh, query, setHook, diff_id)) { 2747 psError(PS_ERR_UNKNOWN, false, "database error"); 2748 return false; 2749 } 2750 2751 psFree(setHook); 2752 psFree(query); 2753 2754 return true; 2755 }
Note:
See TracChangeset
for help on using the changeset viewer.
