def get_database_name_out_of_ddl(ddl):
     clean_ddl = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(ddl)
     if clean_ddl.upper().startswith('CREATE DATABASE "'):
         return SQLTextHelper.get_first_double_quoted_identifier(clean_ddl)
     elif clean_ddl.upper().startswith('CREATE DATABASE '):
         database_name = clean_ddl.split(' ')[2]
     else:
         raise DDLTransformer.UnsupportedDDLForTransformationException(clean_ddl)
     return database_name
Ejemplo n.º 2
0
 def get_database_name_out_of_ddl(ddl):
     clean_ddl = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(
         ddl)
     if clean_ddl.upper().startswith('CREATE DATABASE "'):
         return SQLTextHelper.get_first_double_quoted_identifier(clean_ddl)
     elif clean_ddl.upper().startswith('CREATE DATABASE '):
         database_name = clean_ddl.split(' ')[2]
     else:
         raise DDLTransformer.UnsupportedDDLForTransformationException(
             clean_ddl)
     return database_name
    def get_ddl_for_different_relation_where_relation_just_before_round_bracket(
            self,
            ddl,
            new_table_name=None,
            new_schema_name=None):
        """
        Get ddl but adapt it to create a relation with different name but same structure
        :param ddl:  ddl from admin.v_generate_tbl_ddl view
        :param new_table_name: if None don't replace table_name
        :param new_schema_name: if None don't replace schema_name
        :return:
        """
        relation_specification = 'Unknown'
        try:
            round_bracket_separated_parts = ddl.split('(')
            first_round_bracket_part = round_bracket_separated_parts[0].rstrip()
            space_separated_parts = first_round_bracket_part.split(' ')
            relation_specification = space_separated_parts[-1]
            relation_regex = self.get_relation_regex_string(
                    quoted_schema=relation_specification.startswith('"'),
                    quoted_table=relation_specification.endswith('"')
                )
            match_dict = re.match(relation_regex, relation_specification).groupdict()
            relation_specification = ''

            if self.has_schema_in_ddl():
                original_schema_name = SQLTextHelper.quote_unindent(match_dict['schema_name'])
                new_schema_name = new_schema_name or original_schema_name
                relation_specification += '{schema}'.format(schema=SQLTextHelper.quote_indent(new_schema_name))
            if self.has_table_in_ddl():
                original_table_name = SQLTextHelper.quote_unindent(match_dict['table_name'])
                new_table_name = new_table_name or original_table_name
                relation_specification += '.{table}'.format(table=SQLTextHelper.quote_indent(new_table_name))

            space_separated_parts[-1] = relation_specification
            round_bracket_separated_parts[0] = ' '.join(space_separated_parts)
            new_ddl = '('.join(round_bracket_separated_parts)
            return new_ddl
        except:
            logging.debug('Clean ddl: {ddl}\nRelation name: {rel_name}'.format(
                ddl=ddl,
                rel_name=relation_specification
            ))
            raise DDLTransformer.InvalidDDLSQLException(ddl)
Ejemplo n.º 4
0
    def get_ddl_for_different_relation_where_relation_just_before_round_bracket(
            self, ddl, new_table_name=None, new_schema_name=None):
        """
        Get ddl but adapt it to create a relation with different name but same structure
        :param ddl:  ddl from admin.v_generate_tbl_ddl view
        :param new_table_name: if None don't replace table_name
        :param new_schema_name: if None don't replace schema_name
        :return:
        """
        relation_specification = 'Unknown'
        try:
            round_bracket_separated_parts = ddl.split('(')
            first_round_bracket_part = round_bracket_separated_parts[0].rstrip(
            )
            space_separated_parts = first_round_bracket_part.split(' ')
            relation_specification = space_separated_parts[-1]
            relation_regex = self.get_relation_regex_string(
                quoted_schema=relation_specification.startswith('"'),
                quoted_table=relation_specification.endswith('"'))
            match_dict = re.match(relation_regex,
                                  relation_specification).groupdict()
            relation_specification = ''

            if self.has_schema_in_ddl():
                original_schema_name = SQLTextHelper.quote_unindent(
                    match_dict['schema_name'])
                new_schema_name = new_schema_name or original_schema_name
                relation_specification += '{schema}'.format(
                    schema=SQLTextHelper.quote_indent(new_schema_name))
            if self.has_table_in_ddl():
                original_table_name = SQLTextHelper.quote_unindent(
                    match_dict['table_name'])
                new_table_name = new_table_name or original_table_name
                relation_specification += '.{table}'.format(
                    table=SQLTextHelper.quote_indent(new_table_name))

            space_separated_parts[-1] = relation_specification
            round_bracket_separated_parts[0] = ' '.join(space_separated_parts)
            new_ddl = '('.join(round_bracket_separated_parts)
            return new_ddl
        except:
            logging.debug('Clean ddl: {ddl}\nRelation name: {rel_name}'.format(
                ddl=ddl, rel_name=relation_specification))
            raise DDLTransformer.InvalidDDLSQLException(ddl)
