- Timestamp:
- Mar 17, 2009, 12:08:50 PM (17 years ago)
- Location:
- branches/cnb_branches/cnb_branch_20090301
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippTools/src/difftool.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/cnb_branches/cnb_branch_20090301
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk merged eligible /branches/eam_branches/eam_branch_20090303 23158-23228
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/cnb_branches/cnb_branch_20090301/ippTools/src/difftool.c
r21402 r23352 45 45 static bool donecleanupMode(pxConfig *config); 46 46 static bool updatediffskyfileMode(pxConfig *config); 47 static bool exportrunMode(pxConfig *config); 48 static bool importrunMode(pxConfig *config); 47 49 48 50 static bool setdiffRunState(pxConfig *config, psS64 diff_id, const char *state); … … 81 83 MODECASE(DIFFTOOL_MODE_DONECLEANUP, donecleanupMode); 82 84 MODECASE(DIFFTOOL_MODE_UPDATEDIFFSKYFILE, updatediffskyfileMode); 85 MODECASE(DIFFTOOL_MODE_EXPORTRUN, exportrunMode); 86 MODECASE(DIFFTOOL_MODE_IMPORTRUN, importrunMode); 83 87 default: 84 88 psAbort("invalid option (this should not happen)"); … … 1437 1441 } 1438 1442 1443 bool exportrunMode(pxConfig *config) 1444 { 1445 typedef struct ExportTable { 1446 char tableName[80]; 1447 char sqlFilename[80]; 1448 } ExportTable; 1449 1450 int numExportFiles = 3; 1451 1452 PS_ASSERT_PTR_NON_NULL(config, NULL); 1453 1454 PXOPT_LOOKUP_S64(det_id, config->args, "-diff_id", true, false); 1455 PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true, false); 1456 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 1457 1458 FILE *f = fopen (outfile, "w"); 1459 if (f == NULL) { 1460 psError(PS_ERR_UNKNOWN, false, "failed to open output file"); 1461 return false; 1462 } 1463 1464 psMetadata *where = psMetadataAlloc(); 1465 PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "=="); 1466 1467 ExportTable tables [] = { 1468 {"diffRun", "difftool_export_run.sql"}, 1469 {"diffInputSkyfile", "difftool_export_input_skyfile.sql"}, 1470 {"diffSkyfile", "difftool_export_skyfile.sql"}, 1471 }; 1472 1473 for (int i=0; i < numExportFiles; i++) { 1474 psString query = pxDataGet(tables[i].sqlFilename); 1475 if (!query) { 1476 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1477 return false; 1478 } 1479 1480 if (where && psListLength(where->list)) { 1481 psString whereClause = psDBGenerateWhereSQL(where, NULL); 1482 psStringAppend(&query, " %s", whereClause); 1483 psFree(whereClause); 1484 } 1485 1486 // treat limit == 0 as "no limit" 1487 if (limit) { 1488 psString limitString = psDBGenerateLimitSQL(limit); 1489 psStringAppend(&query, " %s", limitString); 1490 psFree(limitString); 1491 } 1492 1493 if (!p_psDBRunQuery(config->dbh, query)) { 1494 psError(PS_ERR_UNKNOWN, false, "database error"); 1495 psFree(query); 1496 return false; 1497 } 1498 psFree(query); 1499 1500 psArray *output = p_psDBFetchResult(config->dbh); 1501 if (!output) { 1502 psError(PS_ERR_UNKNOWN, false, "database error"); 1503 return false; 1504 } 1505 if (!psArrayLength(output)) { 1506 psTrace("regtool", PS_LOG_INFO, "no rows found"); 1507 psFree(output); 1508 return true; 1509 } 1510 1511 // we must write the export table in non-simple (true) format 1512 if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) { 1513 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1514 psFree(output); 1515 return false; 1516 } 1517 psFree(output); 1518 } 1519 1520 fclose (f); 1521 1522 return true; 1523 } 1524 1525 bool importrunMode(pxConfig *config) 1526 { 1527 unsigned int nFail; 1528 1529 int numImportTables = 2; 1530 1531 char tables[2] [80] = {"diffInputSkyfile", "diffSkyfile"}; 1532 1533 PS_ASSERT_PTR_NON_NULL(config, NULL); 1534 1535 PXOPT_LOOKUP_STR(infile, config->args, "-infile", true, false); 1536 1537 psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false); 1538 1539 fprintf (stdout, "---- input ----\n"); 1540 psMetadataPrint (stderr, input, 1); 1541 1542 psMetadataItem *item = psMetadataLookup (input, "diffRun"); 1543 psAssert (item, "entry not in input?"); 1544 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1545 1546 psMetadataItem *entry = psListGet (item->data.list, 0); 1547 assert (entry); 1548 assert (entry->type == PS_DATA_METADATA); 1549 diffRunRow *diffRun = diffRunObjectFromMetadata (entry->data.md); 1550 diffRunInsertObject (config->dbh, diffRun); 1551 1552 // fprintf (stdout, "---- diff run ----\n"); 1553 // psMetadataPrint (stderr, entry->data.md, 1); 1554 1555 for (int i = 0; i < numImportTables; i++) { 1556 item = psMetadataLookup (input, tables[i]); 1557 psAssert (item, "entry not in input?"); 1558 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1559 1560 switch (i) { 1561 case 0: 1562 for (int i = 0; i < item->data.list->n; i++) { 1563 entry = psListGet (item->data.list, i); 1564 assert (entry); 1565 assert (entry->type == PS_DATA_METADATA); 1566 diffInputSkyfileRow *diffInputSkyfile = diffInputSkyfileObjectFromMetadata (entry->data.md); 1567 diffInputSkyfileInsertObject (config->dbh, diffInputSkyfile); 1568 1569 // fprintf (stdout, "---- row %d ----\n", i); 1570 // psMetadataPrint (stderr, entry->data.md, 1); 1571 } 1572 break; 1573 1574 case 1: 1575 for (int i = 0; i < item->data.list->n; i++) { 1576 entry = psListGet (item->data.list, i); 1577 assert (entry); 1578 assert (entry->type == PS_DATA_METADATA); 1579 diffSkyfileRow *diffSkyfile = diffSkyfileObjectFromMetadata (entry->data.md); 1580 diffSkyfileInsertObject (config->dbh, diffSkyfile); 1581 1582 // fprintf (stdout, "---- row %d ----\n", i); 1583 // psMetadataPrint (stderr, entry->data.md, 1); 1584 } 1585 break; 1586 } 1587 } 1588 1589 return true; 1590 }
Note:
See TracChangeset
for help on using the changeset viewer.
