Ejemplo n.º 1
0
void DBItemDAO::updateAssocTable(BillItem::Ptr item)
{
    qCDebug(lcPersistence) << "Entering DBItemDAO::updateAssocTable with param " + item->toString();

    QSqlQuery query(m_database);
    // remove all old entries
    query.prepare("DELETE FROM MATERIAL_ITEM_ASSOC WHERE ITEM_ID = ?");
    query.addBindValue(item->id());

    if (!query.exec()) {
        qCCritical(lcPersistence) << "removing old material-item assocs failed" + query.lastError().text();
        throw new PersistenceException("removing old material-item assocs failed" + query.lastError().text());
    }

    QSqlQuery insertQuery(m_database);
    insertQuery.prepare("INSERT INTO MATERIAL_ITEM_ASSOC VALUES (?,?,?);");

    QMap<Material::Ptr, double> material = item->material();

    QMap<Material::Ptr, double>::iterator it;
    for (it = material.begin(); it != material.end(); ++it) {
        insertQuery.addBindValue(it.key()->id());
        insertQuery.addBindValue(item->id());
        insertQuery.addBindValue(it.value());

        if (!insertQuery.exec()) {
            qCCritical(lcPersistence) << "adding material-item assoc failed" + insertQuery.lastError().text();
            throw new PersistenceException("adding material-item assocs failed" + insertQuery.lastError().text());
        }
    }
}
void DBHTMLFileLetterDAO::create(Letter::Ptr item)
{
    qCDebug(lcPersistence) << "Entering DBHTMLFileLetterDAO::create with param " + item->toString();

    try {
        m_validator->validateForCreate(item);
    } catch (ValidationException *e) {
        throw new PersistenceException(e);
    }

    QString filePath = createHtmlFile(item);

    QSqlQuery insertQuery(m_database);
    insertQuery.prepare("INSERT INTO LETTER VALUES(NULL, ?, ?, ?);");

    insertQuery.addBindValue(item->date());
    insertQuery.addBindValue(item->customer()->id());
    insertQuery.addBindValue(filePath);

    if (!insertQuery.exec()) {
        QFile::remove(filePath);
        qCCritical(lcPersistence) << "DBHTMLFileLetterDAO::create failed: " + insertQuery.lastError().text();
        throw new PersistenceException("DBHTMLFileLetterDAO::create failed: " + insertQuery.lastError().text());
    }

    item->setId(insertQuery.lastInsertId().toInt());
}
void DBOfferItemDAO::create(BillItem::Ptr item)
{
    qCDebug(lcPersistence) << "Entering DBOfferItemDAO::create with param " + item->toString();

    DBItemDAO::create(item);

    QSqlQuery insertQuery(m_database);
    insertQuery.prepare("INSERT INTO OFFER_ITEM VALUES(?, NULL);");
    insertQuery.addBindValue(item->id());

    if (!insertQuery.exec()) {
        qCCritical(lcPersistence) << "DBOfferItemDAO::create failed: " + insertQuery.lastError().text();
        throw new PersistenceException("DBOfferItemDAO::create failed: " + insertQuery.lastError().text());
    }
}
Ejemplo n.º 4
0
qint64 HistoryManager::getRecord(const QLatin1String &table, const QVariantHash &values)
{
	const QStringList keys = values.keys();
	QStringList placeholders;

	for (int i = 0; i < keys.count(); ++i)
	{
		placeholders.append(QString('?'));
	}

	QSqlQuery selectQuery(QSqlDatabase::database(QLatin1String("browsingHistory")));
	selectQuery.prepare(QStringLiteral("SELECT \"id\" FROM \"%1\" WHERE \"%2\" = ?;").arg(table).arg(keys.join(QLatin1String("\" = ? AND \""))));

	for (int i = 0; i < keys.count(); ++i)
	{
		selectQuery.bindValue(i, values[keys.at(i)]);
	}

	selectQuery.exec();

	if (selectQuery.first())
	{
		return selectQuery.record().field(QLatin1String("id")).value().toLongLong();
	}

	QSqlQuery insertQuery(QSqlDatabase::database(QLatin1String("browsingHistory")));
	insertQuery.prepare(QStringLiteral("INSERT INTO \"%1\" (\"%2\") VALUES(%3);").arg(table).arg(keys.join(QLatin1String("\", \""))).arg(placeholders.join(QLatin1String(", "))));

	for (int i = 0; i < keys.count(); ++i)
	{
		insertQuery.bindValue(i, values[keys.at(i)]);
	}

	insertQuery.exec();

	return insertQuery.lastInsertId().toULongLong();
}
Ejemplo n.º 5
0
void DBItemDAO::create(BillItem::Ptr item)
{
    qCDebug(lcPersistence) << "Entering DBItemDAO::create with param " + item->toString();

    try {
        m_validator->validateForCreate(item);
    } catch (ValidationException *e) {
        throw new PersistenceException(e);
    }

    QSqlQuery insertQuery(m_database);
    insertQuery.prepare("INSERT INTO ITEM VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0);");

    insertQuery.addBindValue(item->description());
    insertQuery.addBindValue(item->workingHours());
    insertQuery.addBindValue(item->wagePerHour().cents());
    insertQuery.addBindValue(item->materialNetCost().cents());
    insertQuery.addBindValue(item->materialCost().cents());
    insertQuery.addBindValue(item->materialOverhead());
    insertQuery.addBindValue(item->factoryOverhead());
    insertQuery.addBindValue(item->profit());
    insertQuery.addBindValue(item->cashback());
    insertQuery.addBindValue(item->taxRate());
    insertQuery.addBindValue(item->price().cents());
    insertQuery.addBindValue(item->unit());
    insertQuery.addBindValue(item->quantity());

    if (!insertQuery.exec()) {
        qCCritical(lcPersistence) << "DBItemDAO::create failed: " + insertQuery.lastError().text();
        throw new PersistenceException("DBItemDAO::create failed: " + insertQuery.lastError().text());
    }

    item->setId(insertQuery.lastInsertId().toInt());

    updateAssocTable(item);
}
void CookieDatabaseBackingStore::invokeOpen(const String& cookieJar)
{
    ASSERT(isCurrentThread());
    if (m_db.isOpen())
        close();

    if (!m_db.open(cookieJar)) {
        LOG_ERROR("Could not open the cookie database. No cookie will be stored!");
        LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
        return;
    }

    m_db.executeCommand("PRAGMA locking_mode=EXCLUSIVE;");
    m_db.executeCommand("PRAGMA journal_mode=TRUNCATE;");

    const String primaryKeyFields("PRIMARY KEY (protocol, host, path, name)");
    const String databaseFields("name TEXT, value TEXT, host TEXT, path TEXT, expiry DOUBLE, lastAccessed DOUBLE, isSecure INTEGER, isHttpOnly INTEGER, creationTime DOUBLE, protocol TEXT");
    // Update table to add the new column creationTime and protocol for backwards compatability.
    upgradeTableIfNeeded(databaseFields, primaryKeyFields);

    // Create table if not exsist in case that the upgradeTableIfNeeded() failed accidentally.
    String createTableQuery("CREATE TABLE IF NOT EXISTS ");
    createTableQuery += m_tableName;
    // This table schema is compliant with Mozilla's.
    createTableQuery += " (" + databaseFields + ", " + primaryKeyFields+");";

    if (!m_db.executeCommand(createTableQuery)) {
        LOG_ERROR("Could not create the table to store the cookies into. No cookie will be stored!");
        LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
        close();
        return;
    }

    String insertQuery("INSERT OR REPLACE INTO ");
    insertQuery += m_tableName;
    insertQuery += " (name, value, host, path, expiry, lastAccessed, isSecure, isHttpOnly, creationTime, protocol) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10);";

    m_insertStatement = new SQLiteStatement(m_db, insertQuery);
    if (m_insertStatement->prepare()) {
        LOG_ERROR("Cannot save cookies");
        LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
    }

    String updateQuery("UPDATE ");
    updateQuery += m_tableName;
    // The where statement is chosen to match CookieMap key.
    updateQuery += " SET name = ?1, value = ?2, host = ?3, path = ?4, expiry = ?5, lastAccessed = ?6, isSecure = ?7, isHttpOnly = ?8, creationTime = ?9, protocol = ?10 where protocol = ?10 and name = ?1 and host = ?3 and path = ?4;";
    m_updateStatement = new SQLiteStatement(m_db, updateQuery);

    if (m_updateStatement->prepare()) {
        LOG_ERROR("Cannot update cookies");
        LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
    }

    String deleteQuery("DELETE FROM ");
    deleteQuery += m_tableName;
    // The where statement is chosen to match CookieMap key.
    deleteQuery += " WHERE name=?1 and host=?2 and path=?3 and protocol=?4;";
    m_deleteStatement = new SQLiteStatement(m_db, deleteQuery);

    if (m_deleteStatement->prepare()) {
        LOG_ERROR("Cannot delete cookies");
        LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
    }

}
void TimeTrackerConfigurationWidget::on_btnNewCompany_clicked()
{
  QString fileName = QFileDialog::getSaveFileName(this, "Database File", "", "Image Files (*.sqlite)");

  if(fileName.toStdString().empty())
    {
    std::cout << "Filename was empty." << std::endl;
    return;
    }

  if(QFile::exists(fileName))
    {
    QMessageBox::warning(this, "Time Tracker Configuration",
                               "This company database already exists. Please choose a different file.",
                                QMessageBox::Ok);
    return;
    }

  if(this->CompanyDatabase)
    {
    delete this->CompanyDatabase;
    this->CompanyDatabase = NULL;
    }

  QSqlDatabase::removeDatabase("CompanyDatabase");

  this->CompanyDatabase = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE"));
  this->CompanyDatabase->setDatabaseName(fileName);
  if (this->CompanyDatabase->open())
    {
    std::cout << "Opened." << std::endl;
    }
  else
    {
    std::cerr << "Could not open database" << std::endl;
    std::cerr << this->CompanyDatabase->lastError().text().toStdString() << std::endl;
    }

  QSqlQuery createQuery(*(this->CompanyDatabase));
  bool createSuccess = createQuery.exec("create table CompanyTable "
              "(id integer primary key, "
              "CompanyName TEXT, "
              "PayrollClientNumber TEXT, "
              "PayDay TEXT, "
              "PayrollFaxNumber TEXT, "
              "MOTD TEXT, "
              "PayrollContact TEXT, "
              "OwnerName TEXT, "
              "CompanyPhone TEXT, "
              "PayrollSubmission TEXT)");

  if(!createSuccess)
    {
    std::cerr << "Could not create table!" << std::endl;
    std::cerr << createQuery.lastError().text().toStdString() << std::endl;
    return;
    }

  // Populate the table with default values
  QSqlQuery insertQuery(*(this->CompanyDatabase));
  insertQuery.prepare("INSERT INTO CompanyTable (id, CompanyName, PayrollClientNumber, PayDay, PayrollFaxNumber, MOTD, PayrollContact, OwnerName, CompanyPhone, PayrollSubmission) "
                "VALUES (:id, :CompanyName, :PayrollClientNumber, :PayDay, :PayrollFaxNumber, :MOTD, :PayrollContact, :OwnerName, :CompanyPhone, :PayrollSubmission)");
  insertQuery.bindValue(":id", 0);
  insertQuery.bindValue(":CompanyName", "CompanyName");
  insertQuery.bindValue(":PayrollClientNumber", "PayrollClientNumber");
  insertQuery.bindValue(":PayDay", "PayDay");
  insertQuery.bindValue(":PayrollFaxNumber", "PayrollFaxNumber");
  insertQuery.bindValue(":MOTD", "MOTD");
  insertQuery.bindValue(":PayrollContact", "PayrollContact");
  insertQuery.bindValue(":OwnerName", "OwnerName");
  insertQuery.bindValue(":CompanyPhone", "CompanyPhone");
  insertQuery.bindValue(":PayrollSubmission", "PayrollSubmission");
  bool insertSuccess = insertQuery.exec();
  if(!insertSuccess)
    {
    std::cerr << "Could not insert values!" << std::endl;
    std::cerr << "insertQuery last error: " << insertQuery.lastError().text().toStdString() << std::endl;
    return;
    }
  
  EditCompanyWidget* editCompanyWidget = new EditCompanyWidget(this->CompanyDatabase);
  editCompanyWidget->exec();
}
Ejemplo n.º 8
0
static int
really_do_dns(AtomPtr name, ObjectPtr object)
{
    int rc;
    DnsQueryPtr query;
    AtomPtr message = NULL;
    int id;
    AtomPtr a = NULL;

    if(a == NULL) {
        if(name == atomLocalhost || name == atomLocalhostDot) {
            char s[1 + sizeof(HostAddressRec)];
            memset(s, 0, sizeof(s));
            s[0] = DNS_A;
            s[1] = 4;
            s[2] = 127;
            s[3] = 0;
            s[4] = 0;
            s[5] = 1;
            a = internAtomN(s, 1 + sizeof(HostAddressRec));
            if(a == NULL) {
                abortObject(object, 501,
                            internAtom("Couldn't allocate address"));
                notifyObject(object);
                errno = ENOMEM;
                return -1;
            }
        }
    }

    if(a == NULL) {
        struct in_addr ina;
        rc = inet_aton(name->string, &ina);
        if(rc == 1) {
            char s[1 + sizeof(HostAddressRec)];
            memset(s, 0, sizeof(s));
            s[0] = DNS_A;
            s[1] = 4;
            memcpy(s + 2, &ina, 4);
            a = internAtomN(s, 1 + sizeof(HostAddressRec));
            if(a == NULL) {
                abortObject(object, 501,
                            internAtom("Couldn't allocate address"));
                notifyObject(object);
                errno = ENOMEM;
                return -1;
            }
        }
    }
#ifdef HAVE_IPv6
    if(a == NULL)
        a = rfc2732(name);
#endif

    if(a) {
        object->headers = a;
        object->age = current_time.tv_sec;
        object->expires = current_time.tv_sec + 240;
        object->flags &= ~(OBJECT_INITIAL | OBJECT_INPROGRESS);
        notifyObject(object);
        return 0;
    }

    rc = establishDnsSocket();
    if(rc < 0) {
        do_log_error(L_ERROR, -rc, "Couldn't establish DNS socket.\n");
        message = internAtomError(-rc, "Couldn't establish DNS socket");
        goto fallback;
    }

    /* The id is used to speed up detecting replies to queries that
       are no longer current -- see dnsReplyHandler. */
    id = (idSeed++) & 0xFFFF;

    query = malloc(sizeof(DnsQueryRec));
    if(query == NULL) {
        do_log(L_ERROR, "Couldn't allocate DNS query.\n");
        message = internAtom("Couldn't allocate DNS query");
        goto fallback;
    }
    query->id = id;
    query->inet4 = NULL;
    query->inet6 = NULL;
    query->name = name;
    query->time = current_time.tv_sec;
    query->object = retainObject(object);
    query->timeout = 4;
    query->timeout_handler = NULL;
    query->next = NULL;

    query->timeout_handler = 
        scheduleTimeEvent(query->timeout, dnsTimeoutHandler,
                          sizeof(query), &query);
    if(query->timeout_handler == NULL) {
        do_log(L_ERROR, "Couldn't schedule DNS timeout handler.\n");
        message = internAtom("Couldn't schedule DNS timeout handler");
        goto free_fallback;
    }
    insertQuery(query);

    object->flags |= OBJECT_INPROGRESS;
    rc = sendQuery(query);
    if(rc < 0) {
        if(rc != -EWOULDBLOCK && rc != -EAGAIN && rc != -ENOBUFS) {
            object->flags &= ~OBJECT_INPROGRESS;
            message = internAtomError(-rc, "Couldn't send DNS query");
            goto remove_fallback;
        }
        /* else let it timeout */
    }
    releaseAtom(message);
    return 1;

 remove_fallback:
    removeQuery(query);
 free_fallback:
    releaseObject(query->object);
    cancelTimeEvent(query->timeout_handler);
    free(query);
 fallback:
    if(dnsUseGethostbyname >= 1) {
        releaseAtom(message);
        do_log(L_WARN, "Falling back on gethostbyname.\n");
        return really_do_gethostbyname(name, object);
    } else {
        abortObject(object, 501, message);
        notifyObject(object);
        return 1;
    }
}
Ejemplo n.º 9
0
void FlightStatuses::setStatusCode(StatusCode code)
{
    m_statusCode = code;
    insertQuery("code", toString(code));
    emit statusCodeChanged();
}