QStringList SyncJournalDb::tableColumns( const QString& table ) { QStringList columns; if( !table.isEmpty() ) { if( checkConnect() ) { QString q = QString("PRAGMA table_info(%1);").arg(table); QSqlQuery query(_db); query.prepare(q); if(!query.exec()) { QString err = query.lastError().text(); qDebug() << "Error creating prepared statement: " << query.lastQuery() << ", Error:" << err;; return columns; } while( query.next() ) { columns.append( query.value(1).toString() ); } } } qDebug() << "Columns in the current journal: " << columns; return columns; }
SyncJournalDb::UploadInfo SyncJournalDb::getUploadInfo(const QString& file) { QMutexLocker locker(&_mutex); UploadInfo res; if( checkConnect() ) { _getUploadInfoQuery->bindValue(":pa", file); if (!_getUploadInfoQuery->exec()) { QString err = _getUploadInfoQuery->lastError().text(); qDebug() << "Database error for file " << file << " : " << _getUploadInfoQuery->lastQuery() << ", Error:" << err; return res; } if( _getUploadInfoQuery->next() ) { bool ok = true; res._chunk = _getUploadInfoQuery->value(0).toInt(&ok); res._transferid = _getUploadInfoQuery->value(1).toInt(&ok); res._errorCount = _getUploadInfoQuery->value(2).toInt(&ok); res._size = _getUploadInfoQuery->value(3).toLongLong(&ok); res._modtime = QDateTime::fromTime_t(_getUploadInfoQuery->value(4).toLongLong(&ok)); res._valid = ok; } _getUploadInfoQuery->finish(); } return res; }
SyncJournalDb::DownloadInfo SyncJournalDb::getDownloadInfo(const QString& file) { QMutexLocker locker(&_mutex); DownloadInfo res; if( checkConnect() ) { _getDownloadInfoQuery->bindValue(":pa", file); if (!_getDownloadInfoQuery->exec()) { QString err = _getDownloadInfoQuery->lastError().text(); qDebug() << "Database error for file " << file << " : " << _getDownloadInfoQuery->lastQuery() << ", Error:" << err;; return res; } if( _getDownloadInfoQuery->next() ) { bool ok = true; res._tmpfile = _getDownloadInfoQuery->value(0).toString(); res._etag = _getDownloadInfoQuery->value(1).toByteArray(); res._errorCount = _getDownloadInfoQuery->value(2).toInt(&ok); res._valid = ok; } _getDownloadInfoQuery->finish(); } return res; }
bool SyncJournalDb::updateErrorBlacklistTableStructure() { QStringList columns = tableColumns("blacklist"); bool re = true; // check if the file_id column is there and create it if not if( !checkConnect() ) { return false; } if( columns.indexOf(QLatin1String("lastTryTime")) == -1 ) { SqlQuery query(_db); query.prepare("ALTER TABLE blacklist ADD COLUMN lastTryTime INTEGER(8);"); if( !query.exec() ) { sqlFail("updateBlacklistTableStructure: Add lastTryTime fileid", query); re = false; } query.prepare("ALTER TABLE blacklist ADD COLUMN ignoreDuration INTEGER(8);"); if( !query.exec() ) { sqlFail("updateBlacklistTableStructure: Add ignoreDuration fileid", query); re = false; } commitInternal("update database structure: add lastTryTime, ignoreDuration cols"); } return re; }
void SyncJournalDb::setUploadInfo(const QString& file, const SyncJournalDb::UploadInfo& i) { QMutexLocker locker(&_mutex); if( !checkConnect() ) { return; } if (i._valid) { _setUploadInfoQuery->bindValue(0, file); _setUploadInfoQuery->bindValue(1, i._chunk); _setUploadInfoQuery->bindValue(2, i._transferid ); _setUploadInfoQuery->bindValue(3, i._errorCount ); _setUploadInfoQuery->bindValue(4, i._size ); _setUploadInfoQuery->bindValue(5, QString::number(i._modtime.toTime_t()) ); if( !_setUploadInfoQuery->exec() ) { qWarning() << "Exec error of SQL statement: " << _setUploadInfoQuery->lastQuery() << " :" << _setUploadInfoQuery->lastError().text(); return; } qDebug() << _setUploadInfoQuery->lastQuery() << file << i._chunk << i._transferid << i._errorCount; _setUploadInfoQuery->finish(); } else { _deleteUploadInfoQuery->bindValue(0, file); if( !_deleteUploadInfoQuery->exec() ) { qWarning() << "Exec error of SQL statement: " << _deleteUploadInfoQuery->lastQuery() << " : " << _deleteUploadInfoQuery->lastError().text(); return; } qDebug() << _deleteUploadInfoQuery->executedQuery() << file; _deleteUploadInfoQuery->finish(); } }
void SyncJournalDb::setDownloadInfo(const QString& file, const SyncJournalDb::DownloadInfo& i) { QMutexLocker locker(&_mutex); if( !checkConnect() ) { return; } if (i._valid) { _setDownloadInfoQuery->bindValue(0, file); _setDownloadInfoQuery->bindValue(1, i._tmpfile); _setDownloadInfoQuery->bindValue(2, i._etag ); _setDownloadInfoQuery->bindValue(3, i._errorCount ); if( !_setDownloadInfoQuery->exec() ) { qWarning() << "Exec error of SQL statement: " << _setDownloadInfoQuery->lastQuery() << " :" << _setDownloadInfoQuery->lastError().text(); return; } qDebug() << _setDownloadInfoQuery->lastQuery() << file << i._tmpfile << i._etag << i._errorCount; _setDownloadInfoQuery->finish(); } else { _deleteDownloadInfoQuery->bindValue( 0, file ); if( !_deleteDownloadInfoQuery->exec() ) { qWarning() << "Exec error of SQL statement: " << _deleteDownloadInfoQuery->lastQuery() << " : " << _deleteDownloadInfoQuery->lastError().text(); return; } qDebug() << _deleteDownloadInfoQuery->executedQuery() << file; _deleteDownloadInfoQuery->finish(); } }
SyncJournalBlacklistRecord SyncJournalDb::blacklistEntry( const QString& file ) { QMutexLocker locker(&_mutex); SyncJournalBlacklistRecord entry; if( file.isEmpty() ) return entry; // SELECT lastTryEtag, lastTryModtime, retrycount, errorstring if( checkConnect() ) { _blacklistQuery->bindValue( ":path", file ); if( _blacklistQuery->exec() ){ if( _blacklistQuery->next() ) { bool ok; entry._lastTryEtag = _blacklistQuery->value(0).toByteArray(); entry._lastTryModtime = _blacklistQuery->value(1).toLongLong(&ok); entry._retryCount = _blacklistQuery->value(2).toInt(); entry._errorString = _blacklistQuery->value(3).toString(); entry._file = file; } } else { qWarning() << "Exec error blacklist: " << _blacklistQuery->lastQuery() << " : " << _blacklistQuery->lastError().text(); } _blacklistQuery->finish(); } return entry; }
bool SyncJournalDb::updateDatabaseStructure() { QStringList columns = tableColumns("metadata"); bool re = true; // check if the file_id column is there and create it if not if( !checkConnect() ) { return false; } if( columns.indexOf(QLatin1String("fileid")) == -1 ) { QSqlQuery query(_db); query.prepare("ALTER TABLE metadata ADD COLUMN fileid VARCHAR(128);"); if( !query.exec() ) { sqlFail("updateDatabaseStructure: Add column fileid", query); re = false; } query.prepare("CREATE INDEX metadata_file_id ON metadata(fileid);"); if( ! query.exec() ) { sqlFail("updateDatabaseStructure: create index fileid", query); re = false; } commitInternal("update database structure: add fileid col"); } if( columns.indexOf(QLatin1String("remotePerm")) == -1 ) { QSqlQuery query(_db); query.prepare("ALTER TABLE metadata ADD COLUMN remotePerm VARCHAR(128);"); if( !query.exec()) { sqlFail("updateDatabaseStructure: add column remotePerm", query); re = false; } commitInternal("update database structure (remotePerm"); } if( 1 ) { QSqlQuery query(_db); query.prepare("CREATE INDEX IF NOT EXISTS metadata_inode ON metadata(inode);"); if( !query.exec()) { sqlFail("updateDatabaseStructure: create index inode", query); re = false; } commitInternal("update database structure: add inode index"); } if( 1 ) { QSqlQuery query(_db); query.prepare("CREATE INDEX IF NOT EXISTS metadata_pathlen ON metadata(pathlen);"); if( !query.exec()) { sqlFail("updateDatabaseStructure: create index pathlen", query); re = false; } commitInternal("update database structure: add pathlen index"); } return re; }
void TcpSocketImpl::endConnect() { log_trace("ending connect"); if(_pfd && ! _socket.wbuf()) { _pfd->events &= ~POLLOUT; } checkPendingError(); if( _isConnected ) return; try { while (true) { pollfd pfd; pfd.fd = this->fd(); pfd.revents = 0; pfd.events = POLLOUT; log_debug("wait " << timeout() << " ms"); bool avail = this->wait(this->timeout(), pfd); if (avail) { // something has happened int sockerr = checkConnect(); if (_isConnected) return; if (++_addrInfoPtr == _addrInfo.impl()->end()) { // no more addrInfo - propagate error throw IOError(connectFailedMessage(_addrInfo, sockerr)); } } else if (++_addrInfoPtr == _addrInfo.impl()->end()) { log_debug("timeout"); throw IOTimeout(); } close(); _connectResult = tryConnect(); if (_isConnected) return; checkPendingError(); } } catch(...) { close(); throw; } }
void SyncJournalDb::updateBlacklistEntry( const SyncJournalBlacklistRecord& item ) { QMutexLocker locker(&_mutex); QSqlQuery query(_db); if( !checkConnect() ) { return; } QString sql("SELECT retrycount FROM blacklist WHERE path=:path"); if( Utility::fsCasePreserving() ) { // if the file system is case preserving we have to check the blacklist // case insensitively sql += QLatin1String(" COLLATE NOCASE"); } query.prepare(sql); query.bindValue(":path", item._file); if( !query.exec() ) { qDebug() << "SQL exec blacklistitem failed:" << query.lastError().text(); return; } QSqlQuery iQuery(_db); if( query.next() ) { int retries = query.value(0).toInt(); retries--; if( retries < 0 ) retries = 0; iQuery.prepare( "UPDATE blacklist SET lastTryEtag = :etag, lastTryModtime = :modtime, " "retrycount = :retries, errorstring = :errStr WHERE path=:path"); iQuery.bindValue(":etag", item._lastTryEtag); iQuery.bindValue(":modtime", QString::number(item._lastTryModtime)); iQuery.bindValue(":retries", retries); iQuery.bindValue(":errStr", item._errorString); iQuery.bindValue(":path", item._file); } else { // there is no entry yet. iQuery.prepare("INSERT INTO blacklist (path, lastTryEtag, lastTryModtime, retrycount, errorstring) " "VALUES (:path, :lastEtag, :lastMTime, :retrycount, :errorstring);"); iQuery.bindValue(":path", item._file ); iQuery.bindValue(":lastEtag", item._lastTryEtag); iQuery.bindValue(":lastMTime", QString::number(item._lastTryModtime)); iQuery.bindValue(":retrycount", item._retryCount); iQuery.bindValue(":errorstring", item._errorString); } if( !iQuery.exec() ) { qDebug() << "SQL exec blacklistitem insert/update failed: "<< iQuery.lastError().text(); } }
bool Conn::dropPacketWrite(Packet &&pkt) { write_queue.push_back( pkt.data ); pkt.data=nullptr; write_queue_len++; if( unlikely(checkConnect()) ) { log_func("[iproto_conn] %s:%u dropPacketWrite deferred (no connect)", ep.address().to_string().c_str(), ep.port()); return false; } ensureWriteBuffer( boost::system::error_code() ); return true; }
void SyncJournalDb::wipeBlacklistEntry( const QString& file ) { QMutexLocker locker(&_mutex); if( checkConnect() ) { QSqlQuery query(_db); query.prepare("DELETE FROM blacklist WHERE path=:path"); query.bindValue(":path", file); if( ! query.exec() ) { sqlFail("Deletion of blacklist item failed.", query); } } }
int CNetManager::SetConnectionMode(int mode, CNetConnection **handle, string &strErr) { int ret=0; int connectState=0; if (mode >= NET_VPN) { *handle = m_pConnectionL1; strErr = "给定的网络模式不正确"; return NET_MODE_ER; } //若当前有未断开的连接,禁止切换 connectState = checkConnect(); if (connectState == CONNECT_ON_L2) //VPN连接未断 { *handle = m_pConnectionL1; strErr = "请先断开VPN连接"; return NET_INIT_FAIL; } else if (connectState == CONNECT_ON_L1) //第一层连接未断 { //LAN与WMMP没有建立与断开的过程,可跳过 if (GetConnectionMode()!=NET_LAN && GetConnectionMode()!=NET_M2M_WMMP) { *handle = m_pConnectionL1; strErr = "当前连接未断开,无法切换模式"; return NET_INIT_FAIL; } } //重新建立实体 if (m_pConnectionL1 != NULL) { delete m_pConnectionL1; m_pConnectionL1 = NULL; } ret = buildConnectionInstance(mode, &m_pConnectionL1, strErr); *handle = m_pConnectionL1; if (ret != NET_SUCCESS) { return ret; } //第一层网络需调用initNetDevice() m_pConnectionL1->initNetDevice(strErr); return NET_SUCCESS; }
int SyncJournalDb::wipeBlacklist() { QMutexLocker locker(&_mutex); if( checkConnect() ) { QSqlQuery query(_db); query.prepare("DELETE FROM blacklist"); if( ! query.exec() ) { sqlFail("Deletion of whole blacklist failed", query); return -1; } return query.numRowsAffected(); } return -1; }
int SyncJournalDb::blackListEntryCount() { int re = 0; QMutexLocker locker(&_mutex); if( checkConnect() ) { QSqlQuery query(_db); if( ! query.exec("SELECT count(*) FROM blacklist") ) { sqlFail("Count number of blacklist entries failed", query); } if( query.next() ) { re = query.value(0).toInt(); } } return re; }
bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& record ) { QMutexLocker locker(&_mutex); qlonglong phash = getPHash(record._path); if( checkConnect() ) { QByteArray arr = record._path.toUtf8(); int plen = arr.length(); // _setFileRecordQuery->prepare("INSERT OR REPLACE INTO metadata " // "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid) " // "VALUES ( ? , ?, ? , ? , ? , ? , ?, ? , ? , ?, ? )" ); QString etag( record._etag ); if( etag.isEmpty() ) etag = ""; QString fileId( record._fileId); if( fileId.isEmpty() ) fileId = ""; _setFileRecordQuery->bindValue(0, QString::number(phash)); _setFileRecordQuery->bindValue(1, plen); _setFileRecordQuery->bindValue(2, record._path ); _setFileRecordQuery->bindValue(3, record._inode ); _setFileRecordQuery->bindValue(4, record._uid ); _setFileRecordQuery->bindValue(5, record._gid ); _setFileRecordQuery->bindValue(6, record._mode ); _setFileRecordQuery->bindValue(7, QString::number(record._modtime.toTime_t())); _setFileRecordQuery->bindValue(8, QString::number(record._type) ); _setFileRecordQuery->bindValue(9, etag ); _setFileRecordQuery->bindValue(10, fileId ); if( !_setFileRecordQuery->exec() ) { qWarning() << "Error SQL statement setFileRecord: " << _setFileRecordQuery->lastQuery() << " :" << _setFileRecordQuery->lastError().text(); return false; } qDebug() << _setFileRecordQuery->lastQuery() << phash << plen << record._path << record._inode << record._uid << record._gid << record._mode << QString::number(record._modtime.toTime_t()) << QString::number(record._type) << record._etag << record._fileId; _setFileRecordQuery->finish(); return true; } else { qDebug() << "Failed to connect database."; return false; // checkConnect failed. } }
void SyncJournalDb::avoidRenamesOnNextSync(const QString& path) { QMutexLocker locker(&_mutex); if( !checkConnect() ) { return; } QSqlQuery query(_db); query.prepare("UPDATE metadata SET fileid = '', inode = '0' WHERE path == ? OR path LIKE(?||'/%')"); query.bindValue(0, path); query.bindValue(1, path); if( !query.exec() ) { qDebug() << "SQL error in avoidRenamesOnNextSync: "<< query.lastError().text(); } else { qDebug() << query.executedQuery() << path; } }
int CNetManager::getIPinfo(IPinfo *info, string &strErr) { int ret = checkConnect(); if (ret == CONNECT_ON_L2) { CNetConnection *p=GetConnectionHandleL2(); return p->performGetIPinfo(info, strErr); } else if (ret == CONNECT_ON_L1) { CNetConnection *p=GetConnectionHandle(); return p->performGetIPinfo(info, strErr); } else { strErr = "网络尚未接通,无IP信息"; return NET_CONNECT_FAIL; } }
SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename ) { QMutexLocker locker(&_mutex); qlonglong phash = getPHash( filename ); SyncJournalFileRecord rec; /* CREATE TABLE "metadata"(phash INTEGER(8),pathlen INTEGER,path VARCHAR(4096),inode INTEGER,uid INTEGER,gid INTEGER,mode INTEGER,modtime INTEGER(8),type INTEGER,md5 VARCHAR(32),PRIMARY KEY(phash)); CREATE INDEX metadata_inode ON metadata(inode); CREATE INDEX metadata_phash ON metadata(phash); */ if( checkConnect() ) { _getFileRecordQuery->bindValue(":ph", QString::number(phash)); if (!_getFileRecordQuery->exec()) { QString err = _getFileRecordQuery->lastError().text(); qDebug() << "Error creating prepared statement: " << _getFileRecordQuery->lastQuery() << ", Error:" << err;; return rec; } if( _getFileRecordQuery->next() ) { bool ok; rec._path = _getFileRecordQuery->value(0).toString(); rec._inode = _getFileRecordQuery->value(1).toInt(&ok); rec._uid = _getFileRecordQuery->value(2).toInt(&ok); rec._gid = _getFileRecordQuery->value(3).toInt(&ok); rec._mode = _getFileRecordQuery->value(4).toInt(&ok); rec._modtime = QDateTime::fromTime_t(_getFileRecordQuery->value(5).toLongLong(&ok)); rec._type = _getFileRecordQuery->value(6).toInt(&ok); rec._etag = _getFileRecordQuery->value(7).toString(); rec._fileId = _getFileRecordQuery->value(8).toString(); _getFileRecordQuery->finish(); } else { QString err = _getFileRecordQuery->lastError().text(); qDebug() << "Can not query " << _getFileRecordQuery->lastQuery() << ", Error:" << err; } } return rec; }
/* begin a transaction */ void sql_begTrans(void) { checkConnect(); stmt_text = 0; hstmt = SQL_NULL_HSTMT; rv_lastStatus = 0; /* might never call errorTrap(0) */ /* count the nesting level of transactions. */ if(!translevel) { badtrans = false; stmt_text = "begin work"; debugStatement(); rc = SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); if(errorTrap(0)) return; } ++translevel; exclist = 0; } /* sql_begTrans */
bool SyncJournalDb::postSyncCleanup(const QHash<QString, QString> &items ) { QMutexLocker locker(&_mutex); if( !checkConnect() ) { return false; } QSqlQuery query(_db); query.prepare("SELECT phash, path FROM metadata order by path"); if (!query.exec()) { QString err = query.lastError().text(); qDebug() << "Error creating prepared statement: " << query.lastQuery() << ", Error:" << err;; return false; } QStringList superfluousItems; while(query.next()) { const QString file = query.value(1).toString(); bool contained = items.contains(file); if( !contained ) { superfluousItems.append(query.value(0).toString()); } } if( superfluousItems.count() ) { QString sql = "DELETE FROM metadata WHERE phash in ("+ superfluousItems.join(",")+")"; qDebug() << "Sync Journal cleanup: " << sql; QSqlQuery delQuery(_db); delQuery.prepare(sql); if( !delQuery.exec() ) { QString err = delQuery.lastError().text(); qDebug() << "Error removing superfluous journal entries: " << delQuery.lastQuery() << ", Error:" << err;; return false; } } return true; }
void SyncJournalDb::avoidReadFromDbOnNextSync(const QString& fileName) { //Make sure that on the next sync, filName is not read from the DB but use the PROPFIND to //get the info from the server // We achieve that by clearing the etag of the parents directory recursively QMutexLocker locker(&_mutex); if( !checkConnect() ) { return; } QSqlQuery query(_db); // This query will match entries for whitch the path is a prefix of fileName query.prepare("UPDATE metadata SET md5='_invalid_' WHERE ? LIKE(path||'/%') AND type == 2"); // CSYNC_FTW_TYPE_DIR == 2 query.bindValue(0, fileName); if( !query.exec() ) { qDebug() << "SQL error in avoidRenamesOnNextSync: "<< query.lastError().text(); } else { qDebug() << query.executedQuery() << fileName; } }
bool SyncJournalDb::updateDatabaseStructure() { QStringList columns = tableColumns("metadata"); bool re = true; // check if the file_id column is there and create it if not if( !checkConnect() ) { return false; } if( columns.indexOf(QLatin1String("fileid")) == -1 ) { QSqlQuery query(_db); query.prepare("ALTER TABLE metadata ADD COLUMN fileid VARCHAR(128);"); re = query.exec(); query.prepare("CREATE INDEX metadata_file_id ON metadata(fileid);"); re = re && query.exec(); commitInternal("update database structure"); } return re; }
bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively) { QMutexLocker locker(&_mutex); if( checkConnect() ) { // if (!recursively) { // always delete the actual file. qlonglong phash = getPHash(filename); _deleteFileRecordPhash->bindValue( 0, QString::number(phash) ); if( !_deleteFileRecordPhash->exec() ) { qWarning() << "Exec error of SQL statement: " << _deleteFileRecordPhash->lastQuery() << " : " << _deleteFileRecordPhash->lastError().text(); return false; } qDebug() << _deleteFileRecordPhash->executedQuery() << phash << filename; _deleteFileRecordPhash->finish(); if( recursively) { _deleteFileRecordRecursively->bindValue(0, filename); if( !_deleteFileRecordRecursively->exec() ) { qWarning() << "Exec error of SQL statement: " << _deleteFileRecordRecursively->lastQuery() << " : " << _deleteFileRecordRecursively->lastError().text(); return false; } qDebug() << _deleteFileRecordRecursively->executedQuery() << filename; _deleteFileRecordRecursively->finish(); } return true; } else { qDebug() << "Failed to connect database."; return false; // checkConnect failed. } }
int SyncJournalDb::getFileRecordCount() { QMutexLocker locker(&_mutex); if( !checkConnect() ) { return -1; } QSqlQuery query(_db); query.prepare("SELECT COUNT(*) FROM metadata"); if (!query.exec()) { QString err = query.lastError().text(); qDebug() << "Error creating prepared statement: " << query.lastQuery() << ", Error:" << err;; return 0; } if (query.next()) { int count = query.value(0).toInt(); return count; } return 0; }
bool TcpSocketImpl::checkPollEvent(pollfd& pfd) { log_debug("checkPollEvent " << pfd.revents); if( _isConnected ) { // check for error while neither reading nor writing // // if reading or writing, IODeviceImpl::checkPollEvent will emit // inputReady or outputReady signal and the user gets an exception in // endRead or endWrite. if ( !_device.reading() && !_device.writing() && (pfd.revents & POLLERR) ) { _device.close(); _socket.closed(_socket); return true; } return IODeviceImpl::checkPollEvent(pfd); } if ( pfd.revents & POLLERR ) { AddrInfoImpl::const_iterator ptr = _addrInfoPtr; if (++ptr == _addrInfo.impl()->end()) { // not really connected but error // end of addrinfo list means that no working addrinfo was found log_debug("no more addrinfos found"); _socket.connected(_socket); return true; } else { _addrInfoPtr = ptr; close(); _connectResult = tryConnect(); if (_isConnected || !_connectResult.empty()) { // immediate success or error log_debug("connected successfully"); _socket.connected(_socket); } else { // by closing the previous file handle _pfd is set to 0. // creating a new socket in tryConnect may also change the value of fd. initializePoll(&pfd, 1); } return true; } } else if( pfd.revents & POLLOUT ) { int sockerr = checkConnect(); if (_isConnected) { _socket.connected(_socket); return true; } // something went wrong - look for next addrInfo log_debug("sockerr is " << sockerr << " try next"); if (++_addrInfoPtr == _addrInfo.impl()->end()) { // no more addrInfo - propagate error _connectResult = connectFailedMessage(_addrInfo, sockerr); _socket.connected(_socket); return true; } _connectResult = tryConnect(); if (_isConnected) { _socket.connected(_socket); return true; } } return false; }
bool KraftDB::dbConnect( const QString& driver, const QString& dbName, const QString& dbUser, const QString& dbHost, const QString& dbPasswd ) { mSuccess = true; mDatabaseDriver = driver; if( driver.isEmpty() ) { mDatabaseDriver = DatabaseSettings::self()->dbDriver().toUpper(); } if( mDatabaseDriver.isEmpty() ) { kDebug() << "Database Driver is not specified, check katalog settings"; mSuccess = false; return false; } else { kDebug() << "Using database Driver " << mDatabaseDriver; } QStringList list = QSqlDatabase::drivers(); if( list.size() == 0 ) { kDebug() << "Database Drivers could not be loaded." << endl; mSuccess = false ; } else { if( list.indexOf( mDatabaseDriver ) == -1 ) { kDebug() << "Database Driver " << mDatabaseDriver << " could not be loaded!" << endl; mSuccess = false; } } if( mSuccess && m_db.isValid() ) { m_db.close(); } if( mSuccess ) { m_db = QSqlDatabase::addDatabase( mDatabaseDriver ); if ( ! m_db.isValid() || m_db.isOpenError() ) { kDebug() << "Failed to connect to the database driver: " << m_db.lastError().text() << endl; mSuccess = false; } } if ( mSuccess ) { int re = 0; if(mDatabaseDriver == "QMYSQL") { QString host = dbHost; if( host.isEmpty() ) host = DatabaseSettings::self()->dbServerName(); QString name = dbName; if( name.isEmpty() ) name = DatabaseSettings::self()->dbDatabaseName(); QString user = dbUser; if( user.isEmpty() ) user = DatabaseSettings::self()->dbUser(); QString pwd = dbPasswd; if( pwd.isEmpty() ) pwd = DatabaseSettings::self()->dbPassword(); kDebug() << "Try to open MySQL database " << name << endl; re = checkConnect( host, name , user, pwd ); } else if(mDatabaseDriver == "QSQLITE") { // SqlLite only requires a valid file name which comes in as Database Name QString name = dbName; if( name.isEmpty() ) name = DatabaseSettings::self()->dbFile(); kDebug() << "Try to open SqLite database " << name << endl; re = checkConnect( "", name, "", ""); } if ( re == 0 ) { // Database successfully opened; we can now issue SQL commands. kDebug() << "** Database opened successfully" << endl; } else { kDebug() << "## Could not open database" << endl; mSuccess = false; } } return mSuccess; }
bool SyncJournalDb::isUpdateFrom_1_5() { QMutexLocker lock(&_mutex); checkConnect(); return _possibleUpgradeFromMirall_1_5; }
bool SyncJournalDb::isConnected() { QMutexLocker lock(&_mutex); return checkConnect(); }
void sql_blobInsert(const char *tabname, const char *colname, int rowid, const char *filename, void *offset, int length) { char blobcmd[100]; SQLINTEGER output_length; bool isfile; int fd; /* basic sanity checks */ checkConnect(); if(isnullstring(tabname)) errorPrint("2blobInsert, null table name"); if(isnullstring(colname)) errorPrint("2blobInsert, null column name"); if(rowid <= 0) errorPrint("2invalid rowid in blobInsert"); if(length < 0) errorPrint("2invalid length in blobInsert"); if(strlen(tabname) + strlen(colname) + 42 >= sizeof (blobcmd)) errorPrint("@internal blobInsert command too long"); isfile = true; if(isnullstring(filename)) { isfile = false; if(!offset) errorPrint("2blobInsert is given null filename and null buffer"); } else { offset = blobbuf; fd = eopen(filename, O_RDONLY | O_BINARY, 0); length = fileSizeByHandle(fd); if(length == 0) { isfile = false; close(fd); } } /* set up the blob insert command, using one host variable */ sprintf(blobcmd, "update %s set %s = %s where rowid = %d", tabname, colname, (length ? "?" : "NULL"), rowid); stmt_text = blobcmd; debugStatement(); newStatement(); rv_lastNrows = 0; output_length = length; rc = SQL_SUCCESS; if(isfile) { output_length = SQL_LEN_DATA_AT_EXEC(length); rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_LONGVARCHAR, length, 0, blobcmd, length, &output_length); if(rc) close(fd); } else if(length) { rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_LONGVARCHAR, length, 0, offset, length, &output_length); } if(errorTrap(0)) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return; } rc = SQLExecDirect(hstmt, blobcmd, SQL_NTS); SQLRowCount(hstmt, &rv_lastNrows); if(isfile) { if(rc != SQL_NEED_DATA) { close(fd); if(rc == SQL_SUCCESS) errorPrint("@blobInsert expected SQL_NEED_DATA"); errorTrap(0); SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return; } output_length = 0; rc = SQLParamData(hstmt, (void **)&output_length); if((char *)output_length != blobcmd) { close(fd); errorPrint("2blobInsert got bad key from SQLParamData"); } lseek(fd, 0L, 0); while(length) { int n = length; if(n > sizeof (blobbuf)) n = sizeof (blobbuf); if(read(fd, blobbuf, n) != n) { close(fd); errorPrint("2cannot read file %s, errno %d", filename, errno); } length -= n; rc = SQLPutData(hstmt, blobbuf, n); if(rc) { close(fd); errorTrap(0); SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return; } } /* loop reading the file */ close(fd); /* since there are no more exec-time parameters, * this call completes the execution of the SQL statement. */ rc = SQLParamData(hstmt, (void **)&output_length); } if(errorTrap(0)) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return; } if(sql_debug) appendFile(sql_debuglog, "%d rows affected", rv_lastNrows); if(sql_debug2) printf("%d rows affected\n", rv_lastNrows); SQLFreeHandle(SQL_HANDLE_STMT, hstmt); exclist = 0; } /* sql_blobInsert */