Changeset 2dffed3 in confclerk_git for src/sql


Ignore:
Timestamp:
08/22/12 00:11:58 (10 years ago)
Author:
Philipp Spitzer <philipp@…>
Branches:
master, qt5
Children:
7680536
Parents:
ca20842
Message:

On the way to fix #45.

Location:
src/sql
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/sql/schedulexmlparser.cpp

    rca20842 r2dffed3  
    3333}
    3434
    35 void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url)
     35void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, int conferenceId)
    3636{
    3737    QDomDocument document;
     
    4848    SqlEngine::beginTransaction();
    4949
    50     int confId = 0;
    5150    QString conference_title;
    5251    if (!scheduleElement.isNull())
     
    5756            emit(parsingScheduleBegin());
    5857            QHash<QString,QString> conference;
    59             conference["id"] = QString::number(0); // conference ID is assigned automatically, or obtained from the DB
     58            conference["id"] = conferenceId; // conference ID is assigned automatically if 0
    6059            conference["title"] = conferenceElement.firstChildElement("title").text();
    6160            conference["subtitle"] = conferenceElement.firstChildElement("subtitle").text();
     
    6867            conference["timeslot_duration"] = conferenceElement.firstChildElement("timeslot_duration").text(); // time
    6968            conference["url"] = url;
    70             SqlEngine::addConferenceToDB(conference);
    71             confId = conference["id"].toInt();
     69            SqlEngine::addConferenceToDB(conference, conferenceId);
     70            conferenceId = conference["id"].toInt();
    7271            conference_title = conference["title"];
    7372        }
     
    105104                        room["name"] = roomElement.attribute("name");
    106105                        room["event_id"] = eventElement.attribute("id");
    107                         room["conference_id"] = QString::number(confId,10);
     106                        room["conference_id"] = QString::number(conferenceId,10);
    108107                        SqlEngine::addRoomToDB(room);
    109108
     
    111110                        QHash<QString,QString> event;
    112111                        event["id"] = eventElement.attribute("id");;
    113                         event["conference_id"] = QString::number(confId, 10);
     112                        event["conference_id"] = QString::number(conferenceId, 10);
    114113                        event["start"] = eventElement.firstChildElement("start").text(); // time eg. 10:00
    115114                        event["date"] = dayElement.attribute("date"); // date eg. 2009-02-07
     
    126125                        SqlEngine::addEventToDB(event);
    127126                        // process persons' nodes
    128                         QList<QString> persons;
    129127                        QDomElement personsElement = eventElement.firstChildElement("persons");
    130128                        QDomNodeList personList = personsElement.elementsByTagName("person");
     
    134132                            person["name"] = personList.at(i).toElement().text();
    135133                            person["event_id"] = eventElement.attribute("id");
    136                             person["conference_id"] = QString::number(confId, 10);
    137                             //qDebug() << "adding Person: " << person["name"];
     134                            person["conference_id"] = QString::number(conferenceId, 10);
    138135                            SqlEngine::addPersonToDB(person);
    139136                        }
     
    146143                            link["url"] = linkList.at(i).toElement().attribute("href");
    147144                            link["event_id"] = eventElement.attribute("id");
    148                             link["conference_id"] = QString::number(confId, 10);
     145                            link["conference_id"] = QString::number(conferenceId, 10);
    149146                            SqlEngine::addLinkToDB(link);
    150147                        }
  • src/sql/schedulexmlparser.h

    rca20842 r2dffed3  
    3030
    3131    public slots:
    32         void parseData(const QByteArray &aData, const QString& url);
     32        void parseData(const QByteArray &aData, const QString& url, int conferenceId);
    3333
    3434    signals:
  • src/sql/sqlengine.cpp

    rca20842 r2dffed3  
    8787}
    8888
    89 void SqlEngine::addConferenceToDB(QHash<QString,QString> &aConference)
     89void SqlEngine::addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId)
    9090{
    9191    QSqlDatabase db = QSqlDatabase::database();
     
    9393    if (db.isValid() && db.isOpen())
    9494    {
    95         int confId = 0;
    96         QList<Conference> confsList = Conference::getAll();
    97         if(confsList.count())
    98         {
    99             QListIterator<Conference> i(confsList);
    100             while (i.hasNext())
    101             {
    102                 Conference conf = i.next();
    103                 if( aConference["title"] == conf.title() )
    104                 {
    105                     confId = conf.id();
    106                     aConference["id"] = QString::number(confId);
    107                     break;
    108                 }
    109             }
    110         }
    111 
    112         if(!confId) // conference 'aConference' isn't in the table => insert
    113         {
    114             // HACK
    115             // When city is empty, assign a dummy value. We probably want to find a way to change the database scheme ...
    116             // cf. #32
    117             if (aConference["city"].isEmpty()) aConference["city"] = "n/a";
    118 
    119             QSqlQuery query(db);
     95        // HACK
     96        // When city is empty, assign a dummy value. We probably want to find a way to change the database scheme ...
     97        // cf. #32
     98        if (aConference["city"].isEmpty()) aConference["city"] = "n/a";
     99
     100        QSqlQuery query(db);
     101        if (conferenceId <= 0) // insert conference
     102        {
    120103            query.prepare("INSERT INTO CONFERENCE (title,url,subtitle,venue,city,start,end,days,"
    121104                                                    "day_change,timeslot_duration,active) "
     
    128111            query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t());
    129112            query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0)));
    130             query.bindValue(":day_change", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));
    131             query.bindValue(":active", confsList.count() > 0 ? 0 : 1);
     113            query.bindValue(":timeslot_duration", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));
     114            query.bindValue(":active", 1);
    132115            if (!query.exec()) qDebug() << "Could not execute query to insert a conference:" << query.lastError();
    133116            aConference["id"] = query.lastInsertId().toString(); // 'id' is assigned automatically
     117        }
     118        else // update conference
     119        {
     120            query.prepare("UPDATE CONFERENCE set title=:title, url=:url, subtitle=:subtitle, venue=:venue, city=:city, start=:start, end=:end, days=:days,"
     121                                                "day_change=:day_change, timeslot_duration=:timeslot_duration, active=:active "
     122                          "WHERE id=:id");
     123            foreach (QString prop_name, (QList<QString>() << "title" << "url" << "subtitle" << "venue" << "city" << "days")) {
     124                query.bindValue(QString(":") + prop_name, aConference[prop_name]);
     125            }
     126            query.bindValue(":start", QDateTime(QDate::fromString(aConference["start"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t());
     127            query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t());
     128            query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0)));
     129            query.bindValue(":timeslot_duration", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));
     130            query.bindValue(":active", 1);
     131            query.bindValue(":id", conferenceId);
     132            if (!query.exec()) qDebug() << "Could not execute query to update a conference:" << query.lastError();
     133            aConference["id"] = conferenceId;
    134134        }
    135135    }
  • src/sql/sqlengine.h

    rca20842 r2dffed3  
    3333        ~SqlEngine();
    3434        static void initialize();
    35         static void addConferenceToDB(QHash<QString,QString> &aConference);
     35        // if a conferneceId != 0 is given, the confernece is updated instead of inserted.
     36        static void addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId);
    3637        static void addEventToDB(QHash<QString,QString> &aEvent);
    3738        static void addPersonToDB(QHash<QString,QString> &aPerson);
Note: See TracChangeset for help on using the changeset viewer.