Exemple #1
0
        /// <summary>
        /// Query anything that does not return any results
        /// </summary>
        /// <param name="query"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        protected CollectionValue Execute(ICompiledQuery query, CollectionValue result) {
            if (this.Connection != null && this.Connection.State == ConnectionState.Open) {
                using (IDbCommand command = this.Connection.CreateCommand()) {
                    command.CommandText = query.Compiled.FirstOrDefault();

                    result.Add(new Affected() {
                        new NumericValue() {
                            Long = command.ExecuteNonQuery()
                        }
                    });
                }
            }

            return result;
        }
Exemple #2
0
        /// <summary>
        /// Query a SELECT statement which returns results
        /// </summary>
        /// <param name="query"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        protected CollectionValue Read(ICompiledQuery query, CollectionValue result) {
            if (this.Connection != null && this.Connection.State == ConnectionState.Open) {
                using (IDbCommand command = this.Connection.CreateCommand()) {
                    command.CommandText = query.Compiled.FirstOrDefault();

                    using (IDataReader reader = command.ExecuteReader()) {
                        if (reader != null) {
                            while (reader.Read() == true) {
                                DocumentValue row = new DocumentValue();

                                for (int field = 0; field < reader.FieldCount; field++) {
                                    row.Set(reader.GetName(field), reader.GetValue(field));
                                }

                                result.Add(row);
                            }
                        }
                    }
                }
            }

            return result;
        }
Exemple #3
0
        /// <summary>
        /// find and update, with upsert.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="result"></param>
        protected void QueryMerge(ICompiledQuery query, CollectionValue result) {
            MongoCollection<BsonDocument> collection = this.Database.GetCollection(query.Collections.FirstOrDefault());

            ICompiledQuery save = query.Children.FirstOrDefault(child => child.Root is Save);
            ICompiledQuery modify = query.Children.FirstOrDefault(child => child.Root is Modify);

            if (save != null && modify != null) {
                BsonArray conditions = BsonSerializer.Deserialize<BsonArray>(modify.Conditions.FirstOrDefault());
                BsonArray assignments = BsonSerializer.Deserialize<BsonArray>(save.Assignments.FirstOrDefault());
                BsonArray sortings = BsonSerializer.Deserialize<BsonArray>(modify.Sortings.FirstOrDefault());

                QueryDocument queryDocument = new QueryDocument(conditions.First().AsBsonDocument);
                IMongoSortBy sortByDocument = new SortByDocument(sortings.First().AsBsonDocument);
                UpdateDocument updateDocument = new UpdateDocument(assignments.First().AsBsonDocument);

                FindAndModifyResult findAndModifyResult = collection.FindAndModify(queryDocument, sortByDocument, updateDocument, true, true);

                result.Add(this.ToDocument(findAndModifyResult.ModifiedDocument));
            }
        }
Exemple #4
0
        /// <summary>
        /// Drops a database or collection
        /// </summary>
        /// <param name="query"></param>
        /// <param name="result"></param>
        protected void QueryDrop(ICompiledQuery query, CollectionValue result) {
            if (query.Databases.Any() == true && this.Database.Name == query.Databases.FirstOrDefault()) {
                this.Database.Drop();

                result.Add(
                    new Affected() {
                        new NumericValue() {
                            Long = 1
                        }
                    }
                );
            }
            else {
                MongoCollection<BsonDocument> collection = this.Database.GetCollection(query.Collections.FirstOrDefault());

                CommandResult commandResult = collection.Drop();

                result.Add(
                    new Affected() {
                        new NumericValue() {
                            Long = commandResult.Ok == true ? 1 : 0
                        }
                    }
                );
            }
        }
Exemple #5
0
        /// <summary>
        /// Query to remove documents from a collection.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="result"></param>
        protected void QueryRemove(ICompiledQuery query, CollectionValue result) {
            MongoCollection<BsonDocument> collection = this.Database.GetCollection(query.Collections.FirstOrDefault());

            BsonArray conditions = BsonSerializer.Deserialize<BsonArray>(query.Conditions.FirstOrDefault());

            WriteConcernResult writeConcernResult = collection.Remove(new QueryDocument(conditions.First().AsBsonDocument));

            result.Add(
                new Affected() {
                    new NumericValue() {
                        Long = (int)writeConcernResult.DocumentsAffected
                    }
                }
            );
        }
Exemple #6
0
        /// <summary>
        /// Modify all documents that match a query
        /// </summary>
        /// <param name="query"></param>
        /// <param name="result"></param>
        protected void QueryModify(ICompiledQuery query, CollectionValue result) {
            MongoCollection<BsonDocument> collection = this.Database.GetCollection(query.Collections.FirstOrDefault());

            BsonArray conditions = BsonSerializer.Deserialize<BsonArray>(query.Conditions.FirstOrDefault());
            BsonArray assignments = BsonSerializer.Deserialize<BsonArray>(query.Assignments.FirstOrDefault());

            QueryDocument queryDocument = new QueryDocument(conditions.First().AsBsonDocument);
            UpdateDocument updateDocument = new UpdateDocument(assignments.First().AsBsonDocument);

            WriteConcernResult writeConcernResult = collection.Update(queryDocument, updateDocument, UpdateFlags.Multi);

            result.Add(
                new Affected() {
                    new NumericValue() {
                        Long = (int)writeConcernResult.DocumentsAffected
                    }
                }
            );
        }