def ejecutar(self, tabla, arbol): super().ejecutar(tabla, arbol) resultado = self.valor.ejecutar(tabla, arbol) if isinstance(resultado, Excepcion): return resultado if self.valor.tipo.tipo == Tipo_Dato.CHAR or self.valor.tipo.tipo == Tipo_Dato.CHARACTER or self.valor.tipo.tipo == Tipo_Dato.TEXT: if str(self.codificacion.valor) == 'base64': message_bytes = resultado.encode('ascii') base64_bytes = base64.b64decode(message_bytes) base64_message = base64_bytes.decode('ascii') resultado = base64_message self.tipo = Tipo(Tipo_Dato.TEXT) return resultado if str(self.codificacion.valor) == 'hex': self.tipo = Tipo(Tipo_Dato.TEXT) #bytes.fromhex('7061756c').decode('utf-8') return bytearray.fromhex(str(resultado)).decode() error = Excepcion( '22023', "Semántico", f"No se reconoce la codificación{self.valor.tipo.toString()})", self.linea, self.columna) arbol.excepciones.append(error) #arbol.consola.append("HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos.") arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla,arbol) resultado = self.valor.ejecutar(tabla,arbol) if isinstance(resultado, Excepcion): return resultado if self.valor.tipo.tipo== Tipo_Dato.CHAR or self.valor.tipo.tipo== Tipo_Dato.VARCHAR or self.valor.tipo.tipo== Tipo_Dato.VARYING or self.valor.tipo.tipo== Tipo_Dato.CHARACTER or self.valor.tipo.tipo== Tipo_Dato.TEXT: self.tipo = Tipo(Tipo_Dato.TEXT) return strip(str(resultado)) error = Excepcion('42883',"Semántico",f"No existe la función TRIM({self.valor.tipo.toString()})",self.linea,self.columna) arbol.excepciones.append(error) arbol.consola.append("HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos.") arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla,arbol) resultado = self.valor.ejecutar(tabla,arbol) if isinstance(resultado, Excepcion): return resultado #print("RESULTADO:",resultado) #if isinstance(resultado, Primitivo): if self.valor.tipo.tipo== Tipo_Dato.CHAR or self.valor.tipo.tipo== Tipo_Dato.VARCHAR or self.valor.tipo.tipo== Tipo_Dato.VARYING or self.valor.tipo.tipo== Tipo_Dato.CHARACTER or self.valor.tipo.tipo== Tipo_Dato.TEXT: #if self.valor.tipo.tipo== Tipo_Dato.CHAR or self.valor.tipo.tipo== Tipo_Dato.CHARACTER: self.tipo = Tipo(Tipo_Dato.INTEGER) return len(str(resultado)) #elif isinstance(resultado, Identificador): # print("HAY QUE PROGRAMAR LO DE IDENTIFICADOR LENGTH") error = Excepcion('42883',"Semántico",f"No existe la función LENGTH({self.valor.tipo.toString()})",self.linea,self.columna) arbol.excepciones.append(error) arbol.consola.append("HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos.") arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla, arbol) resultado = self.valor.ejecutar(tabla, arbol) if isinstance(resultado, Excepcion): return resultado if self.indice < len(resultado): if self.valor.tipo.tipo == Tipo_Dato.CHAR or self.valor.tipo.tipo == Tipo_Dato.VARCHAR or self.valor.tipo.tipo == Tipo_Dato.VARYING or self.valor.tipo.tipo == Tipo_Dato.CHARACTER or self.valor.tipo.tipo == Tipo_Dato.TEXT: self.tipo = Tipo(Tipo_Dato.INTEGER) return ord( str(resultado)[int(self.indice):int(self.indice) + 1]) else: error = Excepcion( '2202E', "Semántico", f"El índice {self.indice} esta fuera de rango [0..{len(self.valor.valor)}]", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append(error.toString()) return error error = Excepcion( '42883', "Semántico", f"No existe la función GET_BYTE({self.valor.tipo.toString()})", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append( "HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." ) arbol.consola.append(error.toString()) return error