RohanVashisht commited on
Commit
d2501a2
·
1 Parent(s): 204f438

fixed search

Browse files
Files changed (1) hide show
  1. main.py +19 -16
main.py CHANGED
@@ -249,11 +249,19 @@ def search_repos(
249
  Returns:
250
  List of repository dictionaries with default branch minimum_zig_version
251
  """
252
- search_term = f"%{query}%"
 
 
 
253
  type_filter = get_type_filter(search_type)
254
 
255
  sql = f"""
256
- WITH repo_data AS (
 
 
 
 
 
257
  SELECT
258
  r.id,
259
  r.avatar_id,
@@ -274,18 +282,12 @@ def search_repos(
274
  r.primary_language,
275
  r.minimum_zig_version
276
  FROM repos r
 
277
  LEFT JOIN packages pkg ON r.id = pkg.repo_id
278
  LEFT JOIN programs prog ON r.id = prog.repo_id
279
  WHERE
280
  r.is_disabled = 0
281
  {type_filter}
282
- AND (
283
- r.id LIKE ?1
284
- OR r.owner LIKE ?1
285
- OR r.description LIKE ?1
286
- OR r.search_keywords LIKE ?1
287
- OR r.primary_language LIKE ?1
288
- )
289
  )
290
  SELECT
291
  rd.*,
@@ -293,16 +295,17 @@ def search_repos(
293
  FROM repo_data rd
294
  ORDER BY
295
  CASE
296
- WHEN rd.id = ?2 THEN 1
297
- WHEN rd.id LIKE ?3 THEN 2
298
  ELSE 3
299
  END,
300
  rd.stargazer_count DESC
301
- LIMIT ?4
302
  """
303
 
304
  starts_with = f"{query}%"
305
- cursor = conn.execute(sql, (search_term, query, starts_with, limit))
 
306
  rows = cursor.fetchall()
307
 
308
  return [row_to_repo_dict(row) for row in rows]
@@ -475,7 +478,7 @@ def get_repo_details(conn, repo_id: str, version: Optional[str] = None) -> Dict[
475
  id, avatar_id, owner, platform, description, issues_count,
476
  default_branch_name, fork_count, stargazer_count, watchers_count,
477
  pushed_at, created_at, is_archived, is_disabled, is_fork,
478
- license, primary_language
479
  FROM repos WHERE id = ?
480
  """
481
 
@@ -489,7 +492,7 @@ def get_repo_details(conn, repo_id: str, version: Optional[str] = None) -> Dict[
489
  r_id, avatar_id, owner, platform, desc, issues,
490
  default_branch, forks, stars, watchers,
491
  pushed_at, created_at, is_archived, is_disabled, is_fork,
492
- license_spdx, primary_language
493
  ) = repo_row
494
 
495
  # Map platform to provider
@@ -555,7 +558,7 @@ def get_repo_details(conn, repo_id: str, version: Optional[str] = None) -> Dict[
555
  # Get default branch info
556
  branch_info = get_default_branch_info(conn, repo_id, default_branch)
557
  response.update({
558
- "minimum_zig_version": branch_info["minimum_zig_version"],
559
  "dependencies": branch_info["dependencies"],
560
  "branch_name": branch_info["branch_name"],
561
  "latest_version": branch_info.get("latest_version"),
 
249
  Returns:
250
  List of repository dictionaries with default branch minimum_zig_version
251
  """
252
+ search_term_like = f"%{query}%"
253
+ # FTS5 query with prefix matching for each word
254
+ fts_query = " ".join('"' + word.replace('"', '""') + '"*' for word in query.split() if word)
255
+
256
  type_filter = get_type_filter(search_type)
257
 
258
  sql = f"""
259
+ WITH matched_ids AS (
260
+ SELECT repo_id FROM repo_search WHERE keywords MATCH ?1
261
+ UNION
262
+ SELECT id FROM repos WHERE id LIKE ?2 OR owner LIKE ?2 OR description LIKE ?2 OR primary_language LIKE ?2
263
+ ),
264
+ repo_data AS (
265
  SELECT
266
  r.id,
267
  r.avatar_id,
 
282
  r.primary_language,
283
  r.minimum_zig_version
284
  FROM repos r
285
+ JOIN matched_ids mi ON r.id = mi.repo_id
286
  LEFT JOIN packages pkg ON r.id = pkg.repo_id
287
  LEFT JOIN programs prog ON r.id = prog.repo_id
288
  WHERE
289
  r.is_disabled = 0
290
  {type_filter}
 
 
 
 
 
 
 
291
  )
292
  SELECT
293
  rd.*,
 
295
  FROM repo_data rd
296
  ORDER BY
297
  CASE
298
+ WHEN rd.id = ?3 THEN 1
299
+ WHEN rd.id LIKE ?4 THEN 2
300
  ELSE 3
301
  END,
302
  rd.stargazer_count DESC
303
+ LIMIT ?5
304
  """
305
 
306
  starts_with = f"{query}%"
307
+ # Parameters matches ?1 (FTS), ?2 (LIKE), ?3 (Exact), ?4 (Starts with), ?5 (Limit)
308
+ cursor = conn.execute(sql, (fts_query, search_term_like, query, starts_with, limit))
309
  rows = cursor.fetchall()
310
 
311
  return [row_to_repo_dict(row) for row in rows]
 
478
  id, avatar_id, owner, platform, description, issues_count,
479
  default_branch_name, fork_count, stargazer_count, watchers_count,
480
  pushed_at, created_at, is_archived, is_disabled, is_fork,
481
+ license, primary_language, minimum_zig_version
482
  FROM repos WHERE id = ?
483
  """
484
 
 
492
  r_id, avatar_id, owner, platform, desc, issues,
493
  default_branch, forks, stars, watchers,
494
  pushed_at, created_at, is_archived, is_disabled, is_fork,
495
+ license_spdx, primary_language, min_zig_ver
496
  ) = repo_row
497
 
498
  # Map platform to provider
 
558
  # Get default branch info
559
  branch_info = get_default_branch_info(conn, repo_id, default_branch)
560
  response.update({
561
+ "minimum_zig_version": min_zig_ver or branch_info["minimum_zig_version"],
562
  "dependencies": branch_info["dependencies"],
563
  "branch_name": branch_info["branch_name"],
564
  "latest_version": branch_info.get("latest_version"),