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
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
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
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