예제 #1
0
파일: alter.py 프로젝트: jossiebk/tytus
 def execute(self, table: SymbolTable, tree):
     super().execute(table, tree)
     result_table_name = self.table_name
     result_field_name = self.field_name
     result_field_type = self.field_type.val
     result_field_length = self.field_length
     result = alterAddColumn(table.get_current_db().name, result_table_name,
                             None)
     if result == 1:
         raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error')
     elif result == 2:
         raise Error(0, 0, ErrorType.RUNTIME,
                     '42P04: database_does_not_exists')
     elif result == 3:
         raise Error(0, 0, ErrorType.RUNTIME,
                     '42P04: table_does_not_exists')
     else:
         total_fields = len(table.get_fields_from_table(result_table_name))
         column_symbol = FieldSymbol(table.get_current_db().name,
                                     result_table_name, total_fields + 1,
                                     result_field_name, result_field_type,
                                     result_field_length, self.allows_null,
                                     False, None, None)
         table.add(column_symbol)
         return True
예제 #2
0
    def execute(self, table: SymbolTable, tree):
        super().execute(table, tree)
        result_name = self.name.execute(table, tree)
        result_inherits_from = self.inherits_from.execute(
            table, tree) if self.inherits_from else None
        result_fields = []
        if result_inherits_from:
            # get inheritance table, if doesn't exists throws semantic error, else append result
            result_fields.append(
                table.get_fields_from_table(result_inherits_from))

        result = createTable('db_from_st', result_name, len(result_fields))
        if result == 1:
            raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error')
            return False
        elif result == 2:
            raise Error(0, 0, ErrorType.RUNTIME,
                        '42P04: database_does_not_exists')
            return False
        elif result == 3:
            raise Error(0, 0, ErrorType.RUNTIME, '42P07: duplicate_table')
            return False
        else:
            table.add(TableSymbol(table.get_current_db().name, result_name))

        result_fields = self.fields.execute(
            table, tree)  # A list of TableField assumed
        for field in result_fields:
            field.table_name = result_name
            table.add(field)
        return
예제 #3
0
파일: create.py 프로젝트: edgarJ91/tytus
 def execute(self, table: SymbolTable, tree):
     super().execute(table, tree)
     result_values = []
     for val in self.value_list:          
         result_values.append(val.execute(table, tree))
     symbol = TypeSymbol(self.name, result_values)
     table.add(symbol)
     print(f'[AST] ENUM {self.name} created.')
     return f'[AST] ENUM {self.name} created.'
예제 #4
0
    def execute(self, table: SymbolTable, tree):
        super().execute(table, tree)
        # result_name = self.name.execute(table, tree)
        result_name = self.name
        result_owner = self.owner.execute(
            table, tree
        ) if self.owner else None  # Owner seems to be stored only to ST
        result_mode = self.mode(
            table, tree
        ) if self.mode is not None else 6  # Change to 1 when default mode available
        if self.replace:
            dropDatabase(result_name)
        result = 0
        if result_mode == 6:  # add more ifs when modes from EDD available
            result = createDatabase(result_name)

        if result == 1:
            # log error on operation
            raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error')
            return False
        elif result == 2:
            # log error because db already exists
            raise Error(0, 0, ErrorType.RUNTIME, '42P04: duplicate_database')
            return False
        else:
            return table.add(
                DatabaseSymbol(result_name, result_owner, result_mode))
예제 #5
0
파일: create.py 프로젝트: edgarJ91/tytus
    def execute(self, table: SymbolTable, tree):
        super().execute(table, tree)
        #result_name = self.name.execute(table, tree)
        result_name = self.name
        result_inherits_from = self.inherits_from.execute(table, tree) if self.inherits_from else None
        result_fields = self.fields
        if result_inherits_from:
            # get inheritance table, if doesn't exists throws semantic error, else append result
            result_fields.append(table.get_fields_from_table(result_inherits_from))


        result = createTable(table.get_current_db().name, result_name, len(result_fields))    

        if result == 1:
            raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error')
            return False
        elif result == 2:
            raise Error(0, 0, ErrorType.RUNTIME, '42P04: database_does_not_exists')
            return False
        elif result == 3:
            raise Error(0, 0, ErrorType.RUNTIME, '42P07: duplicate_table')
            return False
        else:
            #add primary keys, jsonMode needs the number of the column to set it to primarykey            
            keys = list( 
                map(
                    lambda x: result_fields.index(x),
                    filter(lambda key: key.is_pk == True, result_fields)                           
                    )  
            )
            if(len(keys)>0):
                result = alterAddPK(table.get_current_db().name, result_name, keys)

            table.add(TableSymbol(table.get_current_db().id, result_name, self.check_exp))

        ##result_fields = self.fields.execute(table, tree)  # A list of TableField assumed

        field_index = 0
        for field in result_fields:
            field.table_name = result_name
            field.field_index = field_index
            field.type = SymbolType.FIELD
            field_index += 1
            table.add(field)
        return "Table: " +str(result_name) +" created."
예제 #6
0
파일: create.py 프로젝트: vkslax/tytus
    def execute(self, table: SymbolTable, tree):
        super().execute(table, tree)
        result_name = self.name
        result_inherits_from = self.inherits_from.val if self.inherits_from else None
        result_fields = self.fields
        if result_inherits_from:
            # get inheritance table, if doesn't exists throws semantic error, else append result
            result_fields += table.get_fields_from_table(result_inherits_from)

        result = createTable(table.get_current_db().name, result_name,
                             len(result_fields))

        if result == 1:
            raise Error(self.line, self.column, ErrorType.RUNTIME,
                        '5800: system_error')
        elif result == 2:
            raise Error(self.line, self.column, ErrorType.RUNTIME,
                        '42P04: database_does_not_exists')
        elif result == 3:
            raise Error(self.line, self.column, ErrorType.RUNTIME,
                        '42P07: duplicate_table')
        else:
            # add primary keys, jsonMode needs the number of the column to set it to primarykey
            keys = list(
                map(lambda x: result_fields.index(x),
                    filter(lambda key: key.is_pk is True, result_fields)))
            if len(keys) > 0:
                result = alterAddPK(table.get_current_db().name, result_name,
                                    keys)

            table.add(
                TableSymbol(table.get_current_db().id, result_name,
                            self.check_exp))

        field_index = 0
        for field in result_fields:
            nuevo = FieldSymbol(table.get_current_db().name, result_name,
                                field_index, field.name, field.field_type,
                                field.length, field.allows_null, field.is_pk,
                                None, None)
            field_index += 1
            table.add(nuevo)

        return "Table: " + str(result_name) + " created."
예제 #7
0
 def execute(self, table: SymbolTable, tree):
     super().execute(table, tree)
     result_values = self.value_list.execute(table, tree)
     symbol = TypeSymbol(self.name, result_values)
     return table.add(symbol)