Advertisement
xxZeus

simran singh interview

Nov 10th, 2021
788
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.41 KB | None | 0 0
  1. from collections import defaultdict
  2. class Schema:
  3.   def __init__(self, columns, index = []):    
  4.     if len(columns) != len(set(columns)):
  5.       return "Duplicate columns"  
  6.     self.columns = columns    
  7.     self.index = index
  8.     self.colIndexMap = dict()
  9.     for i, col in enumerate(columns):
  10.       self.colIndexMap[col] = i
  11.  
  12.   def getColNumber(self):
  13.     return len(self.columns)
  14.  
  15.   def getColumnIndex(self, key):
  16.     return self.colIndexMap[key]
  17.  
  18. class Table:    
  19.   def __init__(self, schema):
  20.     self.schema = schema
  21.     self.data = dict()
  22.     self.rowCount = 1
  23.     self.indexMap = dict()
  24.     for index in schema.index:
  25.       self.indexMap[index] = defaultdict(list)
  26.  
  27.   def insert(self, data):
  28.     colNum = self.schema.getColNumber()
  29.     if colNum != len(data):
  30.       return "Number of columns passed doesnt match the schema"        
  31.     self.data[self.rowCount] = data
  32.     self.rowCount += 1
  33.     for index in self.schema.index:
  34.       indexCol = self.schema.getColumnIndex(index)
  35.       val = data[indexCol]
  36.       self.indexMap[index][val].append(data)
  37.     #print("after insertion indexmap", self.indexMap)
  38.     return self.rowCount - 1
  39.  
  40.   def findByIndex(self, index, val):
  41.     return self.indexMap[index][val]
  42.  
  43.   def delete(self, id):
  44.     if id not in self.data:
  45.       return "Id does not exist"
  46.     del self.data[id]
  47.     return True
  48.  
  49.   def getById(self, id):
  50.     if id not in self.data:
  51.       return "Id does not exist"
  52.     return self.data[id]
  53.  
  54.   def updateById(self, id, toUpdate):
  55.     if id not in self.data:
  56.       return "Id does not exist"
  57.     cols = self.data[id]  
  58.     for key in toUpdate:
  59.       cols[ self.schema.getColumnIndex(key) ] = toUpdate[key]  
  60.    
  61.     return True
  62.  
  63.   def getAll(self):  
  64.     return self.data  
  65.  
  66.   def updateSchema(self, newSchema):
  67.     currentCols = set(self.schema.columns)
  68.     newCols = set(newSchema.columns)    
  69.     for k in self.data:
  70.       newData = [""] * newSchema.getColNumber()
  71.       for x in newCols:
  72.         val = None
  73.         if x in currentCols:          
  74.           #print("updating existing", x, self.schema.getColumnIndex(x))
  75.           val = self.data[k][ self.schema.getColumnIndex(x) ]
  76.         else:
  77.           # this is a new column
  78.           val = "" # default value for new column
  79.         #print("new index", x, newSchema.getColumnIndex(x), len(newData))
  80.         newData[ newSchema.getColumnIndex(x) ] = val
  81.       self.data[k] = newData
  82.     self.schema = newSchema
  83.  
  84. class DB:
  85.   def __init__(self):
  86.     self.db = dict()
  87.  
  88.   def createTable(self, tableName, schema):
  89.     if tableName in self.db:
  90.       return "Table name already exist"
  91.     self.db[tableName] = Table(schema)
  92.     return "Table Created successfully"
  93.  
  94.   def getTable(self, tableName):
  95.     if tableName not in self.db:
  96.       return "Table name already exist"
  97.     return self.db[tableName]
  98.  
  99.  
  100.  
  101. schema1 = Schema(["rollno", "name", "email", "zip_code"], ["zip_code"])
  102. db = DB()
  103. db.createTable("users", schema1)
  104. users = db.getTable("users")
  105. for i in range(5):
  106.   v = i & 1
  107.   users.insert([i+1, "name " + str(i), "useremail" + str(i), "2080" + str(v)])
  108.  
  109. # print("After insertion")
  110. print(users.getAll())
  111.  
  112. print(users.findByIndex("zip_code", "20800"))
  113. print(users.findByIndex("zip_code", "20801"))
  114. # schema2 = Schema(["email", "phone"])
  115.  
  116. # users.updateSchema(schema2)
  117.  
  118. # print("After updation")
  119. # print(users.getAll())
  120.  
  121.  
  122.  
  123.  
  124.  
  125.    
  126.  
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement