Beispiel #1
0
 def resultupdate(self, result, nomresult, DB, llaves):
     if not len(result) > 0:
         return (
             "En la instrucción Delete no hay registros que cumplan la expresión"
         )
     else:
         if not len(llaves) > 0:
             columnas = len(self.encabezado)
             DBMS.dropTable(DB, nomresult)
             DBMS.createTable(DB, nomresult, columnas)
             for x in range(0, len(result)):
                 DBMS.insert(DB, nomresult, result[x])
             self.encabezado.clear()
             variables.consola.insert(
                 INSERT, "La instrucción UPDATE se realizó exitosamente \n")
             return "La instrucción UPDATE se realizó exitosamente"
         else:
             columnas = len(self.encabezado)
             DBMS.dropTable(DB, nomresult)
             DBMS.createTable(DB, nomresult, columnas)
             DBMS.alterAddPK(DB, nomresult, llaves)
             for x in range(0, len(result)):
                 DBMS.insert(DB, nomresult, result[x])
             self.encabezado.clear()
             variables.consola.insert(
                 INSERT, "La instrucción UPDATE se realizó exitosamente \n")
             return "La instrucción UPDATE se realizó exitosamente"
Beispiel #2
0
def ECreateType():
    cargarMemoria()
    #llamar la funcion de EDD
    if (len(listaMemoria) > 0):
        crear_type = listaMemoria[0]
        EDD.createTable(crear_type[0], crear_type[1], crear_type[2])
        EDD.insert(crear_type[0], crear_type[1], crear_type[3])
        print("creado type ", crear_type[1], " con valores ", crear_type[3])
        listaMemoria.pop(0)
Beispiel #3
0
def ECreateTable():
    cargarMemoria()
    #llamar la funcion de EDD
    if (len(listaMemoria) > 0):
        crear_tabla = listaMemoria[0]
        EDD.createTable(crear_tabla[0], crear_tabla[1], crear_tabla[2])
        print("creando Tabla ", crear_tabla[1])
        listaMemoria.pop(0)
        return True
    return False
