Changeset 35152
- Timestamp:
- Feb 12, 2013, 4:18:26 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
-
dbconfig/release.md (modified) (1 diff)
-
ippTools/src/releasetool.c (modified) (3 diffs)
-
ippTools/src/releasetool.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dbconfig/release.md
r35048 r35152 32 32 relstack_id S64 0 # Primary Key AUTO_INCREMENT 33 33 rel_id S32 0 # fkey(rel_id) ref ippRelease(rel_id) 34 s kycal_id S64 0 # fkey(skycal_id) ref skycalRun(skycal_id)34 stack_id S64 0 # fkey(stack_id) ref stackRun(stack_id) 35 35 skycell_id STR 64 36 36 tess_id STR 64 -
trunk/ippTools/src/releasetool.c
r35048 r35152 43 43 static bool updaterelexpMode(pxConfig *config); 44 44 static bool listrelexpMode(pxConfig *config); 45 static bool definerelstackMode(pxConfig *config); 46 static bool updaterelstackMode(pxConfig *config); 47 static bool listrelstackMode(pxConfig *config); 45 48 46 49 # define MODECASE(caseName, func) \ … … 71 74 MODECASE(RELEASETOOL_MODE_UPDATERELEXP, updaterelexpMode); 72 75 MODECASE(RELEASETOOL_MODE_LISTRELEXP, listrelexpMode); 76 77 MODECASE(RELEASETOOL_MODE_DEFINERELSTACK, definerelstackMode); 78 MODECASE(RELEASETOOL_MODE_UPDATERELSTACK, updaterelstackMode); 79 MODECASE(RELEASETOOL_MODE_LISTRELSTACK, listrelstackMode); 73 80 default: 74 81 psAbort("invalid option (this should not happen)"); … … 533 540 return true; 534 541 } 535 542 static bool definerelstackMode(pxConfig *config) 543 { 544 PS_ASSERT_PTR_NON_NULL(config, NULL); 545 546 psMetadata *where = psMetadataAlloc(); 547 548 PXOPT_COPY_STR(config->args, where, "-label", "skycalRun.label", "=="); 549 PXOPT_COPY_STR(config->args, where, "-data_group", "skycalRun.data_group", "=="); 550 PXOPT_COPY_S64(config->args, where, "-skycal_id", "skcalRun.skycal_id", "=="); 551 552 // Insure that at least one of the skcalRun selectors is supplied 553 if (!psListLength(where->list)) { 554 psFree(where); 555 psError(PXTOOLS_ERR_CONFIG, false, "at least one of -label, -data_group, or -skycal_id is required"); 556 return false; 557 } 558 559 PXOPT_COPY_S64(config->args, where, "-stack_id", "stackRun.stack_id", "=="); 560 PXOPT_COPY_STR(config->args, where, "-tess_id", "stackRun.tess_id", "=="); 561 PXOPT_COPY_STR(config->args, where, "-skycell_id", "stackRun.skycell_id", "=="); 562 563 // insure that at least one of these is supplied to select the release 564 PXOPT_LOOKUP_S64(rel_id, config->args, "-rel_id", false, false); 565 PXOPT_LOOKUP_STR(releaseName, config->args, "-releaseName", false, false); 566 if (!rel_id && !releaseName) { 567 psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -releaseName is required"); 568 return false; 569 } 570 571 // limit query to the target release. (Note: this will select nothing of releaseName and rel_id don't match) 572 // note: we add these after above to insure that search args are supplied 573 PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "=="); 574 PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "=="); 575 576 577 PXOPT_LOOKUP_STR(state, config->args, "-set_state", true, false); 578 PXOPT_LOOKUP_STR(stack_type, config->args,"-set_stack_type", true, false); 579 PXOPT_LOOKUP_U32(flags, config->args, "-set_flags", false, false); 580 PXOPT_LOOKUP_F32(zpt_obs, config->args, "-set_zpt_obs", false, false); 581 PXOPT_LOOKUP_F32(zpt_stdev, config->args, "-set_zpt_stdev", false, false); 582 PXOPT_LOOKUP_F32(fwhm_major, config->args, "-set_fwhm_major", false, false); 583 PXOPT_LOOKUP_STR(path_base, config->args, "-set_path_base", false, false); 584 585 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 586 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 587 588 // find the parameters of all the exposures that we want to add to the release 589 psString query = pxDataGet("releasetool_definerelstack.sql"); 590 if (!query) { 591 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 592 psFree(where); 593 return false; 594 } 595 596 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 597 psStringAppend(&query, " AND %s", whereClause); 598 psFree(whereClause); 599 600 psFree(where); 601 602 if (!p_psDBRunQuery(config->dbh, query)) { 603 psError(PS_ERR_UNKNOWN, false, "database error"); 604 psFree(query); 605 return false; 606 } 607 psFree(query); 608 609 psArray *output = p_psDBFetchResult(config->dbh); 610 if (!output) { 611 psError(PS_ERR_UNKNOWN, false, "database error"); 612 return false; 613 } 614 if (!psArrayLength(output)) { 615 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 616 psFree(output); 617 return true; 618 } 619 620 if (pretend) { 621 // negative simple so the default is true 622 if (!ippdbPrintMetadatas(stdout, output, "chipRun", !simple)) { 623 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 624 psFree(output); 625 return false; 626 } 627 psFree(output); 628 return true; 629 } 630 631 if (!psDBTransaction(config->dbh)) { 632 psError(PS_ERR_UNKNOWN, false, "database error"); 633 psFree(output); 634 return false; 635 } 636 637 psTime *now = psTimeGetNow(PS_TIME_TAI); 638 // loop over our list of exposures 639 for (long i = 0; i < psArrayLength(output); i++) { 640 psMetadata *md = output->data[i]; 641 642 bool status = true; 643 psS32 rel_id = psMetadataLookupS32(&status, md, "rel_id"); 644 psS64 skycal_id = psMetadataLookupS64(&status, md, "skycal_id"); 645 psString skycell_id = psMetadataLookupStr(&status, md, "skycell_id"); 646 psString tess_id = psMetadataLookupStr(&status, md, "tess_id"); 647 psString state = psMetadataLookupStr(&status, md, "state"); 648 649 // use skycal zero point measurement if not supplied with arguments 650 psF32 sc_zpt_obs = psMetadataLookupF32(&status, md, "zpt_obs"); 651 psF32 sc_zpt_stdev = psMetadataLookupF32(&status, md, "zpt_stdev"); 652 653 if (!relStackInsert(config->dbh, 654 0, // relstack_id (auto increment) 655 rel_id, 656 skycal_id, 657 skycell_id, 658 tess_id, 659 state, 660 flags, 661 stack_type, 662 isfinite(zpt_obs) ? zpt_obs : sc_zpt_obs, 663 isfinite(zpt_stdev) ? zpt_stdev : sc_zpt_stdev, 664 fwhm_major, 665 path_base, 666 now, // registered 667 now // time_stamp 668 )) { 669 if (!psDBRollback(config->dbh)) { 670 psError(PS_ERR_UNKNOWN, false, "database error"); 671 } 672 psError(PS_ERR_UNKNOWN, false, 673 "failed to trying to insert relExp for skycal_id %" PRId64, skycal_id); 674 psFree(output); 675 psFree(now); 676 return false; 677 } 678 } 679 psFree(output); 680 681 if (!psDBCommit(config->dbh)) { 682 psError(PS_ERR_UNKNOWN, false, "database error"); 683 return false; 684 } 685 686 return true; 687 } 688 689 static bool updaterelstackMode(pxConfig *config) 690 { 691 psError(PS_ERR_UNKNOWN, true, "not yet implemented"); 692 return false; 693 } 694 695 static bool listrelstackMode(pxConfig *config) 696 { 697 PS_ASSERT_PTR_NON_NULL(config, NULL); 698 699 psMetadata *where = psMetadataAlloc(); 700 701 PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "LIKE"); 702 pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "=="); 703 PXOPT_COPY_STR(config->args, where, "-state", "relExp.state", "=="); 704 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 705 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">="); 706 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 707 PXOPT_COPY_F32(config->args, where, "-fwhm_min", "camProcessedExp.fwhm_major", ">="); 708 PXOPT_COPY_F32(config->args, where, "-fwhm_max", "camProcessedExp.fwhm_major", "<="); 709 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "=="); 710 PXOPT_COPY_S64(config->args, where, "-exp_id", "relExp.exp_id", "=="); 711 PXOPT_COPY_S64(config->args, where, "-chip_id", "relExp.chip_id", "=="); 712 PXOPT_COPY_S64(config->args, where, "-cam_id", "relExp.cam_id", "=="); 713 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 714 PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE"); 715 PXOPT_COPY_STR(config->args, where, "-cam_data_group", "camRun.data_group", "LIKE"); 716 PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE"); 717 718 PXOPT_COPY_STR(config->args, where, "-surveyName", "survey.surveyName", "LIKE"); 719 PXOPT_COPY_S32(config->args, where, "-rel_id", "relExp.rel_id", "=="); 720 721 PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false); 722 723 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 724 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 725 726 psString query = pxDataGet("releasetool_listrelexp.sql"); 727 if (!query) { 728 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 729 return false; 730 } 731 732 psString where2 = NULL; 733 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 734 psError(psErrorCodeLast(), false, "pxspaceAddWhere failed"); 735 return false; 736 } 737 738 if (psListLength(where->list)) { 739 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 740 psStringAppend(&query, "\nWHERE %s", whereClause); 741 psFree(whereClause); 742 } else if (where2) { 743 psStringAppend(&query, "\nWHERE "); 744 } else { 745 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n"); 746 psFree(where); 747 return false; 748 } 749 750 if (where2) { 751 psStringAppend(&query, "\n%s", where2); 752 psFree(where2); 753 } 754 755 if (priority_order) { 756 psStringAppend(&query, "\nAND priority > 0 order by exp_id, priority"); 757 } 758 759 if (limit) { 760 psString limitString = psDBGenerateLimitSQL(limit); 761 psStringAppend(&query, " %s", limitString); 762 psFree(limitString); 763 } 764 765 if (!p_psDBRunQuery(config->dbh, query)) { 766 psError(PS_ERR_UNKNOWN, false, "database error"); 767 psFree(query); 768 return false; 769 } 770 psFree(query); 771 772 psArray *output = p_psDBFetchResult(config->dbh); 773 if (!output) { 774 psError(PS_ERR_UNKNOWN, false, "database error"); 775 return false; 776 } 777 778 if (!psArrayLength(output)) { 779 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 780 psFree(output); 781 return true; 782 } 783 784 if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) { 785 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 786 psFree(output); 787 return false; 788 } 789 790 psFree(output); 791 792 return true; 793 } 794 -
trunk/ippTools/src/releasetool.h
r34908 r35152 33 33 RELEASETOOL_MODE_UPDATERELEXP, 34 34 RELEASETOOL_MODE_LISTRELEXP, 35 RELEASETOOL_MODE_DEFINERELSTACK, 36 RELEASETOOL_MODE_UPDATERELSTACK, 37 RELEASETOOL_MODE_LISTRELSTACK, 35 38 } releasetoolMode; 36 39
Note:
See TracChangeset
for help on using the changeset viewer.
