- Timestamp:
- Mar 5, 2013, 2:24:05 PM (13 years ago)
- Location:
- branches/eam_branches/ipp-20130207
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
ippTools/src (modified) (1 prop)
-
ippTools/src/releasetool.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20130207
- Property svn:mergeinfo changed
/trunk (added) merged: 35127-35128,35130,35133-35135,35141-35142,35148,35150-35159,35162-35167,35169-35200,35203-35218,35221-35228,35230,35232-35233
- Property svn:mergeinfo changed
-
branches/eam_branches/ipp-20130207/ippTools/src
- Property svn:mergeinfo changed
/trunk/ippTools/src (added) merged: 35134,35150,35152,35154,35189,35192-35194,35196-35197,35213-35214,35227-35228,35230
- Property svn:mergeinfo changed
-
branches/eam_branches/ipp-20130207/ippTools/src/releasetool.c
r35048 r35236 41 41 static bool listreleaseMode(pxConfig *config); 42 42 static bool definerelexpMode(pxConfig *config); 43 static bool tocalibexpMode(pxConfig *config); 43 44 static bool updaterelexpMode(pxConfig *config); 44 45 static bool listrelexpMode(pxConfig *config); 46 static bool definerelstackMode(pxConfig *config); 47 static bool updaterelstackMode(pxConfig *config); 48 static bool listrelstackMode(pxConfig *config); 49 static bool definerelgroupMode(pxConfig *config); 50 static bool pendingrelgroupMode(pxConfig *config); 51 static bool updaterelgroupMode(pxConfig *config); 52 static bool listrelgroupMode(pxConfig *config); 45 53 46 54 # define MODECASE(caseName, func) \ … … 66 74 MODECASE(RELEASETOOL_MODE_DEFINERELEASE, definereleaseMode); 67 75 MODECASE(RELEASETOOL_MODE_UPDATERELEASE, updatereleaseMode); 76 MODECASE(RELEASETOOL_MODE_TOCALIBEXP, tocalibexpMode); 68 77 MODECASE(RELEASETOOL_MODE_LISTRELEASE, listreleaseMode); 69 78 … … 71 80 MODECASE(RELEASETOOL_MODE_UPDATERELEXP, updaterelexpMode); 72 81 MODECASE(RELEASETOOL_MODE_LISTRELEXP, listrelexpMode); 82 83 MODECASE(RELEASETOOL_MODE_DEFINERELSTACK, definerelstackMode); 84 MODECASE(RELEASETOOL_MODE_UPDATERELSTACK, updaterelstackMode); 85 MODECASE(RELEASETOOL_MODE_LISTRELSTACK, listrelstackMode); 86 87 MODECASE(RELEASETOOL_MODE_DEFINERELGROUP, definerelgroupMode); 88 MODECASE(RELEASETOOL_MODE_UPDATERELGROUP, updaterelgroupMode); 89 MODECASE(RELEASETOOL_MODE_PENDINGRELGROUP, pendingrelgroupMode); 90 MODECASE(RELEASETOOL_MODE_LISTRELGROUP, listrelgroupMode); 73 91 default: 74 92 psAbort("invalid option (this should not happen)"); … … 163 181 164 182 PXOPT_LOOKUP_S32(surveyID, config->args, "-set_surveyID", true, false); 165 PXOPT_LOOKUP_STR(release Name, config->args, "-set_releaseName", true, false);183 PXOPT_LOOKUP_STR(release_name, config->args, "-set_release_name", true, false); 166 184 PXOPT_LOOKUP_STR(release_state, config->args, "-set_release_state", true, false); 167 185 PXOPT_LOOKUP_S32(dataRelease, config->args, "-set_dataRelease", false, false); … … 171 189 0, // rel_id (auto_increment) 172 190 surveyID, 173 release Name,191 release_name, 174 192 release_state, 175 193 dataRelease, … … 187 205 PS_ASSERT_PTR_NON_NULL(config, false); 188 206 189 PXOPT_LOOKUP_STR(release Name, config->args, "-releaseName", false, false);207 PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false); 190 208 PXOPT_LOOKUP_S32(rel_id, config->args, "-rel_id", false, false); 191 209 192 if (!releaseName && !rel_id) { 193 psError(PXTOOLS_ERR_CONFIG, true, "either -releaseName or -rel_id is required\n"); 194 return false; 195 } 196 PXOPT_LOOKUP_STR(release_state, config->args, "-set_release_state", true, false); 210 if (!release_name && !rel_id) { 211 psError(PXTOOLS_ERR_CONFIG, true, "either -release_name or -rel_id is required\n"); 212 return false; 213 } 214 PXOPT_LOOKUP_STR(release_state, config->args, "-set_release_state", false, false); 215 PXOPT_LOOKUP_S32(priority, config->args, "-set_priority", false, false); 216 PXOPT_LOOKUP_S32(dataRelease, config->args, "-set_dataRelease", false, false); 217 if (!release_state && priority == 0 && dataRelease == -1) { 218 psError(PXTOOLS_ERR_CONFIG, true, "at least one of -set_release_state -set_priority and -set_dataRelease is required\n"); 219 return false; 220 } 197 221 198 222 psMetadata *where = psMetadataAlloc(); 199 223 200 224 PXOPT_COPY_S32(config->args, where, "-rel_id", "rel_id", "=="); 201 PXOPT_COPY_STR(config->args, where, "-releaseName", "releaseName", "=="); 202 203 psString query = NULL; 204 psStringAppend(&query, "UPDATE ippRelease SET release_state = '%s'", release_state); 225 PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "=="); 226 227 psString sep = ""; 228 psString comma = ", "; 229 psString query = psStringCopy("UPDATE ippRelease SET"); 230 if (release_state) { 231 psStringAppend(&query, "%s release_state = '%s'", sep, release_state); 232 sep = comma; 233 } 234 if (priority != 0) { 235 psStringAppend(&query, "%s priority = %d", sep, priority); 236 sep = comma; 237 } 238 if (dataRelease != -1) { 239 psStringAppend(&query, "%s dataRelease = %d", sep, dataRelease); 240 sep = comma; 241 } 205 242 206 243 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); … … 232 269 233 270 PXOPT_COPY_STR(config->args, where, "-surveyName", "surveyName", "LIKE"); 234 PXOPT_COPY_STR(config->args, where, "-release Name", "releaseName", "LIKE");271 PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "LIKE"); 235 272 PXOPT_COPY_STR(config->args, where, "-release_state", "release_state", "=="); 236 273 PXOPT_COPY_S32(config->args, where, "-rel_id", "rel_id", "=="); … … 313 350 // insure that at least one of these is supplied to select the release 314 351 PXOPT_LOOKUP_S64(rel_id, config->args, "-rel_id", false, false); 315 PXOPT_LOOKUP_STR(release Name, config->args, "-releaseName", false, false);316 if (!rel_id && !release Name) {317 psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release Name is required");318 return false; 319 } 320 321 // limit query to the target release. (Note: this will select nothing of releaseName and rel_id don't match)352 PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false); 353 if (!rel_id && !release_name) { 354 psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release_name is required"); 355 return false; 356 } 357 358 // limit query to the target release. (Note: this will select nothing if release_name and rel_id don't match) 322 359 // note: we add these after above to insure that search args are supplied 323 PXOPT_COPY_STR(config->args, where, "-release Name", "ippRelease.releaseName", "==");360 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "=="); 324 361 PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "=="); 325 362 … … 327 364 PXOPT_LOOKUP_STR(state, config->args, "-set_state", true, false); 328 365 PXOPT_LOOKUP_U32(flags, config->args, "-set_flags", false, false); 366 PXOPT_LOOKUP_F32(user_zpt_obs, config->args, "-set_zpt_obs", false, false); 367 PXOPT_LOOKUP_F32(user_zpt_stdev, config->args, "-set_zpt_stdev", false, false); 329 368 PXOPT_LOOKUP_STR(path_base, config->args, "-set_path_base", false, false); 369 PXOPT_LOOKUP_S16(fault, config->args, "-set_fault", false, false); 330 370 331 371 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); … … 391 431 psS64 chip_id = psMetadataLookupS64(&status, md, "chip_id"); 392 432 psS64 cam_id = psMetadataLookupS64(&status, md, "cam_id"); 393 psF32 zpt_obs = psMetadataLookupF32(&status, md, "zpt_obs"); 394 psF32 zpt_stdev = psMetadataLookupF32(&status, md, "zpt_stdev"); 433 434 // if zpt_obs or zpt_stdev were not supplied use the results from the camRun 435 psF32 zpt_obs, zpt_stdev; 436 if (!isfinite(user_zpt_obs)) { 437 zpt_obs = psMetadataLookupF32(&status, md, "zpt_obs"); 438 } else { 439 zpt_obs = user_zpt_obs; 440 } 441 if (!isfinite(user_zpt_stdev)) { 442 zpt_stdev = psMetadataLookupF32(&status, md, "zpt_stdev"); 443 } else { 444 zpt_stdev = user_zpt_stdev; 445 } 395 446 396 447 if (!relExpInsert(config->dbh, … … 400 451 chip_id, 401 452 cam_id, 453 0, // group_id 402 454 state, 403 455 flags, … … 405 457 zpt_stdev, 406 458 path_base, 459 fault, 407 460 now, // registered 408 461 now // time_stamp … … 430 483 static bool updaterelexpMode(pxConfig *config) 431 484 { 432 psError(PS_ERR_UNKNOWN, true, "not yet implemented"); 433 return false; 434 } 435 436 static bool listrelexpMode(pxConfig *config) 485 PS_ASSERT_PTR_NON_NULL(config, false); 486 487 PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false); 488 PXOPT_LOOKUP_S32(rel_id, config->args, "-rel_id", false, false); 489 PXOPT_LOOKUP_S32(relexp_id, config->args, "-relexp_id", false, false); 490 491 if (!relexp_id && !release_name && !rel_id) { 492 psError(PXTOOLS_ERR_CONFIG, true, "at least one of -relexp_id, -release_name, and -rel_id is required\n"); 493 return false; 494 } 495 496 PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false); 497 PXOPT_LOOKUP_U32(flags, config->args, "-set_flags", false, false); 498 PXOPT_LOOKUP_STR(path_base, config->args, "-set_path_base", false, false); 499 PXOPT_LOOKUP_F32(zpt_obs, config->args, "-set_zpt_obs", false, false); 500 PXOPT_LOOKUP_F32(zpt_stdev,config->args, "-set_zpt_stdev", false, false); 501 PXOPT_LOOKUP_S16(fault, config->args, "-set_fault", false, false); 502 PXOPT_LOOKUP_BOOL(clearfault, config->args, "-clearfault", false); 503 if (!state && !flags && !path_base && !isfinite(zpt_obs) && !isfinite(zpt_stdev) && !fault && !clearfault) { 504 psError(PXTOOLS_ERR_CONFIG, true, "must set at least one column\n"); 505 return false; 506 } 507 508 if (fault && clearfault) { 509 psError(PXTOOLS_ERR_CONFIG, true, "cannot set and clear fault at same time\n"); 510 return false; 511 } 512 513 psMetadata *where = psMetadataAlloc(); 514 515 PXOPT_COPY_S64(config->args, where, "-exp_id", "relExp.exp_id", "=="); 516 PXOPT_COPY_S32(config->args, where, "-relexp_id", "relExp.relexp_id", "=="); 517 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "=="); 518 // make sure that we have enough parameters to identify the relExp to change 519 if (!psListLength(where->list)){ 520 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n"); 521 psFree(where); 522 return false; 523 } 524 525 PXOPT_COPY_S32(config->args, where, "-rel_id", "rel_id", "=="); 526 PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "=="); 527 528 psString sep = ""; 529 psString comma = ", "; 530 psString query = psStringCopy("UPDATE relExp JOIN ippRelease USING(rel_id) JOIN rawExp USING(exp_id) SET"); 531 if (state) { 532 psStringAppend(&query, "%s relExp.state = '%s'", sep, state); 533 sep = comma; 534 } 535 if (path_base) { 536 psStringAppend(&query, "%s relExp.path_base = '%s'", sep, path_base); 537 sep = comma; 538 } 539 if (flags) { 540 psStringAppend(&query, "%s relExp.flags = %d", sep, flags); 541 sep = comma; 542 } 543 if (isfinite(zpt_obs)) { 544 psStringAppend(&query, "%s relExp.zpt_obs = %f", sep, zpt_obs); 545 sep = comma; 546 } 547 if (isfinite(zpt_stdev)) { 548 psStringAppend(&query, "%s relExp.zpt_stdev = %f", sep, zpt_stdev); 549 sep = comma; 550 } 551 if (fault) { 552 psStringAppend(&query, "%s relExp.fault = %d", sep, fault); 553 sep = comma; 554 } 555 if (clearfault) { 556 psStringAppend(&query, "%s relExp.fault = 0", sep); 557 sep = comma; 558 } 559 560 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 561 psStringAppend(&query, " WHERE %s", whereClause); 562 psFree(whereClause); 563 564 if (!p_psDBRunQuery(config->dbh, query)) { 565 psError(PS_ERR_UNKNOWN, false, "database error"); 566 psFree(query); 567 return false; 568 } 569 570 psU64 affected = psDBAffectedRows(config->dbh); 571 psLogMsg("releasetool", PS_LOG_INFO, "Updated %" PRIu64 " ippReleases", affected); 572 573 574 psFree(query); 575 576 return true; 577 } 578 579 static bool tocalibexpMode(pxConfig *config) 437 580 { 438 581 PS_ASSERT_PTR_NON_NULL(config, NULL); … … 440 583 psMetadata *where = psMetadataAlloc(); 441 584 442 PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "LIKE"); 585 PXOPT_COPY_S64(config->args, where, "-relexp_id", "relExp.relexp_id", "=="); 586 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE"); 587 #ifdef notdef 588 PXOPT_COPY_S32(config->args, where, "-rel_id", "relExp.rel_id", "=="); 443 589 pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "=="); 444 590 PXOPT_COPY_STR(config->args, where, "-state", "relExp.state", "=="); … … 458 604 459 605 PXOPT_COPY_STR(config->args, where, "-surveyName", "survey.surveyName", "LIKE"); 606 607 PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false); 608 #endif 609 610 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 611 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 612 613 psString query = pxDataGet("releasetool_tocalibexp.sql"); 614 if (!query) { 615 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 616 return false; 617 } 618 619 psString where2 = NULL; 620 #ifdef notdef 621 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 622 psError(psErrorCodeLast(), false, "pxspaceAddWhere failed"); 623 return false; 624 } 625 #endif 626 627 if (psListLength(where->list)) { 628 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 629 psStringAppend(&query, "\nAND %s", whereClause); 630 psFree(whereClause); 631 #ifdef notdef 632 } else if (where2) { 633 psStringAppend(&query, "\nAND "); 634 #endif 635 } else { 636 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n"); 637 psFree(where); 638 return false; 639 } 640 641 if (where2) { 642 psStringAppend(&query, "\n%s", where2); 643 psFree(where2); 644 } 645 646 if (limit) { 647 psString limitString = psDBGenerateLimitSQL(limit); 648 psStringAppend(&query, " %s", limitString); 649 psFree(limitString); 650 } 651 652 if (!p_psDBRunQuery(config->dbh, query)) { 653 psError(PS_ERR_UNKNOWN, false, "database error"); 654 psFree(query); 655 return false; 656 } 657 psFree(query); 658 659 psArray *output = p_psDBFetchResult(config->dbh); 660 if (!output) { 661 psError(PS_ERR_UNKNOWN, false, "database error"); 662 return false; 663 } 664 665 if (!psArrayLength(output)) { 666 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 667 psFree(output); 668 return true; 669 } 670 671 if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) { 672 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 673 psFree(output); 674 return false; 675 } 676 677 psFree(output); 678 679 return true; 680 } 681 static bool listrelexpMode(pxConfig *config) 682 { 683 PS_ASSERT_PTR_NON_NULL(config, NULL); 684 685 psMetadata *where = psMetadataAlloc(); 686 687 PXOPT_COPY_S64(config->args, where, "-relexp_id", "relExp.relexp_id", "=="); 688 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE"); 689 pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "=="); 690 PXOPT_COPY_STR(config->args, where, "-state", "relExp.state", "=="); 691 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 692 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">="); 693 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 694 PXOPT_COPY_F32(config->args, where, "-fwhm_min", "camProcessedExp.fwhm_major", ">="); 695 PXOPT_COPY_F32(config->args, where, "-fwhm_max", "camProcessedExp.fwhm_major", "<="); 696 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "=="); 697 PXOPT_COPY_S64(config->args, where, "-exp_id", "relExp.exp_id", "=="); 698 PXOPT_COPY_S64(config->args, where, "-chip_id", "relExp.chip_id", "=="); 699 PXOPT_COPY_S64(config->args, where, "-cam_id", "relExp.cam_id", "=="); 700 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 701 PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE"); 702 PXOPT_COPY_STR(config->args, where, "-cam_data_group", "camRun.data_group", "LIKE"); 703 PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE"); 704 705 PXOPT_COPY_STR(config->args, where, "-surveyName", "survey.surveyName", "LIKE"); 460 706 PXOPT_COPY_S32(config->args, where, "-rel_id", "relExp.rel_id", "=="); 461 707 … … 533 779 return true; 534 780 } 535 781 static bool definerelstackMode(pxConfig *config) 782 { 783 PS_ASSERT_PTR_NON_NULL(config, NULL); 784 785 psMetadata *where = psMetadataAlloc(); 786 787 bool includeSkycal = false; 788 789 PXOPT_COPY_S64(config->args, where, "-skycal_id", "skycalRun.skycal_id", "=="); 790 PXOPT_COPY_STR(config->args, where, "-skycal_label", "skycalRun.label", "=="); 791 PXOPT_COPY_STR(config->args, where, "-skycal_data_group", "skycalRun.data_group", "=="); 792 if (psListLength(where->list)) { 793 includeSkycal = true; 794 } 795 796 PXOPT_COPY_STR(config->args, where, "-label", "stackRun.label", "=="); 797 PXOPT_COPY_STR(config->args, where, "-data_group", "stackRun.data_group", "=="); 798 PXOPT_COPY_S64(config->args, where, "-stack_id", "stackRun.stack_id", "=="); 799 800 // Insure that at least one of the skycalRun selectors is supplied 801 if (!psListLength(where->list)) { 802 psFree(where); 803 psError(PXTOOLS_ERR_CONFIG, false, "at least one of -label, -data_group, or -skycal_id is required"); 804 return false; 805 } 806 807 // PXOPT_COPY_STR(config->args, where, "-tess_id", "stackRun.tess_id", "=="); 808 // PXOPT_COPY_STR(config->args, where, "-skycell_id", "stackRun.skycell_id", "=="); 809 810 // insure that at least one of these is supplied to select the release 811 PXOPT_LOOKUP_S64(rel_id, config->args, "-rel_id", false, false); 812 PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false); 813 if (!rel_id && !release_name) { 814 psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release_name is required"); 815 return false; 816 } 817 818 // limit query to the target release. (Note: this will select nothing if release_name and rel_id don't match) 819 // note: we add these after above to insure that search args are supplied 820 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "=="); 821 PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "=="); 822 823 824 PXOPT_LOOKUP_STR(state, config->args, "-set_state", true, false); 825 PXOPT_LOOKUP_STR(stack_type, config->args,"-set_stack_type", true, false); 826 PXOPT_LOOKUP_U32(flags, config->args, "-set_flags", false, false); 827 PXOPT_LOOKUP_F32(zpt_obs, config->args, "-set_zpt_obs", false, false); 828 PXOPT_LOOKUP_F32(zpt_stdev, config->args, "-set_zpt_stdev", false, false); 829 PXOPT_LOOKUP_STR(path_base, config->args, "-set_path_base", false, false); 830 PXOPT_LOOKUP_S16(fault, config->args, "-set_fault", false, false); 831 832 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 833 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 834 835 // find the parameters of all the exposures that we want to add to the release 836 psString query; 837 838 if (includeSkycal) { 839 query = pxDataGet("releasetool_definerelstack_with_skycal.sql"); 840 } else { 841 query = pxDataGet("releasetool_definerelstack.sql"); 842 } 843 if (!query) { 844 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 845 psFree(where); 846 return false; 847 } 848 849 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 850 psStringAppend(&query, " AND %s", whereClause); 851 psFree(whereClause); 852 853 psFree(where); 854 855 if (!p_psDBRunQuery(config->dbh, query)) { 856 psError(PS_ERR_UNKNOWN, false, "database error"); 857 psFree(query); 858 return false; 859 } 860 psFree(query); 861 862 psArray *output = p_psDBFetchResult(config->dbh); 863 if (!output) { 864 psError(PS_ERR_UNKNOWN, false, "database error"); 865 return false; 866 } 867 if (!psArrayLength(output)) { 868 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 869 psFree(output); 870 return true; 871 } 872 873 if (pretend) { 874 // negative simple so the default is true 875 if (!ippdbPrintMetadatas(stdout, output, "relstack", !simple)) { 876 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 877 psFree(output); 878 return false; 879 } 880 psFree(output); 881 return true; 882 } 883 884 if (!psDBTransaction(config->dbh)) { 885 psError(PS_ERR_UNKNOWN, false, "database error"); 886 psFree(output); 887 return false; 888 } 889 890 psTime *now = psTimeGetNow(PS_TIME_TAI); 891 // loop over our list of exposures 892 for (long i = 0; i < psArrayLength(output); i++) { 893 psMetadata *md = output->data[i]; 894 895 bool status = true; 896 psS32 rel_id = psMetadataLookupS32(&status, md, "rel_id"); 897 psS64 stack_id = psMetadataLookupS64(&status, md, "stack_id"); 898 psS64 skycal_id = psMetadataLookupS64(&status, md, "skycal_id"); 899 psString skycell_id = psMetadataLookupStr(&status, md, "skycell_id"); 900 psString tess_id = psMetadataLookupStr(&status, md, "tess_id"); 901 psString filter = psMetadataLookupStr(&status, md, "filter"); 902 903 // use skycal zero point measurement if not supplied with arguments 904 psF32 sc_zpt_obs = psMetadataLookupF32(&status, md, "zpt_obs"); 905 psF32 sc_zpt_stdev = psMetadataLookupF32(&status, md, "zpt_stdev"); 906 psF32 stack_mjd_obs = psMetadataLookupF32(&status, md, "mjd_obs"); 907 908 psU32 mjd_obs = 0; 909 if (!strcmp(stack_type, "nightly")) { 910 // only for nightly stacks do we set mjd_obs to a non zero value 911 // We use integer day because this is part of the key that is used 912 // to make sure entries are unique 913 // KEY (rel_id, tess_id, skycell_id, filter, mjd_obs), 914 // 1 entry per release, skycell, filter and mjd_obs. 915 // mjd_obs is zero for deep and reference stacks 916 mjd_obs = (psU32) stack_mjd_obs; 917 } 918 919 if (!relStackInsert(config->dbh, 920 0, // relstack_id (auto increment) 921 rel_id, 922 stack_id, 923 skycal_id, 924 skycell_id, 925 tess_id, 926 filter, 927 state, 928 flags, 929 stack_type, 930 isfinite(zpt_obs) ? zpt_obs : sc_zpt_obs, 931 isfinite(zpt_stdev) ? zpt_stdev : sc_zpt_stdev, 932 mjd_obs, 933 path_base, 934 fault, 935 now, // registered 936 now // time_stamp 937 )) { 938 if (!psDBRollback(config->dbh)) { 939 psError(PS_ERR_UNKNOWN, false, "database error"); 940 } 941 psError(PS_ERR_UNKNOWN, false, 942 "failed to trying to insert relStack for stack_id %" PRId64, stack_id); 943 psFree(output); 944 psFree(now); 945 return false; 946 } 947 } 948 psFree(output); 949 950 if (!psDBCommit(config->dbh)) { 951 psError(PS_ERR_UNKNOWN, false, "database error"); 952 return false; 953 } 954 955 return true; 956 } 957 958 static bool updaterelstackMode(pxConfig *config) 959 { 960 psError(PS_ERR_UNKNOWN, true, "not yet implemented"); 961 return false; 962 } 963 964 static bool listrelstackMode(pxConfig *config) 965 { 966 PS_ASSERT_PTR_NON_NULL(config, NULL); 967 968 psMetadata *where = psMetadataAlloc(); 969 970 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE"); 971 pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "=="); 972 PXOPT_COPY_STR(config->args, where, "-state", "relExp.state", "=="); 973 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 974 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">="); 975 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 976 PXOPT_COPY_F32(config->args, where, "-fwhm_min", "skycalResult.fwhm_major", ">="); 977 PXOPT_COPY_F32(config->args, where, "-fwhm_max", "skycalresult.fwhm_major", "<="); 978 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_ame", "=="); 979 PXOPT_COPY_S64(config->args, where, "-exp_id", "relExp.exp_id", "=="); 980 PXOPT_COPY_S64(config->args, where, "-chip_id", "relExp.chip_id", "=="); 981 PXOPT_COPY_S64(config->args, where, "-cam_id", "relExp.cam_id", "=="); 982 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 983 PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE"); 984 PXOPT_COPY_STR(config->args, where, "-cam_data_group", "camRun.data_group", "LIKE"); 985 PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE"); 986 987 PXOPT_COPY_STR(config->args, where, "-surveyName", "survey.surveyName", "LIKE"); 988 PXOPT_COPY_S32(config->args, where, "-rel_id", "relExp.rel_id", "=="); 989 990 PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false); 991 992 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 993 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 994 995 psString query = pxDataGet("releasetool_listrelexp.sql"); 996 if (!query) { 997 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 998 return false; 999 } 1000 1001 psString where2 = NULL; 1002 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 1003 psError(psErrorCodeLast(), false, "pxspaceAddWhere failed"); 1004 return false; 1005 } 1006 1007 if (psListLength(where->list)) { 1008 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1009 psStringAppend(&query, "\nWHERE %s", whereClause); 1010 psFree(whereClause); 1011 } else if (where2) { 1012 psStringAppend(&query, "\nWHERE "); 1013 } else { 1014 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n"); 1015 psFree(where); 1016 return false; 1017 } 1018 1019 if (where2) { 1020 psStringAppend(&query, "\n%s", where2); 1021 psFree(where2); 1022 } 1023 1024 if (priority_order) { 1025 psStringAppend(&query, "\nAND priority > 0 order by exp_id, priority"); 1026 } 1027 1028 if (limit) { 1029 psString limitString = psDBGenerateLimitSQL(limit); 1030 psStringAppend(&query, " %s", limitString); 1031 psFree(limitString); 1032 } 1033 1034 if (!p_psDBRunQuery(config->dbh, query)) { 1035 psError(PS_ERR_UNKNOWN, false, "database error"); 1036 psFree(query); 1037 return false; 1038 } 1039 psFree(query); 1040 1041 psArray *output = p_psDBFetchResult(config->dbh); 1042 if (!output) { 1043 psError(PS_ERR_UNKNOWN, false, "database error"); 1044 return false; 1045 } 1046 1047 if (!psArrayLength(output)) { 1048 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 1049 psFree(output); 1050 return true; 1051 } 1052 1053 if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) { 1054 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1055 psFree(output); 1056 return false; 1057 } 1058 1059 psFree(output); 1060 1061 return true; 1062 } 1063 1064 static bool definerelgroupMode(pxConfig *config) 1065 { 1066 PS_ASSERT_PTR_NON_NULL(config, NULL); 1067 1068 PXOPT_LOOKUP_STR(group_type, config->args, "-set_group_type", true, false); 1069 PXOPT_LOOKUP_STR(group_name, config->args, "-set_group_name", false, false); 1070 PXOPT_LOOKUP_STR(label, config->args, "-set_label", true, false); 1071 1072 PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false); 1073 PXOPT_LOOKUP_STR(exp_list_path, config->args, "-set_exp_list_path", false, false); 1074 PXOPT_LOOKUP_S16(fault, config->args, "-set_fault", false, false); 1075 1076 psString query = NULL; 1077 1078 psMetadata *where = psMetadataAlloc(); 1079 1080 // select sql and paramters based on group type 1081 bool type_lap = false; 1082 if (!strcmp(group_type, "lap")) { 1083 type_lap = true; 1084 if (group_name) { 1085 psError(PXTOOLS_ERR_CONFIG, true, "group_name is not allowed with group_type lap"); 1086 psFree(where); 1087 return false; 1088 } 1089 PXOPT_COPY_S64(config->args, where, "-select_seq_id", "lapRun.seq_id", "=="); 1090 PXOPT_COPY_S64(config->args, where, "-select_lap_id", "lapRun.lap_id", "=="); 1091 query = pxDataGet("releasetool_definerelgroup_select_lap.sql"); 1092 if (!query) { 1093 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1094 psFree(where); 1095 return false; 1096 } 1097 } else { 1098 if (!strcmp(group_type, "date")) { 1099 // group_type ok 1100 } else if (!strcmp(group_type, "data_group")) { 1101 // group_type ok 1102 } else { 1103 psError(PXTOOLS_ERR_CONFIG, true, "%s is not valid group_type", group_type); 1104 return false; 1105 } 1106 if (!group_name) { 1107 psError(PXTOOLS_ERR_CONFIG, true, "group_name is required allowed with group_type %s", group_type); 1108 psFree(where); 1109 return false; 1110 } 1111 pxAddLabelSearchArgs (config, where, "-select_data_group", "camRun.data_group", "=="); 1112 query = pxDataGet("releasetool_definerelgroup_select_data_group.sql"); 1113 if (!query) { 1114 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1115 psFree(where); 1116 return false; 1117 } 1118 } 1119 1120 // Insure that at least one of the exposure selectors is supplied 1121 if (!psListLength(where->list)) { 1122 psFree(where); 1123 psError(PXTOOLS_ERR_CONFIG, false, "search arguments are required"); 1124 return false; 1125 } 1126 1127 // insure that at least one of these is supplied to select the release 1128 PXOPT_LOOKUP_S64(rel_id, config->args, "-rel_id", false, false); 1129 PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false); 1130 if (!rel_id && !release_name) { 1131 psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release_name is required"); 1132 return false; 1133 } 1134 1135 // limit query to the target release. (Note: this will select nothing if release_name and rel_id don't match) 1136 // note: we add these after above to insure that search args are supplied 1137 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "=="); 1138 PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "=="); 1139 1140 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 1141 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1142 1143 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1144 psStringAppend(&query, " AND %s", whereClause); 1145 psFree(whereClause); 1146 1147 psFree(where); 1148 1149 if (!type_lap) { 1150 psStringAppend(&query, "\nHAVING COUNT(exp_id) > 0"); 1151 } 1152 1153 if (!p_psDBRunQuery(config->dbh, query)) { 1154 psError(PS_ERR_UNKNOWN, false, "database error"); 1155 psFree(query); 1156 return false; 1157 } 1158 psFree(query); 1159 1160 psArray *output = p_psDBFetchResult(config->dbh); 1161 if (!output) { 1162 psError(PS_ERR_UNKNOWN, false, "database error"); 1163 return false; 1164 } 1165 if (!psArrayLength(output)) { 1166 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 1167 psFree(output); 1168 return true; 1169 } 1170 1171 if (pretend) { 1172 // negative simple so the default is true 1173 if (!ippdbPrintMetadatas(stdout, output, "relGroupToQueue", !simple)) { 1174 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1175 psFree(output); 1176 return false; 1177 } 1178 psFree(output); 1179 return true; 1180 } 1181 1182 if (!psDBTransaction(config->dbh)) { 1183 psError(PS_ERR_UNKNOWN, false, "database error"); 1184 psFree(output); 1185 return false; 1186 } 1187 1188 psTime *now = psTimeGetNow(PS_TIME_TAI); 1189 // loop over our list of exposures 1190 for (long i = 0; i < psArrayLength(output); i++) { 1191 psMetadata *md = output->data[i]; 1192 1193 bool status = true; 1194 psS32 rel_id = psMetadataLookupS32(&status, md, "rel_id"); 1195 psS64 lap_id = 0; 1196 if (type_lap) { 1197 lap_id = psMetadataLookupS64(&status, md, "lap_id"); 1198 } 1199 1200 if (!relGroupInsert(config->dbh, 1201 0, // group_id (auto increment) 1202 rel_id, 1203 group_type, 1204 lap_id, 1205 group_name, 1206 "reg", // state 1207 label, 1208 exp_list_path, 1209 fault, 1210 now // registered 1211 )) { 1212 if (!psDBRollback(config->dbh)) { 1213 psError(PS_ERR_UNKNOWN, false, "database error"); 1214 } 1215 psError(PS_ERR_UNKNOWN, false, "failed to trying to insert relGroup"); 1216 psFree(output); 1217 psFree(now); 1218 return false; 1219 } 1220 // Here's our new group_id 1221 psS32 group_id = psDBLastInsertID(config->dbh); 1222 1223 psString query; 1224 if (type_lap) { 1225 query = pxDataGet("releasetool_definerelgroup_select_exp_lap.sql"); 1226 if (!query) { 1227 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1228 psFree(where); 1229 return false; 1230 } 1231 psStringAppend(&query, " AND relExp.rel_id = %d AND lap_id = %" PRId64, rel_id, lap_id); 1232 } else { 1233 query = pxDataGet("releasetool_definerelgroup_select_exp_data_group.sql"); 1234 if (!query) { 1235 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1236 psFree(where); 1237 return false; 1238 } 1239 psStringAppend(&query, " AND relExp.rel_id = %d", rel_id); 1240 1241 psMetadata *where = psMetadataAlloc(); 1242 pxAddLabelSearchArgs (config, where, "-select_data_group", "camRun.data_group", "=="); 1243 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1244 psStringAppend(&query, " AND %s", whereClause); 1245 psFree(whereClause); 1246 psFree(where); 1247 } 1248 1249 if (!p_psDBRunQuery(config->dbh, query)) { 1250 psError(PS_ERR_UNKNOWN, false, "database error"); 1251 psFree(query); 1252 psFree(output); 1253 psFree(now); 1254 if (!psDBRollback(config->dbh)) { 1255 psError(PS_ERR_UNKNOWN, false, "database error"); 1256 } 1257 return false; 1258 } 1259 psFree(query); 1260 1261 psArray *exposures = p_psDBFetchResult(config->dbh); 1262 if (!exposures) { 1263 psFree(now); 1264 psFree(output); 1265 psError(PS_ERR_UNKNOWN, false, "database error"); 1266 if (!psDBRollback(config->dbh)) { 1267 psError(PS_ERR_UNKNOWN, false, "database error"); 1268 } 1269 return false; 1270 } 1271 if (!psArrayLength(exposures)) { 1272 psFree(now); 1273 psFree(output); 1274 psFree(exposures); 1275 psError(PS_ERR_UNKNOWN, false, "no exposures found error"); 1276 if (!psDBRollback(config->dbh)) { 1277 psError(PS_ERR_UNKNOWN, false, "database error"); 1278 } 1279 return false; 1280 } 1281 1282 // assign the relExps to this new group 1283 char *updateQuery = "UPDATE relExp SET group_id = %d WHERE relexp_id = %" PRId64; 1284 for (int j = 0; j < psArrayLength(exposures); j++) { 1285 psMetadata *md = exposures->data[j]; 1286 1287 bool status = true; 1288 psS32 relexp_id = psMetadataLookupS32(&status, md, "relexp_id"); 1289 if (!p_psDBRunQueryF(config->dbh, updateQuery, group_id, relexp_id)) { 1290 psError(PS_ERR_UNKNOWN, false, "database error"); 1291 psFree(now); 1292 psFree(output); 1293 psFree(exposures); 1294 1295 if (!psDBRollback(config->dbh)) { 1296 psError(PS_ERR_UNKNOWN, false, "database error"); 1297 } 1298 return false; 1299 } 1300 } 1301 psFree(exposures); 1302 1303 // set state of relGroup to 'new' 1304 if (!p_psDBRunQueryF(config->dbh, "UPDATE relGroup set state = 'new' WHERE group_id = %d", group_id)) { 1305 psError(PS_ERR_UNKNOWN, false, "database error"); 1306 psFree(now); 1307 psFree(output); 1308 if (!psDBRollback(config->dbh)) { 1309 psError(PS_ERR_UNKNOWN, false, "database error"); 1310 } 1311 return false; 1312 } 1313 } 1314 psFree(output); 1315 psFree(now); 1316 1317 if (!psDBCommit(config->dbh)) { 1318 psError(PS_ERR_UNKNOWN, false, "database error"); 1319 return false; 1320 } 1321 1322 return true; 1323 } 1324 1325 static bool updaterelgroupMode(pxConfig *config) 1326 { 1327 psError(PS_ERR_UNKNOWN, true, "not yet implemented"); 1328 return false; 1329 } 1330 1331 static bool pendingrelgroupMode(pxConfig *config) 1332 { 1333 PS_ASSERT_PTR_NON_NULL(config, NULL); 1334 1335 psMetadata *where = psMetadataAlloc(); 1336 1337 pxAddLabelSearchArgs (config, where, "-label", "relGroup.label", "=="); 1338 PXOPT_COPY_S32(config->args, where, "-group_id", "relGroup.group_id", "=="); 1339 PXOPT_COPY_S32(config->args, where, "-rel_id", "relExp.rel_id", "=="); 1340 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE"); 1341 1342 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 1343 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1344 1345 psString query = pxDataGet("releasetool_pendingrelgroup.sql"); 1346 if (!query) { 1347 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1348 return false; 1349 } 1350 1351 if (psListLength(where->list)) { 1352 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1353 psStringAppend(&query, "\nAND %s", whereClause); 1354 psFree(whereClause); 1355 } else { 1356 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n"); 1357 psFree(where); 1358 return false; 1359 } 1360 1361 if (limit) { 1362 psString limitString = psDBGenerateLimitSQL(limit); 1363 psStringAppend(&query, " %s", limitString); 1364 psFree(limitString); 1365 } 1366 1367 if (!p_psDBRunQuery(config->dbh, query)) { 1368 psError(PS_ERR_UNKNOWN, false, "database error"); 1369 psFree(query); 1370 return false; 1371 } 1372 psFree(query); 1373 1374 psArray *output = p_psDBFetchResult(config->dbh); 1375 if (!output) { 1376 psError(PS_ERR_UNKNOWN, false, "database error"); 1377 return false; 1378 } 1379 1380 if (!psArrayLength(output)) { 1381 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 1382 psFree(output); 1383 return true; 1384 } 1385 1386 if (!ippdbPrintMetadatas(stdout, output, "pending_relGroup", !simple)) { 1387 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1388 psFree(output); 1389 return false; 1390 } 1391 1392 psFree(output); 1393 1394 return true; 1395 } 1396 1397 static bool listrelgroupMode(pxConfig *config) 1398 { 1399 return false; 1400 #ifdef notdef 1401 PS_ASSERT_PTR_NON_NULL(config, NULL); 1402 1403 psMetadata *where = psMetadataAlloc(); 1404 1405 PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE"); 1406 pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "=="); 1407 PXOPT_COPY_STR(config->args, where, "-state", "relExp.state", "=="); 1408 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 1409 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">="); 1410 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 1411 PXOPT_COPY_F32(config->args, where, "-fwhm_min", "skycalResult.fwhm_major", ">="); 1412 PXOPT_COPY_F32(config->args, where, "-fwhm_max", "skycalresult.fwhm_major", "<="); 1413 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_ame", "=="); 1414 PXOPT_COPY_S64(config->args, where, "-exp_id", "relExp.exp_id", "=="); 1415 PXOPT_COPY_S64(config->args, where, "-chip_id", "relExp.chip_id", "=="); 1416 PXOPT_COPY_S64(config->args, where, "-cam_id", "relExp.cam_id", "=="); 1417 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 1418 PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE"); 1419 PXOPT_COPY_STR(config->args, where, "-cam_data_group", "camRun.data_group", "LIKE"); 1420 PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE"); 1421 1422 PXOPT_COPY_STR(config->args, where, "-surveyName", "survey.surveyName", "LIKE"); 1423 PXOPT_COPY_S32(config->args, where, "-rel_id", "relExp.rel_id", "=="); 1424 1425 PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false); 1426 1427 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 1428 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1429 1430 psString query = pxDataGet("releasetool_listrelexp.sql"); 1431 if (!query) { 1432 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1433 return false; 1434 } 1435 1436 psString where2 = NULL; 1437 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 1438 psError(psErrorCodeLast(), false, "pxspaceAddWhere failed"); 1439 return false; 1440 } 1441 1442 if (psListLength(where->list)) { 1443 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1444 psStringAppend(&query, "\nWHERE %s", whereClause); 1445 psFree(whereClause); 1446 } else if (where2) { 1447 psStringAppend(&query, "\nWHERE "); 1448 } else { 1449 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n"); 1450 psFree(where); 1451 return false; 1452 } 1453 1454 if (where2) { 1455 psStringAppend(&query, "\n%s", where2); 1456 psFree(where2); 1457 } 1458 1459 if (priority_order) { 1460 psStringAppend(&query, "\nAND priority > 0 order by exp_id, priority"); 1461 } 1462 1463 if (limit) { 1464 psString limitString = psDBGenerateLimitSQL(limit); 1465 psStringAppend(&query, " %s", limitString); 1466 psFree(limitString); 1467 } 1468 1469 if (!p_psDBRunQuery(config->dbh, query)) { 1470 psError(PS_ERR_UNKNOWN, false, "database error"); 1471 psFree(query); 1472 return false; 1473 } 1474 psFree(query); 1475 1476 psArray *output = p_psDBFetchResult(config->dbh); 1477 if (!output) { 1478 psError(PS_ERR_UNKNOWN, false, "database error"); 1479 return false; 1480 } 1481 1482 if (!psArrayLength(output)) { 1483 psTrace("releasetool", PS_LOG_INFO, "no rows found"); 1484 psFree(output); 1485 return true; 1486 } 1487 1488 if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) { 1489 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1490 psFree(output); 1491 return false; 1492 } 1493 1494 psFree(output); 1495 1496 return true; 1497 #endif //notdef 1498 } 1499
Note:
See TracChangeset
for help on using the changeset viewer.
