Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.97 KB | None | 0 0
  1. our $dbh = DBI->connect("dbi:SQLite:dbname=lastfm_cache.db", '', '', { sqlite_unicode => 1 });
  2. $dbh->do("PRAGMA foreign_keys = ON");
  3.  
  4. $dbh->do(<<'');
  5. CREATE TABLE IF NOT EXISTS usernames (uid INTEGER PRIMARY KEY, username TEXT UNIQUE, valid INTEGER);
  6.  
  7. $dbh->do(<<'');
  8. CREATE TABLE IF NOT EXISTS nicknames (nickname TEXT UNIQUE, uid INTEGER NOT NULL,
  9.     FOREIGN KEY (uid) REFERENCES usernames(uid));
  10.  
  11. $dbh->do(<<'');
  12. CREATE TABLE IF NOT EXISTS artists (artid INTEGER PRIMARY KEY, artist TEXT UNIQUE, timestamp INTEGER);
  13.  
  14. $dbh->do(<<'');
  15. CREATE TABLE IF NOT EXISTS artist_tag_cache (artid INTEGER, tag TEXT,
  16.     votes INTEGER, FOREIGN KEY (artid) REFERENCES artists(artid));
  17.  
  18. my %prep = (
  19.     clean => {
  20.         artist_tag_cache => $dbh->prepare(<<''),
  21. DELETE FROM artist_tag_cache WHERE
  22.     artid = (SELECT artid FROM artists WHERE
  23.         artists.artid = artist_tag_cache.artid AND
  24.         artists.timestamp < ?);
  25.  
  26.         },
  27.     get => {
  28.         nicks_for_user => $dbh->prepare(<<''),
  29. SELECT nickname FROM nicknames NATURAL JOIN usernames WHERE username LIKE ?;
  30.  
  31.         user_for_nick => $dbh->prepare(<<''),
  32. SELECT username FROM usernames NATURAL JOIN nicknames WHERE nickname LIKE ?;
  33.  
  34.         valid_users => $dbh->prepare(<<''),
  35. SELECT username FROM usernames WHERE valid = 1;
  36.  
  37.         is_user_valid => $dbh->prepare(<<''),
  38. SELECT valid FROM usernames WHERE username LIKE ?;
  39.  
  40.         tags_for_artist => $dbh->prepare(<<''),
  41. SELECT tag FROM artist_tag_cache NATURAL JOIN artists WHERE
  42.     artist LIKE ? ORDER BY votes;
  43.  
  44.         },
  45.     add => {
  46.         user => $dbh->prepare(<<''),
  47. INSERT INTO usernames (username, valid) VALUES (?, ?);
  48.  
  49.         nickname => $dbh->prepare(<<''),
  50. INSERT INTO nicknames (nickname, uid) VALUES
  51.     (?, (SELECT uid FROM usernames WHERE username LIKE ?));
  52.  
  53.         artist => $dbh->prepare(<<''),
  54. INSERT INTO artists (artist, timestamp) VALUES (?, strftime('%s', 'now'));
  55.  
  56.         artist_tag => $dbh->prepare(<<''),
  57. INSERT INTO artist_tag_cache (artid, tag, votes) VALUES
  58.     ((SELECT artid FROM artists WHERE artist LIKE ?), ?, ?);
  59.  
  60.         },
  61.     );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement