IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 25851


Ignore:
Timestamp:
Oct 15, 2009, 11:37:32 AM (17 years ago)
Author:
bills
Message:

Add a new table to the database dbversion where we will store the
schema version number. In -exportrun save the version in the output files.
Then in -importrun insure that the input file version matches the schema.

Location:
trunk
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/dbconfig/changes.txt

    r25848 r25851  
    14101410
    14111411ALTER TABLE rcDestination ADD CONSTRAINT UNIQUE(name);
     1412
     1413CREATE TABLE dbversion (
     1414    schema_version VARCHAR(64),
     1415    updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
     1416) ENGINE=innodb DEFAULT CHARSET=latin1;
     1417
     1418INSERT INTO dbversion VALUES('1.1.56', CURRENT_TIMESTAMP);
     1419
     1420
    14121421-- Vesion 1.1.57
     1422
     1423-- add changes for 1.1.57 here. Then uncomment the following before commiting
     1424
     1425-- UPDATE dbversion set schema_version = '1.1.57',  updated= CURRENT_TIMESTAMP();
  • trunk/dbconfig/ipp.m4

    r25299 r25851  
    99dnl include(telescope.md)
    1010dnl include(skycell.md)
     11include(dbversion.md)
    1112include(summitcopy.md)
    1213include(new.md)
  • trunk/ippTools/configure.ac

    r25835 r25851  
    11AC_PREREQ(2.61)
    22
    3 AC_INIT([ipptools], [1.1.37], [ipp-support@ifa.hawaii.edu])
     3AC_INIT([ipptools], [1.1.56], [ipp-support@ifa.hawaii.edu])
    44AC_CONFIG_SRCDIR([autogen.sh])
    55
     
    5858CFLAGS="${CFLAGS=} -Wall -Werror"
    5959
     60IPPDB_VERSION=`$PKG_CONFIG --modversion ippdb`
     61AC_DEFINE_UNQUOTED(IPPDB_VERSION, $IPPDB_VERSION, [Version of ippdb])
     62
    6063AC_CONFIG_FILES([
    6164  Makefile
  • trunk/ippTools/share/Makefile.am

    r25822 r25851  
    216216     pxadmin_create_mirror_tables.sql \
    217217     pxadmin_drop_tables.sql \
     218     pxadmin_update_version.sql \
    218219     pubtool_definerun.sql \
    219220     pubtool_pending.sql \
  • trunk/ippTools/share/pxadmin_create_tables.sql

    r25835 r25851  
     1CREATE TABLE dbversion (
     2    schema_version VARCHAR(64),
     3    updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
     4) ENGINE=innodb DEFAULT CHARSET=latin1;
     5
    16CREATE TABLE pzDataStore (
    27    camera VARCHAR(64),
  • trunk/ippTools/share/pxadmin_drop_tables.sql

    r25816 r25851  
    11SET FOREIGN_KEY_CHECKS=0;
    22
     3DROP TABLE IF EXISTS dbversion;
    34DROP TABLE IF EXISTS pzDataStore;
    45DROP TABLE IF EXISTS summitExp;
  • trunk/ippTools/src/camtool.c

    r25840 r25851  
    11471147  }
    11481148
     1149  if (!pxExportVersion(config, f)) {
     1150    psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     1151    return false;
     1152  }
     1153
    11491154  psMetadata *where = psMetadataAlloc();
    11501155  PXOPT_COPY_S64(config->args, where, "-cam_id", "cam_id", "==");
     
    12271232  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
    12281233
    1229   fprintf (stdout, "---- input ----\n");
     1234#ifdef notdef
     1235  fprintf (stderr, "---- input ----\n");
    12301236  psMetadataPrint (stderr, input, 1);
     1237#endif
     1238
     1239  if (!pxCheckImportVersion(config, input)) {
     1240      psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     1241      return false;
     1242  }
    12311243
    12321244  psMetadataItem *item = psMetadataLookup (input, "camRun");
  • trunk/ippTools/src/chiptool.c

    r25840 r25851  
    13771377  }
    13781378
     1379  if (!pxExportVersion(config, f)) {
     1380    psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     1381    return false;
     1382  }
     1383
    13791384  psMetadata *where = psMetadataAlloc();
    13801385  PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
     
    14681473    psVector *identifiers = psVectorAllocEmpty(16, PS_TYPE_U64); // Identifiers inserted
    14691474
     1475    psMetadataIterator *iter = psMetadataIteratorAlloc(input, PS_LIST_HEAD, NULL);       // Iterator
     1476
     1477    if (!pxCheckImportVersion(config, input)) {
     1478        psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     1479        return false;
     1480    }
     1481    // first item is the dbversion, skip it
     1482    psMetadataItem *dbversion =  psMetadataGetAndIncrement(iter);
     1483    (void) dbversion;
     1484
    14701485    if (!psDBTransaction(config->dbh)) {
    14711486        psError(PS_ERR_UNKNOWN, false, "database error");
     
    14731488    }
    14741489
    1475     psMetadataIterator *iter = psMetadataIteratorAlloc(input, PS_LIST_HEAD, NULL);       // Iterator
    14761490    psMetadataItem *item;               // Item from iteration
    14771491    while ((item = psMetadataGetAndIncrement(iter))) {
  • trunk/ippTools/src/difftool.c

    r25840 r25851  
    20992099  }
    21002100
     2101  if (!pxExportVersion(config, f)) {
     2102    psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     2103    return false;
     2104  }
    21012105  psMetadata *where = psMetadataAlloc();
    21022106  PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "==");
     
    21902194  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
    21912195
    2192   fprintf (stdout, "---- input ----\n");
     2196#ifdef notdef
     2197  fprintf (stderr, "---- input ----\n");
    21932198  psMetadataPrint (stderr, input, 1);
    2194 
     2199#endif
     2200
     2201  if (!pxCheckImportVersion(config, input)) {
     2202      psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     2203      return false;
     2204  }
    21952205  psMetadataItem *item = psMetadataLookup (input, "diffRun");
    21962206  psAssert (item, "entry not in input?");
  • trunk/ippTools/src/faketool.c

    r25840 r25851  
    12701270    return false;
    12711271  }
    1272 
     1272  if (!pxExportVersion(config, f)) {
     1273    psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     1274    return false;
     1275  }
    12731276  psMetadata *where = psMetadataAlloc();
    12741277  PXOPT_COPY_S64(config->args, where, "-fake_id", "fake_id", "==");
     
    13511354  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
    13521355
    1353   fprintf (stdout, "---- input ----\n");
     1356#ifdef notdef
     1357  fprintf (stderr, "---- input ----\n");
    13541358  psMetadataPrint (stderr, input, 1);
    1355 
     1359#endif
     1360
     1361  if (!pxCheckImportVersion(config, input)) {
     1362      psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     1363      return false;
     1364  }
    13561365  psMetadataItem *item = psMetadataLookup (input, "fakeRun");
    13571366  psAssert (item, "entry not in input?");
  • trunk/ippTools/src/pxadmin.c

    r23310 r25851  
    22 * pxadmin.c
    33 *
    4  * Copyright (C) 2006-2008  Joshua Hoblitt
     4 * Copyright (C) 2006-2009  Joshua Hoblitt
    55 *
    66 * This program is free software; you can redistribute it and/or modify it
     
    3131bool createMirrorMode(pxConfig *config);
    3232bool deleteMode(pxConfig *config);
     33static bool insert_dbversion(pxConfig * config, const char *versionString);
    3334static bool runMultipleStatments(pxConfig *config, const char *query);
    3435
     
    113114    psFree(query);
    114115
     116    if (!insert_dbversion(config, PACKAGE_VERSION)) {
     117        psError(PS_ERR_UNKNOWN, false, "failed to set database version");
     118        return false;
     119    }
     120
    115121    // COMMIT
    116122    if (!psDBCommit(config->dbh)) {
     
    148154    }
    149155    psFree(query);
     156
     157    if (!insert_dbversion(config, PACKAGE_VERSION)) {
     158        psError(PS_ERR_UNKNOWN, false, "failed to set database version");
     159        return false;
     160    }
    150161
    151162    // COMMIT
     
    262273    return true;
    263274}
     275
     276#ifdef notdef
     277static bool update_dbversion(pxConfig * config, const char *versionString)
     278{
     279    psString query = pxDataGet("pxadmin_update_version.sql");
     280    if (!query) {
     281        psError(PS_ERR_UNKNOWN, false, "failed to retrieve SQL statement");
     282        psFree(query);
     283        return false;
     284    }
     285    if (!p_psDBRunQueryF(config->dbh, query, versionString)) {
     286        psError(PS_ERR_UNKNOWN, false, "database error");
     287        psFree(query);
     288        return false;
     289    }
     290    return true;
     291}
     292#endif
     293static bool insert_dbversion(pxConfig * config, const char *versionString)
     294{
     295    psString query = "INSERT INTO dbversion VALUES('%s', CURRENT_TIMESTAMP())";
     296    if (!query) {
     297        psError(PS_ERR_UNKNOWN, false, "failed to retrieve SQL statement");
     298        psFree(query);
     299        return false;
     300    }
     301    if (!p_psDBRunQueryF(config->dbh, query, versionString)) {
     302        psError(PS_ERR_UNKNOWN, false, "database error");
     303        psFree(query);
     304        return false;
     305    }
     306    return true;
     307}
  • trunk/ippTools/src/pxtools.c

    r25840 r25851  
    177177    return true;
    178178}
     179
     180bool pxLookupVersion(pxConfig *config, psArray **pArray)
     181{
     182    const char *query = "SELECT * FROM dbversion";
     183
     184    if (!p_psDBRunQuery(config->dbh, query)) {
     185        psError(PS_ERR_UNKNOWN, false, "database error");
     186        return false;
     187    }
     188
     189    psArray *output = p_psDBFetchResult(config->dbh);
     190    if (!output) {
     191        psError(PS_ERR_UNKNOWN, false, "database error");
     192        return false;
     193    }
     194    if (!psArrayLength(output)) {
     195        psFree(output);
     196        psError(PS_ERR_UNKNOWN, true, "no rows in dbversion");
     197        return false;
     198    }
     199    if (psArrayLength(output) > 1) {
     200        psError(PS_ERR_UNKNOWN, true, "unexpected number of rows found in dbversion: %" PRId64,
     201                psArrayLength(output));
     202        return false;
     203    }
     204    *pArray = output;
     205
     206    return true;
     207}
     208
     209psString pxGetDBVersion(pxConfig *config)
     210{
     211    PS_ASSERT_PTR_NON_NULL(config, NULL);
     212
     213    psArray *array = NULL;
     214    if (!pxLookupVersion(config, &array)) {
     215        psError(PS_ERR_UNKNOWN, false, "pxLookupVersion failed");
     216        return NULL;
     217    }
     218    psMetadata *md = array->data[0];
     219    if (!md) {
     220        psError(PS_ERR_UNKNOWN, true, "output of pxLookupVersion is null");
     221        return NULL;
     222    }
     223   
     224    psString version = psMetadataLookupStr(NULL, md, "schema_version");
     225
     226    return version;
     227}
     228
     229bool pxExportVersion(pxConfig *config, FILE *file)
     230{
     231    PS_ASSERT_PTR_NON_NULL(config, NULL);
     232    PS_ASSERT_PTR_NON_NULL(file, NULL);
     233
     234    psArray *array = NULL;
     235    if (!pxLookupVersion(config, &array) || !array) {
     236        psError(PS_ERR_UNKNOWN, false, "pxLookupVersion failed");
     237        return false;
     238    }
     239    if (!ippdbPrintMetadatas(file, array, "dbversion", true)) {
     240        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     241        psFree(array);
     242        return false;
     243    }
     244    return true;
     245}
     246
     247bool pxCheckImportVersion(pxConfig *config, psMetadata *input)
     248{
     249    PS_ASSERT_PTR_NON_NULL(config, NULL);
     250    PS_ASSERT_PTR_NON_NULL(input, NULL);
     251
     252    // This code was adapted from the way camtool parses the structures.
     253    // Is this really the way to do it?
     254    psMetadataItem *multi_item =  psMetadataLookup(input, "dbversion");
     255    if (!multi_item || (multi_item->type != PS_DATA_METADATA_MULTI)) {
     256        psError(PS_ERR_UNKNOWN, true, "dbversion multi not found in input");
     257        return false;
     258    }
     259   
     260    psMetadataItem *dbversion = psListGet(multi_item->data.list, 0);
     261    if (!dbversion) {
     262        psError(PS_ERR_UNKNOWN, true, "dbversion not found in input");
     263        return false;
     264    }
     265
     266    if (!strcmp(dbversion->name, "dbversion")) {
     267        // horray
     268        psMetadata *md = dbversion->data.md;
     269        psString schema_version = pxGetDBVersion(config);
     270        if (!schema_version) {
     271            psError(PS_ERR_UNKNOWN, false, "pxGetDBVersion failed");
     272            return false;
     273        }
     274       
     275        psString import_version = psMetadataLookupStr(NULL, md, "schema_version");
     276        if (import_version && strcmp(import_version, schema_version)) {
     277            psError(PS_ERR_UNKNOWN, true, "input file schema_version: %s does not match data base: %s",
     278                import_version, schema_version);
     279            return false;
     280        } else if (!import_version) {
     281            psError(PS_ERR_UNKNOWN, true, "input file schema_version is NULL");
     282            return false;
     283        } else {
     284            // YIPPEE this file is the same version
     285        }
     286    } else {
     287        psError(PS_ERR_UNKNOWN, true, "Unexpected config dump format");
     288        return false;
     289    }
     290
     291    return true;
     292}
  • trunk/ippTools/src/pxtools.h

    r25840 r25851  
    5757
    5858bool pxSetFaultCode(psDB *dbh, const char *tableName, psMetadata *where, psS16 code);
     59bool pxExportVersion(pxConfig *config, FILE *f);
     60bool pxCheckImportVersion(pxConfig *config, psMetadata *md);
    5961
    6062psExit pxerrorGetExitStatus(void);
  • trunk/ippTools/src/stacktool.c

    r25840 r25851  
    12971297  }
    12981298
     1299  if (!pxExportVersion(config, f)) {
     1300    psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     1301    return false;
     1302  }
    12991303  psMetadata *where = psMetadataAlloc();
    13001304  PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
     
    13831387  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
    13841388
    1385   fprintf (stdout, "---- input ----\n");
     1389#ifdef notdef
     1390  fprintf (stderr, "---- input ----\n");
    13861391  psMetadataPrint (stderr, input, 1);
    1387 
     1392#endif
     1393
     1394  if (!pxCheckImportVersion(config, input)) {
     1395      psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     1396      return false;
     1397  }
    13881398  psMetadataItem *item = psMetadataLookup (input, "stackRun");
    13891399  psAssert (item, "entry not in input?");
  • trunk/ippTools/src/warptool.c

    r25840 r25851  
    17531753    }
    17541754
     1755    if (!pxExportVersion(config, f)) {
     1756        psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     1757        return false;
     1758    }
    17551759    psMetadata *where = psMetadataAlloc();
    17561760    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
     
    18451849  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
    18461850
    1847   fprintf (stdout, "---- input ----\n");
     1851#ifdef notdef
     1852  fprintf (stderr, "---- input ----\n");
    18481853  psMetadataPrint (stderr, input, 1);
     1854#endif
     1855
     1856  if (!pxCheckImportVersion(config, input)) {
     1857      psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     1858      return false;
     1859  }
    18491860
    18501861  psMetadataItem *item = psMetadataLookup (input, "warpRun");
Note: See TracChangeset for help on using the changeset viewer.