public static CreateDatabaseDocument ( string name ) : RavenJObject | ||
name | string | |
return | RavenJObject |
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> /// <remarks> /// This operation happens _outside_ of any transaction /// </remarks> public static void EnsureDatabaseExists(this IDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForDefaultDatabase() as ServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; try { if (serverClient.Get(docId) != null) { return; } var req = serverClient.CreateRequest("PUT", "/admin/databases/" + Uri.EscapeDataString(name)); req.Write(doc.ToString(Formatting.Indented)); req.ExecuteRequest(); } catch (Exception) { if (ignoreFailures == false) { throw; } } }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static Task EnsureDatabaseExistsAsync(this IAsyncDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForDefaultDatabase() as AsyncServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; return(serverClient.GetAsync(docId) .ContinueWith(get => { if (get.Result != null) { return get; } return (Task)serverClient.PutAsync(docId, null, doc, new RavenJObject()); }) .Unwrap() .ContinueWith(x => { if (ignoreFailures == false) { x.Wait(); // will throw on error } var observedException = x.Exception; GC.KeepAlive(observedException); })); }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static async Task EnsureDatabaseExistsAsync(this IAsyncGlobalAdminDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = ((IAsyncDatabaseCommands)self).ForSystemDatabase() as AsyncServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } var doc = MultiDatabase.CreateDatabaseDocument(name); serverClient.ForceReadFromMaster(); var get = await serverClient.GetAsync(doc.Id).ConfigureAwait(false); if (get != null) { return; } try { await serverClient.GlobalAdmin.CreateDatabaseAsync(doc).ConfigureAwait(false); } catch (Exception) { if (ignoreFailures == false) { throw; } } await new RavenDocumentsByEntityName().ExecuteAsync(serverClient.ForDatabase(name), new DocumentConvention()).ConfigureAwait(false); }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static Task EnsureDatabaseExistsAsync(this IAsyncDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForDefaultDatabase() as AsyncServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; return(serverClient.GetAsync(docId) .ContinueWith(get => { if (get.Result != null) { return get; } var req = serverClient.CreateRequest("PUT", "/admin/databases/" + Uri.EscapeDataString(name)); req.Write(doc.ToString(Formatting.Indented)); return req.ExecuteRequestAsync(); }) .Unwrap() .ContinueWith(x => { if (ignoreFailures == false) { x.Wait(); // will throw on error } var observedException = x.Exception; GC.KeepAlive(observedException); })); }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> /// <remarks> /// This operation happens _outside_ of any transaction /// </remarks> public static void EnsureDatabaseExists(this IDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForSystemDatabase() as ServerClient; if (serverClient == null) { throw new InvalidOperationException("Multiple databases are not supported in the embedded API currently"); } serverClient.ForceReadFromMaster(); var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; try { if (serverClient.Get(docId) != null) { return; } var req = serverClient.CreateRequest("PUT", "/admin/databases/" + Uri.EscapeDataString(name)); req.Write(doc.ToString(Formatting.Indented)); req.ExecuteRequest(); new RavenDocumentsByEntityName().Execute(serverClient.ForDatabase(name), new DocumentConvention()); } catch (Exception) { if (ignoreFailures == false) { throw; } } }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static Task EnsureDatabaseExistsAsync(this IAsyncDatabaseCommands self, string name, bool ignoreFailures = false) { self = self.ForDefaultDatabase(); var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; return(self.GetAsync(docId) .ContinueWith(get => { if (get.Result != null) { return get; } return (Task)self.PutAsync(docId, null, doc, new RavenJObject()); }) .Unwrap() .ContinueWith(x => { if (ignoreFailures == false) { x.Wait(); // will throw on error } var observedException = x.Exception; GC.KeepAlive(observedException); })); }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> /// <remarks> /// This operation happens _outside_ of any transaction /// </remarks> public static void EnsureDatabaseExists(this IDatabaseCommands self, string name, bool ignoreFailures = false) { self = self.ForDefaultDatabase(); var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; using (new TransactionScope(TransactionScopeOption.Suppress)) { try { if (self.Get(docId) != null) { return; } self.Put(docId, null, doc, new RavenJObject()); } catch (Exception) { if (ignoreFailures == false) { throw; } } } }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static async Task EnsureDatabaseExistsAsync(this IAsyncDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForSystemDatabase() as AsyncServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } serverClient.ForceReadFromMaster(); var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; try { if (await serverClient.GetAsync(docId) != null) { return; } var req = serverClient.CreateRequest("/admin/databases/" + Uri.EscapeDataString(name), "PUT"); await req.ExecuteWriteAsync(doc.ToString(Formatting.Indented)); } catch (Exception) { if (ignoreFailures == false) { throw; } } try { await new RavenDocumentsByEntityName().ExecuteAsync(serverClient.ForDatabase(name), new DocumentConvention()); } catch (Exception) { // we really don't care if this fails, and it might, if the user doesn't have permissions on the new db } }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> /// <remarks> /// This operation happens _outside_ of any transaction /// </remarks> public static void EnsureDatabaseExists(this IGlobalAdminDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.Commands.ForSystemDatabase() as ServerClient; if (serverClient == null) { throw new InvalidOperationException("Multiple databases are not supported in the embedded API currently"); } serverClient.ForceReadFromMaster(); var doc = MultiDatabase.CreateDatabaseDocument(name); try { if (serverClient.Get(doc.Id) != null) { return; } serverClient.GlobalAdmin.CreateDatabase(doc); } catch (Exception) { if (ignoreFailures == false) { throw; } } try { new RavenDocumentsByEntityName().Execute(serverClient.ForDatabase(name), new DocumentConvention()); } catch (Exception) { // we really don't care if this fails, and it might, if the user doesn't have permissions on the new db } }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static Task EnsureDatabaseExistsAsync(this IAsyncDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForSystemDatabase() as AsyncServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; serverClient.ForceReadFromMaster(); return(serverClient.GetAsync(docId) .ContinueWith(get => { if (get.Result != null) { return get; } var req = serverClient.CreateRequest("/admin/databases/" + Uri.EscapeDataString(name), "PUT"); req.Write(doc.ToString(Formatting.Indented)); return req.ExecuteRequestAsync(); }) .Unwrap() .ContinueWith(x => { if (ignoreFailures == false) { x.AssertNotFailed(); // will throw on error } return new RavenDocumentsByEntityName().ExecuteAsync(serverClient.ForDatabase(name), new DocumentConvention()); }).Unwrap() .ObserveException()); }
///<summary> /// Ensures that the database exists, creating it if needed ///</summary> public static async Task EnsureDatabaseExistsAsync(this IAsyncDatabaseCommands self, string name, bool ignoreFailures = false) { var serverClient = self.ForSystemDatabase() as AsyncServerClient; if (serverClient == null) { throw new InvalidOperationException("Ensuring database existence requires a Server Client but got: " + self); } var doc = MultiDatabase.CreateDatabaseDocument(name); var docId = "Raven/Databases/" + name; serverClient.ForceReadFromMaster(); var get = await serverClient.GetAsync(docId).ConfigureAwait(false); if (get != null) { return; } var req = serverClient.CreateRequest("/admin/databases/" + Uri.EscapeDataString(name), "PUT"); req.Write(doc.ToString(Formatting.Indented)); try { await req.ExecuteRequestAsync().ConfigureAwait(false); } catch (Exception) { if (ignoreFailures) { return; } } await new RavenDocumentsByEntityName().ExecuteAsync(serverClient.ForDatabase(name), new DocumentConvention()).ConfigureAwait(false); }