queries.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from collections import defaultdict
  2. import operator
  3. import db
  4. def search(q):
  5. with db.cursor() as c:
  6. corps = db.query(c, '''
  7. SELECT DISTINCT corporation_id, corporation_name FROM characters
  8. WHERE corporation_name LIKE ?
  9. ''', '%{}%'.format(q))
  10. return {'corporations': corps}
  11. def corporation(corp_id):
  12. with db.cursor() as c:
  13. kills = db.query(c, '''
  14. SELECT DISTINCT(kills.kill_id), kill_time FROM kills
  15. JOIN characters ON characters.kill_id = kills.kill_id
  16. WHERE corporation_id = ?
  17. ''', corp_id)
  18. kill_ids = list(map(operator.itemgetter('kill_id'), kills))
  19. char_rows = db.query(c, '''
  20. SELECT
  21. kill_id, victim, final_blow,
  22. character_id, character_name, corporation_id, corporation_name, alliance_id, alliance_name, faction_id, faction_name
  23. FROM characters
  24. WHERE kill_id IN ({})
  25. '''.format(','.join(map(str, kill_ids))))
  26. characters = defaultdict(dict)
  27. for char in char_rows:
  28. kill_id = char['kill_id']
  29. if char['victim']:
  30. characters[kill_id]['victim'] = char
  31. elif char['final_blow']:
  32. characters[kill_id]['final_blow'] = char
  33. for kill in kills:
  34. chars = characters[kill['kill_id']]
  35. kill['victim'] = chars['victim']
  36. kill['final_blow'] = chars['final_blow']
  37. return kills
  38. def kill(kill_id):
  39. with db.cursor() as c:
  40. kill = db.get(c, '''
  41. SELECT kill_time, solarSystemName, security FROM kills
  42. JOIN eve.mapSolarSystems ON solar_system_id = solarSystemID
  43. WHERE kill_id = ?
  44. ''', kill_id)
  45. characters = db.query(c, '''
  46. SELECT character_id, character_name, damage, victim, final_blow,
  47. corporation_id, corporation_name, alliance_id, alliance_name, faction_id, faction_name,
  48. ship_type_id, weapon_type_id,
  49. ship.typeName AS ship_name, weapon.typeName AS weapon_name
  50. FROM characters
  51. JOIN eve.invTypes AS ship ON ship_type_id = ship.typeID
  52. LEFT JOIN eve.invTypes AS weapon ON weapon_type_id = weapon.typeID
  53. WHERE kill_id = ?
  54. ''', kill_id)
  55. items = db.query(c, '''
  56. SELECT type_id, flag, dropped, destroyed, singleton,
  57. typeName AS item_name
  58. FROM items
  59. JOIN eve.invTypes ON type_id = typeID
  60. WHERE kill_id = ? ORDER BY flag ASC
  61. ''', kill_id)
  62. return {'kill': kill, 'characters': characters, 'items': items}