Skip to content

Commit

Permalink
change search request
Browse files Browse the repository at this point in the history
  • Loading branch information
mothsART committed Nov 27, 2022
1 parent 348bcf3 commit 8fe24ee
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 52 deletions.
59 changes: 39 additions & 20 deletions src/db/populate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ impl PopulateDb for DesktopDDb {
let mut locales = HashMap::new();

for d in &desktop_files {
if let Some(exec) = d.exec.as_deref() {
if let Some(_exec) = d.exec.as_deref() {
for c in &d.i18n_comments {
if locales.contains_key(c.0) {
continue;
Expand Down Expand Up @@ -66,7 +66,8 @@ impl PopulateDb for DesktopDDb {
.execute(connection)?;

let mut app_id = 0;
let mut constrain_keywords = HashSet::new();
let mut constrain_app_keywords = HashSet::new();
let mut constrain_locale_keywords = HashSet::new();
let mut constrain_app_comments = HashSet::new();
let mut constrain_locale_comments = HashSet::new();

Expand All @@ -87,12 +88,14 @@ impl PopulateDb for DesktopDDb {

app_id += 1;

if let Some(_locale_id) = (
locales.get(no_locale)
) {
let hash = format!("{}_{}", app_id, d.default_name);
if !constrain_keywords.contains(&hash) {
constrain_keywords.insert(hash);
if let Some(_locale_id) = locales.get(no_locale) {
let app_hash = format!("{}_{}", app_id, d.default_name);
let locale_hash = format!("{}_{}", _locale_id, d.default_name);
if !constrain_app_keywords.contains(&app_hash)
&& !constrain_locale_keywords.contains(&locale_hash) {
constrain_app_keywords.insert(app_hash);
constrain_locale_keywords.insert(locale_hash);

let a_l = NewAppLocale {
app_id: app_id as i32,
locale_id: *_locale_id,
Expand All @@ -114,11 +117,15 @@ impl PopulateDb for DesktopDDb {

for n in &d.i18n_names {
if let Some(_locale_id) = locales.get(n.0) {
let hash = format!("{}_{}", app_id, n.1);
if constrain_keywords.contains(&hash) {
let app_hash = format!("{}_{}", app_id, n.1);
let locale_hash = format!("{}_{}", _locale_id, n.1);
if constrain_app_keywords.contains(&app_hash)
|| constrain_locale_keywords.contains(&locale_hash) {
continue;
}
constrain_keywords.insert(hash);
constrain_app_keywords.insert(app_hash);
constrain_locale_keywords.insert(locale_hash);

let a_l = NewAppLocale {
app_id: app_id as i32,
locale_id: *_locale_id,
Expand All @@ -140,11 +147,15 @@ impl PopulateDb for DesktopDDb {

for g in &d.i18n_generic_names {
if let Some(_locale_id) = locales.get(g.0) {
let hash = format!("{}_{}", app_id, g.1);
if constrain_keywords.contains(&hash) {
let app_hash = format!("{}_{}", app_id, g.1);
let locale_hash = format!("{}_{}", _locale_id, g.1);
if constrain_app_keywords.contains(&app_hash)
|| constrain_locale_keywords.contains(&locale_hash) {
continue;
}
constrain_keywords.insert(hash);
constrain_app_keywords.insert(app_hash);
constrain_locale_keywords.insert(locale_hash);

let a_l = NewAppLocale {
app_id: app_id as i32,
locale_id: *_locale_id,
Expand Down Expand Up @@ -226,11 +237,15 @@ impl PopulateDb for DesktopDDb {

for k in &d.default_keywords {
if let Some(_locale_id) = locales.get(no_locale) {
let hash = format!("{}_{}", app_id, k);
if constrain_keywords.contains(&hash) {
let app_hash = format!("{}_{}", app_id, k);
let locale_hash = format!("{}_{}", _locale_id, k);
if constrain_app_keywords.contains(&app_hash)
|| constrain_locale_keywords.contains(&locale_hash) {
continue;
}
constrain_keywords.insert(hash);
constrain_app_keywords.insert(app_hash);
constrain_locale_keywords.insert(locale_hash);

let a_l = NewAppLocale {
app_id: app_id as i32,
locale_id: *_locale_id,
Expand All @@ -253,11 +268,15 @@ impl PopulateDb for DesktopDDb {
for k_lang in &d.i18n_keywords {
if let Some(_locale_id) = locales.get(k_lang.0) {
for k in k_lang.1 {
let hash = format!("{}_{}", app_id, k);
if constrain_keywords.contains(&hash) {
let app_hash = format!("{}_{}", app_id, k);
let locale_hash = format!("{}_{}", _locale_id, k);
if constrain_app_keywords.contains(&app_hash)
|| constrain_locale_keywords.contains(&locale_hash) {
continue;
}
constrain_keywords.insert(hash);
constrain_app_keywords.insert(app_hash);
constrain_locale_keywords.insert(locale_hash);

let a_l = NewAppLocale {
app_id: app_id as i32,
locale_id: *_locale_id,
Expand Down
65 changes: 33 additions & 32 deletions src/db/search.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use diesel::debug_query;
use diesel::sqlite::Sqlite;
use crate::diesel::JoinOnDsl;

use diesel::{
BoolExpressionMethods, ExpressionMethods, NullableExpressionMethods, QueryDsl, RunQueryDsl,
BoolExpressionMethods, ExpressionMethods, QueryDsl, RunQueryDsl,
TextExpressionMethods,
};

Expand All @@ -15,7 +16,7 @@ pub trait SearchDb {
text: &str,
locale: &str,
limit: u8,
) -> Result<Vec<Option<SearchResult>>, diesel::result::Error>;
) -> Result<Vec<SearchResult>, diesel::result::Error>;
}

impl SearchDb for DesktopDDb {
Expand All @@ -24,8 +25,8 @@ impl SearchDb for DesktopDDb {
text: &str,
locale: &str,
limit: u8,
) -> Result<Vec<Option<SearchResult>>, diesel::result::Error> {
use crate::schema::{app, comments, keywords};
) -> Result<Vec<SearchResult>, diesel::result::Error> {
use crate::schema::{app, app_locale, locale, comments, keywords};

let selection = (
app::title,
Expand All @@ -52,43 +53,43 @@ impl SearchDb for DesktopDDb {
let location = locale.get(0..5).unwrap_or("en_EN");

let query = app::dsl::app
.left_join(keywords::dsl::keywords)
.inner_join(comments::dsl::comments)
.filter(
app::title
.like(format!("{}%", text))
/*
.or(
comments::title
.like(format!("%{}%", text))
.and(
comments::lang.eq(lang)
.or(
comments::lang.eq(location)
)
)
.inner_join(
app_locale::dsl::app_locale.on(app_locale::app_id.eq(app::id))
)
.inner_join(
locale::dsl::locale.on(locale::id.eq(app_locale::locale_id))
)
.inner_join(keywords::dsl::keywords)
.inner_join(comments::dsl::comments.on(
comments::app_id.eq(app::id)
.and(
comments::locale_id.eq(locale::id)
)
.or(
keywords::key
.like(format!("{}%", text))
.and(
keywords::lang.eq(lang)
.or(
keywords::lang.eq(location)
)
)
)
)
.filter(
keywords::key
.like(format!("%{}%", text))
.and(
locale::key.eq(lang)
.or(
locale::key.eq(location)
)
.or(
locale::key.eq("__NO_LOCALE__")
)
)
*/
)
//.limit(limit.into())
.select(selection.nullable())
.group_by(selection);
.select(selection)
.group_by(selection)
;

if self.debug {
let sql_debug = debug_query::<Sqlite, _>(&query);
println!("{}", sql_debug);
}

query.load::<Option<SearchResult>>(&mut self.connection)
query.load::<SearchResult>(&mut self.connection)
}
}

0 comments on commit 8fe24ee

Please sign in to comment.