Facebook
From fdjfdjkfjdk, 1 Month ago, written in Python.
Embed
Download Paste or View Raw
Hits: 228
  1. class InMemoryDatabase:
  2.     def _init_(self):
  3.         self.database = {}
  4.  
  5.     def set(self, timestamp, key, field, value):
  6.         if key not in self.database:
  7.             self.database[key] = {}
  8.         self.database[key][field] = value
  9.  
  10.     def compare_and_set(self, timestamp, key, field, expected_value, new_value):
  11.         if key in self.database and field in self.database[key]:
  12.             current_value = self.database[key][field]
  13.             if current_value == expected_value:
  14.                 self.database[key][field] = new_value
  15.                 return "true"
  16.         return "false"
  17.  
  18.     def compare_and_delete(self, timestamp, key, field, expected_value):
  19.         if key in self.database and field in self.database[key]:
  20.             current_value = self.database[key][field]
  21.             if current_value == expected_value:
  22.                 del self.database[key][field]
  23.                 return "true"
  24.         return "false"
  25.  
  26.     def get(self, timestamp, key, field):
  27.         if key in self.database and field in self.database[key]:
  28.             return self.database[key][field]
  29.         return None
  30.  
  31.     def scan(self, timestamp, key):
  32.         if key in self.database:
  33.             fields = sorted(self.database[key].keys())
  34.             return ", ".join([f"{field}({self.database[key][field]})" for field in fields])
  35.         return ""
  36.  
  37.     def scan_by_prefix(self, timestamp, key, prefix):
  38.         if key in self.database:
  39.             fields = sorted(filter(lambda f: f.startswith(prefix), self.database[key].keys()))
  40.             return ", ".join([f"{field}({self.database[key][field]})" for field in fields])
  41.         return ""
  42.  
  43. # Example usage:
  44. db = InMemoryDatabase()
  45. queries = [
  46.     ["SET", "0", "A", "BC", "4"],
  47.     ["SET", "10", "A", "BD", "5"],
  48.     ["SET", "20", "A", "C", "6"],
  49.     ["SCAN_BY_PREFIX", "30", "A", "B"],
  50.     ["SCAN", "40", "A"],
  51.     ["SCAN_BY_PREFIX", "50", "B", "B"]
  52. ]
  53.  
  54. for query in queries:
  55.     operation = query[0]
  56.     if operation == "SET":
  57.         db.set(*query[1:])
  58.     elif operation == "COMPARE_AND_SET":
  59.         print(db.compare_and_set(*query[1:]))
  60.     elif operation == "COMPARE_AND_DELETE":
  61.         print(db.compare_and_delete(*query[1:]))
  62.     elif operation == "GET":
  63.         print(db.get(*query[1:]))
  64.     elif operation == "SCAN":
  65.         print(db.scan(*query[1:]))
  66.     elif operation == "SCAN_BY_PREFIX":
  67.         print(db.scan_by_prefix(*query[1:]))