def cargar(self): # Cargar desde el esquema try: with open(self.schema_file) as esquema: config = map(lambda x : x[:-1], esquema.readlines()) # Cargar la cantidad de tablas específicada self.tablas = [] i = 1 for tabs in range(self.getCantidadTablas()): # Crear tabla tab = Tabla(config[i], self) i += 2 # Registros tab.setCantidadRegistros(int(config[i])) i += 2 # Columnas for cols in xrange(int(config[i])): i += 1 nombre = config[i] i += 1 l = config[i].split('\t') tipo = l[0] tamanio = None if len(l) < 2 else l[1] tab.agregar_columna(nombre, tipo, valor=tamanio) # Cada restricción i += 2 for rests in xrange(int(config[i])): i += 1 if config[i] == 'PRIMARY KEY': i += 1 nombre = config[i] i += 1 keys = config[i].split(', ') tab.agregar_clave_primaria(nombre, keys) elif config[i] == 'FOREIGN KEY': i += 1 nombre = config[i] i += 1 local = config[i].split(', ') i += 1 tabForanea = config[i] i += 1 foranea = config[i].split(', ') tab.agregar_clave_foranea(nombre, local, tabForanea, foranea) else: i += 1 nombre = config[i] i += 1 exp = Parser.buildExp().parse(config[i])[0] tab.agregar_chequeo(nombre, exp) # Cada dependiente i += 2 dependientes = config[i].split(', ') if config[i].strip() != '' else [] tab.setDependientes(dependientes) # Cargar registros de la tabla tab.cargar_registros() # Agregar tabla self.tablas.append(tab) # Ir por la siguiente i += 2 except IOError, msg: pass
def cargar(self): # Cargar desde el esquema try: with open(self.schema_file) as esquema: config = map(lambda x: x[:-1], esquema.readlines()) # Cargar la cantidad de tablas específicada self.tablas = [] i = 1 for tabs in range(self.getCantidadTablas()): # Crear tabla tab = Tabla(config[i], self) i += 2 # Registros tab.setCantidadRegistros(int(config[i])) i += 2 # Columnas for cols in xrange(int(config[i])): i += 1 nombre = config[i] i += 1 l = config[i].split('\t') tipo = l[0] tamanio = None if len(l) < 2 else l[1] tab.agregar_columna(nombre, tipo, valor=tamanio) # Cada restricción i += 2 for rests in xrange(int(config[i])): i += 1 if config[i] == 'PRIMARY KEY': i += 1 nombre = config[i] i += 1 keys = config[i].split(', ') tab.agregar_clave_primaria(nombre, keys) elif config[i] == 'FOREIGN KEY': i += 1 nombre = config[i] i += 1 local = config[i].split(', ') i += 1 tabForanea = config[i] i += 1 foranea = config[i].split(', ') tab.agregar_clave_foranea(nombre, local, tabForanea, foranea) else: i += 1 nombre = config[i] i += 1 exp = Parser.buildExp().parse(config[i])[0] tab.agregar_chequeo(nombre, exp) # Cada dependiente i += 2 dependientes = config[i].split( ', ') if config[i].strip() != '' else [] tab.setDependientes(dependientes) # Cargar registros de la tabla tab.cargar_registros() # Agregar tabla self.tablas.append(tab) # Ir por la siguiente i += 2 except IOError, msg: pass
def agregar_tabla(self, tabla, listaDescripciones): # Definir tabla temporal tab = Tabla(tabla, self) # Revisar si la tabla ya existe if tab in self.tablas: self.log.error("La tabla '"+tabla+"' ya existe en la base de datos '"+self.getNombre()+"'.") raise TableAlreadyExistException(tabla, self) # Validar que la definicion de tabla no tenga errores de tipo # Separar constraints de columnas listaColumnas = [] listaConstraints = [] for desc in listaDescripciones: if type(desc) == AST.Columna: listaColumnas.append(desc) # Revisar si tiene constrains la columna if len(desc[2]) > 0: listaConstraints.append(desc) else: listaConstraints.append(desc) # Revisión de columnas for columna in listaColumnas: # Agregar columnas a la tabla tab.agregar_columna(columna[0], columna[1][0], (columna[1][1] if columna[1][0] == 'CHAR' else None)) # Revisión constraints for restriccion in listaConstraints: if type(restriccion) == AST.Columna: # Revisar cada restricción corta for restriccionCorta in restriccion[2]: tipo = restriccionCorta[0] if restriccionCorta[0] == 'CHECK' else ( "PRIMARY KEY" if restriccionCorta[0] == 'PRIMARY' else "FOREIGN KEY") nombre = tab.generar_nombre(tipo) if tipo == 'CHECK': tab.agregar_chequeo(nombre, restriccionCorta[1], requerido=restriccion[0]) elif tipo == 'PRIMARY KEY': tab.agregar_clave_primaria(nombre, [restriccion[0]]) else: tab.agregar_clave_foranea(nombre, [restriccion[0]], restriccionCorta[1], [restriccionCorta[2]]) else: # Agregar alguna de las restricciones validas tipo = restriccion[0] if restriccion[0] == 'CHECK' else (restriccion[0] + " KEY") nombre = restriccion[1] if tipo == 'CHECK': tab.agregar_chequeo(nombre, restriccion[2]) elif tipo == 'PRIMARY KEY': tab.agregar_clave_primaria(nombre, restriccion[2]) else: tab.agregar_clave_foranea(nombre, restriccion[2], restriccion[3], restriccion[4]) # Crear archivo vacio para la tabla path = self.getPath() + tabla + '.tbl' with open(path, 'w') as archivo: archivo.write('') # Agregar al archivo de metadatos de bases de datos self.escribir_tabla(tab) # Agregar a la base de datos al manejador self.tablas.append(tab) self.cantTablas = len(self.tablas) # Agregar el archivo al archivo de metadatos del manejador self.manejador.actualizar_base_de_datos(self) # Mostrar mensaje de éxito self.log.info("Tabla '"+tabla+"' creada.")
def agregar_tabla(self, tabla, listaDescripciones): # Definir tabla temporal tab = Tabla(tabla, self) # Revisar si la tabla ya existe if tab in self.tablas: self.log.error("La tabla '" + tabla + "' ya existe en la base de datos '" + self.getNombre() + "'.") raise TableAlreadyExistException(tabla, self) # Validar que la definicion de tabla no tenga errores de tipo # Separar constraints de columnas listaColumnas = [] listaConstraints = [] for desc in listaDescripciones: if type(desc) == AST.Columna: listaColumnas.append(desc) # Revisar si tiene constrains la columna if len(desc[2]) > 0: listaConstraints.append(desc) else: listaConstraints.append(desc) # Revisión de columnas for columna in listaColumnas: # Agregar columnas a la tabla tab.agregar_columna( columna[0], columna[1][0], (columna[1][1] if columna[1][0] == 'CHAR' else None)) # Revisión constraints for restriccion in listaConstraints: if type(restriccion) == AST.Columna: # Revisar cada restricción corta for restriccionCorta in restriccion[2]: tipo = restriccionCorta[0] if restriccionCorta[ 0] == 'CHECK' else ( "PRIMARY KEY" if restriccionCorta[0] == 'PRIMARY' else "FOREIGN KEY") nombre = tab.generar_nombre(tipo) if tipo == 'CHECK': tab.agregar_chequeo(nombre, restriccionCorta[1], requerido=restriccion[0]) elif tipo == 'PRIMARY KEY': tab.agregar_clave_primaria(nombre, [restriccion[0]]) else: tab.agregar_clave_foranea(nombre, [restriccion[0]], restriccionCorta[1], [restriccionCorta[2]]) else: # Agregar alguna de las restricciones validas tipo = restriccion[0] if restriccion[0] == 'CHECK' else ( restriccion[0] + " KEY") nombre = restriccion[1] if tipo == 'CHECK': tab.agregar_chequeo(nombre, restriccion[2]) elif tipo == 'PRIMARY KEY': tab.agregar_clave_primaria(nombre, restriccion[2]) else: tab.agregar_clave_foranea(nombre, restriccion[2], restriccion[3], restriccion[4]) # Crear archivo vacio para la tabla path = self.getPath() + tabla + '.tbl' with open(path, 'w') as archivo: archivo.write('') # Agregar al archivo de metadatos de bases de datos self.escribir_tabla(tab) # Agregar a la base de datos al manejador self.tablas.append(tab) self.cantTablas = len(self.tablas) # Agregar el archivo al archivo de metadatos del manejador self.manejador.actualizar_base_de_datos(self) # Mostrar mensaje de éxito self.log.info("Tabla '" + tabla + "' creada.")