Example #1
0
def p_id_data_2(p):
    '''id_data   : ID data_type '''
    
    #Verificar si el data type viene con longitud o no
    x = p[2].split(',')
    tipo = tipo_data(x[0])
    if len(x) == 2:
        nueva_columna = TS.Simbolo(p[1], tipo,None , None, x[1], False,False, None) 
    else:
        nueva_columna = TS.Simbolo(p[1], tipo, None, None, None, False, False, None)

    p[0] = nueva_columna
Example #2
0
def p_acciones(p):
    '''acciones : ADD acc
                | ADD COLUMN ID data_type
                | ALTER COLUMN ID TYPE data_type
                | ALTER COLUMN ID SET const
                | DROP CONSTRAINT ID
                | DROP COLUMN ID
                | RENAME COLUMN ID TO ID'''

    arr = []
    
    if str(p[1]).upper() == 'ADD':
        if str(p[2]).upper() == 'COLUMN':
            arr.append('ADDCOL')
            #Verificar si el data type viene con longitud o no
            x = p[4].split(',')
            tipo = tipo_data(x[0])
            if len(x) == 2: 
                nueva_columna = TS.Simbolo(str(p[3]), tipo, None, None, x[1], False, False, None) 
            else:
                nueva_columna = TS.Simbolo(str(p[3]),tipo, None, None, None, False, False, None)
            arr.append(nueva_columna)
        else:
            arr.append('CONST')
            arr.append(p[2])
    elif str(p[1]).upper() == 'DROP':
        if str(p[2]).upper() == 'CONSTRAINT':
            arr.append('DCONS')
            arr.append(p[3])
        elif str(p[2]).upper() == 'COLUMN':
            arr.append('DCOL')
            arr.append(p[3])
    elif str(p[1]).upper() == 'ALTER':
        if str(p[4]).upper() == 'TYPE':
            arr.append('TYPE')
            arr.append(p[3])
            x = p[5].split(',')
            if len(x) == 2:
                tipo = tipo_data(x[0])
                arr.append(tipo)
                arr.append(x[1])
        elif str(p[4]).upper() == 'SET':
            arr.append('SET')
            arr.append(p[3])
            arr.append(p[5])

    p[0] = arr
Example #3
0
 def execute(self, ts_global):
     ##print('----> EJECUTAR CREATE DATABASE')
     mensaje = '\n****CREATE DATABASE****\n'
     nueva_base = TS.Simbolo(self.id, TS.tipo_simbolo.DATABASE, None, None,
                             None, None, None, None)
     existe = False  # bandera para comprobar si existe
     bases = ts_global.get_databases()  # obtiene todas las bases de datos
     for base in bases:  # recorro la lista de bases de datos
         if base.id == self.id:  # y verifico si existe
             existe = True  # si existe, cambio el valor de la bandera
             break  # y salgo de la comprobación
     if not self.ifnot:  # si no viene "IF NOT EXISTS", se crea/reemplaza
         if self.replace:  # si viene "OR REPLACE"
             if existe:  # si existe la base de datos
                 ts_global.drop_db(self.id)  # se elimina, luego
             ts_global.agregar_simbolo(
                 nueva_base)  # se agrega el nuevo símbolo
             j.createDatabase(self.id)
             mensaje = mensaje + '\tBase de datos creada correctamente'
             return mensaje
         else:  # si no viene "OR REPLACE"
             if existe:  # si existe, es un error
                 nuevo_error = E.Errores(
                     'Semántico.',
                     'Ya existe una base de datos con el nombre \'' +
                     self.id + '\'.')
                 mensaje = mensaje + '\tYa existe una base de datos con el nombre \'' + self.id + '\''
                 return mensaje
                 #ls_error.append(nuevo_error)            #se agrega el error a la lista
             else:  # si no existe
                 ts_global.agregar_simbolo(
                     nueva_base)  # se agrega el nuevo símbolo
                 j.createDatabase(self.id)
                 mensaje = mensaje + '\tBase de datos creada correctamente'
                 return mensaje
     else:  # si sí viene "IF NOT EXISTS"
         if self.replace:  # si viene "OR REPLACE", es error
             nuevo_error = E.Errores(
                 'Semántico.',
                 'No pueden venir conjuntamente las cláusulas \'OR REPLACE\' e \'IF NOT EXISTS\'.'
             )
             mensaje = mensaje + '\tNo pueden venir conjuntamente las cláusulas \'OR REPLACE\' e \'IF NOT EXISTS\'.'
             return mensaje
             #ls_error.append(nuevo_error)                #se agrega el error a la lista
         else:  # si no viene "OR REPLACE"
             if not existe:  # si no existe la base de datos
                 ts_global.agregar_simbolo(
                     nueva_base
                 )  # se agrega el nuevo símbolo, de lo contrario no se hace nada
                 j.createDatabase(self.id)
                 mensaje = mensaje + '\tBase de datos creada correctamente'
                 return mensaje
Example #4
0
    def execute(self, ts):
        #print('----> EJECUTAR CREATE TABLE * '+str(self.id))
        mensaje = '\n****CREATE TABLE ' + str(self.id) + '****\n'
        self.base = ts.get_dbActual().id
        if (isinstance(self.base, E.Errores)):
            #no hay base Activa
            mensaje = mensaje + '\tERROR - No hay base activa\n'
            print(
                '***************************error - no hay base activa********************'
            )
            return mensaje
        #creamos la tabla
        new_tabla = TS.Simbolo(self.id, TS.tipo_simbolo.TABLE, None, self.base,
                               None, None, None, None)
        #insertamos la tabla a la ts
        verificar_tabla = ts.agregar_tabla(str(self.base), new_tabla)
        if (isinstance(verificar_tabla, E.Errores)):
            #print('***************************error********************')
            mensaje = mensaje + '\tError en creación de tabla'
            return mensaje
        else:
            #print('se agrego')
            #agregamos las columnas a la tabla
            for columna in self.cols:
                columna.base = self.base
                for const in columna.valor:
                    if (const.tipo == TS.t_constraint.PRIMARY):
                        columna.pk = True
                        columna.valor.remove(const)
                    elif (const.tipo == TS.t_constraint.FOREIGN):
                        columna.fk = True
                        columna.referencia = str(const.id) + ',' + str(
                            const.valor)
                        columna.valor.remove(const)

                    if columna.longitud == None:
                        columna.longitud = 0

                ts.agregar_columna(self.id, self.base, columna)
            '''
            if self.cont_key != '':
                for c in self.cont_key:
                    ag = ts.get_column(self.base, self.id, c.columna)
                    if not isinstance(ag, E.Errores):
                        if const[0].tipo == TS.t_constraint.FOREIGN:
                            ag.fk = True
                            ag.referencia = const[0].valor
                            if const[0].id != None:
                                ag.valor.append(const[0])
                        elif const[0].tipo == TS.t_constraint.PRIMARY:
                            ag.pk = True
                            if const[0].id != None:
                                ag.valor.append(const[0])
                        else:
                            #print('---->Entró a otros')
                            ag.valor.append(const[0])
                        #mensaje = mensaje + '\tSe agregó el constraint correctamente'
                        #return mensaje
                    else:
                        mensaje = mensaje + '\tNo se pudo agregar el constraint'
                        #return mensaje
            '''
            mensaje = mensaje + '\tTabla creada correctamente\n'
            j.createTable(self.base, self.id, len(self.cols))
            return mensaje