Changeset 16587 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Feb 21, 2008, 6:09:25 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (135 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r16177 r16587 34 34 #define SUMMITEXP_TABLE_NAME "summitExp" 35 35 #define SUMMITIMFILE_TABLE_NAME "summitImfile" 36 #define PZPENDINGEXP_TABLE_NAME "pzPendingExp" 37 #define PZPENDINGIMFILE_TABLE_NAME "pzPendingImfile" 38 #define PZDONEEXP_TABLE_NAME "pzDoneExp" 39 #define PZDONEIMFILE_TABLE_NAME "pzDoneImfile" 36 #define PZDOWNLOADEXP_TABLE_NAME "pzDownloadExp" 37 #define PZDOWNLOADIMFILE_TABLE_NAME "pzDownloadImfile" 40 38 #define NEWEXP_TABLE_NAME "newExp" 41 39 #define NEWIMFILE_TABLE_NAME "newImfile" … … 83 81 #define FLATCORRRUN_TABLE_NAME "flatcorrRun" 84 82 #define FLATCORREXP_TABLE_NAME "flatcorrExp" 83 #define PSTAMPDATASTORE_TABLE_NAME "pstampDataStore" 84 #define PSTAMPREQUEST_TABLE_NAME "pstampRequest" 85 #define PSTAMPJOB_TABLE_NAME "pstampJob" 85 86 #define MAX_STRING_LENGTH 1024 86 87 … … 1031 1032 { 1032 1033 psMetadata *md = psMetadataAlloc(); 1033 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key ", "64")) {1034 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)", "64")) { 1034 1035 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name"); 1035 1036 psFree(md); … … 1449 1450 return true; 1450 1451 } 1451 static void pz PendingExpRowFree(pzPendingExpRow *object);1452 1453 pz PendingExpRow *pzPendingExpRowAlloc(const char *exp_name, const char *camera, const char *telescope)1454 { 1455 pz PendingExpRow *_object;1456 1457 _object = psAlloc(sizeof(pz PendingExpRow));1458 psMemSetDeallocator(_object, (psFreeFunc)pz PendingExpRowFree);1452 static void pzDownloadExpRowFree(pzDownloadExpRow *object); 1453 1454 pzDownloadExpRow *pzDownloadExpRowAlloc(const char *exp_name, const char *camera, const char *telescope, const char *state) 1455 { 1456 pzDownloadExpRow *_object; 1457 1458 _object = psAlloc(sizeof(pzDownloadExpRow)); 1459 psMemSetDeallocator(_object, (psFreeFunc)pzDownloadExpRowFree); 1459 1460 1460 1461 _object->exp_name = psStringCopy(exp_name); 1461 1462 _object->camera = psStringCopy(camera); 1462 1463 _object->telescope = psStringCopy(telescope); 1464 _object->state = psStringCopy(state); 1463 1465 1464 1466 return _object; 1465 1467 } 1466 1468 1467 static void pz PendingExpRowFree(pzPendingExpRow *object)1469 static void pzDownloadExpRowFree(pzDownloadExpRow *object) 1468 1470 { 1469 1471 psFree(object->exp_name); 1470 1472 psFree(object->camera); 1471 1473 psFree(object->telescope); 1472 } 1473 1474 bool pzPendingExpCreateTable(psDB *dbh) 1474 psFree(object->state); 1475 } 1476 1477 bool pzDownloadExpCreateTable(psDB *dbh) 1475 1478 { 1476 1479 psMetadata *md = psMetadataAlloc(); 1477 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key ", "64")) {1480 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)", "64")) { 1478 1481 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name"); 1479 1482 psFree(md); … … 1490 1493 return false; 1491 1494 } 1492 1493 bool status = psDBCreateTable(dbh, PZPENDINGEXP_TABLE_NAME, md); 1495 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, "Key", "64")) { 1496 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 1497 psFree(md); 1498 return false; 1499 } 1500 1501 bool status = psDBCreateTable(dbh, PZDOWNLOADEXP_TABLE_NAME, md); 1494 1502 1495 1503 psFree(md); … … 1498 1506 } 1499 1507 1500 bool pz PendingExpDropTable(psDB *dbh)1501 { 1502 return psDBDropTable(dbh, PZ PENDINGEXP_TABLE_NAME);1503 } 1504 1505 bool pz PendingExpInsert(psDB * dbh, const char *exp_name, const char *camera, const char *telescope)1508 bool pzDownloadExpDropTable(psDB *dbh) 1509 { 1510 return psDBDropTable(dbh, PZDOWNLOADEXP_TABLE_NAME); 1511 } 1512 1513 bool pzDownloadExpInsert(psDB * dbh, const char *exp_name, const char *camera, const char *telescope, const char *state) 1506 1514 { 1507 1515 psMetadata *md = psMetadataAlloc(); … … 1521 1529 return false; 1522 1530 } 1523 1524 bool status = psDBInsertOneRow(dbh, PZPENDINGEXP_TABLE_NAME, md); 1531 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) { 1532 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 1533 psFree(md); 1534 return false; 1535 } 1536 1537 bool status = psDBInsertOneRow(dbh, PZDOWNLOADEXP_TABLE_NAME, md); 1525 1538 psFree(md); 1526 1539 … … 1528 1541 } 1529 1542 1530 long long pz PendingExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)1543 long long pzDownloadExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 1531 1544 { 1532 1545 long long deleted = 0; 1533 1546 1534 long long count = psDBDeleteRows(dbh, PZ PENDINGEXP_TABLE_NAME, where, limit);1547 long long count = psDBDeleteRows(dbh, PZDOWNLOADEXP_TABLE_NAME, where, limit); 1535 1548 if (count < 0) { 1536 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pz PendingExp");1549 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDownloadExp"); 1537 1550 return count; 1538 1551 … … 1542 1555 return deleted; 1543 1556 } 1544 bool pz PendingExpInsertObject(psDB *dbh, pzPendingExpRow *object)1545 { 1546 return pz PendingExpInsert(dbh, object->exp_name, object->camera, object->telescope);1547 } 1548 1549 bool pz PendingExpInsertObjects(psDB *dbh, psArray *objects)1557 bool pzDownloadExpInsertObject(psDB *dbh, pzDownloadExpRow *object) 1558 { 1559 return pzDownloadExpInsert(dbh, object->exp_name, object->camera, object->telescope, object->state); 1560 } 1561 1562 bool pzDownloadExpInsertObjects(psDB *dbh, psArray *objects) 1550 1563 { 1551 1564 for (long i = 0; i < psArrayLength(objects); i++) { 1552 if (!pz PendingExpInsertObject(dbh, objects->data[i])) {1565 if (!pzDownloadExpInsertObject(dbh, objects->data[i])) { 1553 1566 return false; 1554 1567 } … … 1558 1571 } 1559 1572 1560 bool pz PendingExpInsertFits(psDB *dbh, const psFits *fits)1573 bool pzDownloadExpInsertFits(psDB *dbh, const psFits *fits) 1561 1574 { 1562 1575 psArray *rowSet; 1563 1576 1564 // move to (the first?) extension named PZ PENDINGEXP_TABLE_NAME1565 if (!psFitsMoveExtName(fits, PZ PENDINGEXP_TABLE_NAME)) {1566 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PZ PENDINGEXP_TABLE_NAME);1577 // move to (the first?) extension named PZDOWNLOADEXP_TABLE_NAME 1578 if (!psFitsMoveExtName(fits, PZDOWNLOADEXP_TABLE_NAME)) { 1579 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PZDOWNLOADEXP_TABLE_NAME); 1567 1580 return false; 1568 1581 } … … 1582 1595 } 1583 1596 1584 if (!psDBInsertRows(dbh, PZ PENDINGEXP_TABLE_NAME, rowSet)) {1597 if (!psDBInsertRows(dbh, PZDOWNLOADEXP_TABLE_NAME, rowSet)) { 1585 1598 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 1586 1599 psFree(rowSet); … … 1593 1606 } 1594 1607 1595 bool pz PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)1608 bool pzDownloadExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 1596 1609 { 1597 1610 psArray *rowSet; 1598 1611 1599 rowSet = psDBSelectRows(dbh, PZ PENDINGEXP_TABLE_NAME, where, limit);1612 rowSet = psDBSelectRows(dbh, PZDOWNLOADEXP_TABLE_NAME, where, limit); 1600 1613 if (!rowSet) { 1601 1614 return false; … … 1603 1616 1604 1617 // output to fits 1605 if (!psFitsWriteTable(fits, NULL, rowSet, PZ PENDINGEXP_TABLE_NAME)) {1618 if (!psFitsWriteTable(fits, NULL, rowSet, PZDOWNLOADEXP_TABLE_NAME)) { 1606 1619 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 1607 1620 psFree(rowSet); … … 1614 1627 } 1615 1628 1616 psMetadata *pz PendingExpMetadataFromObject(const pzPendingExpRow *object)1629 psMetadata *pzDownloadExpMetadataFromObject(const pzDownloadExpRow *object) 1617 1630 { 1618 1631 psMetadata *md = psMetadataAlloc(); … … 1632 1645 return false; 1633 1646 } 1647 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) { 1648 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 1649 psFree(md); 1650 return false; 1651 } 1634 1652 1635 1653 … … 1637 1655 } 1638 1656 1639 pz PendingExpRow *pzPendingExpObjectFromMetadata(psMetadata *md)1657 pzDownloadExpRow *pzDownloadExpObjectFromMetadata(psMetadata *md) 1640 1658 { 1641 1659 … … 1656 1674 return false; 1657 1675 } 1658 1659 return pzPendingExpRowAlloc(exp_name, camera, telescope); 1660 } 1661 psArray *pzPendingExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 1676 char* state = psMetadataLookupPtr(&status, md, "state"); 1677 if (!status) { 1678 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state"); 1679 return false; 1680 } 1681 1682 return pzDownloadExpRowAlloc(exp_name, camera, telescope, state); 1683 } 1684 psArray *pzDownloadExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 1662 1685 { 1663 1686 psArray *rowSet; … … 1665 1688 psU64 i; 1666 1689 1667 rowSet = psDBSelectRows(dbh, PZ PENDINGEXP_TABLE_NAME, where, limit);1690 rowSet = psDBSelectRows(dbh, PZDOWNLOADEXP_TABLE_NAME, where, limit); 1668 1691 if (!rowSet) { 1669 1692 return NULL; … … 1675 1698 1676 1699 for (i = 0; i < rowSet->n; i++) { 1677 pz PendingExpRow *object = pzPendingExpObjectFromMetadata(rowSet->data[i]);1700 pzDownloadExpRow *object = pzDownloadExpObjectFromMetadata(rowSet->data[i]); 1678 1701 if (!object) { 1679 1702 psFree(object); … … 1690 1713 return returnSet; 1691 1714 } 1692 bool pz PendingExpDeleteObject(psDB *dbh, const pzPendingExpRow *object)1693 { 1694 psMetadata *where = pz PendingExpMetadataFromObject(object);1695 long long count = psDBDeleteRows(dbh, PZ PENDINGEXP_TABLE_NAME, where, 0);1715 bool pzDownloadExpDeleteObject(psDB *dbh, const pzDownloadExpRow *object) 1716 { 1717 psMetadata *where = pzDownloadExpMetadataFromObject(object); 1718 long long count = psDBDeleteRows(dbh, PZDOWNLOADEXP_TABLE_NAME, where, 0); 1696 1719 psFree(where); 1697 1720 if (count < 0) { 1698 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pz PendingExp");1721 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDownloadExp"); 1699 1722 return false; 1700 1723 } … … 1702 1725 // XXX should this be a psAbort() instead? It is possible that 1703 1726 // having an object match multiple rows was by design. 1704 psError(PS_ERR_UNKNOWN, true, "pz PendingExpRow object matched more then one row. Check your database schema");1705 return false; 1706 } 1707 1708 return true; 1709 } 1710 long long pz PendingExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)1727 psError(PS_ERR_UNKNOWN, true, "pzDownloadExpRow object matched more then one row. Check your database schema"); 1728 return false; 1729 } 1730 1731 return true; 1732 } 1733 long long pzDownloadExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 1711 1734 { 1712 1735 long long deleted = 0; 1713 1736 1714 1737 for (long long i = 0; i < objects->n; i++) { 1715 pz PendingExpRow *object = objects->data[i];1716 psMetadata *where = pz PendingExpMetadataFromObject(object);1717 long long count = psDBDeleteRows(dbh, PZ PENDINGEXP_TABLE_NAME, where, limit);1738 pzDownloadExpRow *object = objects->data[i]; 1739 psMetadata *where = pzDownloadExpMetadataFromObject(object); 1740 long long count = psDBDeleteRows(dbh, PZDOWNLOADEXP_TABLE_NAME, where, limit); 1718 1741 psFree(where); 1719 1742 if (count < 0) { 1720 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pz PendingExp");1743 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDownloadExp"); 1721 1744 return count; 1722 1745 } … … 1727 1750 return deleted; 1728 1751 } 1729 bool pz PendingExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)1752 bool pzDownloadExpPrintObjects(FILE *stream, psArray *objects, bool mdcf) 1730 1753 { 1731 1754 PS_ASSERT_PTR_NON_NULL(objects, false); … … 1733 1756 psMetadata *output = psMetadataAlloc(); 1734 1757 for (long i = 0; i < psArrayLength(objects); i++) { 1735 psMetadata *md = pz PendingExpMetadataFromObject(objects->data[i]);1758 psMetadata *md = pzDownloadExpMetadataFromObject(objects->data[i]); 1736 1759 if (!psMetadataAddMetadata( 1737 1760 output, 1738 1761 PS_LIST_TAIL, 1739 PZ PENDINGEXP_TABLE_NAME,1762 PZDOWNLOADEXP_TABLE_NAME, 1740 1763 PS_META_DUPLICATE_OK, 1741 1764 NULL, … … 1758 1781 return true; 1759 1782 } 1760 bool pz PendingExpPrintObject(FILE *stream, pzPendingExpRow *object, bool mdcf)1783 bool pzDownloadExpPrintObject(FILE *stream, pzDownloadExpRow *object, bool mdcf) 1761 1784 { 1762 1785 PS_ASSERT_PTR_NON_NULL(object, false); 1763 1786 1764 psMetadata *md = pz PendingExpMetadataFromObject(object);1787 psMetadata *md = pzDownloadExpMetadataFromObject(object); 1765 1788 1766 1789 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) { … … 1773 1796 return true; 1774 1797 } 1775 static void pz PendingImfileRowFree(pzPendingImfileRow *object);1776 1777 pz PendingImfileRow *pzPendingImfileRowAlloc(const char *exp_name, const char *camera, const char *telescope, const char *class, const char *class_id)1778 { 1779 pz PendingImfileRow *_object;1780 1781 _object = psAlloc(sizeof(pz PendingImfileRow));1782 psMemSetDeallocator(_object, (psFreeFunc)pz PendingImfileRowFree);1798 static void pzDownloadImfileRowFree(pzDownloadImfileRow *object); 1799 1800 pzDownloadImfileRow *pzDownloadImfileRowAlloc(const char *exp_name, const char *camera, const char *telescope, const char *class, const char *class_id, const char *uri, psS16 fault) 1801 { 1802 pzDownloadImfileRow *_object; 1803 1804 _object = psAlloc(sizeof(pzDownloadImfileRow)); 1805 psMemSetDeallocator(_object, (psFreeFunc)pzDownloadImfileRowFree); 1783 1806 1784 1807 _object->exp_name = psStringCopy(exp_name); … … 1787 1810 _object->class = psStringCopy(class); 1788 1811 _object->class_id = psStringCopy(class_id); 1812 _object->uri = psStringCopy(uri); 1813 _object->fault = fault; 1789 1814 1790 1815 return _object; 1791 1816 } 1792 1817 1793 static void pz PendingImfileRowFree(pzPendingImfileRow *object)1818 static void pzDownloadImfileRowFree(pzDownloadImfileRow *object) 1794 1819 { 1795 1820 psFree(object->exp_name); … … 1798 1823 psFree(object->class); 1799 1824 psFree(object->class_id); 1800 } 1801 1802 bool pzPendingImfileCreateTable(psDB *dbh) 1825 psFree(object->uri); 1826 } 1827 1828 bool pzDownloadImfileCreateTable(psDB *dbh) 1803 1829 { 1804 1830 psMetadata *md = psMetadataAlloc(); 1805 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key ", "64")) {1831 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key fkey(exp_name, camera, telescope) ref pzDownloadExp(exp_name, camera, telescope)", "64")) { 1806 1832 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name"); 1807 1833 psFree(md); 1808 1834 return false; 1809 1835 } 1810 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key ", "64")) {1836 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key fkey(exp_name, camera, telescope, class, class_id) ref summitImfile(exp_name, camera, telescope, class, class_id)", "64")) { 1811 1837 psError(PS_ERR_UNKNOWN, false, "failed to add item camera"); 1812 1838 psFree(md); … … 1828 1854 return false; 1829 1855 } 1830 1831 bool status = psDBCreateTable(dbh, PZPENDINGIMFILE_TABLE_NAME, md); 1856 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) { 1857 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 1858 psFree(md); 1859 return false; 1860 } 1861 if (!psMetadataAdd(md, PS_LIST_TAIL, "fault", PS_DATA_S16, "Key NOT NULL", 0)) { 1862 psError(PS_ERR_UNKNOWN, false, "failed to add item fault"); 1863 psFree(md); 1864 return false; 1865 } 1866 1867 bool status = psDBCreateTable(dbh, PZDOWNLOADIMFILE_TABLE_NAME, md); 1832 1868 1833 1869 psFree(md); … … 1836 1872 } 1837 1873 1838 bool pz PendingImfileDropTable(psDB *dbh)1839 { 1840 return psDBDropTable(dbh, PZ PENDINGIMFILE_TABLE_NAME);1841 } 1842 1843 bool pz PendingImfileInsert(psDB * dbh, const char *exp_name, const char *camera, const char *telescope, const char *class, const char *class_id)1874 bool pzDownloadImfileDropTable(psDB *dbh) 1875 { 1876 return psDBDropTable(dbh, PZDOWNLOADIMFILE_TABLE_NAME); 1877 } 1878 1879 bool pzDownloadImfileInsert(psDB * dbh, const char *exp_name, const char *camera, const char *telescope, const char *class, const char *class_id, const char *uri, psS16 fault) 1844 1880 { 1845 1881 psMetadata *md = psMetadataAlloc(); … … 1869 1905 return false; 1870 1906 } 1871 1872 bool status = psDBInsertOneRow(dbh, PZPENDINGIMFILE_TABLE_NAME, md); 1907 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) { 1908 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 1909 psFree(md); 1910 return false; 1911 } 1912 if (!psMetadataAdd(md, PS_LIST_TAIL, "fault", PS_DATA_S16, NULL, fault)) { 1913 psError(PS_ERR_UNKNOWN, false, "failed to add item fault"); 1914 psFree(md); 1915 return false; 1916 } 1917 1918 bool status = psDBInsertOneRow(dbh, PZDOWNLOADIMFILE_TABLE_NAME, md); 1873 1919 psFree(md); 1874 1920 … … 1876 1922 } 1877 1923 1878 long long pz PendingImfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)1924 long long pzDownloadImfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 1879 1925 { 1880 1926 long long deleted = 0; 1881 1927 1882 long long count = psDBDeleteRows(dbh, PZ PENDINGIMFILE_TABLE_NAME, where, limit);1928 long long count = psDBDeleteRows(dbh, PZDOWNLOADIMFILE_TABLE_NAME, where, limit); 1883 1929 if (count < 0) { 1884 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pz PendingImfile");1930 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDownloadImfile"); 1885 1931 return count; 1886 1932 … … 1890 1936 return deleted; 1891 1937 } 1892 bool pz PendingImfileInsertObject(psDB *dbh, pzPendingImfileRow *object)1893 { 1894 return pz PendingImfileInsert(dbh, object->exp_name, object->camera, object->telescope, object->class, object->class_id);1895 } 1896 1897 bool pz PendingImfileInsertObjects(psDB *dbh, psArray *objects)1938 bool pzDownloadImfileInsertObject(psDB *dbh, pzDownloadImfileRow *object) 1939 { 1940 return pzDownloadImfileInsert(dbh, object->exp_name, object->camera, object->telescope, object->class, object->class_id, object->uri, object->fault); 1941 } 1942 1943 bool pzDownloadImfileInsertObjects(psDB *dbh, psArray *objects) 1898 1944 { 1899 1945 for (long i = 0; i < psArrayLength(objects); i++) { 1900 if (!pz PendingImfileInsertObject(dbh, objects->data[i])) {1946 if (!pzDownloadImfileInsertObject(dbh, objects->data[i])) { 1901 1947 return false; 1902 1948 } … … 1906 1952 } 1907 1953 1908 bool pz PendingImfileInsertFits(psDB *dbh, const psFits *fits)1954 bool pzDownloadImfileInsertFits(psDB *dbh, const psFits *fits) 1909 1955 { 1910 1956 psArray *rowSet; 1911 1957 1912 // move to (the first?) extension named PZ PENDINGIMFILE_TABLE_NAME1913 if (!psFitsMoveExtName(fits, PZ PENDINGIMFILE_TABLE_NAME)) {1914 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PZ PENDINGIMFILE_TABLE_NAME);1958 // move to (the first?) extension named PZDOWNLOADIMFILE_TABLE_NAME 1959 if (!psFitsMoveExtName(fits, PZDOWNLOADIMFILE_TABLE_NAME)) { 1960 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PZDOWNLOADIMFILE_TABLE_NAME); 1915 1961 return false; 1916 1962 } … … 1930 1976 } 1931 1977 1932 if (!psDBInsertRows(dbh, PZ PENDINGIMFILE_TABLE_NAME, rowSet)) {1978 if (!psDBInsertRows(dbh, PZDOWNLOADIMFILE_TABLE_NAME, rowSet)) { 1933 1979 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 1934 1980 psFree(rowSet); … … 1941 1987 } 1942 1988 1943 bool pz PendingImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)1989 bool pzDownloadImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 1944 1990 { 1945 1991 psArray *rowSet; 1946 1992 1947 rowSet = psDBSelectRows(dbh, PZ PENDINGIMFILE_TABLE_NAME, where, limit);1993 rowSet = psDBSelectRows(dbh, PZDOWNLOADIMFILE_TABLE_NAME, where, limit); 1948 1994 if (!rowSet) { 1949 1995 return false; … … 1951 1997 1952 1998 // output to fits 1953 if (!psFitsWriteTable(fits, NULL, rowSet, PZ PENDINGIMFILE_TABLE_NAME)) {1999 if (!psFitsWriteTable(fits, NULL, rowSet, PZDOWNLOADIMFILE_TABLE_NAME)) { 1954 2000 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 1955 2001 psFree(rowSet); … … 1962 2008 } 1963 2009 1964 psMetadata *pz PendingImfileMetadataFromObject(const pzPendingImfileRow *object)2010 psMetadata *pzDownloadImfileMetadataFromObject(const pzDownloadImfileRow *object) 1965 2011 { 1966 2012 psMetadata *md = psMetadataAlloc(); … … 1990 2036 return false; 1991 2037 } 2038 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) { 2039 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 2040 psFree(md); 2041 return false; 2042 } 2043 if (!psMetadataAdd(md, PS_LIST_TAIL, "fault", PS_DATA_S16, NULL, object->fault)) { 2044 psError(PS_ERR_UNKNOWN, false, "failed to add item fault"); 2045 psFree(md); 2046 return false; 2047 } 1992 2048 1993 2049 … … 1995 2051 } 1996 2052 1997 pz PendingImfileRow *pzPendingImfileObjectFromMetadata(psMetadata *md)2053 pzDownloadImfileRow *pzDownloadImfileObjectFromMetadata(psMetadata *md) 1998 2054 { 1999 2055 … … 2024 2080 return false; 2025 2081 } 2026 2027 return pzPendingImfileRowAlloc(exp_name, camera, telescope, class, class_id); 2028 } 2029 psArray *pzPendingImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 2082 char* uri = psMetadataLookupPtr(&status, md, "uri"); 2083 if (!status) { 2084 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 2085 return false; 2086 } 2087 psS16 fault = psMetadataLookupS16(&status, md, "fault"); 2088 if (!status) { 2089 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fault"); 2090 return false; 2091 } 2092 2093 return pzDownloadImfileRowAlloc(exp_name, camera, telescope, class, class_id, uri, fault); 2094 } 2095 psArray *pzDownloadImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 2030 2096 { 2031 2097 psArray *rowSet; … … 2033 2099 psU64 i; 2034 2100 2035 rowSet = psDBSelectRows(dbh, PZ PENDINGIMFILE_TABLE_NAME, where, limit);2101 rowSet = psDBSelectRows(dbh, PZDOWNLOADIMFILE_TABLE_NAME, where, limit); 2036 2102 if (!rowSet) { 2037 2103 return NULL; … … 2043 2109 2044 2110 for (i = 0; i < rowSet->n; i++) { 2045 pz PendingImfileRow *object = pzPendingImfileObjectFromMetadata(rowSet->data[i]);2111 pzDownloadImfileRow *object = pzDownloadImfileObjectFromMetadata(rowSet->data[i]); 2046 2112 if (!object) { 2047 2113 psFree(object); … … 2058 2124 return returnSet; 2059 2125 } 2060 bool pz PendingImfileDeleteObject(psDB *dbh, const pzPendingImfileRow *object)2061 { 2062 psMetadata *where = pz PendingImfileMetadataFromObject(object);2063 long long count = psDBDeleteRows(dbh, PZ PENDINGIMFILE_TABLE_NAME, where, 0);2126 bool pzDownloadImfileDeleteObject(psDB *dbh, const pzDownloadImfileRow *object) 2127 { 2128 psMetadata *where = pzDownloadImfileMetadataFromObject(object); 2129 long long count = psDBDeleteRows(dbh, PZDOWNLOADIMFILE_TABLE_NAME, where, 0); 2064 2130 psFree(where); 2065 2131 if (count < 0) { 2066 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pz PendingImfile");2132 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDownloadImfile"); 2067 2133 return false; 2068 2134 } … … 2070 2136 // XXX should this be a psAbort() instead? It is possible that 2071 2137 // having an object match multiple rows was by design. 2072 psError(PS_ERR_UNKNOWN, true, "pz PendingImfileRow object matched more then one row. Check your database schema");2073 return false; 2074 } 2075 2076 return true; 2077 } 2078 long long pz PendingImfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)2138 psError(PS_ERR_UNKNOWN, true, "pzDownloadImfileRow object matched more then one row. Check your database schema"); 2139 return false; 2140 } 2141 2142 return true; 2143 } 2144 long long pzDownloadImfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 2079 2145 { 2080 2146 long long deleted = 0; 2081 2147 2082 2148 for (long long i = 0; i < objects->n; i++) { 2083 pz PendingImfileRow *object = objects->data[i];2084 psMetadata *where = pz PendingImfileMetadataFromObject(object);2085 long long count = psDBDeleteRows(dbh, PZ PENDINGIMFILE_TABLE_NAME, where, limit);2149 pzDownloadImfileRow *object = objects->data[i]; 2150 psMetadata *where = pzDownloadImfileMetadataFromObject(object); 2151 long long count = psDBDeleteRows(dbh, PZDOWNLOADIMFILE_TABLE_NAME, where, limit); 2086 2152 psFree(where); 2087 2153 if (count < 0) { 2088 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pz PendingImfile");2154 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDownloadImfile"); 2089 2155 return count; 2090 2156 } … … 2095 2161 return deleted; 2096 2162 } 2097 bool pz PendingImfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)2163 bool pzDownloadImfilePrintObjects(FILE *stream, psArray *objects, bool mdcf) 2098 2164 { 2099 2165 PS_ASSERT_PTR_NON_NULL(objects, false); … … 2101 2167 psMetadata *output = psMetadataAlloc(); 2102 2168 for (long i = 0; i < psArrayLength(objects); i++) { 2103 psMetadata *md = pz PendingImfileMetadataFromObject(objects->data[i]);2169 psMetadata *md = pzDownloadImfileMetadataFromObject(objects->data[i]); 2104 2170 if (!psMetadataAddMetadata( 2105 2171 output, 2106 2172 PS_LIST_TAIL, 2107 PZ PENDINGIMFILE_TABLE_NAME,2173 PZDOWNLOADIMFILE_TABLE_NAME, 2108 2174 PS_META_DUPLICATE_OK, 2109 2175 NULL, … … 2126 2192 return true; 2127 2193 } 2128 bool pz PendingImfilePrintObject(FILE *stream, pzPendingImfileRow *object, bool mdcf)2194 bool pzDownloadImfilePrintObject(FILE *stream, pzDownloadImfileRow *object, bool mdcf) 2129 2195 { 2130 2196 PS_ASSERT_PTR_NON_NULL(object, false); 2131 2197 2132 psMetadata *md = pz PendingImfileMetadataFromObject(object);2198 psMetadata *md = pzDownloadImfileMetadataFromObject(object); 2133 2199 2134 2200 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) { … … 2141 2207 return true; 2142 2208 } 2143 static void pzDoneExpRowFree(pzDoneExpRow *object);2144 2145 pzDoneExpRow *pzDoneExpRowAlloc(const char *exp_name, const char *camera, const char *telescope)2146 {2147 pzDoneExpRow *_object;2148 2149 _object = psAlloc(sizeof(pzDoneExpRow));2150 psMemSetDeallocator(_object, (psFreeFunc)pzDoneExpRowFree);2151 2152 _object->exp_name = psStringCopy(exp_name);2153 _object->camera = psStringCopy(camera);2154 _object->telescope = psStringCopy(telescope);2155 2156 return _object;2157 }2158 2159 static void pzDoneExpRowFree(pzDoneExpRow *object)2160 {2161 psFree(object->exp_name);2162 psFree(object->camera);2163 psFree(object->telescope);2164 }2165 2166 bool pzDoneExpCreateTable(psDB *dbh)2167 {2168 psMetadata *md = psMetadataAlloc();2169 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key", "64")) {2170 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name");2171 psFree(md);2172 return false;2173 }2174 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {2175 psError(PS_ERR_UNKNOWN, false, "failed to add item camera");2176 psFree(md);2177 return false;2178 }2179 if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {2180 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");2181 psFree(md);2182 return false;2183 }2184 2185 bool status = psDBCreateTable(dbh, PZDONEEXP_TABLE_NAME, md);2186 2187 psFree(md);2188 2189 return status;2190 }2191 2192 bool pzDoneExpDropTable(psDB *dbh)2193 {2194 return psDBDropTable(dbh, PZDONEEXP_TABLE_NAME);2195 }2196 2197 bool pzDoneExpInsert(psDB * dbh, const char *exp_name, const char *camera, const char *telescope)2198 {2199 psMetadata *md = psMetadataAlloc();2200 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, NULL, exp_name)) {2201 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name");2202 psFree(md);2203 return false;2204 }2205 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {2206 psError(PS_ERR_UNKNOWN, false, "failed to add item camera");2207 psFree(md);2208 return false;2209 }2210 if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {2211 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");2212 psFree(md);2213 return false;2214 }2215 2216 bool status = psDBInsertOneRow(dbh, PZDONEEXP_TABLE_NAME, md);2217 psFree(md);2218 2219 return status;2220 }2221 2222 long long pzDoneExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)2223 {2224 long long deleted = 0;2225 2226 long long count = psDBDeleteRows(dbh, PZDONEEXP_TABLE_NAME, where, limit);2227 if (count < 0) {2228 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDoneExp");2229 return count;2230 2231 deleted += count;2232 }2233 2234 return deleted;2235 }2236 bool pzDoneExpInsertObject(psDB *dbh, pzDoneExpRow *object)2237 {2238 return pzDoneExpInsert(dbh, object->exp_name, object->camera, object->telescope);2239 }2240 2241 bool pzDoneExpInsertObjects(psDB *dbh, psArray *objects)2242 {2243 for (long i = 0; i < psArrayLength(objects); i++) {2244 if (!pzDoneExpInsertObject(dbh, objects->data[i])) {2245 return false;2246 }2247 }2248 2249 return true;2250 }2251 2252 bool pzDoneExpInsertFits(psDB *dbh, const psFits *fits)2253 {2254 psArray *rowSet;2255 2256 // move to (the first?) extension named PZDONEEXP_TABLE_NAME2257 if (!psFitsMoveExtName(fits, PZDONEEXP_TABLE_NAME)) {2258 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PZDONEEXP_TABLE_NAME);2259 return false;2260 }2261 2262 // check HDU type2263 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) {2264 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");2265 return false;2266 }2267 2268 // read fits table2269 rowSet = psFitsReadTable(fits);2270 if (!rowSet) {2271 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");2272 psFree(rowSet);2273 return false;2274 }2275 2276 if (!psDBInsertRows(dbh, PZDONEEXP_TABLE_NAME, rowSet)) {2277 psError(PS_ERR_UNKNOWN, false, "databse insert failed");2278 psFree(rowSet);2279 return false;2280 }2281 2282 psFree(rowSet);2283 2284 return true;2285 }2286 2287 bool pzDoneExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)2288 {2289 psArray *rowSet;2290 2291 rowSet = psDBSelectRows(dbh, PZDONEEXP_TABLE_NAME, where, limit);2292 if (!rowSet) {2293 return false;2294 }2295 2296 // output to fits2297 if (!psFitsWriteTable(fits, NULL, rowSet, PZDONEEXP_TABLE_NAME)) {2298 psError(PS_ERR_UNKNOWN, false, "FITS table write failed");2299 psFree(rowSet);2300 return false;2301 }2302 2303 psFree(rowSet);2304 2305 return true;2306 }2307 2308 psMetadata *pzDoneExpMetadataFromObject(const pzDoneExpRow *object)2309 {2310 psMetadata *md = psMetadataAlloc();2311 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, NULL, object->exp_name)) {2312 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name");2313 psFree(md);2314 return false;2315 }2316 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {2317 psError(PS_ERR_UNKNOWN, false, "failed to add item camera");2318 psFree(md);2319 return false;2320 }2321 if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {2322 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");2323 psFree(md);2324 return false;2325 }2326 2327 2328 return md;2329 }2330 2331 pzDoneExpRow *pzDoneExpObjectFromMetadata(psMetadata *md)2332 {2333 2334 bool status = false;2335 char* exp_name = psMetadataLookupPtr(&status, md, "exp_name");2336 if (!status) {2337 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_name");2338 return false;2339 }2340 char* camera = psMetadataLookupPtr(&status, md, "camera");2341 if (!status) {2342 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");2343 return false;2344 }2345 char* telescope = psMetadataLookupPtr(&status, md, "telescope");2346 if (!status) {2347 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");2348 return false;2349 }2350 2351 return pzDoneExpRowAlloc(exp_name, camera, telescope);2352 }2353 psArray *pzDoneExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)2354 {2355 psArray *rowSet;2356 psArray *returnSet;2357 psU64 i;2358 2359 rowSet = psDBSelectRows(dbh, PZDONEEXP_TABLE_NAME, where, limit);2360 if (!rowSet) {2361 return NULL;2362 }2363 2364 // convert psMetadata rows to row objects2365 2366 returnSet = psArrayAllocEmpty(rowSet->n);2367 2368 for (i = 0; i < rowSet->n; i++) {2369 pzDoneExpRow *object = pzDoneExpObjectFromMetadata(rowSet->data[i]);2370 if (!object) {2371 psFree(object);2372 psFree(returnSet);2373 psError(PS_ERR_UNKNOWN, false, "database error");2374 return NULL;2375 }2376 psArrayAdd(returnSet, 0, object);2377 psFree(object);2378 }2379 2380 psFree(rowSet);2381 2382 return returnSet;2383 }2384 bool pzDoneExpDeleteObject(psDB *dbh, const pzDoneExpRow *object)2385 {2386 psMetadata *where = pzDoneExpMetadataFromObject(object);2387 long long count = psDBDeleteRows(dbh, PZDONEEXP_TABLE_NAME, where, 0);2388 psFree(where);2389 if (count < 0) {2390 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDoneExp");2391 return false;2392 }2393 if (count > 1) {2394 // XXX should this be a psAbort() instead? It is possible that2395 // having an object match multiple rows was by design.2396 psError(PS_ERR_UNKNOWN, true, "pzDoneExpRow object matched more then one row. Check your database schema");2397 return false;2398 }2399 2400 return true;2401 }2402 long long pzDoneExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)2403 {2404 long long deleted = 0;2405 2406 for (long long i = 0; i < objects->n; i++) {2407 pzDoneExpRow *object = objects->data[i];2408 psMetadata *where = pzDoneExpMetadataFromObject(object);2409 long long count = psDBDeleteRows(dbh, PZDONEEXP_TABLE_NAME, where, limit);2410 psFree(where);2411 if (count < 0) {2412 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDoneExp");2413 return count;2414 }2415 2416 deleted += count;2417 }2418 2419 return deleted;2420 }2421 bool pzDoneExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)2422 {2423 PS_ASSERT_PTR_NON_NULL(objects, false);2424 2425 psMetadata *output = psMetadataAlloc();2426 for (long i = 0; i < psArrayLength(objects); i++) {2427 psMetadata *md = pzDoneExpMetadataFromObject(objects->data[i]);2428 if (!psMetadataAddMetadata(2429 output,2430 PS_LIST_TAIL,2431 PZDONEEXP_TABLE_NAME,2432 PS_META_DUPLICATE_OK,2433 NULL,2434 md2435 )) {2436 psError(PS_ERR_UNKNOWN, false, "failed to add metadata");2437 psFree(md);2438 psFree(output);2439 return false;2440 }2441 psFree(md);2442 }2443 2444 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {2445 psError(PS_ERR_UNKNOWN, false, "failed to print metadata");2446 psFree(output);2447 }2448 psFree(output);2449 2450 return true;2451 }2452 bool pzDoneExpPrintObject(FILE *stream, pzDoneExpRow *object, bool mdcf)2453 {2454 PS_ASSERT_PTR_NON_NULL(object, false);2455 2456 psMetadata *md = pzDoneExpMetadataFromObject(object);2457 2458 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {2459 psError(PS_ERR_UNKNOWN, false, "failed to print metadata");2460 psFree(md);2461 }2462 2463 psFree(md);2464 2465 return true;2466 }2467 static void pzDoneImfileRowFree(pzDoneImfileRow *object);2468 2469 pzDoneImfileRow *pzDoneImfileRowAlloc(const char *exp_name, const char *camera, const char *telescope, const char *class, const char *class_id, const char *uri)2470 {2471 pzDoneImfileRow *_object;2472 2473 _object = psAlloc(sizeof(pzDoneImfileRow));2474 psMemSetDeallocator(_object, (psFreeFunc)pzDoneImfileRowFree);2475 2476 _object->exp_name = psStringCopy(exp_name);2477 _object->camera = psStringCopy(camera);2478 _object->telescope = psStringCopy(telescope);2479 _object->class = psStringCopy(class);2480 _object->class_id = psStringCopy(class_id);2481 _object->uri = psStringCopy(uri);2482 2483 return _object;2484 }2485 2486 static void pzDoneImfileRowFree(pzDoneImfileRow *object)2487 {2488 psFree(object->exp_name);2489 psFree(object->camera);2490 psFree(object->telescope);2491 psFree(object->class);2492 psFree(object->class_id);2493 psFree(object->uri);2494 }2495 2496 bool pzDoneImfileCreateTable(psDB *dbh)2497 {2498 psMetadata *md = psMetadataAlloc();2499 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, "Primary Key", "64")) {2500 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name");2501 psFree(md);2502 return false;2503 }2504 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {2505 psError(PS_ERR_UNKNOWN, false, "failed to add item camera");2506 psFree(md);2507 return false;2508 }2509 if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {2510 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");2511 psFree(md);2512 return false;2513 }2514 if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, "Primary Key", "64")) {2515 psError(PS_ERR_UNKNOWN, false, "failed to add item class");2516 psFree(md);2517 return false;2518 }2519 if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {2520 psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");2521 psFree(md);2522 return false;2523 }2524 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {2525 psError(PS_ERR_UNKNOWN, false, "failed to add item uri");2526 psFree(md);2527 return false;2528 }2529 2530 bool status = psDBCreateTable(dbh, PZDONEIMFILE_TABLE_NAME, md);2531 2532 psFree(md);2533 2534 return status;2535 }2536 2537 bool pzDoneImfileDropTable(psDB *dbh)2538 {2539 return psDBDropTable(dbh, PZDONEIMFILE_TABLE_NAME);2540 }2541 2542 bool pzDoneImfileInsert(psDB * dbh, const char *exp_name, const char *camera, const char *telescope, const char *class, const char *class_id, const char *uri)2543 {2544 psMetadata *md = psMetadataAlloc();2545 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, NULL, exp_name)) {2546 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name");2547 psFree(md);2548 return false;2549 }2550 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {2551 psError(PS_ERR_UNKNOWN, false, "failed to add item camera");2552 psFree(md);2553 return false;2554 }2555 if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {2556 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");2557 psFree(md);2558 return false;2559 }2560 if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {2561 psError(PS_ERR_UNKNOWN, false, "failed to add item class");2562 psFree(md);2563 return false;2564 }2565 if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {2566 psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");2567 psFree(md);2568 return false;2569 }2570 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {2571 psError(PS_ERR_UNKNOWN, false, "failed to add item uri");2572 psFree(md);2573 return false;2574 }2575 2576 bool status = psDBInsertOneRow(dbh, PZDONEIMFILE_TABLE_NAME, md);2577 psFree(md);2578 2579 return status;2580 }2581 2582 long long pzDoneImfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)2583 {2584 long long deleted = 0;2585 2586 long long count = psDBDeleteRows(dbh, PZDONEIMFILE_TABLE_NAME, where, limit);2587 if (count < 0) {2588 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDoneImfile");2589 return count;2590 2591 deleted += count;2592 }2593 2594 return deleted;2595 }2596 bool pzDoneImfileInsertObject(psDB *dbh, pzDoneImfileRow *object)2597 {2598 return pzDoneImfileInsert(dbh, object->exp_name, object->camera, object->telescope, object->class, object->class_id, object->uri);2599 }2600 2601 bool pzDoneImfileInsertObjects(psDB *dbh, psArray *objects)2602 {2603 for (long i = 0; i < psArrayLength(objects); i++) {2604 if (!pzDoneImfileInsertObject(dbh, objects->data[i])) {2605 return false;2606 }2607 }2608 2609 return true;2610 }2611 2612 bool pzDoneImfileInsertFits(psDB *dbh, const psFits *fits)2613 {2614 psArray *rowSet;2615 2616 // move to (the first?) extension named PZDONEIMFILE_TABLE_NAME2617 if (!psFitsMoveExtName(fits, PZDONEIMFILE_TABLE_NAME)) {2618 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PZDONEIMFILE_TABLE_NAME);2619 return false;2620 }2621 2622 // check HDU type2623 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) {2624 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");2625 return false;2626 }2627 2628 // read fits table2629 rowSet = psFitsReadTable(fits);2630 if (!rowSet) {2631 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");2632 psFree(rowSet);2633 return false;2634 }2635 2636 if (!psDBInsertRows(dbh, PZDONEIMFILE_TABLE_NAME, rowSet)) {2637 psError(PS_ERR_UNKNOWN, false, "databse insert failed");2638 psFree(rowSet);2639 return false;2640 }2641 2642 psFree(rowSet);2643 2644 return true;2645 }2646 2647 bool pzDoneImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)2648 {2649 psArray *rowSet;2650 2651 rowSet = psDBSelectRows(dbh, PZDONEIMFILE_TABLE_NAME, where, limit);2652 if (!rowSet) {2653 return false;2654 }2655 2656 // output to fits2657 if (!psFitsWriteTable(fits, NULL, rowSet, PZDONEIMFILE_TABLE_NAME)) {2658 psError(PS_ERR_UNKNOWN, false, "FITS table write failed");2659 psFree(rowSet);2660 return false;2661 }2662 2663 psFree(rowSet);2664 2665 return true;2666 }2667 2668 psMetadata *pzDoneImfileMetadataFromObject(const pzDoneImfileRow *object)2669 {2670 psMetadata *md = psMetadataAlloc();2671 if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_name", PS_DATA_STRING, NULL, object->exp_name)) {2672 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_name");2673 psFree(md);2674 return false;2675 }2676 if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {2677 psError(PS_ERR_UNKNOWN, false, "failed to add item camera");2678 psFree(md);2679 return false;2680 }2681 if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {2682 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");2683 psFree(md);2684 return false;2685 }2686 if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {2687 psError(PS_ERR_UNKNOWN, false, "failed to add item class");2688 psFree(md);2689 return false;2690 }2691 if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {2692 psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");2693 psFree(md);2694 return false;2695 }2696 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {2697 psError(PS_ERR_UNKNOWN, false, "failed to add item uri");2698 psFree(md);2699 return false;2700 }2701 2702 2703 return md;2704 }2705 2706 pzDoneImfileRow *pzDoneImfileObjectFromMetadata(psMetadata *md)2707 {2708 2709 bool status = false;2710 char* exp_name = psMetadataLookupPtr(&status, md, "exp_name");2711 if (!status) {2712 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_name");2713 return false;2714 }2715 char* camera = psMetadataLookupPtr(&status, md, "camera");2716 if (!status) {2717 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");2718 return false;2719 }2720 char* telescope = psMetadataLookupPtr(&status, md, "telescope");2721 if (!status) {2722 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");2723 return false;2724 }2725 char* class = psMetadataLookupPtr(&status, md, "class");2726 if (!status) {2727 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");2728 return false;2729 }2730 char* class_id = psMetadataLookupPtr(&status, md, "class_id");2731 if (!status) {2732 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");2733 return false;2734 }2735 char* uri = psMetadataLookupPtr(&status, md, "uri");2736 if (!status) {2737 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");2738 return false;2739 }2740 2741 return pzDoneImfileRowAlloc(exp_name, camera, telescope, class, class_id, uri);2742 }2743 psArray *pzDoneImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)2744 {2745 psArray *rowSet;2746 psArray *returnSet;2747 psU64 i;2748 2749 rowSet = psDBSelectRows(dbh, PZDONEIMFILE_TABLE_NAME, where, limit);2750 if (!rowSet) {2751 return NULL;2752 }2753 2754 // convert psMetadata rows to row objects2755 2756 returnSet = psArrayAllocEmpty(rowSet->n);2757 2758 for (i = 0; i < rowSet->n; i++) {2759 pzDoneImfileRow *object = pzDoneImfileObjectFromMetadata(rowSet->data[i]);2760 if (!object) {2761 psFree(object);2762 psFree(returnSet);2763 psError(PS_ERR_UNKNOWN, false, "database error");2764 return NULL;2765 }2766 psArrayAdd(returnSet, 0, object);2767 psFree(object);2768 }2769 2770 psFree(rowSet);2771 2772 return returnSet;2773 }2774 bool pzDoneImfileDeleteObject(psDB *dbh, const pzDoneImfileRow *object)2775 {2776 psMetadata *where = pzDoneImfileMetadataFromObject(object);2777 long long count = psDBDeleteRows(dbh, PZDONEIMFILE_TABLE_NAME, where, 0);2778 psFree(where);2779 if (count < 0) {2780 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDoneImfile");2781 return false;2782 }2783 if (count > 1) {2784 // XXX should this be a psAbort() instead? It is possible that2785 // having an object match multiple rows was by design.2786 psError(PS_ERR_UNKNOWN, true, "pzDoneImfileRow object matched more then one row. Check your database schema");2787 return false;2788 }2789 2790 return true;2791 }2792 long long pzDoneImfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)2793 {2794 long long deleted = 0;2795 2796 for (long long i = 0; i < objects->n; i++) {2797 pzDoneImfileRow *object = objects->data[i];2798 psMetadata *where = pzDoneImfileMetadataFromObject(object);2799 long long count = psDBDeleteRows(dbh, PZDONEIMFILE_TABLE_NAME, where, limit);2800 psFree(where);2801 if (count < 0) {2802 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pzDoneImfile");2803 return count;2804 }2805 2806 deleted += count;2807 }2808 2809 return deleted;2810 }2811 bool pzDoneImfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)2812 {2813 PS_ASSERT_PTR_NON_NULL(objects, false);2814 2815 psMetadata *output = psMetadataAlloc();2816 for (long i = 0; i < psArrayLength(objects); i++) {2817 psMetadata *md = pzDoneImfileMetadataFromObject(objects->data[i]);2818 if (!psMetadataAddMetadata(2819 output,2820 PS_LIST_TAIL,2821 PZDONEIMFILE_TABLE_NAME,2822 PS_META_DUPLICATE_OK,2823 NULL,2824 md2825 )) {2826 psError(PS_ERR_UNKNOWN, false, "failed to add metadata");2827 psFree(md);2828 psFree(output);2829 return false;2830 }2831 psFree(md);2832 }2833 2834 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {2835 psError(PS_ERR_UNKNOWN, false, "failed to print metadata");2836 psFree(output);2837 }2838 psFree(output);2839 2840 return true;2841 }2842 bool pzDoneImfilePrintObject(FILE *stream, pzDoneImfileRow *object, bool mdcf)2843 {2844 PS_ASSERT_PTR_NON_NULL(object, false);2845 2846 psMetadata *md = pzDoneImfileMetadataFromObject(object);2847 2848 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {2849 psError(PS_ERR_UNKNOWN, false, "failed to print metadata");2850 psFree(md);2851 }2852 2853 psFree(md);2854 2855 return true;2856 }2857 2209 static void newExpRowFree(newExpRow *object); 2858 2210 2859 newExpRow *newExpRowAlloc(psS64 exp_id, const char *tmp_exp_name, const char *tmp_camera, const char *tmp_telescope, const char *state, const char *workdir, const char *workdir_state, const char *reduction, const char *dvodb, const char *tess_id, const char *end_stage )2211 newExpRow *newExpRowAlloc(psS64 exp_id, const char *tmp_exp_name, const char *tmp_camera, const char *tmp_telescope, const char *state, const char *workdir, const char *workdir_state, const char *reduction, const char *dvodb, const char *tess_id, const char *end_stage, const char *label) 2860 2212 { 2861 2213 newExpRow *_object; … … 2875 2227 _object->tess_id = psStringCopy(tess_id); 2876 2228 _object->end_stage = psStringCopy(end_stage); 2229 _object->label = psStringCopy(label); 2877 2230 2878 2231 return _object; … … 2891 2244 psFree(object->tess_id); 2892 2245 psFree(object->end_stage); 2246 psFree(object->label); 2893 2247 } 2894 2248 … … 2951 2305 return false; 2952 2306 } 2307 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "Key", "64")) { 2308 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 2309 psFree(md); 2310 return false; 2311 } 2953 2312 2954 2313 bool status = psDBCreateTable(dbh, NEWEXP_TABLE_NAME, md); … … 2964 2323 } 2965 2324 2966 bool newExpInsert(psDB * dbh, psS64 exp_id, const char *tmp_exp_name, const char *tmp_camera, const char *tmp_telescope, const char *state, const char *workdir, const char *workdir_state, const char *reduction, const char *dvodb, const char *tess_id, const char *end_stage )2325 bool newExpInsert(psDB * dbh, psS64 exp_id, const char *tmp_exp_name, const char *tmp_camera, const char *tmp_telescope, const char *state, const char *workdir, const char *workdir_state, const char *reduction, const char *dvodb, const char *tess_id, const char *end_stage, const char *label) 2967 2326 { 2968 2327 psMetadata *md = psMetadataAlloc(); … … 3019 2378 if (!psMetadataAdd(md, PS_LIST_TAIL, "end_stage", PS_DATA_STRING, NULL, end_stage)) { 3020 2379 psError(PS_ERR_UNKNOWN, false, "failed to add item end_stage"); 2380 psFree(md); 2381 return false; 2382 } 2383 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 2384 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 3021 2385 psFree(md); 3022 2386 return false; … … 3045 2409 bool newExpInsertObject(psDB *dbh, newExpRow *object) 3046 2410 { 3047 return newExpInsert(dbh, object->exp_id, object->tmp_exp_name, object->tmp_camera, object->tmp_telescope, object->state, object->workdir, object->workdir_state, object->reduction, object->dvodb, object->tess_id, object->end_stage );2411 return newExpInsert(dbh, object->exp_id, object->tmp_exp_name, object->tmp_camera, object->tmp_telescope, object->state, object->workdir, object->workdir_state, object->reduction, object->dvodb, object->tess_id, object->end_stage, object->label); 3048 2412 } 3049 2413 … … 3173 2537 return false; 3174 2538 } 2539 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 2540 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 2541 psFree(md); 2542 return false; 2543 } 3175 2544 3176 2545 … … 3237 2606 return false; 3238 2607 } 3239 3240 return newExpRowAlloc(exp_id, tmp_exp_name, tmp_camera, tmp_telescope, state, workdir, workdir_state, reduction, dvodb, tess_id, end_stage); 2608 char* label = psMetadataLookupPtr(&status, md, "label"); 2609 if (!status) { 2610 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 2611 return false; 2612 } 2613 2614 return newExpRowAlloc(exp_id, tmp_exp_name, tmp_camera, tmp_telescope, state, workdir, workdir_state, reduction, dvodb, tess_id, end_stage, label); 3241 2615 } 3242 2616 psArray *newExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 7310 6684 static void chipProcessedImfileRowFree(chipProcessedImfileRow *object); 7311 6685 7312 chipProcessedImfileRow *chipProcessedImfileRowAlloc(psS64 chip_id, psS64 exp_id, const char *class_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 bias, psF32 bias_stdev, psF32 fringe_0, psF32 fringe_1, psF32 fringe_2, psF32 sigma_ra, psF32 sigma_dec, psF32 ap_resid, psF32 ap_resid_stdev, psF32 fwhm, psF32 fwhm_range, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault)6686 chipProcessedImfileRow *chipProcessedImfileRowAlloc(psS64 chip_id, psS64 exp_id, const char *class_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 bias, psF32 bias_stdev, psF32 fringe_0, psF32 fringe_1, psF32 fringe_2, psF32 sigma_ra, psF32 sigma_dec, psF32 ap_resid, psF32 ap_resid_stdev, psF32 zp_mean, psF32 zp_stdev, psF32 fwhm_major, psF32 fwhm_minor, psF32 dtime_detrend, psF32 dtime_photom, psF32 dtime_astrom, const char *hostname, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault) 7313 6687 { 7314 6688 chipProcessedImfileRow *_object; … … 7333 6707 _object->ap_resid = ap_resid; 7334 6708 _object->ap_resid_stdev = ap_resid_stdev; 7335 _object->fwhm = fwhm; 7336 _object->fwhm_range = fwhm_range; 6709 _object->zp_mean = zp_mean; 6710 _object->zp_stdev = zp_stdev; 6711 _object->fwhm_major = fwhm_major; 6712 _object->fwhm_minor = fwhm_minor; 6713 _object->dtime_detrend = dtime_detrend; 6714 _object->dtime_photom = dtime_photom; 6715 _object->dtime_astrom = dtime_astrom; 6716 _object->hostname = psStringCopy(hostname); 7337 6717 _object->n_stars = n_stars; 7338 6718 _object->n_extended = n_extended; … … 7349 6729 psFree(object->class_id); 7350 6730 psFree(object->uri); 6731 psFree(object->hostname); 7351 6732 psFree(object->path_base); 7352 6733 } … … 7435 6816 return false; 7436 6817 } 7437 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm", PS_DATA_F32, "# replace this with fwhm_major", 0.0)) { 7438 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm"); 7439 psFree(md); 7440 return false; 7441 } 7442 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_range", PS_DATA_F32, "# replace this with fwhm_minor", 0.0)) { 7443 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_range"); 6818 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, 0.0)) { 6819 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean"); 6820 psFree(md); 6821 return false; 6822 } 6823 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, 0.0)) { 6824 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev"); 6825 psFree(md); 6826 return false; 6827 } 6828 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_major", PS_DATA_F32, NULL, 0.0)) { 6829 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_major"); 6830 psFree(md); 6831 return false; 6832 } 6833 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_minor", PS_DATA_F32, NULL, 0.0)) { 6834 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_minor"); 6835 psFree(md); 6836 return false; 6837 } 6838 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_detrend", PS_DATA_F32, NULL, 0.0)) { 6839 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_detrend"); 6840 psFree(md); 6841 return false; 6842 } 6843 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_photom", PS_DATA_F32, NULL, 0.0)) { 6844 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_photom"); 6845 psFree(md); 6846 return false; 6847 } 6848 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_astrom", PS_DATA_F32, NULL, 0.0)) { 6849 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_astrom"); 6850 psFree(md); 6851 return false; 6852 } 6853 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, "64")) { 6854 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 7444 6855 psFree(md); 7445 6856 return false; … … 7488 6899 } 7489 6900 7490 bool chipProcessedImfileInsert(psDB * dbh, psS64 chip_id, psS64 exp_id, const char *class_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 bias, psF32 bias_stdev, psF32 fringe_0, psF32 fringe_1, psF32 fringe_2, psF32 sigma_ra, psF32 sigma_dec, psF32 ap_resid, psF32 ap_resid_stdev, psF32 fwhm, psF32 fwhm_range, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault)6901 bool chipProcessedImfileInsert(psDB * dbh, psS64 chip_id, psS64 exp_id, const char *class_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 bias, psF32 bias_stdev, psF32 fringe_0, psF32 fringe_1, psF32 fringe_2, psF32 sigma_ra, psF32 sigma_dec, psF32 ap_resid, psF32 ap_resid_stdev, psF32 zp_mean, psF32 zp_stdev, psF32 fwhm_major, psF32 fwhm_minor, psF32 dtime_detrend, psF32 dtime_photom, psF32 dtime_astrom, const char *hostname, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault) 7491 6902 { 7492 6903 psMetadata *md = psMetadataAlloc(); … … 7571 6982 return false; 7572 6983 } 7573 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm", PS_DATA_F32, NULL, fwhm)) { 7574 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm"); 7575 psFree(md); 7576 return false; 7577 } 7578 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_range", PS_DATA_F32, NULL, fwhm_range)) { 7579 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_range"); 6984 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, zp_mean)) { 6985 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean"); 6986 psFree(md); 6987 return false; 6988 } 6989 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, zp_stdev)) { 6990 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev"); 6991 psFree(md); 6992 return false; 6993 } 6994 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_major", PS_DATA_F32, NULL, fwhm_major)) { 6995 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_major"); 6996 psFree(md); 6997 return false; 6998 } 6999 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_minor", PS_DATA_F32, NULL, fwhm_minor)) { 7000 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_minor"); 7001 psFree(md); 7002 return false; 7003 } 7004 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_detrend", PS_DATA_F32, NULL, dtime_detrend)) { 7005 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_detrend"); 7006 psFree(md); 7007 return false; 7008 } 7009 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_photom", PS_DATA_F32, NULL, dtime_photom)) { 7010 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_photom"); 7011 psFree(md); 7012 return false; 7013 } 7014 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_astrom", PS_DATA_F32, NULL, dtime_astrom)) { 7015 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_astrom"); 7016 psFree(md); 7017 return false; 7018 } 7019 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, hostname)) { 7020 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 7580 7021 psFree(md); 7581 7022 return false; … … 7634 7075 bool chipProcessedImfileInsertObject(psDB *dbh, chipProcessedImfileRow *object) 7635 7076 { 7636 return chipProcessedImfileInsert(dbh, object->chip_id, object->exp_id, object->class_id, object->uri, object->bg, object->bg_stdev, object->bg_mean_stdev, object->bias, object->bias_stdev, object->fringe_0, object->fringe_1, object->fringe_2, object->sigma_ra, object->sigma_dec, object->ap_resid, object->ap_resid_stdev, object-> fwhm, object->fwhm_range, object->n_stars, object->n_extended, object->n_cr, object->n_astrom, object->path_base, object->fault);7077 return chipProcessedImfileInsert(dbh, object->chip_id, object->exp_id, object->class_id, object->uri, object->bg, object->bg_stdev, object->bg_mean_stdev, object->bias, object->bias_stdev, object->fringe_0, object->fringe_1, object->fringe_2, object->sigma_ra, object->sigma_dec, object->ap_resid, object->ap_resid_stdev, object->zp_mean, object->zp_stdev, object->fwhm_major, object->fwhm_minor, object->dtime_detrend, object->dtime_photom, object->dtime_astrom, object->hostname, object->n_stars, object->n_extended, object->n_cr, object->n_astrom, object->path_base, object->fault); 7637 7078 } 7638 7079 … … 7787 7228 return false; 7788 7229 } 7789 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm", PS_DATA_F32, NULL, object->fwhm)) { 7790 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm"); 7791 psFree(md); 7792 return false; 7793 } 7794 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_range", PS_DATA_F32, NULL, object->fwhm_range)) { 7795 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_range"); 7230 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, object->zp_mean)) { 7231 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean"); 7232 psFree(md); 7233 return false; 7234 } 7235 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, object->zp_stdev)) { 7236 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev"); 7237 psFree(md); 7238 return false; 7239 } 7240 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_major", PS_DATA_F32, NULL, object->fwhm_major)) { 7241 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_major"); 7242 psFree(md); 7243 return false; 7244 } 7245 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_minor", PS_DATA_F32, NULL, object->fwhm_minor)) { 7246 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_minor"); 7247 psFree(md); 7248 return false; 7249 } 7250 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_detrend", PS_DATA_F32, NULL, object->dtime_detrend)) { 7251 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_detrend"); 7252 psFree(md); 7253 return false; 7254 } 7255 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_photom", PS_DATA_F32, NULL, object->dtime_photom)) { 7256 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_photom"); 7257 psFree(md); 7258 return false; 7259 } 7260 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_astrom", PS_DATA_F32, NULL, object->dtime_astrom)) { 7261 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_astrom"); 7262 psFree(md); 7263 return false; 7264 } 7265 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, object->hostname)) { 7266 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 7796 7267 psFree(md); 7797 7268 return false; … … 7916 7387 return false; 7917 7388 } 7918 psF32 fwhm = psMetadataLookupF32(&status, md, "fwhm"); 7919 if (!status) { 7920 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm"); 7921 return false; 7922 } 7923 psF32 fwhm_range = psMetadataLookupF32(&status, md, "fwhm_range"); 7924 if (!status) { 7925 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm_range"); 7389 psF32 zp_mean = psMetadataLookupF32(&status, md, "zp_mean"); 7390 if (!status) { 7391 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_mean"); 7392 return false; 7393 } 7394 psF32 zp_stdev = psMetadataLookupF32(&status, md, "zp_stdev"); 7395 if (!status) { 7396 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_stdev"); 7397 return false; 7398 } 7399 psF32 fwhm_major = psMetadataLookupF32(&status, md, "fwhm_major"); 7400 if (!status) { 7401 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm_major"); 7402 return false; 7403 } 7404 psF32 fwhm_minor = psMetadataLookupF32(&status, md, "fwhm_minor"); 7405 if (!status) { 7406 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm_minor"); 7407 return false; 7408 } 7409 psF32 dtime_detrend = psMetadataLookupF32(&status, md, "dtime_detrend"); 7410 if (!status) { 7411 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_detrend"); 7412 return false; 7413 } 7414 psF32 dtime_photom = psMetadataLookupF32(&status, md, "dtime_photom"); 7415 if (!status) { 7416 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_photom"); 7417 return false; 7418 } 7419 psF32 dtime_astrom = psMetadataLookupF32(&status, md, "dtime_astrom"); 7420 if (!status) { 7421 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_astrom"); 7422 return false; 7423 } 7424 char* hostname = psMetadataLookupPtr(&status, md, "hostname"); 7425 if (!status) { 7426 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item hostname"); 7926 7427 return false; 7927 7428 } … … 7957 7458 } 7958 7459 7959 return chipProcessedImfileRowAlloc(chip_id, exp_id, class_id, uri, bg, bg_stdev, bg_mean_stdev, bias, bias_stdev, fringe_0, fringe_1, fringe_2, sigma_ra, sigma_dec, ap_resid, ap_resid_stdev, fwhm, fwhm_range, n_stars, n_extended, n_cr, n_astrom, path_base, fault);7460 return chipProcessedImfileRowAlloc(chip_id, exp_id, class_id, uri, bg, bg_stdev, bg_mean_stdev, bias, bias_stdev, fringe_0, fringe_1, fringe_2, sigma_ra, sigma_dec, ap_resid, ap_resid_stdev, zp_mean, zp_stdev, fwhm_major, fwhm_minor, dtime_detrend, dtime_photom, dtime_astrom, hostname, n_stars, n_extended, n_cr, n_astrom, path_base, fault); 7960 7461 } 7961 7462 psArray *chipProcessedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 8853 8354 static void camProcessedExpRowFree(camProcessedExpRow *object); 8854 8355 8855 camProcessedExpRow *camProcessedExpRowAlloc(psS64 cam_id, psS64 chip_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psF32 zp_mean, psF32 zp_stdev, psF32 fwhm, psF32 fwhm_range, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault)8356 camProcessedExpRow *camProcessedExpRowAlloc(psS64 cam_id, psS64 chip_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 bias, psF32 bias_stdev, psF32 fringe_0, psF32 fringe_1, psF32 fringe_2, psF32 sigma_ra, psF32 sigma_dec, psF32 ap_resid, psF32 ap_resid_stdev, psF32 zp_mean, psF32 zp_stdev, psF32 fwhm_major, psF32 fwhm_minor, psF32 dtime_detrend, psF32 dtime_photom, psF32 dtime_astrom, const char *hostname, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault) 8856 8357 { 8857 8358 camProcessedExpRow *_object; … … 8866 8367 _object->bg_stdev = bg_stdev; 8867 8368 _object->bg_mean_stdev = bg_mean_stdev; 8369 _object->bias = bias; 8370 _object->bias_stdev = bias_stdev; 8371 _object->fringe_0 = fringe_0; 8372 _object->fringe_1 = fringe_1; 8373 _object->fringe_2 = fringe_2; 8868 8374 _object->sigma_ra = sigma_ra; 8869 8375 _object->sigma_dec = sigma_dec; 8376 _object->ap_resid = ap_resid; 8377 _object->ap_resid_stdev = ap_resid_stdev; 8870 8378 _object->zp_mean = zp_mean; 8871 8379 _object->zp_stdev = zp_stdev; 8872 _object->fwhm = fwhm; 8873 _object->fwhm_range = fwhm_range; 8380 _object->fwhm_major = fwhm_major; 8381 _object->fwhm_minor = fwhm_minor; 8382 _object->dtime_detrend = dtime_detrend; 8383 _object->dtime_photom = dtime_photom; 8384 _object->dtime_astrom = dtime_astrom; 8385 _object->hostname = psStringCopy(hostname); 8874 8386 _object->n_stars = n_stars; 8875 8387 _object->n_extended = n_extended; … … 8885 8397 { 8886 8398 psFree(object->uri); 8399 psFree(object->hostname); 8887 8400 psFree(object->path_base); 8888 8401 } … … 8921 8434 return false; 8922 8435 } 8436 if (!psMetadataAdd(md, PS_LIST_TAIL, "bias", PS_DATA_F32, NULL, 0.0)) { 8437 psError(PS_ERR_UNKNOWN, false, "failed to add item bias"); 8438 psFree(md); 8439 return false; 8440 } 8441 if (!psMetadataAdd(md, PS_LIST_TAIL, "bias_stdev", PS_DATA_F32, NULL, 0.0)) { 8442 psError(PS_ERR_UNKNOWN, false, "failed to add item bias_stdev"); 8443 psFree(md); 8444 return false; 8445 } 8446 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_0", PS_DATA_F32, NULL, 0.0)) { 8447 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_0"); 8448 psFree(md); 8449 return false; 8450 } 8451 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_1", PS_DATA_F32, NULL, 0.0)) { 8452 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_1"); 8453 psFree(md); 8454 return false; 8455 } 8456 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_2", PS_DATA_F32, NULL, 0.0)) { 8457 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_2"); 8458 psFree(md); 8459 return false; 8460 } 8923 8461 if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, 0.0)) { 8924 8462 psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra"); … … 8931 8469 return false; 8932 8470 } 8471 if (!psMetadataAdd(md, PS_LIST_TAIL, "ap_resid", PS_DATA_F32, NULL, 0.0)) { 8472 psError(PS_ERR_UNKNOWN, false, "failed to add item ap_resid"); 8473 psFree(md); 8474 return false; 8475 } 8476 if (!psMetadataAdd(md, PS_LIST_TAIL, "ap_resid_stdev", PS_DATA_F32, NULL, 0.0)) { 8477 psError(PS_ERR_UNKNOWN, false, "failed to add item ap_resid_stdev"); 8478 psFree(md); 8479 return false; 8480 } 8933 8481 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, 0.0)) { 8934 8482 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean"); … … 8941 8489 return false; 8942 8490 } 8943 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm", PS_DATA_F32, NULL, 0.0)) { 8944 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm"); 8945 psFree(md); 8946 return false; 8947 } 8948 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_range", PS_DATA_F32, NULL, 0.0)) { 8949 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_range"); 8491 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_major", PS_DATA_F32, NULL, 0.0)) { 8492 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_major"); 8493 psFree(md); 8494 return false; 8495 } 8496 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_minor", PS_DATA_F32, NULL, 0.0)) { 8497 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_minor"); 8498 psFree(md); 8499 return false; 8500 } 8501 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_detrend", PS_DATA_F32, NULL, 0.0)) { 8502 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_detrend"); 8503 psFree(md); 8504 return false; 8505 } 8506 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_photom", PS_DATA_F32, NULL, 0.0)) { 8507 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_photom"); 8508 psFree(md); 8509 return false; 8510 } 8511 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_astrom", PS_DATA_F32, NULL, 0.0)) { 8512 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_astrom"); 8513 psFree(md); 8514 return false; 8515 } 8516 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, "64")) { 8517 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 8950 8518 psFree(md); 8951 8519 return false; … … 8994 8562 } 8995 8563 8996 bool camProcessedExpInsert(psDB * dbh, psS64 cam_id, psS64 chip_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psF32 zp_mean, psF32 zp_stdev, psF32 fwhm, psF32 fwhm_range, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault)8564 bool camProcessedExpInsert(psDB * dbh, psS64 cam_id, psS64 chip_id, const char *uri, psF32 bg, psF32 bg_stdev, psF32 bg_mean_stdev, psF32 bias, psF32 bias_stdev, psF32 fringe_0, psF32 fringe_1, psF32 fringe_2, psF32 sigma_ra, psF32 sigma_dec, psF32 ap_resid, psF32 ap_resid_stdev, psF32 zp_mean, psF32 zp_stdev, psF32 fwhm_major, psF32 fwhm_minor, psF32 dtime_detrend, psF32 dtime_photom, psF32 dtime_astrom, const char *hostname, psS32 n_stars, psS32 n_extended, psS32 n_cr, psS32 n_astrom, const char *path_base, psS16 fault) 8997 8565 { 8998 8566 psMetadata *md = psMetadataAlloc(); … … 9027 8595 return false; 9028 8596 } 8597 if (!psMetadataAdd(md, PS_LIST_TAIL, "bias", PS_DATA_F32, NULL, bias)) { 8598 psError(PS_ERR_UNKNOWN, false, "failed to add item bias"); 8599 psFree(md); 8600 return false; 8601 } 8602 if (!psMetadataAdd(md, PS_LIST_TAIL, "bias_stdev", PS_DATA_F32, NULL, bias_stdev)) { 8603 psError(PS_ERR_UNKNOWN, false, "failed to add item bias_stdev"); 8604 psFree(md); 8605 return false; 8606 } 8607 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_0", PS_DATA_F32, NULL, fringe_0)) { 8608 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_0"); 8609 psFree(md); 8610 return false; 8611 } 8612 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_1", PS_DATA_F32, NULL, fringe_1)) { 8613 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_1"); 8614 psFree(md); 8615 return false; 8616 } 8617 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_2", PS_DATA_F32, NULL, fringe_2)) { 8618 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_2"); 8619 psFree(md); 8620 return false; 8621 } 9029 8622 if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, sigma_ra)) { 9030 8623 psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra"); … … 9037 8630 return false; 9038 8631 } 8632 if (!psMetadataAdd(md, PS_LIST_TAIL, "ap_resid", PS_DATA_F32, NULL, ap_resid)) { 8633 psError(PS_ERR_UNKNOWN, false, "failed to add item ap_resid"); 8634 psFree(md); 8635 return false; 8636 } 8637 if (!psMetadataAdd(md, PS_LIST_TAIL, "ap_resid_stdev", PS_DATA_F32, NULL, ap_resid_stdev)) { 8638 psError(PS_ERR_UNKNOWN, false, "failed to add item ap_resid_stdev"); 8639 psFree(md); 8640 return false; 8641 } 9039 8642 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, zp_mean)) { 9040 8643 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean"); … … 9047 8650 return false; 9048 8651 } 9049 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm", PS_DATA_F32, NULL, fwhm)) { 9050 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm"); 9051 psFree(md); 9052 return false; 9053 } 9054 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_range", PS_DATA_F32, NULL, fwhm_range)) { 9055 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_range"); 8652 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_major", PS_DATA_F32, NULL, fwhm_major)) { 8653 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_major"); 8654 psFree(md); 8655 return false; 8656 } 8657 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_minor", PS_DATA_F32, NULL, fwhm_minor)) { 8658 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_minor"); 8659 psFree(md); 8660 return false; 8661 } 8662 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_detrend", PS_DATA_F32, NULL, dtime_detrend)) { 8663 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_detrend"); 8664 psFree(md); 8665 return false; 8666 } 8667 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_photom", PS_DATA_F32, NULL, dtime_photom)) { 8668 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_photom"); 8669 psFree(md); 8670 return false; 8671 } 8672 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_astrom", PS_DATA_F32, NULL, dtime_astrom)) { 8673 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_astrom"); 8674 psFree(md); 8675 return false; 8676 } 8677 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, hostname)) { 8678 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 9056 8679 psFree(md); 9057 8680 return false; … … 9110 8733 bool camProcessedExpInsertObject(psDB *dbh, camProcessedExpRow *object) 9111 8734 { 9112 return camProcessedExpInsert(dbh, object->cam_id, object->chip_id, object->uri, object->bg, object->bg_stdev, object->bg_mean_stdev, object-> sigma_ra, object->sigma_dec, object->zp_mean, object->zp_stdev, object->fwhm, object->fwhm_range, object->n_stars, object->n_extended, object->n_cr, object->n_astrom, object->path_base, object->fault);8735 return camProcessedExpInsert(dbh, object->cam_id, object->chip_id, object->uri, object->bg, object->bg_stdev, object->bg_mean_stdev, object->bias, object->bias_stdev, object->fringe_0, object->fringe_1, object->fringe_2, object->sigma_ra, object->sigma_dec, object->ap_resid, object->ap_resid_stdev, object->zp_mean, object->zp_stdev, object->fwhm_major, object->fwhm_minor, object->dtime_detrend, object->dtime_photom, object->dtime_astrom, object->hostname, object->n_stars, object->n_extended, object->n_cr, object->n_astrom, object->path_base, object->fault); 9113 8736 } 9114 8737 … … 9213 8836 return false; 9214 8837 } 8838 if (!psMetadataAdd(md, PS_LIST_TAIL, "bias", PS_DATA_F32, NULL, object->bias)) { 8839 psError(PS_ERR_UNKNOWN, false, "failed to add item bias"); 8840 psFree(md); 8841 return false; 8842 } 8843 if (!psMetadataAdd(md, PS_LIST_TAIL, "bias_stdev", PS_DATA_F32, NULL, object->bias_stdev)) { 8844 psError(PS_ERR_UNKNOWN, false, "failed to add item bias_stdev"); 8845 psFree(md); 8846 return false; 8847 } 8848 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_0", PS_DATA_F32, NULL, object->fringe_0)) { 8849 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_0"); 8850 psFree(md); 8851 return false; 8852 } 8853 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_1", PS_DATA_F32, NULL, object->fringe_1)) { 8854 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_1"); 8855 psFree(md); 8856 return false; 8857 } 8858 if (!psMetadataAdd(md, PS_LIST_TAIL, "fringe_2", PS_DATA_F32, NULL, object->fringe_2)) { 8859 psError(PS_ERR_UNKNOWN, false, "failed to add item fringe_2"); 8860 psFree(md); 8861 return false; 8862 } 9215 8863 if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, object->sigma_ra)) { 9216 8864 psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra"); … … 9223 8871 return false; 9224 8872 } 8873 if (!psMetadataAdd(md, PS_LIST_TAIL, "ap_resid", PS_DATA_F32, NULL, object->ap_resid)) { 8874 psError(PS_ERR_UNKNOWN, false, "failed to add item ap_resid"); 8875 psFree(md); 8876 return false; 8877 } 8878 if (!psMetadataAdd(md, PS_LIST_TAIL, "ap_resid_stdev", PS_DATA_F32, NULL, object->ap_resid_stdev)) { 8879 psError(PS_ERR_UNKNOWN, false, "failed to add item ap_resid_stdev"); 8880 psFree(md); 8881 return false; 8882 } 9225 8883 if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, object->zp_mean)) { 9226 8884 psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean"); … … 9233 8891 return false; 9234 8892 } 9235 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm", PS_DATA_F32, NULL, object->fwhm)) { 9236 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm"); 9237 psFree(md); 9238 return false; 9239 } 9240 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_range", PS_DATA_F32, NULL, object->fwhm_range)) { 9241 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_range"); 8893 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_major", PS_DATA_F32, NULL, object->fwhm_major)) { 8894 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_major"); 8895 psFree(md); 8896 return false; 8897 } 8898 if (!psMetadataAdd(md, PS_LIST_TAIL, "fwhm_minor", PS_DATA_F32, NULL, object->fwhm_minor)) { 8899 psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm_minor"); 8900 psFree(md); 8901 return false; 8902 } 8903 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_detrend", PS_DATA_F32, NULL, object->dtime_detrend)) { 8904 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_detrend"); 8905 psFree(md); 8906 return false; 8907 } 8908 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_photom", PS_DATA_F32, NULL, object->dtime_photom)) { 8909 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_photom"); 8910 psFree(md); 8911 return false; 8912 } 8913 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_astrom", PS_DATA_F32, NULL, object->dtime_astrom)) { 8914 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_astrom"); 8915 psFree(md); 8916 return false; 8917 } 8918 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, object->hostname)) { 8919 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 9242 8920 psFree(md); 9243 8921 return false; … … 9312 8990 return false; 9313 8991 } 8992 psF32 bias = psMetadataLookupF32(&status, md, "bias"); 8993 if (!status) { 8994 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bias"); 8995 return false; 8996 } 8997 psF32 bias_stdev = psMetadataLookupF32(&status, md, "bias_stdev"); 8998 if (!status) { 8999 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bias_stdev"); 9000 return false; 9001 } 9002 psF32 fringe_0 = psMetadataLookupF32(&status, md, "fringe_0"); 9003 if (!status) { 9004 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fringe_0"); 9005 return false; 9006 } 9007 psF32 fringe_1 = psMetadataLookupF32(&status, md, "fringe_1"); 9008 if (!status) { 9009 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fringe_1"); 9010 return false; 9011 } 9012 psF32 fringe_2 = psMetadataLookupF32(&status, md, "fringe_2"); 9013 if (!status) { 9014 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fringe_2"); 9015 return false; 9016 } 9314 9017 psF32 sigma_ra = psMetadataLookupF32(&status, md, "sigma_ra"); 9315 9018 if (!status) { … … 9322 9025 return false; 9323 9026 } 9027 psF32 ap_resid = psMetadataLookupF32(&status, md, "ap_resid"); 9028 if (!status) { 9029 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ap_resid"); 9030 return false; 9031 } 9032 psF32 ap_resid_stdev = psMetadataLookupF32(&status, md, "ap_resid_stdev"); 9033 if (!status) { 9034 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ap_resid_stdev"); 9035 return false; 9036 } 9324 9037 psF32 zp_mean = psMetadataLookupF32(&status, md, "zp_mean"); 9325 9038 if (!status) { … … 9332 9045 return false; 9333 9046 } 9334 psF32 fwhm = psMetadataLookupF32(&status, md, "fwhm"); 9335 if (!status) { 9336 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm"); 9337 return false; 9338 } 9339 psF32 fwhm_range = psMetadataLookupF32(&status, md, "fwhm_range"); 9340 if (!status) { 9341 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm_range"); 9047 psF32 fwhm_major = psMetadataLookupF32(&status, md, "fwhm_major"); 9048 if (!status) { 9049 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm_major"); 9050 return false; 9051 } 9052 psF32 fwhm_minor = psMetadataLookupF32(&status, md, "fwhm_minor"); 9053 if (!status) { 9054 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm_minor"); 9055 return false; 9056 } 9057 psF32 dtime_detrend = psMetadataLookupF32(&status, md, "dtime_detrend"); 9058 if (!status) { 9059 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_detrend"); 9060 return false; 9061 } 9062 psF32 dtime_photom = psMetadataLookupF32(&status, md, "dtime_photom"); 9063 if (!status) { 9064 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_photom"); 9065 return false; 9066 } 9067 psF32 dtime_astrom = psMetadataLookupF32(&status, md, "dtime_astrom"); 9068 if (!status) { 9069 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_astrom"); 9070 return false; 9071 } 9072 char* hostname = psMetadataLookupPtr(&status, md, "hostname"); 9073 if (!status) { 9074 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item hostname"); 9342 9075 return false; 9343 9076 } … … 9373 9106 } 9374 9107 9375 return camProcessedExpRowAlloc(cam_id, chip_id, uri, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, zp_mean, zp_stdev, fwhm, fwhm_range, n_stars, n_extended, n_cr, n_astrom, path_base, fault);9108 return camProcessedExpRowAlloc(cam_id, chip_id, uri, bg, bg_stdev, bg_mean_stdev, bias, bias_stdev, fringe_0, fringe_1, fringe_2, sigma_ra, sigma_dec, ap_resid, ap_resid_stdev, zp_mean, zp_stdev, fwhm_major, fwhm_minor, dtime_detrend, dtime_photom, dtime_astrom, hostname, n_stars, n_extended, n_cr, n_astrom, path_base, fault); 9376 9109 } 9377 9110 psArray *camProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 10934 10667 static void warpSkyfileRowFree(warpSkyfileRow *object); 10935 10668 10936 warpSkyfileRow *warpSkyfileRowAlloc(psS64 warp_id, const char *skycell_id, const char *tess_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF 64good_frac, bool ignored, psS16 fault)10669 warpSkyfileRow *warpSkyfileRowAlloc(psS64 warp_id, const char *skycell_id, const char *tess_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF32 dtime_warp, const char *hostname, psF32 good_frac, bool ignored, psS16 fault) 10937 10670 { 10938 10671 warpSkyfileRow *_object; … … 10948 10681 _object->bg = bg; 10949 10682 _object->bg_stdev = bg_stdev; 10683 _object->dtime_warp = dtime_warp; 10684 _object->hostname = psStringCopy(hostname); 10950 10685 _object->good_frac = good_frac; 10951 10686 _object->ignored = ignored; … … 10961 10696 psFree(object->uri); 10962 10697 psFree(object->path_base); 10698 psFree(object->hostname); 10963 10699 } 10964 10700 … … 11001 10737 return false; 11002 10738 } 11003 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, "Key", 0.0)) { 10739 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_warp", PS_DATA_F32, NULL, 0.0)) { 10740 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_warp"); 10741 psFree(md); 10742 return false; 10743 } 10744 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, "64")) { 10745 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 10746 psFree(md); 10747 return false; 10748 } 10749 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, "Key", 0.0)) { 11004 10750 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 11005 10751 psFree(md); … … 11029 10775 } 11030 10776 11031 bool warpSkyfileInsert(psDB * dbh, psS64 warp_id, const char *skycell_id, const char *tess_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF 64good_frac, bool ignored, psS16 fault)10777 bool warpSkyfileInsert(psDB * dbh, psS64 warp_id, const char *skycell_id, const char *tess_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF32 dtime_warp, const char *hostname, psF32 good_frac, bool ignored, psS16 fault) 11032 10778 { 11033 10779 psMetadata *md = psMetadataAlloc(); … … 11067 10813 return false; 11068 10814 } 11069 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, NULL, good_frac)) { 10815 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_warp", PS_DATA_F32, NULL, dtime_warp)) { 10816 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_warp"); 10817 psFree(md); 10818 return false; 10819 } 10820 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, hostname)) { 10821 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 10822 psFree(md); 10823 return false; 10824 } 10825 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, NULL, good_frac)) { 11070 10826 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 11071 10827 psFree(md); … … 11105 10861 bool warpSkyfileInsertObject(psDB *dbh, warpSkyfileRow *object) 11106 10862 { 11107 return warpSkyfileInsert(dbh, object->warp_id, object->skycell_id, object->tess_id, object->uri, object->path_base, object->bg, object->bg_stdev, object-> good_frac, object->ignored, object->fault);10863 return warpSkyfileInsert(dbh, object->warp_id, object->skycell_id, object->tess_id, object->uri, object->path_base, object->bg, object->bg_stdev, object->dtime_warp, object->hostname, object->good_frac, object->ignored, object->fault); 11108 10864 } 11109 10865 … … 11213 10969 return false; 11214 10970 } 11215 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, NULL, object->good_frac)) { 10971 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_warp", PS_DATA_F32, NULL, object->dtime_warp)) { 10972 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_warp"); 10973 psFree(md); 10974 return false; 10975 } 10976 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, object->hostname)) { 10977 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 10978 psFree(md); 10979 return false; 10980 } 10981 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, NULL, object->good_frac)) { 11216 10982 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 11217 10983 psFree(md); … … 11272 11038 return false; 11273 11039 } 11274 psF64 good_frac = psMetadataLookupF64(&status, md, "good_frac"); 11040 psF32 dtime_warp = psMetadataLookupF32(&status, md, "dtime_warp"); 11041 if (!status) { 11042 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_warp"); 11043 return false; 11044 } 11045 char* hostname = psMetadataLookupPtr(&status, md, "hostname"); 11046 if (!status) { 11047 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item hostname"); 11048 return false; 11049 } 11050 psF32 good_frac = psMetadataLookupF32(&status, md, "good_frac"); 11275 11051 if (!status) { 11276 11052 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item good_frac"); … … 11288 11064 } 11289 11065 11290 return warpSkyfileRowAlloc(warp_id, skycell_id, tess_id, uri, path_base, bg, bg_stdev, good_frac, ignored, fault);11066 return warpSkyfileRowAlloc(warp_id, skycell_id, tess_id, uri, path_base, bg, bg_stdev, dtime_warp, hostname, good_frac, ignored, fault); 11291 11067 } 11292 11068 psArray *warpSkyfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 12225 12001 static void diffSkyfileRowFree(diffSkyfileRow *object); 12226 12002 12227 diffSkyfileRow *diffSkyfileRowAlloc(psS64 diff_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF 64good_frac, psS16 fault)12003 diffSkyfileRow *diffSkyfileRowAlloc(psS64 diff_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF32 dtime_diff, const char *hostname, psF32 good_frac, psS16 fault) 12228 12004 { 12229 12005 diffSkyfileRow *_object; … … 12237 12013 _object->bg = bg; 12238 12014 _object->bg_stdev = bg_stdev; 12015 _object->dtime_diff = dtime_diff; 12016 _object->hostname = psStringCopy(hostname); 12239 12017 _object->good_frac = good_frac; 12240 12018 _object->fault = fault; … … 12247 12025 psFree(object->uri); 12248 12026 psFree(object->path_base); 12027 psFree(object->hostname); 12249 12028 } 12250 12029 … … 12277 12056 return false; 12278 12057 } 12279 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, "Key", 0.0)) { 12058 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_diff", PS_DATA_F32, NULL, 0.0)) { 12059 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_diff"); 12060 psFree(md); 12061 return false; 12062 } 12063 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, "64")) { 12064 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 12065 psFree(md); 12066 return false; 12067 } 12068 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, "Key", 0.0)) { 12280 12069 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 12281 12070 psFree(md); … … 12300 12089 } 12301 12090 12302 bool diffSkyfileInsert(psDB * dbh, psS64 diff_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF 64good_frac, psS16 fault)12091 bool diffSkyfileInsert(psDB * dbh, psS64 diff_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF32 dtime_diff, const char *hostname, psF32 good_frac, psS16 fault) 12303 12092 { 12304 12093 psMetadata *md = psMetadataAlloc(); … … 12328 12117 return false; 12329 12118 } 12330 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, NULL, good_frac)) { 12119 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_diff", PS_DATA_F32, NULL, dtime_diff)) { 12120 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_diff"); 12121 psFree(md); 12122 return false; 12123 } 12124 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, hostname)) { 12125 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 12126 psFree(md); 12127 return false; 12128 } 12129 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, NULL, good_frac)) { 12331 12130 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 12332 12131 psFree(md); … … 12361 12160 bool diffSkyfileInsertObject(psDB *dbh, diffSkyfileRow *object) 12362 12161 { 12363 return diffSkyfileInsert(dbh, object->diff_id, object->uri, object->path_base, object->bg, object->bg_stdev, object-> good_frac, object->fault);12162 return diffSkyfileInsert(dbh, object->diff_id, object->uri, object->path_base, object->bg, object->bg_stdev, object->dtime_diff, object->hostname, object->good_frac, object->fault); 12364 12163 } 12365 12164 … … 12459 12258 return false; 12460 12259 } 12461 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, NULL, object->good_frac)) { 12260 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_diff", PS_DATA_F32, NULL, object->dtime_diff)) { 12261 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_diff"); 12262 psFree(md); 12263 return false; 12264 } 12265 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, object->hostname)) { 12266 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 12267 psFree(md); 12268 return false; 12269 } 12270 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, NULL, object->good_frac)) { 12462 12271 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 12463 12272 psFree(md); … … 12503 12312 return false; 12504 12313 } 12505 psF64 good_frac = psMetadataLookupF64(&status, md, "good_frac"); 12314 psF32 dtime_diff = psMetadataLookupF32(&status, md, "dtime_diff"); 12315 if (!status) { 12316 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_diff"); 12317 return false; 12318 } 12319 char* hostname = psMetadataLookupPtr(&status, md, "hostname"); 12320 if (!status) { 12321 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item hostname"); 12322 return false; 12323 } 12324 psF32 good_frac = psMetadataLookupF32(&status, md, "good_frac"); 12506 12325 if (!status) { 12507 12326 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item good_frac"); … … 12514 12333 } 12515 12334 12516 return diffSkyfileRowAlloc(diff_id, uri, path_base, bg, bg_stdev, good_frac, fault);12335 return diffSkyfileRowAlloc(diff_id, uri, path_base, bg, bg_stdev, dtime_diff, hostname, good_frac, fault); 12517 12336 } 12518 12337 psArray *diffSkyfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 13343 13162 static void stackSumSkyfileRowFree(stackSumSkyfileRow *object); 13344 13163 13345 stackSumSkyfileRow *stackSumSkyfileRowAlloc(psS64 stack_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF 64good_frac, psS16 fault)13164 stackSumSkyfileRow *stackSumSkyfileRowAlloc(psS64 stack_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF32 dtime_stack, const char *hostname, psF32 good_frac, psS16 fault) 13346 13165 { 13347 13166 stackSumSkyfileRow *_object; … … 13355 13174 _object->bg = bg; 13356 13175 _object->bg_stdev = bg_stdev; 13176 _object->dtime_stack = dtime_stack; 13177 _object->hostname = psStringCopy(hostname); 13357 13178 _object->good_frac = good_frac; 13358 13179 _object->fault = fault; … … 13365 13186 psFree(object->uri); 13366 13187 psFree(object->path_base); 13188 psFree(object->hostname); 13367 13189 } 13368 13190 … … 13395 13217 return false; 13396 13218 } 13397 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, "Key", 0.0)) { 13219 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_stack", PS_DATA_F32, "Key", 0.0)) { 13220 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_stack"); 13221 psFree(md); 13222 return false; 13223 } 13224 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, "64")) { 13225 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 13226 psFree(md); 13227 return false; 13228 } 13229 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, "Key", 0.0)) { 13398 13230 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 13399 13231 psFree(md); … … 13418 13250 } 13419 13251 13420 bool stackSumSkyfileInsert(psDB * dbh, psS64 stack_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF 64good_frac, psS16 fault)13252 bool stackSumSkyfileInsert(psDB * dbh, psS64 stack_id, const char *uri, const char *path_base, psF64 bg, psF64 bg_stdev, psF32 dtime_stack, const char *hostname, psF32 good_frac, psS16 fault) 13421 13253 { 13422 13254 psMetadata *md = psMetadataAlloc(); … … 13446 13278 return false; 13447 13279 } 13448 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, NULL, good_frac)) { 13280 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_stack", PS_DATA_F32, NULL, dtime_stack)) { 13281 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_stack"); 13282 psFree(md); 13283 return false; 13284 } 13285 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, hostname)) { 13286 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 13287 psFree(md); 13288 return false; 13289 } 13290 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, NULL, good_frac)) { 13449 13291 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 13450 13292 psFree(md); … … 13479 13321 bool stackSumSkyfileInsertObject(psDB *dbh, stackSumSkyfileRow *object) 13480 13322 { 13481 return stackSumSkyfileInsert(dbh, object->stack_id, object->uri, object->path_base, object->bg, object->bg_stdev, object-> good_frac, object->fault);13323 return stackSumSkyfileInsert(dbh, object->stack_id, object->uri, object->path_base, object->bg, object->bg_stdev, object->dtime_stack, object->hostname, object->good_frac, object->fault); 13482 13324 } 13483 13325 … … 13577 13419 return false; 13578 13420 } 13579 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F64, NULL, object->good_frac)) { 13421 if (!psMetadataAdd(md, PS_LIST_TAIL, "dtime_stack", PS_DATA_F32, NULL, object->dtime_stack)) { 13422 psError(PS_ERR_UNKNOWN, false, "failed to add item dtime_stack"); 13423 psFree(md); 13424 return false; 13425 } 13426 if (!psMetadataAdd(md, PS_LIST_TAIL, "hostname", PS_DATA_STRING, NULL, object->hostname)) { 13427 psError(PS_ERR_UNKNOWN, false, "failed to add item hostname"); 13428 psFree(md); 13429 return false; 13430 } 13431 if (!psMetadataAdd(md, PS_LIST_TAIL, "good_frac", PS_DATA_F32, NULL, object->good_frac)) { 13580 13432 psError(PS_ERR_UNKNOWN, false, "failed to add item good_frac"); 13581 13433 psFree(md); … … 13621 13473 return false; 13622 13474 } 13623 psF64 good_frac = psMetadataLookupF64(&status, md, "good_frac"); 13475 psF32 dtime_stack = psMetadataLookupF32(&status, md, "dtime_stack"); 13476 if (!status) { 13477 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dtime_stack"); 13478 return false; 13479 } 13480 char* hostname = psMetadataLookupPtr(&status, md, "hostname"); 13481 if (!status) { 13482 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item hostname"); 13483 return false; 13484 } 13485 psF32 good_frac = psMetadataLookupF32(&status, md, "good_frac"); 13624 13486 if (!status) { 13625 13487 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item good_frac"); … … 13632 13494 } 13633 13495 13634 return stackSumSkyfileRowAlloc(stack_id, uri, path_base, bg, bg_stdev, good_frac, fault);13496 return stackSumSkyfileRowAlloc(stack_id, uri, path_base, bg, bg_stdev, dtime_stack, hostname, good_frac, fault); 13635 13497 } 13636 13498 psArray *stackSumSkyfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 23548 23410 static void calDBRowFree(calDBRow *object); 23549 23411 23550 calDBRow *calDBRowAlloc(psS64 cal_id, const char * catdir, const char *state)23412 calDBRow *calDBRowAlloc(psS64 cal_id, const char *dvodb, const char *state) 23551 23413 { 23552 23414 calDBRow *_object; … … 23556 23418 23557 23419 _object->cal_id = cal_id; 23558 _object-> catdir = psStringCopy(catdir);23420 _object->dvodb = psStringCopy(dvodb); 23559 23421 _object->state = psStringCopy(state); 23560 23422 … … 23564 23426 static void calDBRowFree(calDBRow *object) 23565 23427 { 23566 psFree(object-> catdir);23428 psFree(object->dvodb); 23567 23429 psFree(object->state); 23568 23430 } … … 23576 23438 return false; 23577 23439 } 23578 if (!psMetadataAdd(md, PS_LIST_TAIL, " catdir", PS_DATA_STRING, NULL, "64")) {23579 psError(PS_ERR_UNKNOWN, false, "failed to add item catdir");23440 if (!psMetadataAdd(md, PS_LIST_TAIL, "dvodb", PS_DATA_STRING, NULL, "64")) { 23441 psError(PS_ERR_UNKNOWN, false, "failed to add item dvodb"); 23580 23442 psFree(md); 23581 23443 return false; … … 23599 23461 } 23600 23462 23601 bool calDBInsert(psDB * dbh, psS64 cal_id, const char * catdir, const char *state)23463 bool calDBInsert(psDB * dbh, psS64 cal_id, const char *dvodb, const char *state) 23602 23464 { 23603 23465 psMetadata *md = psMetadataAlloc(); … … 23607 23469 return false; 23608 23470 } 23609 if (!psMetadataAdd(md, PS_LIST_TAIL, " catdir", PS_DATA_STRING, NULL, catdir)) {23610 psError(PS_ERR_UNKNOWN, false, "failed to add item catdir");23471 if (!psMetadataAdd(md, PS_LIST_TAIL, "dvodb", PS_DATA_STRING, NULL, dvodb)) { 23472 psError(PS_ERR_UNKNOWN, false, "failed to add item dvodb"); 23611 23473 psFree(md); 23612 23474 return false; … … 23640 23502 bool calDBInsertObject(psDB *dbh, calDBRow *object) 23641 23503 { 23642 return calDBInsert(dbh, object->cal_id, object-> catdir, object->state);23504 return calDBInsert(dbh, object->cal_id, object->dvodb, object->state); 23643 23505 } 23644 23506 … … 23718 23580 return false; 23719 23581 } 23720 if (!psMetadataAdd(md, PS_LIST_TAIL, " catdir", PS_DATA_STRING, NULL, object->catdir)) {23721 psError(PS_ERR_UNKNOWN, false, "failed to add item catdir");23582 if (!psMetadataAdd(md, PS_LIST_TAIL, "dvodb", PS_DATA_STRING, NULL, object->dvodb)) { 23583 psError(PS_ERR_UNKNOWN, false, "failed to add item dvodb"); 23722 23584 psFree(md); 23723 23585 return false; … … 23742 23604 return false; 23743 23605 } 23744 char* catdir = psMetadataLookupPtr(&status, md, "catdir");23745 if (!status) { 23746 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item catdir");23606 char* dvodb = psMetadataLookupPtr(&status, md, "dvodb"); 23607 if (!status) { 23608 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dvodb"); 23747 23609 return false; 23748 23610 } … … 23753 23615 } 23754 23616 23755 return calDBRowAlloc(cal_id, catdir, state);23617 return calDBRowAlloc(cal_id, dvodb, state); 23756 23618 } 23757 23619 psArray *calDBSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 24216 24078 static void flatcorrRunRowFree(flatcorrRunRow *object); 24217 24079 24218 flatcorrRunRow *flatcorrRunRowAlloc(psS64 corr_id, const char *dvodb, const char * state, const char *workdir, const char *label, const char *stats)24080 flatcorrRunRow *flatcorrRunRowAlloc(psS64 corr_id, const char *dvodb, const char *filter, const char *state, const char *workdir, const char *label, const char *stats) 24219 24081 { 24220 24082 flatcorrRunRow *_object; … … 24225 24087 _object->corr_id = corr_id; 24226 24088 _object->dvodb = psStringCopy(dvodb); 24089 _object->filter = psStringCopy(filter); 24227 24090 _object->state = psStringCopy(state); 24228 24091 _object->workdir = psStringCopy(workdir); … … 24236 24099 { 24237 24100 psFree(object->dvodb); 24101 psFree(object->filter); 24238 24102 psFree(object->state); 24239 24103 psFree(object->workdir); … … 24255 24119 return false; 24256 24120 } 24121 if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "64")) { 24122 psError(PS_ERR_UNKNOWN, false, "failed to add item filter"); 24123 psFree(md); 24124 return false; 24125 } 24257 24126 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, "64")) { 24258 24127 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); … … 24288 24157 } 24289 24158 24290 bool flatcorrRunInsert(psDB * dbh, psS64 corr_id, const char *dvodb, const char * state, const char *workdir, const char *label, const char *stats)24159 bool flatcorrRunInsert(psDB * dbh, psS64 corr_id, const char *dvodb, const char *filter, const char *state, const char *workdir, const char *label, const char *stats) 24291 24160 { 24292 24161 psMetadata *md = psMetadataAlloc(); … … 24298 24167 if (!psMetadataAdd(md, PS_LIST_TAIL, "dvodb", PS_DATA_STRING, NULL, dvodb)) { 24299 24168 psError(PS_ERR_UNKNOWN, false, "failed to add item dvodb"); 24169 psFree(md); 24170 return false; 24171 } 24172 if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) { 24173 psError(PS_ERR_UNKNOWN, false, "failed to add item filter"); 24300 24174 psFree(md); 24301 24175 return false; … … 24344 24218 bool flatcorrRunInsertObject(psDB *dbh, flatcorrRunRow *object) 24345 24219 { 24346 return flatcorrRunInsert(dbh, object->corr_id, object->dvodb, object-> state, object->workdir, object->label, object->stats);24220 return flatcorrRunInsert(dbh, object->corr_id, object->dvodb, object->filter, object->state, object->workdir, object->label, object->stats); 24347 24221 } 24348 24222 … … 24427 24301 return false; 24428 24302 } 24303 if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) { 24304 psError(PS_ERR_UNKNOWN, false, "failed to add item filter"); 24305 psFree(md); 24306 return false; 24307 } 24429 24308 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) { 24430 24309 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); … … 24466 24345 return false; 24467 24346 } 24347 char* filter = psMetadataLookupPtr(&status, md, "filter"); 24348 if (!status) { 24349 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter"); 24350 return false; 24351 } 24468 24352 char* state = psMetadataLookupPtr(&status, md, "state"); 24469 24353 if (!status) { … … 24487 24371 } 24488 24372 24489 return flatcorrRunRowAlloc(corr_id, dvodb, state, workdir, label, stats);24373 return flatcorrRunRowAlloc(corr_id, dvodb, filter, state, workdir, label, stats); 24490 24374 } 24491 24375 psArray *flatcorrRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 24903 24787 return true; 24904 24788 } 24789 static void pstampDataStoreRowFree(pstampDataStoreRow *object); 24790 24791 pstampDataStoreRow *pstampDataStoreRowAlloc(psS64 ds_id, const char *uri, const char *lastFileset, const char *state) 24792 { 24793 pstampDataStoreRow *_object; 24794 24795 _object = psAlloc(sizeof(pstampDataStoreRow)); 24796 psMemSetDeallocator(_object, (psFreeFunc)pstampDataStoreRowFree); 24797 24798 _object->ds_id = ds_id; 24799 _object->uri = psStringCopy(uri); 24800 _object->lastFileset = psStringCopy(lastFileset); 24801 _object->state = psStringCopy(state); 24802 24803 return _object; 24804 } 24805 24806 static void pstampDataStoreRowFree(pstampDataStoreRow *object) 24807 { 24808 psFree(object->uri); 24809 psFree(object->lastFileset); 24810 psFree(object->state); 24811 } 24812 24813 bool pstampDataStoreCreateTable(psDB *dbh) 24814 { 24815 psMetadata *md = psMetadataAlloc(); 24816 if (!psMetadataAdd(md, PS_LIST_TAIL, "ds_id", PS_DATA_S64, "Primary Key AUTO_INCREMENT", 0)) { 24817 psError(PS_ERR_UNKNOWN, false, "failed to add item ds_id"); 24818 psFree(md); 24819 return false; 24820 } 24821 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) { 24822 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 24823 psFree(md); 24824 return false; 24825 } 24826 if (!psMetadataAdd(md, PS_LIST_TAIL, "lastFileset", PS_DATA_STRING, NULL, "64")) { 24827 psError(PS_ERR_UNKNOWN, false, "failed to add item lastFileset"); 24828 psFree(md); 24829 return false; 24830 } 24831 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, "64")) { 24832 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 24833 psFree(md); 24834 return false; 24835 } 24836 24837 bool status = psDBCreateTable(dbh, PSTAMPDATASTORE_TABLE_NAME, md); 24838 24839 psFree(md); 24840 24841 return status; 24842 } 24843 24844 bool pstampDataStoreDropTable(psDB *dbh) 24845 { 24846 return psDBDropTable(dbh, PSTAMPDATASTORE_TABLE_NAME); 24847 } 24848 24849 bool pstampDataStoreInsert(psDB * dbh, psS64 ds_id, const char *uri, const char *lastFileset, const char *state) 24850 { 24851 psMetadata *md = psMetadataAlloc(); 24852 if (!psMetadataAdd(md, PS_LIST_TAIL, "ds_id", PS_DATA_S64, NULL, ds_id)) { 24853 psError(PS_ERR_UNKNOWN, false, "failed to add item ds_id"); 24854 psFree(md); 24855 return false; 24856 } 24857 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) { 24858 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 24859 psFree(md); 24860 return false; 24861 } 24862 if (!psMetadataAdd(md, PS_LIST_TAIL, "lastFileset", PS_DATA_STRING, NULL, lastFileset)) { 24863 psError(PS_ERR_UNKNOWN, false, "failed to add item lastFileset"); 24864 psFree(md); 24865 return false; 24866 } 24867 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) { 24868 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 24869 psFree(md); 24870 return false; 24871 } 24872 24873 bool status = psDBInsertOneRow(dbh, PSTAMPDATASTORE_TABLE_NAME, md); 24874 psFree(md); 24875 24876 return status; 24877 } 24878 24879 long long pstampDataStoreDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 24880 { 24881 long long deleted = 0; 24882 24883 long long count = psDBDeleteRows(dbh, PSTAMPDATASTORE_TABLE_NAME, where, limit); 24884 if (count < 0) { 24885 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampDataStore"); 24886 return count; 24887 24888 deleted += count; 24889 } 24890 24891 return deleted; 24892 } 24893 bool pstampDataStoreInsertObject(psDB *dbh, pstampDataStoreRow *object) 24894 { 24895 return pstampDataStoreInsert(dbh, object->ds_id, object->uri, object->lastFileset, object->state); 24896 } 24897 24898 bool pstampDataStoreInsertObjects(psDB *dbh, psArray *objects) 24899 { 24900 for (long i = 0; i < psArrayLength(objects); i++) { 24901 if (!pstampDataStoreInsertObject(dbh, objects->data[i])) { 24902 return false; 24903 } 24904 } 24905 24906 return true; 24907 } 24908 24909 bool pstampDataStoreInsertFits(psDB *dbh, const psFits *fits) 24910 { 24911 psArray *rowSet; 24912 24913 // move to (the first?) extension named PSTAMPDATASTORE_TABLE_NAME 24914 if (!psFitsMoveExtName(fits, PSTAMPDATASTORE_TABLE_NAME)) { 24915 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PSTAMPDATASTORE_TABLE_NAME); 24916 return false; 24917 } 24918 24919 // check HDU type 24920 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 24921 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 24922 return false; 24923 } 24924 24925 // read fits table 24926 rowSet = psFitsReadTable(fits); 24927 if (!rowSet) { 24928 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 24929 psFree(rowSet); 24930 return false; 24931 } 24932 24933 if (!psDBInsertRows(dbh, PSTAMPDATASTORE_TABLE_NAME, rowSet)) { 24934 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 24935 psFree(rowSet); 24936 return false; 24937 } 24938 24939 psFree(rowSet); 24940 24941 return true; 24942 } 24943 24944 bool pstampDataStoreSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 24945 { 24946 psArray *rowSet; 24947 24948 rowSet = psDBSelectRows(dbh, PSTAMPDATASTORE_TABLE_NAME, where, limit); 24949 if (!rowSet) { 24950 return false; 24951 } 24952 24953 // output to fits 24954 if (!psFitsWriteTable(fits, NULL, rowSet, PSTAMPDATASTORE_TABLE_NAME)) { 24955 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 24956 psFree(rowSet); 24957 return false; 24958 } 24959 24960 psFree(rowSet); 24961 24962 return true; 24963 } 24964 24965 psMetadata *pstampDataStoreMetadataFromObject(const pstampDataStoreRow *object) 24966 { 24967 psMetadata *md = psMetadataAlloc(); 24968 if (!psMetadataAdd(md, PS_LIST_TAIL, "ds_id", PS_DATA_S64, NULL, object->ds_id)) { 24969 psError(PS_ERR_UNKNOWN, false, "failed to add item ds_id"); 24970 psFree(md); 24971 return false; 24972 } 24973 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) { 24974 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 24975 psFree(md); 24976 return false; 24977 } 24978 if (!psMetadataAdd(md, PS_LIST_TAIL, "lastFileset", PS_DATA_STRING, NULL, object->lastFileset)) { 24979 psError(PS_ERR_UNKNOWN, false, "failed to add item lastFileset"); 24980 psFree(md); 24981 return false; 24982 } 24983 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) { 24984 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 24985 psFree(md); 24986 return false; 24987 } 24988 24989 24990 return md; 24991 } 24992 24993 pstampDataStoreRow *pstampDataStoreObjectFromMetadata(psMetadata *md) 24994 { 24995 24996 bool status = false; 24997 psS64 ds_id = psMetadataLookupS64(&status, md, "ds_id"); 24998 if (!status) { 24999 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ds_id"); 25000 return false; 25001 } 25002 char* uri = psMetadataLookupPtr(&status, md, "uri"); 25003 if (!status) { 25004 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 25005 return false; 25006 } 25007 char* lastFileset = psMetadataLookupPtr(&status, md, "lastFileset"); 25008 if (!status) { 25009 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item lastFileset"); 25010 return false; 25011 } 25012 char* state = psMetadataLookupPtr(&status, md, "state"); 25013 if (!status) { 25014 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state"); 25015 return false; 25016 } 25017 25018 return pstampDataStoreRowAlloc(ds_id, uri, lastFileset, state); 25019 } 25020 psArray *pstampDataStoreSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 25021 { 25022 psArray *rowSet; 25023 psArray *returnSet; 25024 psU64 i; 25025 25026 rowSet = psDBSelectRows(dbh, PSTAMPDATASTORE_TABLE_NAME, where, limit); 25027 if (!rowSet) { 25028 return NULL; 25029 } 25030 25031 // convert psMetadata rows to row objects 25032 25033 returnSet = psArrayAllocEmpty(rowSet->n); 25034 25035 for (i = 0; i < rowSet->n; i++) { 25036 pstampDataStoreRow *object = pstampDataStoreObjectFromMetadata(rowSet->data[i]); 25037 if (!object) { 25038 psFree(object); 25039 psFree(returnSet); 25040 psError(PS_ERR_UNKNOWN, false, "database error"); 25041 return NULL; 25042 } 25043 psArrayAdd(returnSet, 0, object); 25044 psFree(object); 25045 } 25046 25047 psFree(rowSet); 25048 25049 return returnSet; 25050 } 25051 bool pstampDataStoreDeleteObject(psDB *dbh, const pstampDataStoreRow *object) 25052 { 25053 psMetadata *where = pstampDataStoreMetadataFromObject(object); 25054 long long count = psDBDeleteRows(dbh, PSTAMPDATASTORE_TABLE_NAME, where, 0); 25055 psFree(where); 25056 if (count < 0) { 25057 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampDataStore"); 25058 return false; 25059 } 25060 if (count > 1) { 25061 // XXX should this be a psAbort() instead? It is possible that 25062 // having an object match multiple rows was by design. 25063 psError(PS_ERR_UNKNOWN, true, "pstampDataStoreRow object matched more then one row. Check your database schema"); 25064 return false; 25065 } 25066 25067 return true; 25068 } 25069 long long pstampDataStoreDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 25070 { 25071 long long deleted = 0; 25072 25073 for (long long i = 0; i < objects->n; i++) { 25074 pstampDataStoreRow *object = objects->data[i]; 25075 psMetadata *where = pstampDataStoreMetadataFromObject(object); 25076 long long count = psDBDeleteRows(dbh, PSTAMPDATASTORE_TABLE_NAME, where, limit); 25077 psFree(where); 25078 if (count < 0) { 25079 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampDataStore"); 25080 return count; 25081 } 25082 25083 deleted += count; 25084 } 25085 25086 return deleted; 25087 } 25088 bool pstampDataStorePrintObjects(FILE *stream, psArray *objects, bool mdcf) 25089 { 25090 PS_ASSERT_PTR_NON_NULL(objects, false); 25091 25092 psMetadata *output = psMetadataAlloc(); 25093 for (long i = 0; i < psArrayLength(objects); i++) { 25094 psMetadata *md = pstampDataStoreMetadataFromObject(objects->data[i]); 25095 if (!psMetadataAddMetadata( 25096 output, 25097 PS_LIST_TAIL, 25098 PSTAMPDATASTORE_TABLE_NAME, 25099 PS_META_DUPLICATE_OK, 25100 NULL, 25101 md 25102 )) { 25103 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 25104 psFree(md); 25105 psFree(output); 25106 return false; 25107 } 25108 psFree(md); 25109 } 25110 25111 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 25112 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 25113 psFree(output); 25114 } 25115 psFree(output); 25116 25117 return true; 25118 } 25119 bool pstampDataStorePrintObject(FILE *stream, pstampDataStoreRow *object, bool mdcf) 25120 { 25121 PS_ASSERT_PTR_NON_NULL(object, false); 25122 25123 psMetadata *md = pstampDataStoreMetadataFromObject(object); 25124 25125 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) { 25126 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 25127 psFree(md); 25128 } 25129 25130 psFree(md); 25131 25132 return true; 25133 } 25134 static void pstampRequestRowFree(pstampRequestRow *object); 25135 25136 pstampRequestRow *pstampRequestRowAlloc(psS64 req_id, psS64 ds_id, const char *state, const char *uri) 25137 { 25138 pstampRequestRow *_object; 25139 25140 _object = psAlloc(sizeof(pstampRequestRow)); 25141 psMemSetDeallocator(_object, (psFreeFunc)pstampRequestRowFree); 25142 25143 _object->req_id = req_id; 25144 _object->ds_id = ds_id; 25145 _object->state = psStringCopy(state); 25146 _object->uri = psStringCopy(uri); 25147 25148 return _object; 25149 } 25150 25151 static void pstampRequestRowFree(pstampRequestRow *object) 25152 { 25153 psFree(object->state); 25154 psFree(object->uri); 25155 } 25156 25157 bool pstampRequestCreateTable(psDB *dbh) 25158 { 25159 psMetadata *md = psMetadataAlloc(); 25160 if (!psMetadataAdd(md, PS_LIST_TAIL, "req_id", PS_DATA_S64, "Primary Key AUTO_INCREMENT", 0)) { 25161 psError(PS_ERR_UNKNOWN, false, "failed to add item req_id"); 25162 psFree(md); 25163 return false; 25164 } 25165 if (!psMetadataAdd(md, PS_LIST_TAIL, "ds_id", PS_DATA_S64, NULL, 0)) { 25166 psError(PS_ERR_UNKNOWN, false, "failed to add item ds_id"); 25167 psFree(md); 25168 return false; 25169 } 25170 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, "64")) { 25171 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 25172 psFree(md); 25173 return false; 25174 } 25175 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) { 25176 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 25177 psFree(md); 25178 return false; 25179 } 25180 25181 bool status = psDBCreateTable(dbh, PSTAMPREQUEST_TABLE_NAME, md); 25182 25183 psFree(md); 25184 25185 return status; 25186 } 25187 25188 bool pstampRequestDropTable(psDB *dbh) 25189 { 25190 return psDBDropTable(dbh, PSTAMPREQUEST_TABLE_NAME); 25191 } 25192 25193 bool pstampRequestInsert(psDB * dbh, psS64 req_id, psS64 ds_id, const char *state, const char *uri) 25194 { 25195 psMetadata *md = psMetadataAlloc(); 25196 if (!psMetadataAdd(md, PS_LIST_TAIL, "req_id", PS_DATA_S64, NULL, req_id)) { 25197 psError(PS_ERR_UNKNOWN, false, "failed to add item req_id"); 25198 psFree(md); 25199 return false; 25200 } 25201 if (!psMetadataAdd(md, PS_LIST_TAIL, "ds_id", PS_DATA_S64, NULL, ds_id)) { 25202 psError(PS_ERR_UNKNOWN, false, "failed to add item ds_id"); 25203 psFree(md); 25204 return false; 25205 } 25206 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) { 25207 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 25208 psFree(md); 25209 return false; 25210 } 25211 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) { 25212 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 25213 psFree(md); 25214 return false; 25215 } 25216 25217 bool status = psDBInsertOneRow(dbh, PSTAMPREQUEST_TABLE_NAME, md); 25218 psFree(md); 25219 25220 return status; 25221 } 25222 25223 long long pstampRequestDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 25224 { 25225 long long deleted = 0; 25226 25227 long long count = psDBDeleteRows(dbh, PSTAMPREQUEST_TABLE_NAME, where, limit); 25228 if (count < 0) { 25229 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampRequest"); 25230 return count; 25231 25232 deleted += count; 25233 } 25234 25235 return deleted; 25236 } 25237 bool pstampRequestInsertObject(psDB *dbh, pstampRequestRow *object) 25238 { 25239 return pstampRequestInsert(dbh, object->req_id, object->ds_id, object->state, object->uri); 25240 } 25241 25242 bool pstampRequestInsertObjects(psDB *dbh, psArray *objects) 25243 { 25244 for (long i = 0; i < psArrayLength(objects); i++) { 25245 if (!pstampRequestInsertObject(dbh, objects->data[i])) { 25246 return false; 25247 } 25248 } 25249 25250 return true; 25251 } 25252 25253 bool pstampRequestInsertFits(psDB *dbh, const psFits *fits) 25254 { 25255 psArray *rowSet; 25256 25257 // move to (the first?) extension named PSTAMPREQUEST_TABLE_NAME 25258 if (!psFitsMoveExtName(fits, PSTAMPREQUEST_TABLE_NAME)) { 25259 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PSTAMPREQUEST_TABLE_NAME); 25260 return false; 25261 } 25262 25263 // check HDU type 25264 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 25265 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 25266 return false; 25267 } 25268 25269 // read fits table 25270 rowSet = psFitsReadTable(fits); 25271 if (!rowSet) { 25272 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 25273 psFree(rowSet); 25274 return false; 25275 } 25276 25277 if (!psDBInsertRows(dbh, PSTAMPREQUEST_TABLE_NAME, rowSet)) { 25278 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 25279 psFree(rowSet); 25280 return false; 25281 } 25282 25283 psFree(rowSet); 25284 25285 return true; 25286 } 25287 25288 bool pstampRequestSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 25289 { 25290 psArray *rowSet; 25291 25292 rowSet = psDBSelectRows(dbh, PSTAMPREQUEST_TABLE_NAME, where, limit); 25293 if (!rowSet) { 25294 return false; 25295 } 25296 25297 // output to fits 25298 if (!psFitsWriteTable(fits, NULL, rowSet, PSTAMPREQUEST_TABLE_NAME)) { 25299 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 25300 psFree(rowSet); 25301 return false; 25302 } 25303 25304 psFree(rowSet); 25305 25306 return true; 25307 } 25308 25309 psMetadata *pstampRequestMetadataFromObject(const pstampRequestRow *object) 25310 { 25311 psMetadata *md = psMetadataAlloc(); 25312 if (!psMetadataAdd(md, PS_LIST_TAIL, "req_id", PS_DATA_S64, NULL, object->req_id)) { 25313 psError(PS_ERR_UNKNOWN, false, "failed to add item req_id"); 25314 psFree(md); 25315 return false; 25316 } 25317 if (!psMetadataAdd(md, PS_LIST_TAIL, "ds_id", PS_DATA_S64, NULL, object->ds_id)) { 25318 psError(PS_ERR_UNKNOWN, false, "failed to add item ds_id"); 25319 psFree(md); 25320 return false; 25321 } 25322 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) { 25323 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 25324 psFree(md); 25325 return false; 25326 } 25327 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) { 25328 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 25329 psFree(md); 25330 return false; 25331 } 25332 25333 25334 return md; 25335 } 25336 25337 pstampRequestRow *pstampRequestObjectFromMetadata(psMetadata *md) 25338 { 25339 25340 bool status = false; 25341 psS64 req_id = psMetadataLookupS64(&status, md, "req_id"); 25342 if (!status) { 25343 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item req_id"); 25344 return false; 25345 } 25346 psS64 ds_id = psMetadataLookupS64(&status, md, "ds_id"); 25347 if (!status) { 25348 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ds_id"); 25349 return false; 25350 } 25351 char* state = psMetadataLookupPtr(&status, md, "state"); 25352 if (!status) { 25353 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state"); 25354 return false; 25355 } 25356 char* uri = psMetadataLookupPtr(&status, md, "uri"); 25357 if (!status) { 25358 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 25359 return false; 25360 } 25361 25362 return pstampRequestRowAlloc(req_id, ds_id, state, uri); 25363 } 25364 psArray *pstampRequestSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 25365 { 25366 psArray *rowSet; 25367 psArray *returnSet; 25368 psU64 i; 25369 25370 rowSet = psDBSelectRows(dbh, PSTAMPREQUEST_TABLE_NAME, where, limit); 25371 if (!rowSet) { 25372 return NULL; 25373 } 25374 25375 // convert psMetadata rows to row objects 25376 25377 returnSet = psArrayAllocEmpty(rowSet->n); 25378 25379 for (i = 0; i < rowSet->n; i++) { 25380 pstampRequestRow *object = pstampRequestObjectFromMetadata(rowSet->data[i]); 25381 if (!object) { 25382 psFree(object); 25383 psFree(returnSet); 25384 psError(PS_ERR_UNKNOWN, false, "database error"); 25385 return NULL; 25386 } 25387 psArrayAdd(returnSet, 0, object); 25388 psFree(object); 25389 } 25390 25391 psFree(rowSet); 25392 25393 return returnSet; 25394 } 25395 bool pstampRequestDeleteObject(psDB *dbh, const pstampRequestRow *object) 25396 { 25397 psMetadata *where = pstampRequestMetadataFromObject(object); 25398 long long count = psDBDeleteRows(dbh, PSTAMPREQUEST_TABLE_NAME, where, 0); 25399 psFree(where); 25400 if (count < 0) { 25401 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampRequest"); 25402 return false; 25403 } 25404 if (count > 1) { 25405 // XXX should this be a psAbort() instead? It is possible that 25406 // having an object match multiple rows was by design. 25407 psError(PS_ERR_UNKNOWN, true, "pstampRequestRow object matched more then one row. Check your database schema"); 25408 return false; 25409 } 25410 25411 return true; 25412 } 25413 long long pstampRequestDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 25414 { 25415 long long deleted = 0; 25416 25417 for (long long i = 0; i < objects->n; i++) { 25418 pstampRequestRow *object = objects->data[i]; 25419 psMetadata *where = pstampRequestMetadataFromObject(object); 25420 long long count = psDBDeleteRows(dbh, PSTAMPREQUEST_TABLE_NAME, where, limit); 25421 psFree(where); 25422 if (count < 0) { 25423 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampRequest"); 25424 return count; 25425 } 25426 25427 deleted += count; 25428 } 25429 25430 return deleted; 25431 } 25432 bool pstampRequestPrintObjects(FILE *stream, psArray *objects, bool mdcf) 25433 { 25434 PS_ASSERT_PTR_NON_NULL(objects, false); 25435 25436 psMetadata *output = psMetadataAlloc(); 25437 for (long i = 0; i < psArrayLength(objects); i++) { 25438 psMetadata *md = pstampRequestMetadataFromObject(objects->data[i]); 25439 if (!psMetadataAddMetadata( 25440 output, 25441 PS_LIST_TAIL, 25442 PSTAMPREQUEST_TABLE_NAME, 25443 PS_META_DUPLICATE_OK, 25444 NULL, 25445 md 25446 )) { 25447 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 25448 psFree(md); 25449 psFree(output); 25450 return false; 25451 } 25452 psFree(md); 25453 } 25454 25455 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 25456 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 25457 psFree(output); 25458 } 25459 psFree(output); 25460 25461 return true; 25462 } 25463 bool pstampRequestPrintObject(FILE *stream, pstampRequestRow *object, bool mdcf) 25464 { 25465 PS_ASSERT_PTR_NON_NULL(object, false); 25466 25467 psMetadata *md = pstampRequestMetadataFromObject(object); 25468 25469 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) { 25470 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 25471 psFree(md); 25472 } 25473 25474 psFree(md); 25475 25476 return true; 25477 } 25478 static void pstampJobRowFree(pstampJobRow *object); 25479 25480 pstampJobRow *pstampJobRowAlloc(psS64 job_id, psS64 req_id, const char *state, psS32 result, const char *uri, const char *outputBase, const char *args) 25481 { 25482 pstampJobRow *_object; 25483 25484 _object = psAlloc(sizeof(pstampJobRow)); 25485 psMemSetDeallocator(_object, (psFreeFunc)pstampJobRowFree); 25486 25487 _object->job_id = job_id; 25488 _object->req_id = req_id; 25489 _object->state = psStringCopy(state); 25490 _object->result = result; 25491 _object->uri = psStringCopy(uri); 25492 _object->outputBase = psStringCopy(outputBase); 25493 _object->args = psStringCopy(args); 25494 25495 return _object; 25496 } 25497 25498 static void pstampJobRowFree(pstampJobRow *object) 25499 { 25500 psFree(object->state); 25501 psFree(object->uri); 25502 psFree(object->outputBase); 25503 psFree(object->args); 25504 } 25505 25506 bool pstampJobCreateTable(psDB *dbh) 25507 { 25508 psMetadata *md = psMetadataAlloc(); 25509 if (!psMetadataAdd(md, PS_LIST_TAIL, "job_id", PS_DATA_S64, "Primary Key AUTO_INCREMENT", 0)) { 25510 psError(PS_ERR_UNKNOWN, false, "failed to add item job_id"); 25511 psFree(md); 25512 return false; 25513 } 25514 if (!psMetadataAdd(md, PS_LIST_TAIL, "req_id", PS_DATA_S64, "Primary Key fkey(req_id) ref pstampRequest(req_id)", 0)) { 25515 psError(PS_ERR_UNKNOWN, false, "failed to add item req_id"); 25516 psFree(md); 25517 return false; 25518 } 25519 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, "64")) { 25520 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 25521 psFree(md); 25522 return false; 25523 } 25524 if (!psMetadataAdd(md, PS_LIST_TAIL, "result", PS_DATA_S32, NULL, 0)) { 25525 psError(PS_ERR_UNKNOWN, false, "failed to add item result"); 25526 psFree(md); 25527 return false; 25528 } 25529 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) { 25530 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 25531 psFree(md); 25532 return false; 25533 } 25534 if (!psMetadataAdd(md, PS_LIST_TAIL, "outputBase", PS_DATA_STRING, NULL, "255")) { 25535 psError(PS_ERR_UNKNOWN, false, "failed to add item outputBase"); 25536 psFree(md); 25537 return false; 25538 } 25539 if (!psMetadataAdd(md, PS_LIST_TAIL, "args", PS_DATA_STRING, NULL, "511")) { 25540 psError(PS_ERR_UNKNOWN, false, "failed to add item args"); 25541 psFree(md); 25542 return false; 25543 } 25544 25545 bool status = psDBCreateTable(dbh, PSTAMPJOB_TABLE_NAME, md); 25546 25547 psFree(md); 25548 25549 return status; 25550 } 25551 25552 bool pstampJobDropTable(psDB *dbh) 25553 { 25554 return psDBDropTable(dbh, PSTAMPJOB_TABLE_NAME); 25555 } 25556 25557 bool pstampJobInsert(psDB * dbh, psS64 job_id, psS64 req_id, const char *state, psS32 result, const char *uri, const char *outputBase, const char *args) 25558 { 25559 psMetadata *md = psMetadataAlloc(); 25560 if (!psMetadataAdd(md, PS_LIST_TAIL, "job_id", PS_DATA_S64, NULL, job_id)) { 25561 psError(PS_ERR_UNKNOWN, false, "failed to add item job_id"); 25562 psFree(md); 25563 return false; 25564 } 25565 if (!psMetadataAdd(md, PS_LIST_TAIL, "req_id", PS_DATA_S64, NULL, req_id)) { 25566 psError(PS_ERR_UNKNOWN, false, "failed to add item req_id"); 25567 psFree(md); 25568 return false; 25569 } 25570 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) { 25571 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 25572 psFree(md); 25573 return false; 25574 } 25575 if (!psMetadataAdd(md, PS_LIST_TAIL, "result", PS_DATA_S32, NULL, result)) { 25576 psError(PS_ERR_UNKNOWN, false, "failed to add item result"); 25577 psFree(md); 25578 return false; 25579 } 25580 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) { 25581 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 25582 psFree(md); 25583 return false; 25584 } 25585 if (!psMetadataAdd(md, PS_LIST_TAIL, "outputBase", PS_DATA_STRING, NULL, outputBase)) { 25586 psError(PS_ERR_UNKNOWN, false, "failed to add item outputBase"); 25587 psFree(md); 25588 return false; 25589 } 25590 if (!psMetadataAdd(md, PS_LIST_TAIL, "args", PS_DATA_STRING, NULL, args)) { 25591 psError(PS_ERR_UNKNOWN, false, "failed to add item args"); 25592 psFree(md); 25593 return false; 25594 } 25595 25596 bool status = psDBInsertOneRow(dbh, PSTAMPJOB_TABLE_NAME, md); 25597 psFree(md); 25598 25599 return status; 25600 } 25601 25602 long long pstampJobDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 25603 { 25604 long long deleted = 0; 25605 25606 long long count = psDBDeleteRows(dbh, PSTAMPJOB_TABLE_NAME, where, limit); 25607 if (count < 0) { 25608 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampJob"); 25609 return count; 25610 25611 deleted += count; 25612 } 25613 25614 return deleted; 25615 } 25616 bool pstampJobInsertObject(psDB *dbh, pstampJobRow *object) 25617 { 25618 return pstampJobInsert(dbh, object->job_id, object->req_id, object->state, object->result, object->uri, object->outputBase, object->args); 25619 } 25620 25621 bool pstampJobInsertObjects(psDB *dbh, psArray *objects) 25622 { 25623 for (long i = 0; i < psArrayLength(objects); i++) { 25624 if (!pstampJobInsertObject(dbh, objects->data[i])) { 25625 return false; 25626 } 25627 } 25628 25629 return true; 25630 } 25631 25632 bool pstampJobInsertFits(psDB *dbh, const psFits *fits) 25633 { 25634 psArray *rowSet; 25635 25636 // move to (the first?) extension named PSTAMPJOB_TABLE_NAME 25637 if (!psFitsMoveExtName(fits, PSTAMPJOB_TABLE_NAME)) { 25638 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", PSTAMPJOB_TABLE_NAME); 25639 return false; 25640 } 25641 25642 // check HDU type 25643 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 25644 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 25645 return false; 25646 } 25647 25648 // read fits table 25649 rowSet = psFitsReadTable(fits); 25650 if (!rowSet) { 25651 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 25652 psFree(rowSet); 25653 return false; 25654 } 25655 25656 if (!psDBInsertRows(dbh, PSTAMPJOB_TABLE_NAME, rowSet)) { 25657 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 25658 psFree(rowSet); 25659 return false; 25660 } 25661 25662 psFree(rowSet); 25663 25664 return true; 25665 } 25666 25667 bool pstampJobSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 25668 { 25669 psArray *rowSet; 25670 25671 rowSet = psDBSelectRows(dbh, PSTAMPJOB_TABLE_NAME, where, limit); 25672 if (!rowSet) { 25673 return false; 25674 } 25675 25676 // output to fits 25677 if (!psFitsWriteTable(fits, NULL, rowSet, PSTAMPJOB_TABLE_NAME)) { 25678 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 25679 psFree(rowSet); 25680 return false; 25681 } 25682 25683 psFree(rowSet); 25684 25685 return true; 25686 } 25687 25688 psMetadata *pstampJobMetadataFromObject(const pstampJobRow *object) 25689 { 25690 psMetadata *md = psMetadataAlloc(); 25691 if (!psMetadataAdd(md, PS_LIST_TAIL, "job_id", PS_DATA_S64, NULL, object->job_id)) { 25692 psError(PS_ERR_UNKNOWN, false, "failed to add item job_id"); 25693 psFree(md); 25694 return false; 25695 } 25696 if (!psMetadataAdd(md, PS_LIST_TAIL, "req_id", PS_DATA_S64, NULL, object->req_id)) { 25697 psError(PS_ERR_UNKNOWN, false, "failed to add item req_id"); 25698 psFree(md); 25699 return false; 25700 } 25701 if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) { 25702 psError(PS_ERR_UNKNOWN, false, "failed to add item state"); 25703 psFree(md); 25704 return false; 25705 } 25706 if (!psMetadataAdd(md, PS_LIST_TAIL, "result", PS_DATA_S32, NULL, object->result)) { 25707 psError(PS_ERR_UNKNOWN, false, "failed to add item result"); 25708 psFree(md); 25709 return false; 25710 } 25711 if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) { 25712 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 25713 psFree(md); 25714 return false; 25715 } 25716 if (!psMetadataAdd(md, PS_LIST_TAIL, "outputBase", PS_DATA_STRING, NULL, object->outputBase)) { 25717 psError(PS_ERR_UNKNOWN, false, "failed to add item outputBase"); 25718 psFree(md); 25719 return false; 25720 } 25721 if (!psMetadataAdd(md, PS_LIST_TAIL, "args", PS_DATA_STRING, NULL, object->args)) { 25722 psError(PS_ERR_UNKNOWN, false, "failed to add item args"); 25723 psFree(md); 25724 return false; 25725 } 25726 25727 25728 return md; 25729 } 25730 25731 pstampJobRow *pstampJobObjectFromMetadata(psMetadata *md) 25732 { 25733 25734 bool status = false; 25735 psS64 job_id = psMetadataLookupS64(&status, md, "job_id"); 25736 if (!status) { 25737 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item job_id"); 25738 return false; 25739 } 25740 psS64 req_id = psMetadataLookupS64(&status, md, "req_id"); 25741 if (!status) { 25742 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item req_id"); 25743 return false; 25744 } 25745 char* state = psMetadataLookupPtr(&status, md, "state"); 25746 if (!status) { 25747 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state"); 25748 return false; 25749 } 25750 psS32 result = psMetadataLookupS32(&status, md, "result"); 25751 if (!status) { 25752 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item result"); 25753 return false; 25754 } 25755 char* uri = psMetadataLookupPtr(&status, md, "uri"); 25756 if (!status) { 25757 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 25758 return false; 25759 } 25760 char* outputBase = psMetadataLookupPtr(&status, md, "outputBase"); 25761 if (!status) { 25762 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item outputBase"); 25763 return false; 25764 } 25765 char* args = psMetadataLookupPtr(&status, md, "args"); 25766 if (!status) { 25767 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item args"); 25768 return false; 25769 } 25770 25771 return pstampJobRowAlloc(job_id, req_id, state, result, uri, outputBase, args); 25772 } 25773 psArray *pstampJobSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 25774 { 25775 psArray *rowSet; 25776 psArray *returnSet; 25777 psU64 i; 25778 25779 rowSet = psDBSelectRows(dbh, PSTAMPJOB_TABLE_NAME, where, limit); 25780 if (!rowSet) { 25781 return NULL; 25782 } 25783 25784 // convert psMetadata rows to row objects 25785 25786 returnSet = psArrayAllocEmpty(rowSet->n); 25787 25788 for (i = 0; i < rowSet->n; i++) { 25789 pstampJobRow *object = pstampJobObjectFromMetadata(rowSet->data[i]); 25790 if (!object) { 25791 psFree(object); 25792 psFree(returnSet); 25793 psError(PS_ERR_UNKNOWN, false, "database error"); 25794 return NULL; 25795 } 25796 psArrayAdd(returnSet, 0, object); 25797 psFree(object); 25798 } 25799 25800 psFree(rowSet); 25801 25802 return returnSet; 25803 } 25804 bool pstampJobDeleteObject(psDB *dbh, const pstampJobRow *object) 25805 { 25806 psMetadata *where = pstampJobMetadataFromObject(object); 25807 long long count = psDBDeleteRows(dbh, PSTAMPJOB_TABLE_NAME, where, 0); 25808 psFree(where); 25809 if (count < 0) { 25810 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampJob"); 25811 return false; 25812 } 25813 if (count > 1) { 25814 // XXX should this be a psAbort() instead? It is possible that 25815 // having an object match multiple rows was by design. 25816 psError(PS_ERR_UNKNOWN, true, "pstampJobRow object matched more then one row. Check your database schema"); 25817 return false; 25818 } 25819 25820 return true; 25821 } 25822 long long pstampJobDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 25823 { 25824 long long deleted = 0; 25825 25826 for (long long i = 0; i < objects->n; i++) { 25827 pstampJobRow *object = objects->data[i]; 25828 psMetadata *where = pstampJobMetadataFromObject(object); 25829 long long count = psDBDeleteRows(dbh, PSTAMPJOB_TABLE_NAME, where, limit); 25830 psFree(where); 25831 if (count < 0) { 25832 psError(PS_ERR_UNKNOWN, true, "failed to delete row from pstampJob"); 25833 return count; 25834 } 25835 25836 deleted += count; 25837 } 25838 25839 return deleted; 25840 } 25841 bool pstampJobPrintObjects(FILE *stream, psArray *objects, bool mdcf) 25842 { 25843 PS_ASSERT_PTR_NON_NULL(objects, false); 25844 25845 psMetadata *output = psMetadataAlloc(); 25846 for (long i = 0; i < psArrayLength(objects); i++) { 25847 psMetadata *md = pstampJobMetadataFromObject(objects->data[i]); 25848 if (!psMetadataAddMetadata( 25849 output, 25850 PS_LIST_TAIL, 25851 PSTAMPJOB_TABLE_NAME, 25852 PS_META_DUPLICATE_OK, 25853 NULL, 25854 md 25855 )) { 25856 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 25857 psFree(md); 25858 psFree(output); 25859 return false; 25860 } 25861 psFree(md); 25862 } 25863 25864 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 25865 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 25866 psFree(output); 25867 } 25868 psFree(output); 25869 25870 return true; 25871 } 25872 bool pstampJobPrintObject(FILE *stream, pstampJobRow *object, bool mdcf) 25873 { 25874 PS_ASSERT_PTR_NON_NULL(object, false); 25875 25876 psMetadata *md = pstampJobMetadataFromObject(object); 25877 25878 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) { 25879 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 25880 psFree(md); 25881 } 25882 25883 psFree(md); 25884 25885 return true; 25886 }
Note:
See TracChangeset
for help on using the changeset viewer.
