Update migrations Logo source column normalize (#1404)

This commit is contained in:
Leendert de Borst
2025-12-13 18:08:35 +01:00
parent 02c6296240
commit b43963c7a3
17 changed files with 1714 additions and 59 deletions
@@ -1646,6 +1646,8 @@ export class SqliteClient {
/**
* Extract and normalize source domain from a URL string.
* Uses lowercase and removes www. prefix for case-insensitive matching.
* This matches the server-side migration logic for consistent deduplication.
* @param urlString The URL to extract the domain from
* @returns The normalized source domain (e.g., 'github.com'), or 'unknown' if extraction fails
*/
@@ -1656,8 +1658,8 @@ export class SqliteClient {
try {
const url = new URL(urlString.startsWith('http') ? urlString : `https://${urlString}`);
// Normalize hostname by removing www. prefix
return url.hostname.replace(/^www\./i, '');
// Normalize hostname: lowercase and remove www. prefix
return url.hostname.toLowerCase().replace(/^www\./, '');
} catch {
return 'unknown';
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+200 -6
View File
@@ -883,7 +883,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -892,14 +925,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1943,7 +2040,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1952,14 +2082,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
+200 -6
View File
@@ -851,7 +851,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -860,14 +893,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1911,7 +2008,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1920,14 +2050,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+200 -6
View File
@@ -883,7 +883,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -892,14 +925,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1943,7 +2040,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1952,14 +2082,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
+200 -6
View File
@@ -851,7 +851,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -860,14 +893,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1911,7 +2008,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1920,14 +2050,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -883,7 +883,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -892,14 +925,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1943,7 +2040,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1952,14 +2082,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -851,7 +851,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -860,14 +893,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1911,7 +2008,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1920,14 +2050,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -384,11 +384,47 @@ namespace AliasClientDb.Migrations
");
// Migrate Logos from Services
// Extract normalized domain from URL (e.g., 'https://www.github.com/path' -> 'github.com')
// This matches the browser extension's FaviconService.extractSourceFromUrl() logic
// Uses LOWER() for case-insensitive www. removal
migrationBuilder.Sql(@"
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -397,15 +433,80 @@ namespace AliasClientDb.Migrations
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
");
// Update Items with LogoId
// Match Items to Logos using the same normalized domain extraction logic
migrationBuilder.Sql(@"
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -845,7 +845,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -854,14 +887,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -174,7 +174,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -183,14 +216,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
+200 -6
View File
@@ -852,7 +852,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -861,14 +894,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1
@@ -1916,7 +2013,40 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
INSERT INTO Logos (Id, Source, FileData, MimeType, FetchedAt, CreatedAt, UpdatedAt, IsDeleted)
SELECT
lower(hex(randomblob(16))) AS Id,
s.Url AS Source,
-- Extract and normalize hostname: remove protocol, path, lowercase, and www. prefix
REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) AS Source,
s.Logo AS FileData,
'image/png' AS MimeType,
NULL AS FetchedAt,
@@ -1925,14 +2055,78 @@ CREATE INDEX "IX_Tags_Name" ON "Tags" ("Name");
0 AS IsDeleted
FROM Services s
WHERE s.Logo IS NOT NULL AND s.Url IS NOT NULL AND s.Url != ''
GROUP BY s.Url;
GROUP BY REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
);
UPDATE Items
SET LogoId = (
SELECT l.Id FROM Logos l
INNER JOIN Services s ON s.Url = l.Source
INNER JOIN Services s ON REPLACE(
LOWER(
SUBSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END,
1,
CASE
WHEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') > 0
THEN INSTR(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END, '/') - 1
ELSE LENGTH(
CASE
WHEN s.Url LIKE 'https://%' THEN SUBSTR(s.Url, 9)
WHEN s.Url LIKE 'http://%' THEN SUBSTR(s.Url, 8)
ELSE s.Url
END)
END
)
),
'www.', ''
) = l.Source
INNER JOIN Credentials c ON c.ServiceId = s.Id
WHERE c.Id = Items.Id
LIMIT 1