function get_computed_database_instance_mapped_schemas($role, $instance, $schema_name, $credentials) { $mapped_schemas = array(); $database_instance_schema_mapping = $this->get_database_instance_schema_mapping($instance["database_instance_id"]); foreach ($database_instance_schema_mapping as $mapping) { if ($mapping["from_schema"] == $schema_name) { if (strpos($mapping["to_schema"], '%') === false) { // Normal mapping $mapped_schemas[] = $mapping["to_schema"]; } else { // Wildcard mapping $instance_credentials = $credentials; if ($instance_credentials->is_empty() && empty($this->instance_credentials)) { throw new Exception("Wildcard mapping found, but no credentials available"); } if ($instance_credentials->is_empty() && $this->instance_credentials) { $stored_credentials = $this->get_instance_credentials($instance['host'], $instance['port']); if ($stored_credentials) { $instance_credentials = $stored_credentials; } } // Connect to remote database and find databases (schemas) matching wildcard //~~~ $database_wrapper = new DatabaseWrapper(array('database_type' => $role['database_type'], 'default_schema' => '', 'host' => $instance['host'], 'port' => $instance['port'], 'user' => $instance_credentials->get_username(), 'password' => $instance_credentials->get_password())); $schemas = $database_wrapper->get_schemas_like($mapping["to_schema"]); foreach ($schemas as $schema) { $mapped_schemas[] = $schema; } } } } if (empty($mapped_schemas)) { // No mapping? Then map the schema onto itself $mapped_schemas[] = $schema_name; } return $mapped_schemas; }