Ejemplo n.º 5
0
 def __init__(self, path_to_v_generate, view_start):
     logging.debug('From {cwd} open v_generate {path}'.format(
         cwd=os.getcwd(), path=path_to_v_generate))
     with open(path_to_v_generate, 'r') as v_generate:
         self.view_sql = v_generate.read()
     self.view_sql = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(
         self.view_sql)
     if self.view_sql.startswith(view_start):
         self.view_query_sql = self.view_sql[len(view_start):]
     self.filter_sql = ''
 def __init__(self, path_to_v_generate, view_start):
     logging.debug('From {cwd} open v_generate {path}'.format(
         cwd=os.getcwd(),
         path=path_to_v_generate
     ))
     with open(path_to_v_generate, 'r') as v_generate:
         self.view_sql = v_generate.read()
     self.view_sql = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(self.view_sql)
     if self.view_sql.startswith(view_start):
         self.view_query_sql = self.view_sql[len(view_start):]
     self.filter_sql = ''
 def get_ddl_for_different_relation(ddl, new_table_name=None, new_schema_name=None):
     logging.debug('Transforming ddl: {ddl}'.format(ddl=ddl))
     clean_ddl = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(ddl)
     if clean_ddl.upper().startswith('CREATE TABLE IF NOT EXISTS '):
         return TableDDLTransformer.get_create_table_ddl_for_different_relation(
             clean_ddl,
             new_table_name=new_table_name,
             new_schema_name=new_schema_name
         )
     elif clean_ddl.upper().startswith('CREATE SCHEMA '):
         return SchemaDDLTransformer.get_create_schema_ddl_for_different_relation(
             clean_ddl,
             new_schema_name=new_schema_name
         )
     raise DDLTransformer.UnsupportedDDLForTransformationException(clean_ddl)
Ejemplo n.º 8
0
 def get_create_sql(self, generate=False):
     logging.debug('get_create_sql for {self}'.format(self=self))
     if generate:
         ddl_dict = self.get_cluster().get_query_full_result_as_list_of_dict(
             self.get_statement_to_retrieve_ddl_create_statement_text()
         )
         ddl = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(
             '\n'.join([r['ddl'] for r in ddl_dict])
         )
         self.create_sql = ddl
         return ddl
     else:
         if self.create_sql is not None:
             return self.create_sql
         else:
             raise Resource.CreateSQLNotSet('No create sql configured for resource {r}'.format(r=str(self)))
Ejemplo n.º 9
0
 def get_ddl_for_different_relation(ddl,
                                    new_table_name=None,
                                    new_schema_name=None):
     logging.debug('Transforming ddl: {ddl}'.format(ddl=ddl))
     clean_ddl = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(
         ddl)
     if clean_ddl.upper().startswith('CREATE TABLE IF NOT EXISTS '):
         return TableDDLTransformer.get_create_table_ddl_for_different_relation(
             clean_ddl,
             new_table_name=new_table_name,
             new_schema_name=new_schema_name)
     elif clean_ddl.upper().startswith('CREATE SCHEMA '):
         return SchemaDDLTransformer.get_create_schema_ddl_for_different_relation(
             clean_ddl, new_schema_name=new_schema_name)
     raise DDLTransformer.UnsupportedDDLForTransformationException(
         clean_ddl)
Ejemplo n.º 10
0
 def get_create_sql(self, generate=False):
     logging.debug('get_create_sql for {self}'.format(self=self))
     if generate:
         ddl_dict = self.get_cluster(
         ).get_query_full_result_as_list_of_dict(
             self.get_statement_to_retrieve_ddl_create_statement_text())
         ddl = SQLTextHelper.get_sql_without_commands_newlines_and_whitespace(
             '\n'.join([r['ddl'] for r in ddl_dict]))
         self.create_sql = ddl
         return ddl
     else:
         if self.create_sql is not None:
             return self.create_sql
         else:
             raise Resource.CreateSQLNotSet(
                 'No create sql configured for resource {r}'.format(
                     r=str(self)))
Ejemplo n.º 11
0
 def get_sql(self):
     sql_to_get_all_ddl = SQLTextHelper.remove_trailing_semicolon(self.view_query_sql)
     return 'SELECT * FROM (' + sql_to_get_all_ddl + ') ' + self.filter_sql + ';'
Ejemplo n.º 12
0
 def get_sql(self):
     sql_to_get_all_ddl = SQLTextHelper.remove_trailing_semicolon(
         self.view_query_sql)
     return 'SELECT * FROM (' + sql_to_get_all_ddl + ') ' + self.filter_sql + ';'
Ejemplo n.º 13
0
 def test_extract_first_double_quoted_identifier_from_string_with_escaped_double_quotes_at_end(
         self):
     test_string = 'CREATE DATABASE "test"""'
     self.assertEquals(
         '"test"""',
         SQLTextHelper.get_first_double_quoted_identifier(test_string))