Beispiel #4
0
    def createTable(self, database: Database, name: str, columns: int, line,
                    column):
        """
        Method to create a table in database

        :param database: Table database
        :param name: The name of table
        :param columns: Number of columns
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.createTable(database.name, name, columns)

        if dbStatement == 0:
            table = Table(name)
            database.tables.append(table)
            self.writeFile()
            print('Table created successfully')

            return table
        elif dbStatement == 1:
            desc = f": Can't create table {name}"
            ErrorController().addExecutionError(34, 'Execution', desc, line,
                                                column)

        elif dbStatement == 2:
            desc = f": Database {database.name} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, line,
                                                column)

        elif dbStatement == 3:
            desc = f": Table {name} already exists"
            ErrorController().addExecutionError(31, 'Execution', desc, line,
                                                column)
Beispiel #5
0
def createTbl(database: str, table: str, numberColumns: int):

    resultado = manager.createTable(database, table, numberColumns)
    if resultado == 1:
        print('Error(42P16): invalid_table_definition.')
    elif resultado == 2:
        print('Error(???): No existe la base de datos.')
    elif resultado == 3:
        print('Error(42P07): duplicate_table.')
    elif resultado == 0:
        print('Tabla ' + table + ' creada correctamente')
Beispiel #6
0
 def resultdelete(self,result,nomresult,DB):
         if not len(result)>0:
             return ("En la instrucción Delete no hay registros que cumplan la expresión")
         else:
             columnas = len(self.encabezados)
             print(DBMS.dropTable(DB, nomresult))
             print(DBMS.createTable(DB, nomresult, columnas))
             for x in range(0,len(result)):
                 DBMS.insert(DB,nomresult,result[x])
             self.encabezados.clear()
             return "La instrucción DELETE se realizó exitosamente"
Beispiel #7
0
    def crearTabla(self, nodo):
        tb_name = nodo.valor
        columnas = nodo.hijos[0]
        col_count = len(columnas.hijos)
        if not (self.usingDB in self.ts):
            self.errors.append(
                Error('-----', EType.SEMANTICO, 'database_non_exist',
                      nodo.linea))
            return
        database = self.ts[self.usingDB]
        table = {}

        result = jsonMode.createTable(self.usingDB, str(tb_name), col_count)
        if result == 0:  # Operación exitosa
            self.output.append('Creación de tabla \"' + tb_name +
                               '\" exitosa.')
            c = 0
            for col in columnas.hijos:
                if col.etiqueta == 'COLUMN':
                    new_col = Column(col.valor, c)
                    new_col.columnType = self.getColType(col.hijos[0])
                    for atrib in col.hijos[1].hijos:
                        if atrib.etiqueta == 'NOT NULL':
                            new_col.isNull = False
                        elif atrib.etiqueta == 'PRIMARY KEY':
                            new_col.isPrimaryKey = True
                        elif atrib.etiqueta == 'CONSTRAINT':
                            cnst = Constraint(atrib.valor, atrib.hijos[0])
                            new_col.constraint = cnst
                        elif atrib.etiqueta == 'CHECK':
                            new_col.constraint = Constraint('', atrib)
                        elif atrib.etiqueta == 'UNIQUE':
                            new_col.isUnique = True
                    #Se añade a la tabla la nueva columna
                    new_col.line = col.linea
                    table[col.valor] = new_col
                    c += 1
                    # Se añade a la Base de datos la nueva Tabla
                    database.tables[tb_name] = table
                else:
                    col_name = col.hijos[0].valor
                    if col_name in table:
                        table[col_name].isPrimaryKey = True
        elif result == 1:  # Error en la operación
            self.errors.append(
                Error('XX000', EType.SEMANTICO, 'internal_error', nodo.linea))
        elif result == 2:  # Base de datos inexistente
            self.errors.append(
                Error('-----', EType.SEMANTICO, 'database_non_exist',
                      nodo.linea))
        elif result == 3:  # Tabla existente
            self.errors.append(
                Error('42P07', EType.SEMANTICO, 'duplicate_table', nodo.linea))
    def ejecutar(self, ent):
        tam = len(self.listaDef)
        print (tam)
        nuevaTabla = Simbolo(TipoSimbolo.TABLA,self.id)
        listaColumnas = []
        for x in range(0,tam,1):
            tt = self.listaDef[x]
            if tt.tipo == AtributosColumna.COLUMNA_SIMPLE:
                self.numColumnas += 1
                nuevaColumna = Simbolo(tt.tipoDato,tt.identificador)
                listaColumnas.append(nuevaColumna)
        
        nuevaTabla.valor = listaColumnas
        


        DBMS.dropAll()
        DBMS.createDatabase("prueba")
        DBMS.createTable("prueba",self.id,self.numColumnas)
        print("---------------------------------------------")
        DBMS.showCollection()
        print("---------------------------------------------")
Beispiel #9
0
def procesar_createTable(instr,ts,tc) :
    global pks
    columns = []
    i = 0
    if instr.instrucciones != []:
        global salida
        for ins in instr.instrucciones:
            if isinstance(ins, Definicion_Columnas): 
                i+=1
                columns.append(i)
                procesar_Definicion(ins,ts,tc,instr.id)
            elif isinstance(ins, LLave_Primaria): 
                procesar_primaria(ins,ts,tc,instr.id)
            elif isinstance(ins, Definicon_Foranea): 
                procesar_Foranea(ins,ts,tc,instr.id)
            elif isinstance(ins, Lista_Parametros): 
                procesar_listaId(ins,ts,tc,instr.id)
            elif isinstance(ins, definicion_constraint): 
                procesar_constraint(ins,ts,tc,instr.id)
        
        try:
            result = j.createTable(str(useCurrentDatabase),str(instr.id),int(len(columns)))
            if result == 0:
                salida = "\nCREATE TABLE"
                temp1 = TS.Simbolo(str(instr.id),'Table',int(len(columns)),str(useCurrentDatabase))
                ts.agregar(temp1)
            elif result == 1 :
                salida = "\nERROR:  internal_error \nSQL state: XX000 "
            elif result == 2 :
                salida = "\nERROR:  database \"" + useCurrentDatabase +"\" does not exist \nSQL state: 3D000"
            elif result == 3 :
                salida = "\nERROR:  relation \"" + str(instr.id) +"\" alredy exists\nSQL state: 42P07"
        except :
            pass

        try:
            print(pks)
            result = j.alterAddPK(str(useCurrentDatabase),str(instr.id),pks)
            pks = []
            print(pks)

        except :
            pass
Beispiel #10
0
 def ejecutar(self, ent:Entorno):
     tam = len(self.listaDef)
     print (tam)
     nuevaTabla = Simbolo(TipoSimbolo.TABLA,self.id)
     listaColumnas = []
     for x in range(0,tam,1):
         tt = self.listaDef[x]
         if tt.tipo == AtributosColumna.COLUMNA_SIMPLE:
             self.numColumnas += 1
             nuevaColumna = Simbolo(tt.tipoDato,tt.identificador)
             listaColumnas.append(nuevaColumna)
     
     nuevaTabla.valor = listaColumnas
     dbActual = ent.getDataBase()
     if dbActual != None:
         estado = DBMS.createTable(dbActual,self.id, self.numColumnas)
         if estado == 0: 
             nuevaTabla.baseDatos = dbActual
             ent.nuevoSimbolo(nuevaTabla)
             print("Tabla Creada")
             DBMS.showCollection()
Beispiel #11
0
 def createTable(self, table: str, columns: [], line: int):
     # 0 -> operación exitosa
     # 1 -> error en la operación
     # 2 -> base de datos inexistente
     # 3 -> tabla existente
     query_result = jsonMode.createTable(self.actual_database, table,
                                         len(columns))
     if query_result == 0:
         self.consola.append(Codigos().table_successful(table))
         self.type_checker[self.actual_database][table] = {}
         for columna in columns:
             self.type_checker[self.actual_database][table][
                 columna['nombre']] = columna['col']
         self.saveTypeChecker()
     elif query_result == 1:
         self.addError(Codigos().database_internal_error(table), line)
     elif query_result == 2:
         self.addError(
             Codigos().database_undefined_object(self.actual_database),
             line)
     else:
         self.addError(Codigos().table_duplicate_table(table), line)
Beispiel #12
0
    def m_carga_de_informacion(self):
        # drop all databases if exists
        j.dropAll()

        # create database
        j.createDatabase('BD1')

        # create tables
        j.createTable('BD1', 'personas', 5)
        j.createTable('BD1', 'pais', 4)
        j.createTable('BD1', 'idiomas', 4)

        # create simple primary keys
        j.alterAddPK('BD1', 'personas', [0])
        j.alterAddPK('BD1', 'pais', [0])
        j.alterAddPK('BD1', 'idiomas', [0])

        # insert data in countries
        j.insert('BD1', 'pais',
                 ['GTM', 'Guatemala', 'Central America', 108889])
        j.insert('BD1', 'pais', ['MX', 'Mexico', 'Norte America', 21041])
        j.insert('BD1', 'pais',
                 ['EEUU', 'Estados Unidos', 'Norte America', 21041])

        # insert data in cities
        j.insert('BD1', 'personas', [1, 'Jossie', 'Castrillo', '27', 'GTM'])
        j.insert('BD1', 'personas', [2, 'Juanpi', 'Garcia', '27', 'GTM'])
        j.insert('BD1', 'personas', [3, 'Byron', 'Cermeno', '27', 'GTM'])
        j.insert('BD1', 'personas', [4, 'Hayrton', 'Ixpata', '27', 'GTM'])
        j.insert('BD1', 'personas', [5, 'Dulce', 'DeLeon', '25', 'MX'])
        j.insert('BD1', 'personas', [6, 'Miguel', 'Basir', '26', 'GTM'])
        j.insert('BD1', 'personas', [7, 'Nose', 'Algo', '30', 'EEUU'])

        # inser data in languages
        j.insert('BD1', 'idiomas', ['GTM', 'Espanol', 'official', 64.7])
        j.insert('BD1', 'idiomas', ['EEUU', 'Espanol', 'official', 100.0])
        j.insert('BD1', 'idiomas', ['MX', 'Espanol', 'official', 100.0])
Beispiel #13
0
# JSON Mode Test File
# Released under MIT License
# Copyright (c) 2020 TytusDb Team

from storageManager import jsonMode as j

print(j.extractTable('compiladores2', 'USUARIO'))
# create database
j.createDatabase('world')

j.createTable('world', 'cities', 4)

# create simple primary keys
j.alterAddPK('world', 'cities', [0])

# insert data in cities
j.insert('world', 'cities', [1, 'Guatemala', 'Guatemala', 'GTM'])
j.insert('world', 'cities', [2, 'Cuilapa', 'Santa Rosa', 'GTM'])
j.insert('world', 'cities', [3, 'San Salvador', 'San Salvador', 'SLV'])
j.insert('world', 'cities', [4, 'San Miguel', 'San Miguel', 'SLV'])

# show all datap
print(j.extractTable('world', 'cities'))  #SELECT

print(j.update('world', 'cities', {
    1: 'Mexico',
    3: 'MX'
}, [1]))

print(j.extractTable('world', 'cities'))  #SELECT
Beispiel #14
0
# assume no data exist or execute the next drop function
j.dropAll()

# test Databases CRUD
print(j.createDatabase('db1'))  # 0
print(j.createDatabase('db1'))  # 2
print(j.createDatabase('db4'))  # 0
print(j.createDatabase('db5'))  # 0
print(j.createDatabase(0))  # 1
print(j.alterDatabase('db5', 'db1'))  # 3
print(j.alterDatabase('db5', 'db2'))  # 0
print(j.dropDatabase('db4'))  # 0
print(j.showDatabases())  # ['db1','db2']

# test Tables CRUD
print(j.createTable('db1', 'tb4', 3))  # 0
print(j.createTable('db1', 'tb4', 3))  # 3
print(j.createTable('db1', 'tb1', 3))  # 0
print(j.createTable('db1', 'tb2', 3))  # 0
print(j.alterTable('db1', 'tb4', 'tb3'))  # 0
print(j.dropTable('db1', 'tb3'))  # 0
print(j.alterAddPK('db1', 'tb1', 0))  # 1
print(j.alterAddPK('db1', 'tb1', [0]))  # 0
print(j.showTables('db1'))  # ['tb1', 'tb2']

# test Registers CRUD
print(j.insert('db1', 'tb1', [1, 1]))  # 5
print(j.insert('db1', 'tb1', ['1', 'line', 'one']))  # 0
print(j.loadCSV('tb1.csv', 'db1', 'tb1'))  # [0, 0, 0, 0, 0]
print(j.extractTable('db1', 'tb1'))
# [['1', 'line', 'one'], ['2', 'line', 'two'],
Beispiel #15
0
 def cmd_createTable(self, database, table, numberColumns):
     if verificarTablaDuplicada(table, database) == 1:
         self.tabla.agregaraTS('0', table, 'tabla', database, '', '')
         EDDResp.createtable(
             condb.createTable(database, table, numberColumns))
Beispiel #16
0
    def ejecutar(self, ts):
        if DB_ACTUAL.getName() == None:
            return ErrorReport('Semantico', 'Not defined database to used', 0)
        elif not TRef.databaseExist(DB_ACTUAL.getName()):
            return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_invalid_schema_name.invalid_schema_name), 0)
        elif TRef.tableExist(DB_ACTUAL.getName(), self.nombre):
            return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.duplicate_table), 0)

        # Aux de comprobacion y almacenamiento
        columns = dict()
        auxFK = list()
        auxPK = list()
        auxUnique = list()
        auxCheck = list()

        # Proceso de las distintas columnas recibidas en la consulta
        for col in self.columnas:
            if isinstance(col, CreateField): #Columna nueva
                #Obtenemos cada columna y corroboramos que tengan nombres distintos
                if col.nombre in columns:
                    return 1
                else: 
                    colSint = col.ejecutar(ts)
                    if isinstance(colSint, ErrorReport):
                        return colSint
                    columns[col.nombre] = colSint
            elif isinstance(col, ConstraintMultipleFields): #Multiples Constraints
                if col.tipo == CONSTRAINT_FIELD.UNIQUE:
                    auxUnique.extend(col.ejecutar(ts))
                else:
                    auxPK.extend(col.ejecutar(ts))
            elif isinstance(col, ForeignKeyMultipleFields): #Multiples Llaves Foraneas
                colSint = col.ejecutar(ts)
                if isinstance(colSint, ErrorReport):
                    return colSint
                auxFK.extend(colSint)
            elif isinstance(col, CheckMultipleFields): #Multiple chequeos
                auxCheck.extend(col.ejecutar(ts))
            else:
                return col
        
        #Modificamos los valores dependiendo de las columnas multiples
        # Primary Key
        for pk in auxPK:
            # Se verifica que cada constraint haga referencia a un campo, de lo contrario será invalido
            if not pk in columns:
                return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.invalid_column_reference), 0)
            columns[pk]['PK'] = True

        # Foreign Key
        for fk  in auxFK:
            # Se verifica que cada constraint haga referencia a un campo, de lo contrario será invalido
            if not fk[0] in columns:
                return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.invalid_column_reference), 0)
            columns[fk[0]]['FK'] = True
            columns[fk[0]]['References'] = {'Table':fk[1],'Field':fk[0]}

        for chequeo in auxCheck:
            # Se verifica que cada constraint haga referencia a un campo, de lo contrario será invalido
            if not chequeo[0] in columns:
                return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.invalid_column_reference), 0)
            #TODO Mejorar implementacion de checks
            columns[chequeo[0]]['Check'] = chequeo[1]

        # Unique
        for unico in auxUnique:
            # Se verifica que cada constraint haga referencia a un campo, de lo contrario será invalido
            if not unico in columns:
                return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.invalid_column_reference), 0)
            columns[unico]['Unique'] = True
            
        #--------- Herencia
        if self.herencia:
            if not TRef.tableExist(DB_ACTUAL.getName(), self.herencia):
                return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_fdw_error.fdw_table_not_found), 0)
            else:
                colsPadre = TRef.getColumns(DB_ACTUAL.getName(), self.herencia)
                for col in colsPadre:
                    # Verificamos que no existan columnas repetidas con el padre, ya que no existe el polimorfismo de campos
                    if col in columns:
                        return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.duplicate_column), 0)
                # De no existir columnas duplicadas, se agregan las columnas a la tabla
                columns.update(colsPadre)

        # Ahora procedemos a crear
        result = DBMS.createTable(DB_ACTUAL.getName(), self.nombre, len(columns))

        if result == 0:
            TRef.createTable(DB_ACTUAL.getName(), self.nombre, columns, self.herencia)
            return result

        return ErrorReport('Semantico', sqlErrors.sqlErrorToString(sqlErrors.sql_error_syntax_error_or_access_rule_violation.duplicate_table), 0)
Beispiel #17
0
# JSON Mode Test File
# Released under MIT License
# Copyright (c) 2020 TytusDb Team

from storageManager import jsonMode as j

# drop all databases if exists
j.dropAll()

# create database
j.createDatabase('world')

# create tables
j.createTable('world', 'countries', 4)
j.createTable('world', 'cities', 4)
j.createTable('world', 'languages', 4)

# create simple primary keys
j.alterAddPK('world', 'countries', [0])
j.alterAddPK('world', 'cities', [0])
j.alterAddPK('world', 'languages', [0, 1])

# insert data in countries
j.insert('world', 'countries', ['GTM', 'Guatemala', 'Central America', 108889])
j.insert('world', 'countries', ['SLV', 'El Salvado', 'Central America', 21041])

# insert data in cities
j.insert('world', 'cities', [1, 'Guatemala', 'Guatemala', 'GTM'])
j.insert('world', 'cities', [2, 'Cuilapa', 'Santa Rosa', 'GTM'])
j.insert('world', 'cities', [3, 'San Salvador', 'San Salvador', 'SLV'])
j.insert('world', 'cities', [4, 'San Miguel', 'San Miguel', 'SLV'])
Beispiel #18
0
    def ejecutar(self, ent: Entorno):
        dbActual = ent.getDataBase()
        if dbActual != None:
            tam = len(self.listaDef)
            nuevaTabla = Simbolo(TipoSimbolo.TABLA, (self.id + "_" + dbActual))
            listaColumnas = []
            listaAtrCol = []
            hayPrimaria = False
            hayForanea = False
            primariaAdd: Primaria = None
            foraneaAdd: Foranea = None
            inicioHerencia = 0

            if self.herencia != None:
                r: Simbolo = ent.buscarSimbolo(self.herencia + "_" + dbActual)
                if r != None:
                    for colPadre in r.valor:
                        listaColumnas.append(colPadre)
                        if colPadre.atributos.get('primary') != None:
                            coPrimary: Simbolo = ent.buscarSimbolo(
                                colPadre.atributos.get('primary'))
                            if coPrimary != None:
                                self.listPK = coPrimary.valor

                    inicioHerencia = len(r.valor)

                else:
                    variables.consola.insert(
                        INSERT,
                        "La tabla padre '" + self.herencia + "' no existe")
                    reporteerrores.append(
                        Lerrores(
                            "Error Semántico",
                            "La tabla padre '" + self.herencia + "' no existe",
                            "", ""))

            for x in range(0, tam, 1):
                tt = self.listaDef[x]
                if tt.tipo == AtributosColumna.COLUMNA_SIMPLE:
                    nuevaColumna = Simbolo(tt.tipoDato, tt.identificador)
                    if tt.lista != None:  #aca se mete si viene por ejemplo: columna1 integer references tabla2
                        tamano = len(tt.lista)
                        for y in range(tamano):
                            hayAtr = False
                            nuevoSym = Simbolo("tipo", "nombre")
                            nuevoSym.baseDatos = dbActual
                            nuevoSym.tabla = self.id
                            atrColumna: Atributo = tt.lista[y]
                            if atrColumna.tipo == AtributosColumna.UNICO:
                                hayAtr = True
                                nuevoSym.tipo = TipoSimbolo.CONSTRAINT_UNIQUE
                                if atrColumna.valor != None:  #forma de: constraint id UNIQUE
                                    #formato de nombre: U_database_tabla_nombreColumna_idConstraint
                                    nuevoSym.nombre = str("U_" + dbActual +
                                                          "_" + self.id + "_" +
                                                          tt.identificador +
                                                          "_" +
                                                          atrColumna.valor)
                                    nuevaColumna.atributos.update({
                                        'unique':
                                        str("U_" + dbActual + "_" + self.id +
                                            "_" + tt.identificador + "_" +
                                            atrColumna.valor)
                                    })
                                else:
                                    #forma de: nombreColumna tipo UNIQUE
                                    #formato: U_database_tabla_nombreColumna
                                    nuevoSym.nombre = str("U_" + dbActual +
                                                          "_" + self.id + "_" +
                                                          tt.identificador)
                                    nuevaColumna.atributos.update({
                                        'unique':
                                        str("U_" + dbActual + "_" + self.id +
                                            "_" + tt.identificador)
                                    })
                                nuevoSym.valor = tt.identificador
                            elif atrColumna.tipo == AtributosColumna.CHECK:
                                hayAtr = True
                                nuevoSym.tipo = TipoSimbolo.CONSTRAINT_CHECK
                                nuevoSym.valor = atrColumna.exp
                                if atrColumna.valor != None:  #forma de: constraint id check cond < cond
                                    #formato: C_database_tabla_nombreColumna_idConstraint
                                    nuevoSym.nombre = str("C_" + dbActual +
                                                          "_" + self.id + "_" +
                                                          tt.identificador +
                                                          "_" +
                                                          atrColumna.valor)
                                    nuevaColumna.atributos.update({
                                        'check':
                                        str("C_" + dbActual + "_" + self.id +
                                            "_" + tt.identificador + "_" +
                                            atrColumna.valor)
                                    })
                                else:
                                    #cuando viene: nombreColumna tipo CHECK cond < cond
                                    #formato: C_database_tabla_nombreColumna
                                    nuevoSym.nombre = str("C_" + dbActual +
                                                          "_" + self.id + "_" +
                                                          tt.identificador)
                                    nuevaColumna.atributos.update({
                                        'check':
                                        str("C_" + dbActual + "_" + self.id +
                                            "_" + tt.identificador)
                                    })
                            elif atrColumna.tipo == AtributosColumna.DEFAULT:
                                nuevaColumna.atributos.update(
                                    {'default': atrColumna.valor})
                            elif atrColumna.tipo == AtributosColumna.NO_NULO:
                                nuevaColumna.atributos.update(
                                    {'not null': True})
                            elif atrColumna.tipo == AtributosColumna.NULO:
                                nuevaColumna.atributos.update({'null': True})
                            elif atrColumna.tipo == AtributosColumna.PRIMARY:
                                hayPrimaria = True
                                nuevaColumna.atributos.update({
                                    'primary':
                                    str("PK_" + dbActual + "_" + self.id)
                                })  # PK_database_tabla
                            elif atrColumna.tipo == AtributosColumna.REFERENCES:
                                rr = DBMS.extractTable(dbActual,
                                                       atrColumna.valor)
                                if rr == None:
                                    return str(
                                        "La tabla \'" + atrColumna.valor +
                                        "\' a la que está referenciando, no existe"
                                    )
                                else:
                                    tablaReferencia: Simbolo = ent.buscarSimbolo(
                                        atrColumna.valor + "_" + dbActual)
                                    colRef = tablaReferencia.valor
                                    for col in colRef:
                                        nomConstraintPK = col.atributos.get(
                                            'primary')
                                        if nomConstraintPK != None:
                                            consPK: Simbolo = ent.buscarSimbolo(
                                                nomConstraintPK)
                                            arrPk = consPK.valor
                                            if len(arrPk) == 1:
                                                if tablaReferencia.valor[arrPk[
                                                        0]].tipo.tipo == nuevaColumna.tipo.tipo:
                                                    hayForanea = True
                                                    hayAtr = True
                                                    nuevoSym.tipo = TipoSimbolo.CONSTRAINT_FOREIGN
                                                    # FK_database_tabla_tablaReferencia
                                                    nuevoSym.nombre = str(
                                                        "FK_" + dbActual +
                                                        "_" + self.id + "_" +
                                                        atrColumna.valor)
                                                    nuevaColumna.atributos.update(
                                                        {
                                                            'foreign':
                                                            str("FK_" +
                                                                dbActual +
                                                                "_" + self.id +
                                                                "_" +
                                                                atrColumna.
                                                                valor)
                                                        })
                                                    break

                                    if not hayForanea:
                                        variables.consola.insert(
                                            INSERT,
                                            "No se puede establecer llave foranea entre tabla '"
                                            + self.id + "' y '" +
                                            atrColumna.valor + "'\n")
                                        reporteerrores.append(
                                            Lerrores(
                                                "Error Semántico",
                                                "No se puede establecer llave foranea entre tabla '"
                                                + self.id + "' y '" +
                                                atrColumna.valor + "'", "",
                                                ""))

                            if hayAtr: listaAtrCol.append(nuevoSym)

                    listaColumnas.append(nuevaColumna)

                if tt.tipo == AtributosColumna.PRIMARY:
                    if hayPrimaria:
                        variables.consola.insert(
                            INSERT,
                            str("La tabla \'" + self.id +
                                "\' ya contiene llave primaria declarada\n"))
                        reporteerrores.append(
                            Lerrores(
                                "Error Semántico", "La tabla \'" + self.id +
                                "\' ya contiene llave primaria declarada", "",
                                ""))
                    else:
                        primariaAdd: Primaria = tt

                if tt.tipo == AtributosColumna.REFERENCES:
                    if hayForanea:
                        variables.consola.insert(
                            INSERT,
                            str("La tabla \'" + self.id +
                                "\' ya contiene llave foranea declarada\n"))
                        reporteerrores.append(
                            Lerrores(
                                "Error Semántico", "La tabla \'" + self.id +
                                "\' ya contiene llave foranea declarada", "",
                                ""))
                    else:
                        foraneaAdd: Foranea == tt
                        rr = DBMS.extractTable(dbActual, foraneaAdd.tabla)

                if tt.tipo == AtributosColumna.CONSTRAINT:
                    if tt.contenido.tipo == AtributosColumna.PRIMARY:
                        if hayPrimaria:
                            variables.consola.insert(
                                INSERT,
                                str("La tabla \'" + self.id +
                                    "\' ya contiene llave primaria declarada\n"
                                    ))
                            reporteerrores.append(
                                Lerrores(
                                    "Error Semántico",
                                    "La tabla \'" + self.id +
                                    "\' ya contiene llave primaria declarada",
                                    "", ""))
                        else:
                            primariaAdd: Primaria = tt.contenido
                            primariaAdd.idConstraint = tt.id
                    elif tt.contenido.tipo == AtributosColumna.REFERENCES:
                        if hayForanea:
                            variables.consola.insert(
                                INSERT,
                                str("La tabla \'" + self.id +
                                    "\' ya contiene llave foranea declarada\n")
                            )
                            reporteerrores.append(
                                Lerrores(
                                    "Error Semántico",
                                    "La tabla \'" + self.id +
                                    "\' ya contiene llave foranea declarada",
                                    "", ""))
                        else:
                            foraneaAdd: Foranea == tt
                            rr = DBMS.extractTable(dbActual, foraneaAdd.tabla)
                    elif tt.contenido.tipo == AtributosColumna.UNICO:
                        listUnicas = tt.contenido.unicos
                        for x in listUnicas:
                            for col in listaColumnas:
                                if col.nombre == x.valor:
                                    #formato: U_database_tabla_nombreColumna_idConstraint
                                    col.atributos.update({
                                        'unique':
                                        str("U_" + dbActual + "_" + self.id +
                                            "_" + col.nombre + "_" + tt.id)
                                    })
                                    sym = Simbolo(
                                        TipoSimbolo.CONSTRAINT_UNIQUE,
                                        str("U_" + dbActual + "_" + self.id +
                                            "_" + col.nombre + "_" + tt.id))
                                    ent.nuevoSimbolo(sym)
                    elif tt.contenido.tipo == AtributosColumna.CHECK:
                        #formato: C_database_tabla_nombreColumna_idConstraint
                        nombreColCheck = str(
                            tt.contenido.condiciones.exp1.valor)
                        for x in listaColumnas:
                            if x.nombre == nombreColCheck:
                                x.atributos.update({
                                    'check':
                                    str("C_" + dbActual + "_" + self.id + "_" +
                                        x.nombre + "_" + tt.id)
                                })
                                sym = Simbolo(
                                    TipoSimbolo.CONSTRAINT_CHECK,
                                    str("C_" + dbActual + "_" + self.id + "_" +
                                        x.nombre + "_" + tt.id))
                                sym.tabla = self.id
                                sym.baseDatos = dbActual
                                sym.valor = tt.contenido.condiciones
                                listaAtrCol.append(sym)
                                break

            nuevaTabla.valor = listaColumnas
            estado = DBMS.createTable(dbActual, self.id, len(listaColumnas))
            if estado == 0:
                nuevaTabla.baseDatos = dbActual
                r = ent.nuevoSimbolo(nuevaTabla)
                if r == "ok":
                    for x in listaAtrCol:
                        ent.nuevoSimbolo(x)

                    alreadyPrimary = False
                    for x in range(inicioHerencia, len(listaColumnas), 1):
                        if not alreadyPrimary:
                            pk = listaColumnas[x].atributos.get('primary')
                            if pk != None:
                                self.listPK.append(x)
                                rrr = DBMS.alterAddPK(dbActual, self.id,
                                                      self.listPK)
                                if rrr != 0:
                                    variables.consola.insert(
                                        INSERT,
                                        "No se ha podido agregar PK en tabla \'"
                                        + self.id + "\'\n")
                                    reporteerrores.append(
                                        Lerrores(
                                            "Error Semántico",
                                            "No se ha podido agregar PK en tabla \'"
                                            + self.id + "'", "", ""))
                                else:
                                    alreadyPrimary = True
                                    sym1 = Simbolo(
                                        TipoSimbolo.CONSTRAINT_PRIMARY,
                                        str("PK_" + dbActual + "_" + self.id))
                                    sym1.valor = self.listPK
                                    sym1.tabla = self.id
                                    sym1.baseDatos = dbActual
                                    ent.nuevoSimbolo(sym1)

                    if not alreadyPrimary:
                        tablaB: Simbolo = ent.buscarSimbolo(nuevaTabla.nombre)
                        if tablaB != None:
                            if primariaAdd != None:
                                listaPrim = primariaAdd.primarias
                                for p in listaPrim:
                                    for col in range(len(tablaB.valor)):
                                        if p.valor == tablaB.valor[col].nombre:
                                            self.listPK.append(col)
                                        #print(p.valor)
                                        #print(col.nombre)

                                if len(self.listPK) > 0:
                                    n = DBMS.alterAddPK(
                                        dbActual, self.id, self.listPK)
                                    if n != 0:
                                        variables.consola.insert(
                                            INSERT,
                                            "No se ha podido agregar PK en tabla \'"
                                            + self.id + "\'\n")
                                        reporteerrores.append(
                                            Lerrores(
                                                "Error Semántico",
                                                "No se ha podido agregar PK en tabla \'"
                                                + self.id + "'", "", ""))
                                    else:
                                        idPk = ""
                                        alreadyPrimary = True
                                        sym: Simbolo = None
                                        if primariaAdd.idConstraint != "":
                                            idPk = str(
                                                "PK_" + dbActual + "_" +
                                                self.id + "_" +
                                                primariaAdd.idConstraint)
                                            sym = Simbolo(
                                                TipoSimbolo.CONSTRAINT_PRIMARY,
                                                idPk)
                                        else:
                                            idPk = str("PK_" + dbActual + "_" +
                                                       self.id)
                                            sym = Simbolo(
                                                TipoSimbolo.CONSTRAINT_PRIMARY,
                                                idPk)

                                        for y in self.listPK:
                                            tablaB.valor[y].atributos.update(
                                                {'primary': idPk})

                                        sym.valor = self.listPK
                                        sym.tabla = self.id
                                        sym.baseDatos = dbActual
                                        ent.nuevoSimbolo(sym)

                    DBMS.showCollection()
                    variables.consola.insert(
                        INSERT,
                        str("Tabla " + self.id + " creada exitosamente\n"))
                    return

                return r
Beispiel #19
0
    def execute(self, environment):
        if not isinstance(self.table,str):
            return {'Error': 'El nombre indicado de la tabla no es una cadena.', 'Fila':self.row, 'Columna': self.column }
        
        columnas = []
        restricciones = []

        for column in self.fields:
            if isinstance(column,Column):
                columnas.append(column)
            else:
                restricciones.append(column)
        
        for i in range(len(columnas)):
            if i+1 < len(columnas):
                for j in range(i+1, len(columnas)):
                    if columnas[i].name == columnas[j].name:
                        return {'Error': 'El nombre de columna ya está siendo utilzado' , 'Fila':self.row, 'Columna': self.column}

        name = environment.getActualDataBase()
        result = 3
        result = admin.createTable(name, self.table, len(columnas))
        if result == 0:            
            #Se creo la tabla en la base de datos correctamente.
            #Creo una nueva database en la metadata
            database = environment.readDataBase(name)
            #Creo una nueva tabla con el nombre solicitado
            newTable = Table(self.table,columnas,restricciones)
            #Agrego a la tabla las columnas pertenecientes a la misma
            primaryKeys = []
            ids = []
            for const in newTable.constraint:
                if const['type'] == "primary":
                    ids.append(const['value'])
            for index in range(len(newTable.columns)):
                for id in ids:
                    if newTable.columns[index].name == id:
                        primaryKeys.append(index)
            #Agrego la nueva tabla a la base de datos.
            database.addTable(newTable)
            
            create = admin.alterAddPK(name,self.table,primaryKeys)
            if (create == 0):
                return('Llave primaria agregada exitosamenta a la tabla' + self.table )
            elif (create == 1):
                return {'Error':'Tabla ' + self.table + ' creada, pero ocurrio un error al ingresar llaves primarias', 'Fila':self.row, 'Columna':self.column}
            elif (create == 2):
                return {'Error':'No se encontro la Base de datos, en agregar tabla', 'Fila':self.row, 'Columna':self.column}
            elif (create == 3):
                return {'Error':'No se pudo agregar llaves pirmarias a '+ self.table + ', Tabla no existente', 'Fila':self.row, 'Columna':self.column}
            elif (create == 4):
                return {'Error':'Llave Primaria ya existente en Tabla ' + self.table, 'Fila':self.row, 'Columna':self.column}
            elif (create == 5):
                return {'Error':'Columnas fuera del límites', 'Fila':self.row, 'Columna':self.column}
            return 'La Tabla ' + self.table + ' ha sido creada con éxito.' 
        elif result == 1:
            #Error al crear
            return {'Error':'Ocurrió un error en el storage manager Tabla' + self.table + ' no pudo ser creada.', 'Fila':self.row, 'Columna':self.column}
        elif result == 2:
            #Error al crear
            return {'Error':'Tabla' + self.table + ' no se encuentra en la base de datos.', 'Fila':self.row, 'Columna':self.column}
        elif result == 3:
            #Error al crear
            return {'Error':'Tabla' + self.table + 'ya existente, no pudo ser creada.', 'Fila':self.row, 'Columna':self.column}
Beispiel #20
0
inicio = time.time()

#Area para crear bases de datos
print("Estado BD:", j.createDatabase("BD1"))  #Sistema de Asignaciones
print("Estado BD:", j.createDatabase("BD2"))  #Sistema de Compras de productos
print("Estado BD:", j.createDatabase(
    "BD3"))  #Sistema de Accesos de usuario para una base de datos
print("Estado BD:", j.createDatabase(
    "BD4"))  #Sistema de Peliculas y Series para una pagina web
print("Estado BD:",
      j.showDatabases())  #Nos deberia mostrar todas las bases de datos

#Area para crear tablas
'Creamos Tablas Estudiante, Periodo, Año, Asignacion, Curso, Asignacion_Curso'
print("---------Creamos Tabla Estudiante---------")
print("Estado Tabla:", j.createTable("BD1", "Estudiante", 8))
print("Estado PKS:", j.alterAddPK("BD1", "Estudiante", [0]))
print("Estado Inserts", j.loadCSV("./BD1/Estudiantes.csv", "BD1",
                                  "Estudiante"))

print("---------Creamos Tabla Periodo---------")
print("Estado Tabla:", j.createTable("BD1", "Periodo", 2))
print("Estado PKS:", j.alterAddPK("BD1", "Periodo", [0]))
print("Estado Inserts", j.loadCSV("./BD1/Periodo.csv", "BD1", "Periodo"))

print("---------Creamos Tabla Año---------")
print("Estado Tabla:", j.createTable("BD1", "Year", 2))
print("Estado PKS:", j.alterAddPK("BD1", "Year", [0]))
print("Estado Inserts", j.loadCSV("./BD1/Año.csv", "BD1", "Year"))

print("---------Creamos Tabla Curso---------")
Beispiel #21
0
def crearTabla(nodo, tablaSimbolos):
    val = nodo.id
    global consola
    if nodo.herencia == False:
        contador = 0
        nueva = TS.SimboloTabla(val, None)

        for col in nodo.columnas:
            pk = False
            default_ = None
            check = None
            null = True
            unique = False

            if isinstance(col, SColumna):
                if col.opcionales != None:
                    for opc in col.opcionales:
                        if isinstance(opc, SOpcionales):
                            if opc.tipo == TipoOpcionales.PRIMARYKEY:
                                pk = True
                            elif opc.tipo == TipoOpcionales.DEFAULT:
                                default_ = opc.valor
                            elif opc.tipo == TipoOpcionales.CHECK:
                                if opc.id == None:
                                    check = {
                                        "id": col.id + "_check",
                                        "condicion": opc.valor
                                    }
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val,
                                                       col.id + "_check",
                                                       col.id, "check"))
                                else:
                                    check = {
                                        "id": opc.id,
                                        "condicion": opc.valor
                                    }
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val, opc.id,
                                                       col.id, "check"))
                            elif opc.tipo == TipoOpcionales.NULL:
                                null = True
                            elif opc.tipo == TipoOpcionales.NOTNULL:
                                null = False
                            elif opc.tipo == TipoOpcionales.UNIQUE:
                                if opc.id == None:
                                    unique = col.id + "_unique"
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val,
                                                       col.id + "_unique",
                                                       col.id, "unique"))
                                else:
                                    unique = opc.id
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val, opc.id,
                                                       col.id, "unique"))
                            colnueva = TS.SimboloColumna(
                                col.id, col.tipo, pk, None, unique, default_,
                                null, check)
                            nueva.crearColumna(col.id, colnueva)
                            if colnueva == None:
                                listaSemanticos.append(
                                    Error.ErrorS(
                                        "Error Semantico",
                                        "Ya existe una columna con el nombre "
                                        + col.id))
                else:
                    auxc = TS.SimboloColumna(col.id, col.tipo, False, False,
                                             False, False, False, False)
                    nueva.crearColumna(col.id, auxc)

            elif isinstance(col, SColumnaUnique):
                for id in col.id:
                    if nueva.modificarUnique(id.valor, True,
                                             id.valor + "_unique") == None:
                        listaSemanticos.append(
                            Error.ErrorS(
                                "Error Semantico",
                                "No se encontró la columna con id " +
                                id.valor))
                    else:
                        listaConstraint.append(
                            TS.Constraints(useActual, val,
                                           id.valor + "_unique", id.valor,
                                           "unique"))
            elif isinstance(col, SColumnaCheck):
                condicion = col.condicion
                opIzq = condicion.opIzq
                idcol = opIzq.valor
                result = False
                if col.id == None:
                    result = nueva.modificarCheck(idcol, col.condicion,
                                                  idcol + "_check")
                    listaConstraint.append(
                        TS.Constraints(useActual, val, idcol + "_check", idcol,
                                       "check"))
                else:
                    result = nueva.modificarCheck(idcol, condicion, col.id)
                    listaConstraint.append(
                        TS.Constraints(useActual, val, col.id, idcol, "check"))
                if result != True:
                    listaSemanticos.append(
                        Error.ErrorS(
                            "Error Semantico",
                            "No se encontró la columna con id " + idcol))
            elif isinstance(col, SColumnaFk):
                for i in range(len(col.idlocal)):
                    idlocal = col.idlocal[i].valor
                    idfk = col.idfk[i].valor
                    columnafk = tablaSimbolos.getColumna(
                        useActual, col.id, idfk)
                    columnalocal = nueva.getColumna(idlocal)

                    if columnafk != None and columnalocal != None:
                        if columnafk.tipo.tipo == columnalocal.tipo.tipo:
                            nueva.modificarFk(idlocal, col.id, idfk)
                            listaFK.append(
                                TS.llaveForanea(useActual, val, col.id,
                                                idlocal, idfk))
                        else:
                            listaSemanticos.append(
                                Error.ErrorS(
                                    "Error Semantico",
                                    "La columna %s y la columna %s no tienen el mismo tipo"
                                    % (idlocal, idfk)))
                    else:
                        listaSemanticos.append(
                            Error.ErrorS("Error Semantico",
                                         "No se encontró la columna"))

            elif isinstance(col, SColumnaPk):
                for id in col.id:
                    if nueva.modificarPk(id.valor) == None:
                        listaSemanticos.append(
                            Error.ErrorS(
                                "Error Semantico",
                                "No se encontró la columna " + id.valor))
            contador += 1

        base = tablaSimbolos.get(useActual)
        base.crearTabla(val, nueva)
        tt = jBase.createTable(useActual, nodo.id, contador)
        if tt == 0:
            consola += "La tabla " + nodo.id + " se creó con éxito. \n"
        elif tt == 1:
            consola += "Error en la operación al crear la tabla " + nodo.id + "\n"
        elif tt == 2:
            consola += "La base de datos " + useActual + " no existe. \n"
        else:
            consola += "La tabla " + nodo.id + " ya existe. \n"
Beispiel #22
0
    def ejecutar(self, ent:Entorno):
        dbActual = ent.getDataBase()
        tam = len(self.listaDef)
        print (tam)
        nuevaTabla = Simbolo(TipoSimbolo.TABLA,self.id)
        listaColumnas = []
        for x in range(0,tam,1):
            tt = self.listaDef[x]
            if tt.tipo == AtributosColumna.COLUMNA_SIMPLE:
                self.numColumnas += 1
                nuevaColumna = Simbolo(tt.tipoDato,tt.identificador)
                if tt.lista != None: #aca se mete si viene por ejemplo: columna1 integer references tabla2
                    tamano = len(tt.lista)
                    for y in range(tamano):
                        atrColumna = tt.lista[y]
                        if atrColumna.tipo == AtributosColumna.UNICO:
                            nuevoUnico = Simbolo(TipoSimbolo.CONSTRAINT_UNIQUE,atrColumna.valor)
                            nuevoUnico.baseDatos = dbActual
                            nuevoUnico.tabla = self.id
                            ent.nuevoSimbolo(nuevoUnico)
                            nuevaColumna.atributos.update({'unique':atrColumna.valor})
                        elif atrColumna.tipo == AtributosColumna.CHECK:
                            nuevoCheck = Simbolo(TipoSimbolo.CONSTRAINT_CHECK,atrColumna.valor)
                            nuevoCheck.baseDatos = dbActual
                            nuevoCheck.tabla = self.id
                            ent.nuevoSimbolo(nuevoCheck)
                            nuevaColumna.atributos.update({'check':atrColumna.valor})
                        elif atrColumna.tipo == AtributosColumna.DEFAULT:
                            nuevaColumna.atributos.update({'default':atrColumna.valor})
                        elif atrColumna.tipo == AtributosColumna.NO_NULO:
                            nuevaColumna.atributos.update({'not null':True})
                        elif atrColumna.tipo == AtributosColumna.NULO:
                            nuevaColumna.atributos.update({'null':True})
                        elif atrColumna.tipo == AtributosColumna.PRIMARY:
                            nuevaPrimaria = Simbolo(TipoSimbolo.CONSTRAINT_PRIMARY,str("PK_" + self.id))
                            nuevaPrimaria.baseDatos = dbActual
                            nuevaPrimaria.tabla = self.id
                            ent.nuevoSimbolo(nuevaPrimaria)
                            nuevaColumna.atributos.update({'primary':str("PK_" + self.id)})
                        elif atrColumna.tipo == AtributosColumna.REFERENCES:
                            rr = DBMS.extractTable(dbActual,atrColumna.valor)
                            if rr == []:
                                return str("La tabla \'" + atrColumna.valor + "\' a la que está referenciando, no existe")
                            else:
                                nuevaForanea = Simbolo(TipoSimbolo.CONSTRAINT_FOREIGN,str("FK_" + self.id))
                                nuevaForanea.baseDatos = dbActual
                                nuevaForanea.tabla = self.id
                                ent.nuevoSimbolo(nuevaForanea)
                                nuevaColumna.atributos.update({'foreign':str("FK_" + self.id)})
                
                listaColumnas.append(nuevaColumna)

        #considerar la situacion de cuando no se haya creado la tabla pero ya se hayan 
        #agregado los constraint a la tabla de simbolos 
        nuevaTabla.valor = listaColumnas
        if dbActual != None:
            estado = DBMS.createTable(dbActual,self.id, self.numColumnas)
            if estado == 0: 
                nuevaTabla.baseDatos = dbActual
                ent.nuevoSimbolo(nuevaTabla)
                
                DBMS.showCollection()
                return str("Tabla " + nuevaTabla.nombre + " creada exitosamente")
Beispiel #23
0
print(j.showDatabases())

# drop db3 and db1, return two 0's
print(j.dropDatabase("db3"))
print(j.dropDatabase("db1"))

# show empty-list of databases
print(j.showDatabases())

# again create db1 and db2, return two 0's and show return list of databases
print(j.createDatabase("db1"))
print(j.createDatabase("db2"))
print(j.showDatabases())

# create two table in db1 and show return tables list of db1 database
print(j.createTable("db1", "table1", 5))
print(j.createTable("db1", "table2", 8))
print(j.showTables("db1"))

# rename table1 to table 3 and show return tables list of db1 database
print(j.alterTable("db1", "table1","table3"))
print(j.showTables("db1"))

# drop table3 of db1 and show return tables list of db1 database
print(j.dropTable("db1", "table3"))
print(j.showTables("db1"))

# drop db1 with tables, first return 0 and second return None
print(j.dropDatabase("db1"))
print(j.showTables("db1"))
Beispiel #24
0
# JSON Mode Test File
# Released under MIT License
# Copyright (c) 2020 TytusDb Team

from storageManager import jsonMode as j
import pandas as pd
from datetime import *

# drop all databases if exists

# create database
j.createDatabase('BD1')

# create tables
j.createTable('BD1', 'personas', 5)
j.createTable('BD1', 'pais',    4)
j.createTable('BD1', 'idiomas', 4)

# create simple primary keys
j.alterAddPK('BD1', 'personas', [0])
j.alterAddPK('BD1', 'pais',    [0])
j.alterAddPK('BD1', 'idiomas', [0])

# insert data in countries
j.insert('BD1', 'pais', ['GTM', 'Guatemala',  'Central America', 108889])
j.insert('BD1', 'pais', ['MX', 'Mexico', 'Norte America',  21041])  
j.insert('BD1', 'pais', ['EEUU', 'Estados Unidos', 'Norte America',  21041]) 

# insert data in cities
j.insert('BD1', 'personas', [1, 'Jossie',    'Castrillo','27',    'GTM'])
j.insert('BD1', 'personas', [2, 'Juanpi',    'Garcia','27',    'GTM'])