/*!
* \brief 引数として与えられたドメイン名に対して一意な番号を返します。
*/
-int TM::SiteDatabase::site_id(QString domain)
+quint32 TM::SiteDatabase::site_id(QString domain)
{
// キャッシュが大きくなりすぎた場合、消去する。
if(m_cache_limit < m_cache.size()) m_cache.clear();
// キャッシュを検索。
- QMap<QString, int>::const_iterator it = m_cache.find(domain);
+ QMap<QString, quint32>::const_iterator it = m_cache.find(domain);
if(it != m_cache.end()) return *it; // キャッシュに存在する場合、ここで終わり。
// キャッシュにない場合、データベースを検索。
- int result = find_site_id(domain);
+ quint32 result = find_site_id(domain);
// データベースにない場合、データベースに登録。
if(!result)
{
*
* 登録されていない場合、0を返します。
*/
-int TM::SiteDatabase::find_site_id(QString host_name)
+quint32 TM::SiteDatabase::find_site_id(QString host_name)
{
m_find_site_id.bindValue(0, host_name);
exec(m_find_site_id, Q_FUNC_INFO);
- if(m_find_site_id.next()) return m_find_site_id.value(0).toInt();
+ if(m_find_site_id.next()) return m_find_site_id.value(0).toUInt();
return 0;
}
m_word_databases.insert(code, WordDatabase::create(m_settings, name));
}
+/*!
+ * \brief 引数として与えられたサイトに対応するIDを返します。
+ */
quint32 TM::Database::find_site_id(QString host_name)
{
quint32 result = m_site_database->site_id(host_name);
return result;
}
-void TM::Database::find_sentence(quint32 site_id, int scode, int tcode,
- int segment_id, int index, sentence_data_type::pointer source,
- SocketConnection::pointer socket)
+void TM::Database::find_sentence(QString site_name, int scode, int tcode,
+ sentence_data_type::pointer source, int token)
{
sentence_data_type::pointer result;
+ quint32 site_id = find_site_id(site_name);
+ assert(site_id);
+
SentenceDatabase::pointer sdb = find_sentence_database(site_id, scode);
assert(sdb);
SentenceDatabase::pointer tdb = find_sentence_database(site_id, tcode);
if(result) result->quality = 100;
}
- // 検索結果を返す。
- QMetaObject::invokeMethod(
- m_service, "sentence_found",
- Qt::QueuedConnection,
- Q_ARG(qint32, segment_id),
- Q_ARG(qint32, index),
- Q_ARG(sentence_data_type::pointer, result),
- Q_ARG(SocketConnection::pointer, socket));
-
+ if(result) // 検索結果を返す。
+ {
+ QMetaObject::invokeMethod(
+ m_service, "sentence_found",
+ Qt::QueuedConnection,
+ Q_ARG(sentence_data_type::pointer, result),
+ Q_ARG(qint32, token));
+ }
+ else // 検索できなかったことを通知する。
+ {
+ QMetaObject::invokeMethod(
+ m_service, "sentence_not_found",
+ Qt::QueuedConnection,
+ Q_ARG(QString, site_name),
+ Q_ARG(qint32, scode),
+ Q_ARG(qint32, tcode),
+ Q_ARG(QString, source->sentence),
+ Q_ARG(qint32, token));
+ }
}
-void TM::Database::insert_sentence(quint32 site_id,
- quint32 scode, sentence_data_type::pointer source,
- quint32 tcode, sentence_data_type::pointer target)
+void TM::Database::insert_sentence(
+ QString site_name, quint32 scode, quint32 tcode,
+ sentence_data_type::pointer source,
+ sentence_data_type::pointer target)
{
// 入力の検証。
- assert(site_id);
+ assert(!site_name.isEmpty());
assert(scode);
assert(tcode);
-
assert(source->source_id == 0);
assert(source->json.isEmpty());
assert(target->previous_crc == 0);
assert(target->next_crc == 0);
+ quint32 site_id = find_site_id(site_name);
+ assert(site_id);
+ if(!site_id) return;
+
// 原文の更新。
SentenceDatabase::pointer sdb = find_sentence_database(site_id, scode);
assert(sdb);
IndexDatabase::pointer index_database =
find_index_database(site_id, scode, tcode);
assert(index_database);
- WordDatabase::pointer word_database =
- find_word_database(scode);
+ WordDatabase::pointer word_database = find_word_database(scode);
+ assert(word_database);
index_database->insert_index(word_database, source, target_id);
- assert(index_database);
}
QString TM::Database::find_language_name(int code) const