Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. DELIMITER $$
  2. CREATE PROCEDURE mk_on_es_pair(IN oaddr VARCHAR(24), IN stealth_min INT, IN stealth_max INT, IN pri INT)
  3. BEGIN
  4. CREATE TEMPORARY TABLE IF NOT EXISTS en_tmp ENGINE = MEMORY SELECT * FROM en_tbl WHERE 0;
  5. SET @oid = (SELECT os_id FROM os_tbl WHERE os_addr = oaddr);
  6. IF (@oid is NULL) THEN
  7. INSERT INTO os_tbl(os_addr) VALUES (oaddr);
  8. SET @oid = LAST_INSERT_ID();
  9. END IF;
  10.  
  11. -- Select an EN that doesn't already have our OS paired with it..
  12. -- If this is a high-priority route (e.g. something that we use for an API, and must absolutely use)
  13. -- Then ignore restrictions, but still use the same selection algorithm
  14.  
  15. INSERT INTO en_tmp
  16. SELECT * from en_tbl
  17. WHERE
  18. NOT EXISTS (
  19. SELECT os_id, en_id FROM pairing_tbl
  20. WHERE pairing_tbl.os_id = @oid
  21. AND pairing_tbl.en_id = en_tbl.en_id
  22. AND pri=0
  23. )
  24. AND (en_tbl.rs_free > 0 OR pri > 0)
  25. AND (en_tbl.rs_count < __RS_MAX_COUNT__ OR pri > 0)
  26. AND en_tbl.stealth BETWEEN stealth_min AND stealth_max
  27. AND en_tbl.route_expires > UNIX_TIMESTAMP(NOW())
  28. ORDER BY en_bw DESC, rs_count ASC, route_create_time ASC, route_expires ASC
  29. LIMIT 1;
  30. IF (ROW_COUNT()) THEN
  31. SET @uuid = MyUUID();
  32. UPDATE en_tbl SET
  33. rs_count = (rs_count +1),
  34. rs_busy = (rs_busy + 1),
  35. rs_free = (rs_free - 1)
  36. WHERE en_id = (SELECT en_id FROM en_tmp);
  37. INSERT INTO pairing_tbl(os_id, en_id, cr_time, pair_assigned, pair_uuid)
  38. VALUES(@oid, (SELECT en_id FROM en_tmp LIMIT 1),
  39. UNIX_TIMESTAMP(NOW()), 1, @uuid);
  40. END IF;
  41. SELECT *, @uuid AS pair_uuid FROM en_tmp;
  42. DROP TABLE IF EXISTS en_tmp;
  43. COMMIT;
  44. END $$
  45. DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement