class InMemoryDatabase:
def _init_(self):
self.database = {}
def set(self, timestamp, key, field, value):
if key not in self.database:
self.database[key] = {}
self.database[key][field] = value
def compare_and_set(self, timestamp, key, field, expected_value, new_value):
if key in self.database and field in self.database[key]:
current_value = self.database[key][field]
if current_value == expected_value:
self.database[key][field] = new_value
return "true"
return "false"
def compare_and_delete(self, timestamp, key, field, expected_value):
if key in self.database and field in self.database[key]:
current_value = self.database[key][field]
if current_value == expected_value:
del self.database[key][field]
return "true"
return "false"
def get(self, timestamp, key, field):
if key in self.database and field in self.database[key]:
return self.database[key][field]
return None
def scan(self, timestamp, key):
if key in self.database:
fields = sorted(self.database[key].keys())
return ", ".join([f"{field}({self.database[key][field]})" for field in fields])
return ""
def scan_by_prefix(self, timestamp, key, prefix):
if key in self.database:
fields = sorted(filter(lambda f: f.startswith(prefix), self.database[key].keys()))
return ", ".join([f"{field}({self.database[key][field]})" for field in fields])
return ""
# Example usage:
db = InMemoryDatabase()
queries = [
["SET", "0", "A", "BC", "4"],
["SET", "10", "A", "BD", "5"],
["SET", "20", "A", "C", "6"],
["SCAN_BY_PREFIX", "30", "A", "B"],
["SCAN", "40", "A"],
["SCAN_BY_PREFIX", "50", "B", "B"]
]
for query in queries:
operation = query[0]
if operation == "SET":
db.set(*query[1:])
elif operation == "COMPARE_AND_SET":
print(db.compare_and_set(*query[1:]))
elif operation == "COMPARE_AND_DELETE":
print(db.compare_and_delete(*query[1:]))
elif operation == "GET":
print(db.get(*query[1:]))
elif operation == "SCAN":
print(db.scan(*query[1:]))
elif operation == "SCAN_BY_PREFIX":
print(db.scan_by_prefix(*query[1:]))