コード例 #1
0
ファイル: BaseDeDatos.py プロジェクト: byoms23/byDBMS
 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            
コード例 #2
0
ファイル: BaseDeDatos.py プロジェクト: byoms23/byDBMS
    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
コード例 #3
0
ファイル: BaseDeDatos.py プロジェクト: byoms23/byDBMS
 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.")
コード例 #4
0
ファイル: BaseDeDatos.py プロジェクト: byoms23/byDBMS
    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.")