Ticket #1485: duplicatemultiplex.patch

File duplicatemultiplex.patch, 5.0 KB (added by stuart@…, 15 years ago)

Checks for existing of multiplex in DB before adding it (could be improved)

  • libs/libmythtv/channelutil.cpp

     
    2020{
    2121    MSqlQuery query(MSqlQuery::InitCon());
    2222    // If transport not present add it, and move on to the next
    23     query.prepare(
    24         "INSERT INTO dtv_multiplex "
    25         "  (transportid, networkid, frequency, symbolrate, "
    26         "   fec, polarity, modulation, constellation, bandwidth, "
    27         "   hierarchy, hp_code_rate, lp_code_rate, guard_interval, "
    28         "   transmission_mode, inversion, sourceid, sistandard) "
    29         "VALUES "
    30         "  (:TRANSPORTID, :NETWORKID, :FREQUENCY, :SYMBOLRATE, "
    31         "   :FEC, :POLARITY, :MODULATION, :CONSTELLATION, :BANDWIDTH, "
    32         "   :HIERARCHY, :HP_CODE_RATE, :LP_CODE_RATE, :GUARD_INTERVAL, "
    33         "   :TRANS_MODE, :INVERSION, :SOURCEID, :SISTANDARD);");
    3423
    35     query.bindValue(":SOURCEID",       db_source_id);
     24    query.prepare("SELECT * FROM dtv_multiplex WHERE sourceid=:SOURCEID AND"
     25                  " transportid=:TRANSPORTID AND networkid=:NETWORKID");
     26    query.bindValue(":SOURCEID", db_source_id);
     27    if (network_id > 0)
     28        query.bindValue(":NETWORKID", network_id);
    3629    if (transport_id > 0)
    37         query.bindValue(":TRANSPORTID",transport_id);
    38     if (network_id > 0)
    39         query.bindValue(":NETWORKID",  network_id);
    40     query.bindValue(":FREQUENCY",      frequency);
    41     if (modulation != QString::null)
    42         query.bindValue(":MODULATION", modulation);
    43     query.bindValue(":SISTANDARD",     sistandard);
     30        query.bindValue(":TRANSPORTID", transport_id);
    4431
    45     if (symbol_rate >= 0)
    46         query.bindValue(":SYMBOLRATE", symbol_rate);
    47     if (polarity >= 0)
    48         query.bindValue(":POLARITY",   QString("%1").arg(polarity));
    49     if (inner_FEC != QString::null)
    50         query.bindValue(":FEC",        inner_FEC);
    51 
    52     if (set_odfm_info)
     32    if (!query.exec() || !query.isActive())
    5333    {
    54         query.bindValue(":INVERSION",      QString("%1").arg(inversion));
    55         query.bindValue(":BANDWIDTH",      QString("%1").arg(bandwidth));
    56         query.bindValue(":HP_CODE_RATE",   hp_code_rate);
    57         query.bindValue(":LP_CODE_RATE",   lp_code_rate);
    58         query.bindValue(":CONSTELLATION",  constellation);
    59         query.bindValue(":TRANS_MODE",     QString("%1").arg(trans_mode));
    60         query.bindValue(":GUARD_INTERVAL", guard_interval);
    61         query.bindValue(":HIERARCHY",      QString("%1").arg(hierarchy));
     34        MythContext::DBError("Selecting duplicate transport from"
     35        " Database.", query);
     36        return false;
    6237    }
    6338
    64     if (!query.exec() || !query.isActive())
     39    if (query.size() == 0)
    6540    {
    66         MythContext::DBError("Adding transport to Database.", query);
    67         return false;
     41        query.prepare(
     42            "INSERT INTO dtv_multiplex "
     43            "  (transportid, networkid, frequency, symbolrate, "
     44            "   fec, polarity, modulation, constellation, bandwidth, "
     45            "   hierarchy, hp_code_rate, lp_code_rate, guard_interval, "
     46            "   transmission_mode, inversion, sourceid, sistandard) "
     47            "VALUES "
     48            "  (:TRANSPORTID, :NETWORKID, :FREQUENCY, :SYMBOLRATE, "
     49            "   :FEC, :POLARITY, :MODULATION, :CONSTELLATION, :BANDWIDTH, "
     50            "   :HIERARCHY, :HP_CODE_RATE, :LP_CODE_RATE, :GUARD_INTERVAL, "
     51            "   :TRANS_MODE, :INVERSION, :SOURCEID, :SISTANDARD);");
     52
     53        query.bindValue(":SOURCEID",       db_source_id);
     54        if (transport_id > 0)
     55            query.bindValue(":TRANSPORTID",transport_id);
     56        if (network_id > 0)
     57            query.bindValue(":NETWORKID",  network_id);
     58        query.bindValue(":FREQUENCY",      frequency);
     59        if (modulation != QString::null)
     60            query.bindValue(":MODULATION", modulation);
     61        query.bindValue(":SISTANDARD",     sistandard);
     62
     63        if (symbol_rate >= 0)
     64            query.bindValue(":SYMBOLRATE", symbol_rate);
     65        if (polarity >= 0)
     66            query.bindValue(":POLARITY",   QString("%1").arg(polarity));
     67        if (inner_FEC != QString::null)
     68            query.bindValue(":FEC",        inner_FEC);
     69
     70        if (set_odfm_info)
     71        {
     72            query.bindValue(":INVERSION",      QString("%1").arg(inversion));
     73            query.bindValue(":BANDWIDTH",      QString("%1").arg(bandwidth));
     74            query.bindValue(":HP_CODE_RATE",   hp_code_rate);
     75            query.bindValue(":LP_CODE_RATE",   lp_code_rate);
     76            query.bindValue(":CONSTELLATION",  constellation);
     77            query.bindValue(":TRANS_MODE",     QString("%1").arg(trans_mode));
     78            query.bindValue(":GUARD_INTERVAL", guard_interval);
     79            query.bindValue(":HIERARCHY",      QString("%1").arg(hierarchy));
     80        }
     81
     82        if (!query.exec() || !query.isActive())
     83        {
     84            MythContext::DBError("Adding transport to Database.", query);
     85            return false;
     86        }
    6887    }
    6988
    7089    return true;