def execute(self, properties, arguments): """ Drop a database after checking if schema and environment are valid values. Also check that host is not on the block list. :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **host**: The hostname to drop on; * **environment**: Environment to drop the database from. """ prepared_args = self._validate_and_prepare(properties, arguments) host = prepared_args['host'] schemes = properties.get('schemes') environment = prepared_args['environment'] database = properties.get('database') objects = properties.get('drop_objects') # retrieve the user credentials for this database project. users = properties.get('mssql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('mssql_users') for schema in schemes: print("dropping schema '{schema}' in database '{db}' " "on host '{host}' using environment '{env}'".format( schema=schema, db=database, host=host, env=environment)) executor = PropertyHelper.get_mssql_properties(users, host, schema) executor['database'] = database connector = self.get_connector() for obj in objects: folder = File( os.path.join(properties.get('plugin.dir'), 'mssql', 'drop', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) print("schema '{}' dropped.".format(schema))
def execute(self, properties, arguments): """ Create a new database instance for the initial version. :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **host**: The hostname where the database is running; * **environment**: The environment to create the database in (optional). """ prepared_args = self._validate_and_prepare(properties, arguments) host = prepared_args['host'] schemes = properties.get('schemes') environment = prepared_args['environment'] database = properties.get('database') objects = properties.get('create_objects') # retrieve the user credentials for this database project. users = properties.get('mssql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('mssql_users') connector = self.get_connector() create_dir = properties.get('create.dir') for schema in schemes: print("creating schema '{schema}' in database '{db}' " "on host '{host}' using environment '{env}'".format( schema=schema, db=database, host=host, env=environment)) executor = PropertyHelper.get_mssql_properties(users, host, schema) executor['database'] = database for obj in objects: # global ddl objects folder = File(os.path.join(create_dir, schema, 'ddl', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific ddl objects folder = File( os.path.join(create_dir, schema, 'ddl', obj, environment)) ConnectionExecutor.execute(connector, executor, properties, folder) # global dat objects folder = File(os.path.join(create_dir, schema, 'dat')) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific dat objects folder = File(os.path.join(create_dir, schema, 'dat', environment)) ConnectionExecutor.execute(connector, executor, properties, folder) print("schema '{}' created.".format(schema))
def execute(self, properties, arguments): """ Update database after checking if schema and environment are valid values. Also check that host is not on the block list and that the version to update to is valid :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **version**: The version to update the database to; * **host**: The hostname that hosts the database to update; * **schema**: Schema to update (optional); * **environment**: Environment to update the database in (optional). """ prepared_args = self._validate_and_prepare(properties, arguments) schemes = properties.get('schemes') host = prepared_args['host'] environment = prepared_args['environment'] version = prepared_args['version'] database = properties.get('database') objects = properties.get('create_objects') version_schema = properties.get('version_schema') alter_dir = properties.get('alter.dir') # retrieve the user credentials for this database project. users = properties.get('mssql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('mssql_users') connector = self.get_connector() for schema in schemes: print("updating schema '{schema}' in database '{db}' " "on host '{host}' using environment '{env}'".format( schema=schema, db=database, host=host, env=environment)) executor = PropertyHelper.get_mssql_properties(users, host, schema) executor['database'] = database # database_folder = PropertyHelper.get_database_folder(database, database_aliases) if schema == version_schema: self.fail_on_invalid_environment(properties, connector, executor, environment) self.fail_on_invalid_version(properties, connector, executor, version) for obj in objects: # global ddl objects folder = File( os.path.join(alter_dir, version, schema, 'ddl', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific ddl objects folder = File( os.path.join(alter_dir, version, schema, 'ddl', obj, environment)) ConnectionExecutor.execute(connector, executor, properties, folder) # global dat objects folder = File(os.path.join(alter_dir, version, schema, 'dat')) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific dat objects folder = File( os.path.join(alter_dir, version, schema, 'dat', environment)) ConnectionExecutor.execute(connector, executor, properties, folder) print("database '{}' updated.".format(database))