/// <summary> /// Changes properties of specified collection. /// </summary> public AResult<Dictionary<string, object>> ChangeProperties(string collectionName) { var request = new Request(HttpMethod.PUT, ApiBaseUri.Collection, "/" + collectionName + "/properties"); var bodyDocument = new Dictionary<string, object>(); // optional Request.TrySetBodyParameter(ParameterName.WaitForSync, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.JournalSize, _parameters, bodyDocument); request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves list of registered AQL user functions. /// </summary> public AResult<List<Dictionary<string, object>>> List() { var request = new Request(HttpMethod.GET, ApiBaseUri.AqlFunction, ""); // optional request.TrySetQueryStringParameter(ParameterName.Namespace, _parameters); var response = _connection.Send(request); var result = new AResult<List<Dictionary<string, object>>>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.List) { result.Value = ((IEnumerable)response.Data).Cast<Dictionary<string, object>>().ToList(); result.Success = (result.Value != null); } break; default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves list of indexes in specified collection. /// </summary> public AResult<Dictionary<string, object>> GetAllIndexes(string collectionName) { var request = new Request(HttpMethod.GET, ApiBaseUri.Index, ""); // required request.QueryString.Add(ParameterName.Collection, collectionName); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Creates new or replaces existing AQL user function with specified name and code. /// </summary> public AResult<bool> Register(string name, string code) { var request = new Request(HttpMethod.POST, ApiBaseUri.AqlFunction, ""); var bodyDocument = new Dictionary<string, object>(); // required bodyDocument.String(ParameterName.Name, name); // required bodyDocument.String(ParameterName.Code, code); // optional Request.TrySetBodyParameter(ParameterName.IsDeterministic, _parameters, bodyDocument); request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); var response = _connection.Send(request); var result = new AResult<bool>(response); switch (response.StatusCode) { case 200: case 201: if (response.DataType == DataType.Document) { result.Success = true; result.Value = true; } break; case 400: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Unregisters specified AQL user function. /// </summary> public AResult<bool> Unregister(string name) { var request = new Request(HttpMethod.DELETE, ApiBaseUri.AqlFunction, "/" + name); // optional request.TrySetQueryStringParameter(ParameterName.Group, _parameters); var response = _connection.Send(request); var result = new AResult<bool>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.Document) { result.Success = true; result.Value = true; } break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves information about currently connected database. /// </summary> public AResult<Dictionary<string, object>> GetCurrent() { var request = new Request(HttpMethod.GET, ApiBaseUri.Database, "/current"); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.Document) { result.Value = (response.Data as Dictionary<string, object>).Document("result"); result.Success = (result.Value != null); } break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Unloads specified collection from memory. /// </summary> public AResult<Dictionary<string, object>> Unload(string collectionName) { var request = new Request(HttpMethod.PUT, ApiBaseUri.Collection, "/" + collectionName + "/unload"); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Loads specified collection into memory. /// </summary> public AResult<Dictionary<string, object>> Load(string collectionName) { var request = new Request(HttpMethod.PUT, ApiBaseUri.Collection, "/" + collectionName + "/load"); if (_parameters.Has(ParameterName.Count)) { var bodyDocument = new Dictionary<string, object>(); // optional Request.TrySetBodyParameter(ParameterName.Count, _parameters, bodyDocument); request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); } var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves information about collections in current database connection. /// </summary> public AResult<List<Dictionary<string, object>>> GetAllCollections() { var request = new Request(HttpMethod.GET, ApiBaseUri.Collection, ""); // optional request.TrySetQueryStringParameter(ParameterName.ExcludeSystem, _parameters); var response = _connection.Send(request); var result = new AResult<List<Dictionary<string, object>>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body.List<Dictionary<string, object>>("collections"); break; case 400: case 403: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Deletes specified database. /// </summary> public AResult<bool> Drop(string databaseName) { var request = new Request(HttpMethod.DELETE, ApiBaseUri.Database, "/" + databaseName); var response = _connection.Send(request); var result = new AResult<bool>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Body<bool>>(); result.Success = (body != null); result.Value = body.Result; break; case 400: case 403: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Creates new database with given name and user list. /// </summary> public AResult<bool> Create(string databaseName, List<AUser> users) { var request = new Request(HttpMethod.POST, ApiBaseUri.Database, ""); var bodyDocument = new Dictionary<string, object>(); // required: database name bodyDocument.String("name", databaseName); // optional: list of users if ((users != null) && (users.Count > 0)) { var userList = new List<Dictionary<string, object>>(); foreach (var user in users) { var userItem = new Dictionary<string, object>(); if (!string.IsNullOrEmpty(user.Username)) { userItem.String("username", user.Username); } if (!string.IsNullOrEmpty(user.Password)) { userItem.String("passwd", user.Password); } userItem.Bool("active", user.Active); if (user.Extra != null) { userItem.Document("extra", user.Extra); } userList.Add(userItem); } bodyDocument.List("users", userList); } request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); var response = _connection.Send(request); var result = new AResult<bool>(response); switch (response.StatusCode) { case 201: var body = response.ParseBody<Body<bool>>(); result.Success = (body != null); result.Value = body.Result; break; case 400: case 403: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves specified index. /// </summary> /// <exception cref="ArgumentException">Specified id value has invalid format.</exception> public AResult<Dictionary<string, object>> Get(string id) { if (!ADocument.IsID(id)) { throw new ArgumentException("Specified id value (" + id + ") has invalid format."); } var request = new Request(HttpMethod.GET, ApiBaseUri.Index, "/" + id); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Unloads specified collection from memory. /// </summary> public AResult<Dictionary<string, object>> Unload(string collectionName) { var request = new Request(HttpMethod.PUT, ApiBaseUri.Collection, "/" + collectionName + "/unload"); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.Document) { result.Value = (response.Data as Dictionary<string, object>); result.Success = (result.Value != null); } break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves list of edges in specified collection. /// </summary> public AResult<List<string>> GetAllEdges(string collectionName) { var request = new Request(HttpMethod.GET, ApiBaseUri.Edge, ""); // required request.QueryString.Add(ParameterName.Collection, collectionName); // optional request.TrySetQueryStringParameter(ParameterName.Type, _parameters); var response = _connection.Send(request); var result = new AResult<List<string>>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.Document) { result.Value = (response.Data as Dictionary<string, object>).List<string>("documents"); result.Success = (result.Value != null); } break; case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves basic information, revision ID and checksum of specified collection. /// </summary> public AResult<Dictionary<string, object>> GetChecksum(string collectionName) { var request = new Request(HttpMethod.GET, ApiBaseUri.Collection, "/" + collectionName + "/checksum"); // optional request.TrySetQueryStringParameter(ParameterName.WithRevisions, _parameters); // optional request.TrySetQueryStringParameter(ParameterName.WithData, _parameters); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Retrieves information about currently connected database. /// </summary> public AResult<Dictionary<string, object>> GetCurrent() { var request = new Request(HttpMethod.GET, ApiBaseUri.Database, "/current"); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Body<Dictionary<string, object>>>(); result.Success = (body != null); result.Value = body.Result; break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Creates index within specified collection in current database context. /// </summary> public AResult<Dictionary<string, object>> Create(string collectionName) { var request = new Request(HttpMethod.POST, ApiBaseUri.Index, ""); var bodyDocument = new Dictionary<string, object>(); // required request.QueryString.Add(ParameterName.Collection, collectionName); // required bodyDocument.String(ParameterName.Type, _parameters.String(ParameterName.Type)); switch (_parameters.Enum<AIndexType>(ParameterName.Type)) { case AIndexType.Cap: Request.TrySetBodyParameter(ParameterName.ByteSize, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.Size, _parameters, bodyDocument); break; case AIndexType.Fulltext: Request.TrySetBodyParameter(ParameterName.Fields, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.MinLength, _parameters, bodyDocument); break; case AIndexType.Geo: Request.TrySetBodyParameter(ParameterName.Fields, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.GeoJson, _parameters, bodyDocument); break; case AIndexType.Hash: Request.TrySetBodyParameter(ParameterName.Fields, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.Sparse, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.Unique, _parameters, bodyDocument); break; case AIndexType.Skiplist: Request.TrySetBodyParameter(ParameterName.Fields, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.Sparse, _parameters, bodyDocument); Request.TrySetBodyParameter(ParameterName.Unique, _parameters, bodyDocument); break; default: break; } request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: case 201: if (response.DataType == DataType.Document) { result.Value = (response.Data as Dictionary<string, object>); result.Success = (result.Value != null); } break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Renames specified collection. /// </summary> public AResult<Dictionary<string, object>> Rename(string collectionName, string newCollectionName) { var request = new Request(HttpMethod.PUT, ApiBaseUri.Collection, "/" + collectionName + "/rename"); var bodyDocument = new Dictionary<string, object>() .String(ParameterName.Name, newCollectionName); request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Deletes specified index. /// </summary> /// <exception cref="ArgumentException">Specified id value has invalid format.</exception> public AResult<Dictionary<string, object>> Delete(string id) { if (!ADocument.IsID(id)) { throw new ArgumentException("Specified id value (" + id + ") has invalid format."); } var request = new Request(HttpMethod.DELETE, ApiBaseUri.Index, "/" + id); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.Document) { result.Value = (response.Data as Dictionary<string, object>); result.Success = (result.Value != null); } break; case 400: case 404: default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Creates new collection in current database context. /// </summary> public AResult<Dictionary<string, object>> Create(string collectionName) { var request = new Request(HttpMethod.POST, ApiBaseUri.Collection, ""); var bodyDocument = new Dictionary<string, object>(); // required bodyDocument.String(ParameterName.Name, collectionName); // optional Request.TrySetBodyParameter(ParameterName.Type, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.WaitForSync, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.JournalSize, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.DoCompact, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.IsSystem, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.IsVolatile, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.KeyOptionsType, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.KeyOptionsAllowUserKeys, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.KeyOptionsIncrement, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.KeyOptionsOffset, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.NumberOfShards, _parameters, bodyDocument); // optional Request.TrySetBodyParameter(ParameterName.ShardKeys, _parameters, bodyDocument); request.Body = JSON.ToJSON(bodyDocument, ASettings.JsonParameters); var response = _connection.Send(request); var result = new AResult<Dictionary<string, object>>(response); switch (response.StatusCode) { case 200: var body = response.ParseBody<Dictionary<string, object>>(); result.Success = (body != null); result.Value = body; break; default: // Arango error break; } _parameters.Clear(); return result; }
/// <summary> /// Deletes specified database. /// </summary> public AResult<bool> Drop(string databaseName) { var request = new Request(HttpMethod.DELETE, ApiBaseUri.Database, "/" + databaseName); var response = _connection.Send(request); var result = new AResult<bool>(response); switch (response.StatusCode) { case 200: if (response.DataType == DataType.Document) { result.Value = (response.Data as Dictionary<string, object>).Bool("result"); result.Success = result.Value; } break; case 400: case 403: case 404: default: // Arango error break; } _parameters.Clear(); return result; }