From 162341fb5f696196375c33f5ae3c795f8058c952 Mon Sep 17 00:00:00 2001 From: mitteneer Date: Mon, 9 Jun 2025 21:41:52 -0400 Subject: [PATCH] Convert ids to i64 The birthday paradox is a real problem with the size of our datasets. i64 is the largest numerical value we can use, and there's a 0.1% chance of collision with ~2,000,000 values, so I feel pretty comfortable with this --- .../2025-04-07_14-31-14_create_songs.zig | 2 +- .../2025-04-07_14-31-45_create_albums.zig | 2 +- .../2025-04-07_14-34-39_create_albumsongs.zig | 6 +++--- .../2025-04-07_14-35-53_create_scrobbles.zig | 4 ++-- .../2025-04-07_14-38-02_create_artists.zig | 2 +- ...04-07_14-39-09_create_albumsongsartists.zig | 6 +++--- ...2025-04-07_14-40-17_create_artistalbums.zig | 6 +++--- src/queries.zig | 18 ++++++------------ src/types.zig | 2 +- 9 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/app/database/migrations/2025-04-07_14-31-14_create_songs.zig b/src/app/database/migrations/2025-04-07_14-31-14_create_songs.zig index 9a52b6b..e8ae1d6 100644 --- a/src/app/database/migrations/2025-04-07_14-31-14_create_songs.zig +++ b/src/app/database/migrations/2025-04-07_14-31-14_create_songs.zig @@ -6,7 +6,7 @@ pub fn up(repo: anytype) !void { try repo.createTable( "songs", &.{ - t.primaryKey("id", .{}), + t.primaryKey("id", .{ .type = .bigint }), t.column("name", .string, .{}), t.column("length", .float, .{ .optional = true }), t.column("hidden", .boolean, .{}), diff --git a/src/app/database/migrations/2025-04-07_14-31-45_create_albums.zig b/src/app/database/migrations/2025-04-07_14-31-45_create_albums.zig index d706cfe..86b6184 100644 --- a/src/app/database/migrations/2025-04-07_14-31-45_create_albums.zig +++ b/src/app/database/migrations/2025-04-07_14-31-45_create_albums.zig @@ -6,7 +6,7 @@ pub fn up(repo: anytype) !void { try repo.createTable( "albums", &.{ - t.primaryKey("id", .{}), + t.primaryKey("id", .{ .type = .bigint }), t.column("name", .string, .{}), t.column("length", .float, .{ .optional = true }), t.timestamps(.{}), diff --git a/src/app/database/migrations/2025-04-07_14-34-39_create_albumsongs.zig b/src/app/database/migrations/2025-04-07_14-34-39_create_albumsongs.zig index 4381a5b..96c3063 100644 --- a/src/app/database/migrations/2025-04-07_14-34-39_create_albumsongs.zig +++ b/src/app/database/migrations/2025-04-07_14-34-39_create_albumsongs.zig @@ -6,9 +6,9 @@ pub fn up(repo: anytype) !void { try repo.createTable( "albumsongs", &.{ - t.primaryKey("id", .{}), - t.column("song_id", .integer, .{ .reference = .{ "songs", "id" } }), - t.column("album_id", .integer, .{ .reference = .{ "albums", "id" } }), + t.primaryKey("id", .{ .type = .bigint }), + t.column("song_id", .bigint, .{ .reference = .{ "songs", "id" } }), + t.column("album_id", .bigint, .{ .reference = .{ "albums", "id" } }), t.timestamps(.{}), }, .{}, diff --git a/src/app/database/migrations/2025-04-07_14-35-53_create_scrobbles.zig b/src/app/database/migrations/2025-04-07_14-35-53_create_scrobbles.zig index 088a43c..c429e19 100644 --- a/src/app/database/migrations/2025-04-07_14-35-53_create_scrobbles.zig +++ b/src/app/database/migrations/2025-04-07_14-35-53_create_scrobbles.zig @@ -6,8 +6,8 @@ pub fn up(repo: anytype) !void { try repo.createTable( "scrobbles", &.{ - t.primaryKey("id", .{}), - t.column("albumsong", .integer, .{ .reference = .{ "albumsongs", "id" } }), + t.primaryKey("id", .{ .type = .bigint }), + t.column("albumsong", .bigint, .{ .reference = .{ "albumsongs", "id" } }), t.column("datetime", .datetime, .{}), t.timestamps(.{}), }, diff --git a/src/app/database/migrations/2025-04-07_14-38-02_create_artists.zig b/src/app/database/migrations/2025-04-07_14-38-02_create_artists.zig index ed0d3d4..97c5bfe 100644 --- a/src/app/database/migrations/2025-04-07_14-38-02_create_artists.zig +++ b/src/app/database/migrations/2025-04-07_14-38-02_create_artists.zig @@ -6,7 +6,7 @@ pub fn up(repo: anytype) !void { try repo.createTable( "artists", &.{ - t.primaryKey("id", .{}), + t.primaryKey("id", .{ .type = .bigint }), t.column("name", .string, .{}), t.column("disambiguation", .string, .{ .optional = true }), t.timestamps(.{}), diff --git a/src/app/database/migrations/2025-04-07_14-39-09_create_albumsongsartists.zig b/src/app/database/migrations/2025-04-07_14-39-09_create_albumsongsartists.zig index 55c7d84..3355196 100644 --- a/src/app/database/migrations/2025-04-07_14-39-09_create_albumsongsartists.zig +++ b/src/app/database/migrations/2025-04-07_14-39-09_create_albumsongsartists.zig @@ -6,9 +6,9 @@ pub fn up(repo: anytype) !void { try repo.createTable( "albumsongsartists", &.{ - t.primaryKey("id", .{}), - t.column("albumsong_id", .integer, .{ .reference = .{ "albumsongs", "id" } }), - t.column("artist_id", .integer, .{ .reference = .{ "artists", "id" } }), + t.primaryKey("id", .{ .type = .bigint }), + t.column("albumsong_id", .bigint, .{ .reference = .{ "albumsongs", "id" } }), + t.column("artist_id", .bigint, .{ .reference = .{ "artists", "id" } }), t.timestamps(.{}), }, .{}, diff --git a/src/app/database/migrations/2025-04-07_14-40-17_create_artistalbums.zig b/src/app/database/migrations/2025-04-07_14-40-17_create_artistalbums.zig index 76bac1e..3c3ea7f 100644 --- a/src/app/database/migrations/2025-04-07_14-40-17_create_artistalbums.zig +++ b/src/app/database/migrations/2025-04-07_14-40-17_create_artistalbums.zig @@ -6,9 +6,9 @@ pub fn up(repo: anytype) !void { try repo.createTable( "artistalbums", &.{ - t.primaryKey("id", .{}), - t.column("album_id", .integer, .{ .reference = .{ "albums", "id" } }), - t.column("artist_id", .integer, .{ .reference = .{ "artists", "id" } }), + t.primaryKey("id", .{ .type = .bigint }), + t.column("album_id", .bigint, .{ .reference = .{ "albums", "id" } }), + t.column("artist_id", .bigint, .{ .reference = .{ "artists", "id" } }), t.timestamps(.{}), }, .{}, diff --git a/src/queries.zig b/src/queries.zig index 5d92869..ba2a734 100644 --- a/src/queries.zig +++ b/src/queries.zig @@ -23,12 +23,6 @@ pub fn entityQueryResult(request: *jetzig.Request, query: GeneratedQuery, args: return out.get("entity_info").?; } - //if (query.query_type == .datestreak) { - // var out: *jetzig.Data.Value = try Data.object(); - // const entity = try (try result.next()).?.to(struct { name: []const u8, id: i32, scrobbles: i64, rank: []const u8 }, .{ .dupe = true, .allocator = request.allocator }); - // - //} - var out: *jetzig.Data.Value = try Data.array(); var mapper = result.mapper(UnifiedResult, .{ .dupe = true, .allocator = request.allocator }); @@ -65,22 +59,22 @@ const GeneratedQuery = struct { const UnifiedResult = struct { album_name: ?[]const u8 = null, - album_id: ?i32 = null, + album_id: ?i64 = null, song_name: ?[]const u8 = null, - song_id: ?i32 = null, + song_id: ?i64 = null, artist_name: ?[]const u8 = null, - artist_id: ?i32 = null, + artist_id: ?i64 = null, scrobbles: ?i64 = null, date: ?[]const u8 = null, }; const EntityInfoResult = struct { album_name: ?[]const u8 = null, - album_id: ?i32 = null, + album_id: ?i64 = null, song_name: ?[]const u8 = null, - song_id: ?i32 = null, + song_id: ?i64 = null, artist_name: ?[]const u8 = null, - artist_id: ?i32 = null, + artist_id: ?i64 = null, scrobbles: ?i64 = null, date: ?[]const u8 = null, rank: []const u8, diff --git a/src/types.zig b/src/types.zig index 3b2e4ff..5f3e0e3 100644 --- a/src/types.zig +++ b/src/types.zig @@ -133,5 +133,5 @@ pub const TableRow = struct { pub const HyperlinkData = struct { name: []const u8, - id: i32, + id: i64, };