public void Test_GroupByAfterJoin() { var mockBucket = new Mock <IBucket>(); mockBucket.SetupGet(e => e.Name).Returns("default"); var query = from beer in QueryFactory.Queryable <Beer>(mockBucket.Object) join brewery in QueryFactory.Queryable <Brewery>(mockBucket.Object) on beer.BreweryId equals N1QlFunctions.Key(brewery) group beer by brewery.Name into g select new { breweryName = g.Key, avgAbv = g.Average(p => p.Abv) }; const string expected = "SELECT `Extent2`.`name` as `breweryName`, AVG(`Extent1`.`abv`) as `avgAbv` " + "FROM `default` as `Extent1` " + "INNER JOIN `default` as `Extent2` ON (`Extent1`.`brewery_id` = META(`Extent2`).id) " + "GROUP BY `Extent2`.`name`"; var n1QlQuery = CreateN1QlQuery(mockBucket.Object, query.Expression); Assert.AreEqual(expected, n1QlQuery); }
public void Test_InnerJoin_SortAndFilter() { var mockBucket = new Mock <IBucket>(); mockBucket.SetupGet(e => e.Name).Returns("default"); var query = from beer in QueryFactory.Queryable <Beer>(mockBucket.Object) join brewery in QueryFactory.Queryable <Brewery>(mockBucket.Object) on beer.BreweryId equals N1QlFunctions.Key(brewery) where brewery.Geo.Longitude > -80 orderby beer.Name select new { beer.Name, beer.Abv, BreweryName = brewery.Name }; const string expected = "SELECT `Extent1`.`name` as `Name`, `Extent1`.`abv` as `Abv`, `Extent2`.`name` as `BreweryName` " + "FROM `default` as `Extent1` " + "INNER JOIN `default` as `Extent2` " + "ON KEYS `Extent1`.`brewery_id` " + "WHERE (`Extent2`.`geo`.`lon` > -80) " + "ORDER BY `Extent1`.`name` ASC"; var n1QlQuery = CreateN1QlQuery(mockBucket.Object, query.Expression); Assert.AreEqual(expected, n1QlQuery); }
public IFetchedJob Dequeue(string[] queues, CancellationToken cancellationToken) { lock (syncLock) { while (true) { cancellationToken.ThrowIfCancellationRequested(); int invisibilityTimeoutEpoch = DateTime.UtcNow.Add(invisibilityTimeout.Negate()).ToEpoch(); logger.Trace("Looking for any jobs from the queue"); using (new CouchbaseDistributedLock(DISTRIBUTED_LOCK_KEY, defaultLockTimeout, storage)) { using (IBucket bucket = storage.Client.OpenBucket(storage.Options.DefaultBucket)) { BucketContext context = new BucketContext(bucket); Documents.Queue data = context.Query <Documents.Queue>() .Where(q => q.DocumentType == DocumentTypes.Queue && queues.Contains(q.Name) && (N1QlFunctions.IsMissing(q.FetchedAt) || q.FetchedAt < invisibilityTimeoutEpoch)) .OrderBy(q => q.CreatedOn) .FirstOrDefault(); if (data != null) { IDocumentFragment <Documents.Queue> result = bucket.MutateIn <Documents.Queue>(data.Id) .Upsert(q => q.FetchedAt, DateTime.UtcNow.ToEpoch(), true) .Execute(); if (result.Success) { logger.Trace($"Found job {data.JobId} from the queue {data.Name}"); return(new FetchedJob(storage, data)); } } } } logger.Trace($"Unable to find any jobs in the queue. Will check the queue for jobs in {storage.Options.QueuePollInterval.TotalSeconds} seconds"); cancellationToken.WaitHandle.WaitOne(storage.Options.QueuePollInterval); } } }
public void AggregateTests_JoinBeforeGroupByAndMultipartKey() { using (var cluster = new Cluster(TestConfigurations.DefaultConfig())) { using (var bucket = cluster.OpenBucket("beer-sample")) { var context = new BucketContext(bucket); var breweries = from beer in context.Query <Beer>() join brewery in context.Query <Brewery>() on beer.BreweryId equals N1QlFunctions.Key(brewery) where beer.Type == "beer" group beer by new { breweryid = beer.BreweryId, breweryName = brewery.Name } into g select new { g.Key.breweryName, count = g.Count(), avgAbv = g.Average(p => p.Abv) }; foreach (var brewery in breweries) { Console.WriteLine("Brewery {0} has {1} beers with {2:f2} average ABV", brewery.breweryName, brewery.count, brewery.avgAbv); } } } }
public ActionResult Join() { var db = new BucketContext(ClusterHelper.GetBucket("travel-sample")); // To join between documents, at least on side of the equality must be N1QlFunctions.Key(x) // Prior to Couchbase Server 4.5, this must be the right side // After 4.5, this can be the left side assuming a proper index is available for the right side var query = from route in db.Query <Route>() join airline in db.Query <Airline>() on route.AirlineId equals N1QlFunctions.Key(airline) where route.SourceAirport == "ATL" && route.DestinationAirport == "ABE" orderby airline.Name, route.Stops select new RouteModel { AirlineName = airline.Name, Stops = route.Stops, Schedule = route.Schedule.ToList() }; return(View(query)); }