Changeset 25766 for branches/eam_branches/20090820/ippTools/src/difftool.c
- Timestamp:
- Oct 2, 2009, 5:10:19 PM (17 years ago)
- Location:
- branches/eam_branches/20090820
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
ippTools/src (modified) (1 prop)
-
ippTools/src/difftool.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090820
- Property svn:mergeinfo changed
-
branches/eam_branches/20090820/ippTools/src
- Property svn:ignore
-
old new 34 34 disttool 35 35 receivetool 36 36 addtool 37 37 pubtool
-
- Property svn:ignore
-
branches/eam_branches/20090820/ippTools/src/difftool.c
r25074 r25766 37 37 static bool todiffskyfileMode(pxConfig *config); 38 38 static bool adddiffskyfileMode(pxConfig *config); 39 static bool advanceMode(pxConfig *config); 39 40 static bool diffskyfileMode(pxConfig *config); 40 41 static bool revertdiffskyfileMode(pxConfig *config); … … 50 51 51 52 static bool setdiffRunState(pxConfig *config, psS64 diff_id, const char *state, psS64 magicked); 52 static bool diffRunComplete(pxConfig *config);53 53 54 54 # define MODECASE(caseName, func) \ … … 76 76 MODECASE(DIFFTOOL_MODE_TODIFFSKYFILE, todiffskyfileMode); 77 77 MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE, adddiffskyfileMode); 78 MODECASE(DIFFTOOL_MODE_ADVANCE, advanceMode); 78 79 MODECASE(DIFFTOOL_MODE_DIFFSKYFILE, diffskyfileMode); 79 80 MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileMode); 80 81 MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN, definepoprunMode); 81 MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACK, definewarpstackMode);82 MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACK, definewarpstackMode); 82 83 MODECASE(DIFFTOOL_MODE_DEFINEWARPWARP, definewarpwarpMode); 83 84 MODECASE(DIFFTOOL_MODE_PENDINGCLEANUPRUN, pendingcleanuprunMode); … … 555 556 } 556 557 557 if (!diffRunComplete(config)) {558 if (!psDBRollback(config->dbh)) {559 psError(PS_ERR_UNKNOWN, false, "database error");560 }561 psError(PS_ERR_UNKNOWN, false, "database error");562 return false;563 }564 565 558 // point of no return 566 559 if (!psDBCommit(config->dbh)) { … … 569 562 } 570 563 564 565 return true; 566 } 567 568 static bool advanceMode(pxConfig *config) 569 { 570 PS_ASSERT_PTR_NON_NULL(config, false); 571 572 psMetadata *where = psMetadataAlloc(); 573 PXOPT_COPY_S64(config->args, where, "-diff_id", "diffRun.diff_id", "=="); 574 pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "=="); 575 576 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 577 578 // look for completed diffRuns 579 psString query = pxDataGet("difftool_completed_runs.sql"); 580 if (!query) { 581 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 582 return false; 583 } 584 585 psString whereString = psStringCopy(""); 586 if (psListLength(where->list)) { 587 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 588 psStringAppend(&whereString, "\n AND %s", whereClause); 589 psFree(whereClause); 590 } 591 psFree(where); 592 593 // treat limit == 0 as "no limit" 594 if (limit) { 595 psString limitString = psDBGenerateLimitSQL(limit); 596 psStringAppend(&query, " %s", limitString); 597 psFree(limitString); 598 } 599 600 if (!psDBTransaction(config->dbh)) { 601 psError(PS_ERR_UNKNOWN, false, "database error"); 602 psFree(whereString); 603 return false; 604 } 605 606 if (!p_psDBRunQueryF(config->dbh, query, whereString)) { 607 psError(PS_ERR_UNKNOWN, false, "database error"); 608 psFree(query); 609 psFree(whereString); 610 if (!psDBRollback(config->dbh)) { 611 psError(PS_ERR_UNKNOWN, false, "database error"); 612 } 613 return false; 614 } 615 psFree(query); 616 psFree(whereString); 617 618 psArray *output = p_psDBFetchResult(config->dbh); 619 if (!output) { 620 psError(PS_ERR_UNKNOWN, false, "database error"); 621 if (!psDBRollback(config->dbh)) { 622 psError(PS_ERR_UNKNOWN, false, "database error"); 623 } 624 return false; 625 } 626 if (!psArrayLength(output)) { 627 psTrace("difftool", PS_LOG_INFO, "no rows found"); 628 psFree(output); 629 return true; 630 } 631 632 for (long i = 0; i < psArrayLength(output); i++) { 633 psMetadata *row = output->data[i]; 634 635 psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id"); 636 psS64 magicked = psMetadataLookupS64(NULL, row, "magicked"); 637 638 // set diffRun.state to 'full' 639 if (!setdiffRunState(config, diff_id, "full", magicked)) { 640 psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64, 641 diff_id); 642 psFree(output); 643 if (!psDBRollback(config->dbh)) { 644 psError(PS_ERR_UNKNOWN, false, "database error"); 645 } 646 return false; 647 } 648 } 649 psFree(output); 650 651 if (!psDBCommit(config->dbh)) { 652 psError(PS_ERR_UNKNOWN, false, "database error"); 653 return false; 654 } 571 655 572 656 return true; … … 581 665 PXOPT_COPY_S64(config->args, where, "-diff_id", "diffSkyfile.diff_id", "=="); 582 666 PXOPT_COPY_STR(config->args, where, "-skycell_id", "diffInputSkyfile.skycell_id", "=="); 583 PXOPT_COPY_S64(config->args, where, "-diff_skyfile_id", "diffInputSkyfile.diff_skyfile_id", "==");667 PXOPT_COPY_S64(config->args, where, "-diff_skyfile_id", "diffInputSkyfile.diff_skyfile_id", "=="); 584 668 PXOPT_COPY_STR(config->args, where, "-tess_id", "diffRun.tess_id", "=="); 585 669 PXOPT_COPY_S16(config->args, where, "-fault", "diffSkyfile.fault", "=="); 586 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawInput.exp_id", "=="); 587 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawInput.exp_name", "=="); 588 PXOPT_COPY_STR(config->args, where, "-warp_id", "warpInput.warp_id", "=="); 589 670 PXOPT_COPY_S64(config->args, where, "-magicked", "diffSkyfile.magicked", "=="); 671 pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "LIKE"); 672 673 PXOPT_LOOKUP_BOOL(template, config->args, "-template", false); 674 if (!template) { 675 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawInput.exp_id", "=="); 676 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawInput.exp_name", "=="); 677 PXOPT_COPY_STR(config->args, where, "-warp_id", "warpInput.warp_id", "=="); 678 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawInput.dateobs", ">="); 679 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawInput.dateobs", "<="); 680 PXOPT_COPY_STR(config->args, where, "-filter", "rawInput.filter", "=="); 681 } else { 682 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawTemplate.exp_id", "=="); 683 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawTemplate.exp_name", "=="); 684 PXOPT_COPY_STR(config->args, where, "-warp_id", "warpTemplate.warp_id", "=="); 685 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawTemplate.dateobs", ">="); 686 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawTemplate.dateobs", "<="); 687 PXOPT_COPY_STR(config->args, where, "-filter", "rawTemplate.filter", "=="); 688 } 689 690 PXOPT_LOOKUP_BOOL(all, config->args, "-all", false); 590 691 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 591 692 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 693 694 PXOPT_LOOKUP_U64(magicked, config->args, "-magicked", false, false); 695 PXOPT_LOOKUP_BOOL(destreaked, config->args, "-destreaked", false); 696 PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false); 592 697 593 698 psString query = pxDataGet("difftool_skyfile.sql"); … … 601 706 psStringAppend(&query, " WHERE %s", whereClause); 602 707 psFree(whereClause); 708 } else if (!all) { 709 psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required"); 603 710 } 604 711 psFree(where); 712 713 if (not_destreaked) { 714 if (destreaked) { 715 psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense"); 716 return false; 717 } 718 if (magicked) { 719 psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense"); 720 return false; 721 } 722 psStringAppend(&query, " AND diffSkyfile.magicked = 0"); 723 } 724 if (destreaked) { 725 psStringAppend(&query, " AND diffSkyfile.magicked != 0"); 726 } 727 605 728 606 729 // treat limit == 0 as "no limit" … … 1810 1933 } 1811 1934 1812 static bool diffRunComplete(pxConfig *config)1813 {1814 PS_ASSERT_PTR_NON_NULL(config, false);1815 1816 // look for completed diffRuns1817 psString query = pxDataGet("difftool_completed_runs.sql");1818 if (!query) {1819 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");1820 return false;1821 }1822 1823 if (!p_psDBRunQuery(config->dbh, query)) {1824 psError(PS_ERR_UNKNOWN, false, "database error");1825 psFree(query);1826 return false;1827 }1828 psFree(query);1829 1830 psArray *output = p_psDBFetchResult(config->dbh);1831 if (!output) {1832 psError(PS_ERR_UNKNOWN, false, "database error");1833 return false;1834 }1835 if (!psArrayLength(output)) {1836 psTrace("difftool", PS_LOG_INFO, "no rows found");1837 psFree(output);1838 return true;1839 }1840 for (long i = 0; i < psArrayLength(output); i++) {1841 psMetadata *row = output->data[i];1842 1843 psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id");1844 psS64 magicked = psMetadataLookupS64(NULL, row, "magicked");1845 1846 // set diffRun.state to 'stop'1847 if (!setdiffRunState(config, diff_id, "full", magicked)) {1848 psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64,1849 diff_id);1850 psFree(output);1851 return false;1852 }1853 }1854 1855 return true;1856 }1857 1935 1858 1936 bool exportrunMode(pxConfig *config)
Note:
See TracChangeset
for help on using the changeset viewer.
