int Database::setBars (Bars *symbol) { if (! symbol) return 0; if (! getSymbol(symbol)) { if (! newSymbol(symbol)) return 0; } else { // check if we need to save the name if (! symbol->name().isEmpty()) setName(symbol); } if (! init()) return 0; _db.transaction(); QSqlQuery q(_db); QList<int> keys = symbol->keys(); BarType bt; int loop = 0; for (; loop < keys.size(); loop++) { CBar *bar = symbol->bar(keys.at(loop)); QDateTime dt = bar->date(); QString date = dt.toString("yyyyMMddHHmmss"); // first check if record exists so we know to do an update or insert QString s = "SELECT date FROM " + symbol->table() + " WHERE date =" + date; q.exec(s); if (q.lastError().isValid()) { qDebug() << "Database::setBars:" << q.lastError().text(); qDebug() << s; continue; } if (q.next()) // record exists, use update { s = "UPDATE " + symbol->table() + " SET "; QStringList tl; double v = 0; if (bar->get(bt.indexToString(BarType::_OPEN), v)) tl << "open=" + QString::number(v); v = 0; if (bar->get(bt.indexToString(BarType::_HIGH), v)) tl << "high=" + QString::number(v); v = 0; if (bar->get(bt.indexToString(BarType::_LOW), v)) tl << "low=" + QString::number(v); v = 0; if (bar->get(bt.indexToString(BarType::_CLOSE), v)) tl << "close=" + QString::number(v); v = 0; if (bar->get(bt.indexToString(BarType::_VOLUME), v)) tl << "volume=" + QString::number(v); s.append(tl.join(",")); s.append(" WHERE date=" + date); } else // new record, use insert { QStringList tl; s = "INSERT INTO " + symbol->table() + " (date,open,high,low,close,volume) VALUES("; tl << date; double v = 0; bar->get(bt.indexToString(BarType::_OPEN), v); tl << QString::number(v); v = 0; bar->get(bt.indexToString(BarType::_HIGH), v); tl << QString::number(v); v = 0; bar->get(bt.indexToString(BarType::_LOW), v); tl << QString::number(v); v = 0; bar->get(bt.indexToString(BarType::_CLOSE), v); tl << QString::number(v); v = 0; bar->get(bt.indexToString(BarType::_VOLUME), v); tl << QString::number(v); s.append(tl.join(",")); s.append(")"); } q.exec(s); if (q.lastError().isValid()) { qDebug() << "Database::setBars:" << q.lastError().text(); qDebug() << s; continue; } } _db.commit(); return 1; }