Exemple #1
0
 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;
 }