Spaces:
Running
Running
Commit ·
d2501a2
1
Parent(s): 204f438
fixed search
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
| 253 |
type_filter = get_type_filter(search_type)
|
| 254 |
|
| 255 |
sql = f"""
|
| 256 |
-
WITH
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 = ?
|
| 297 |
-
WHEN rd.id LIKE ?
|
| 298 |
ELSE 3
|
| 299 |
END,
|
| 300 |
rd.stargazer_count DESC
|
| 301 |
-
LIMIT ?
|
| 302 |
"""
|
| 303 |
|
| 304 |
starts_with = f"{query}%"
|
| 305 |
-
|
|
|
|
| 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"),
|