protected override string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys) { keys = null; string clause = visitor.WhereClause; viewName = visitor.ViewName; CouchbaseQueryTranslator translator = new CouchbaseQueryTranslator(); if (this._parentQuery.ParentFolder != null) { var folderName = visitor.MakeValue(this._parentQuery.ParentFolder.FullName); clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"FolderName\\\"]", folderName); viewName = string.Format("FolderName_EQ_{0}_", visitor.AsViewNameString(this._parentQuery.ParentFolder.FullName)) + viewName; } var children = ((IEnumerable <TextContent>)(translator.Translate(this._parentQuery.ChildrenQuery)).Execute()).ToList(); if (children.Count() > 0) { keys = children.Select(it => it.ParentUUID).ToArray(); } else { keys = new string[0]; } return(clause); }
public string BuildView(CouchbaseVisitor visitor, string designName, out string viewName, out string[] keys) { StringBuilder viewBuilder = new StringBuilder(); string viewBody = BuildViewBody(visitor, out viewName, out keys); viewBuilder.Append("{\"views\":{"); viewBuilder.Append("\""); viewBuilder.Append(viewName); viewBuilder.Append("\":"); viewBuilder.Append("{"); viewBuilder.Append("\"map\":"); viewBuilder.Append("\"function(doc,meta){"); viewBuilder.Append(viewBody); viewBuilder.Append("}\""); viewBuilder.Append("}"); viewBuilder.Append("}"); viewBuilder.Append("}"); //viewBuilder.Append("},"); //viewBuilder.Append("\"options\": {\"updateMinChanges\": 1000}}"); // viewBuilder.AppendFormat(@"{{""views"": {{{0}:{{""map"":""function(doc,meta){{{1}}}""}}}},""options"": {{""updateMinChanges"": 1}}}}", viewName,viewBody); return(viewBuilder.ToString() .Replace(" ", "") .Replace("\r", "") .Replace("\n", "")); }
protected override string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys) { CouchbaseQueryTranslator translator = new CouchbaseQueryTranslator(); string clause = visitor.WhereClause; viewName = visitor.ViewName; if (this._categoriesQuery.CategoryFolder != null) { var folderName = visitor.MakeValue(this._categoriesQuery.CategoryFolder.FullName); clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"FolderName\\\"]", folderName); viewName = string.Format("FolderName_EQ_{0}_", visitor.AsViewNameString(this._categoriesQuery.CategoryFolder.FullName)) + viewName; } keys = null; var subQuery = translator.Translate(this._categoriesQuery.InnerQuery); var contents = ((IEnumerable <TextContent>)subQuery.Execute()).ToList(); if (contents.Count() > 0) { var uuids = contents.Select(it => it.UUID); keys = uuids.SelectMany(it => QueryCategories(this._categoriesQuery.Repository, it)).ToArray(); } else { keys = new string[0]; } return(clause); }
private object QueryByUUID(CouchbaseVisitor visitor) { object result = null; var getResult = this.ContentQuery.Repository.GetClient().ExecuteGet(visitor.EQUUIDs); switch (visitor.CallType) { case Kooboo.CMS.Content.Query.Expressions.CallType.Count: result = getResult.Count; break; case Kooboo.CMS.Content.Query.Expressions.CallType.First: result = getResult.Values.First().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.Last: result = getResult.Values.Last().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault: result = getResult.Count == 0 ? null : getResult.Values.Last().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault: result = getResult.Count == 0 ? null : getResult.Values.First().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified: default: result = getResult.Values.Select(it => it.ToContent()); break; } return(result); }
public string BuildView(CouchbaseVisitor visitor, string designName, out string viewName, out string[] keys) { StringBuilder viewBuilder = new StringBuilder(); string viewBody = BuildViewBody(visitor, out viewName, out keys); viewBuilder.Append("{\"views\":{"); viewBuilder.Append("\""); viewBuilder.Append(viewName); viewBuilder.Append("\":"); viewBuilder.Append("{"); viewBuilder.Append("\"map\":"); viewBuilder.Append("\"function(doc,meta){"); viewBuilder.Append(viewBody); viewBuilder.Append("}\""); viewBuilder.Append("}"); viewBuilder.Append("}"); viewBuilder.Append("}"); //viewBuilder.Append("},"); //viewBuilder.Append("\"options\": {\"updateMinChanges\": 1000}}"); // viewBuilder.AppendFormat(@"{{""views"": {{{0}:{{""map"":""function(doc,meta){{{1}}}""}}}},""options"": {{""updateMinChanges"": 1}}}}", viewName,viewBody); return viewBuilder.ToString() .Replace(" ", "") .Replace("\r", "") .Replace("\n", ""); }
protected override string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys) { keys = null; string clause = visitor.WhereClause; viewName = visitor.ViewName; CouchbaseQueryTranslator translator = new CouchbaseQueryTranslator(); if (this._childrenQuery.EmbeddedFolder != null) { var folderName = visitor.MakeValue(this._childrenQuery.EmbeddedFolder.FullName); clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"FolderName\\\"]", folderName); viewName = string.Format("FolderName_EQ_{0}_", visitor.AsViewNameString(this._childrenQuery.EmbeddedFolder.FullName)) + viewName; } var parents = ((IEnumerable<TextContent>)(translator.Translate(this._childrenQuery.ParentQuery)).Execute()).ToList(); if (parents.Count() > 0) { keys = parents.SelectMany(it => QueryChildren(this.ContentQuery.Repository, it.UUID)).ToArray(); } else { keys = new string[0]; } return clause; }
protected override string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys) { CouchbaseQueryTranslator translator = new CouchbaseQueryTranslator(); string clause = visitor.WhereClause; viewName = visitor.ViewName; if (this._categoriesQuery.CategoryFolder != null) { var folderName = visitor.MakeValue(this._categoriesQuery.CategoryFolder.FullName); clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"FolderName\\\"]", folderName); viewName = string.Format("FolderName_EQ_{0}_", visitor.AsViewNameString(this._categoriesQuery.CategoryFolder.FullName)) + viewName; } keys = null; var subQuery = translator.Translate(this._categoriesQuery.InnerQuery); var contents = ((IEnumerable<TextContent>)subQuery.Execute()).ToList(); if (contents.Count() > 0) { var uuids = contents.Select(it => it.UUID); keys = uuids.SelectMany(it => QueryCategories(this._categoriesQuery.Repository, it)).ToArray(); } else { keys = new string[0]; } return clause; }
private object QueryByUserKey(CouchbaseVisitor visitor) { var view = this.ContentQuery.Repository.GetClient().GetView(this.ContentQuery.Repository.GetDefaultViewDesign(), "Sort_By_UserKey").Reduce(false).Stale(StaleMode.False); view = view.Keys(visitor.EQUserKeys); return(ExecuteView(visitor, view)); }
public void Test_Visit_Where_In() { var whereIn = new WhereInExpression(null, "UUID", new[] { "value1" }); CouchbaseVisitor visitor = new CouchbaseVisitor(); visitor.Visite(whereIn); Console.WriteLine(visitor.ViewName); Console.WriteLine(visitor.WhereClause); Console.WriteLine(visitor.EQUUIDs.First()); }
private object QueryByView(CouchbaseVisitor visitor) { //create view var designName = string.Empty;//"__TempViews__"; var viewName = string.Empty; string[] keys; string viewDocument = this.BuildView(visitor, designName, out viewName, out keys); designName = viewName; if (keys != null && keys.Length == 0) { return(DefaultValueExecute(visitor.CallType)); } IView <IViewRow> couchbaseCursor = null; couchbaseCursor = this.ContentQuery.Repository.GetClient().GetView(designName, viewName); var cacheKey = string.Format("{0}---{1}/{2}", this.ContentQuery.Repository.Name, designName, viewName); var viewIsExists = viewNamesCache.ContainsKey(cacheKey); if (!viewIsExists) { viewIsExists = couchbaseCursor.CheckExists(); if (!viewIsExists) { viewIsExists = DatabaseHelper.CreateDesignDocument(this.ContentQuery.Repository.GetBucketName(), designName, viewDocument); if (viewIsExists) { viewNamesCache[cacheKey] = cacheKey; } } else { viewNamesCache[cacheKey] = cacheKey; } } couchbaseCursor = couchbaseCursor.Reduce(false).Stale(StaleMode.False); if (keys != null && keys.Length > 0) { couchbaseCursor.Keys(keys); } if (viewIsExists) { return(ExecuteView(visitor, couchbaseCursor)); } else { throw new Exception("The view creation failed."); } }
private CouchbaseVisitor VisitInner(IExpression expression) { CouchbaseVisitor visitor = new CouchbaseVisitor(); visitor.Visite(expression); //combine the order expressions. this.OrderFields.AddRange(visitor.OrderFields); this.CategoryQueries = this.CategoryQueries.Concat(visitor.CategoryQueries); return(visitor); }
private object ExecuteView(CouchbaseVisitor visitor, IView <IViewRow> couchbaseCursor) { object result = null; if (couchbaseCursor == null) { return(DefaultValueExecute(visitor.CallType)); } if (visitor.OrderClause != null) { couchbaseCursor.Descending(visitor.OrderClause.Descending); } if (visitor.Skip != 0) { couchbaseCursor = couchbaseCursor.Skip(visitor.Skip); } if (visitor.Take != 0) { couchbaseCursor = couchbaseCursor.Limit(visitor.Take); } switch (visitor.CallType) { case Kooboo.CMS.Content.Query.Expressions.CallType.Count: result = couchbaseCursor.Count(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.First: return(ViewRowToTextContent(couchbaseCursor.First())); case Kooboo.CMS.Content.Query.Expressions.CallType.Last: return(ViewRowToTextContent(couchbaseCursor.Last())); case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault: return(ViewRowToTextContent(couchbaseCursor.LastOrDefault())); case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault: return(ViewRowToTextContent(couchbaseCursor.FirstOrDefault())); case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified: default: var uuidList = couchbaseCursor.Select(it => GetUUID(it)).ToArray(); return(this.ContentQuery.Repository.GetClient().ExecuteGet(uuidList).Select(it => it.Value.ToContent())); } return(result); }
protected override string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys) { string clause = visitor.WhereClause; viewName = visitor.ViewName; if (this._textContentQuery.Folder != null) { var folderName = visitor.MakeValue(this._textContentQuery.Folder.FullName); clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"FolderName\\\"]", folderName); viewName = string.Format("FolderName_EQ_{0}_", visitor.AsViewNameString(this._textContentQuery.Folder.FullName)) + viewName; } else if (this._textContentQuery.Schema != null) { clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"SchemaName\\\"]", visitor.MakeValue(this._textContentQuery.Schema.Name)); viewName = string.Format("SchemaName_EQ_{0}_", visitor.AsViewNameString(this._textContentQuery.Schema.Name)) + viewName; } keys = null; IEnumerable <string> categoryContents = new string[0]; if (visitor.CategoryQueries != null && visitor.CategoryQueries.Count() > 0) { CouchbaseQueryTranslator translator = new CouchbaseQueryTranslator(); //TODO foreach (var item in visitor.CategoryQueries) { var categories = ((IEnumerable <TextContent>)translator.Translate(item).Execute()).ToArray(); if (categories.Length > 0) { var categoryUUIDs = categories.SelectMany(it => QueryByCategory(this._textContentQuery.Repository, it.UUID)).ToArray(); categoryContents = categoryContents.Concat(categoryUUIDs); } } keys = categoryContents.Distinct().ToArray(); } return(clause); }
protected override string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys) { string clause = visitor.WhereClause; viewName = visitor.ViewName; if (this._textContentQuery.Folder != null) { var folderName = visitor.MakeValue(this._textContentQuery.Folder.FullName); clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"FolderName\\\"]", folderName); viewName = string.Format("FolderName_EQ_{0}_", visitor.AsViewNameString(this._textContentQuery.Folder.FullName)) + viewName; } else if (this._textContentQuery.Schema != null) { clause += string.Format("{0}({1}=={2})", string.IsNullOrEmpty(clause) ? string.Empty : "&&", "doc[\\\"SchemaName\\\"]", visitor.MakeValue(this._textContentQuery.Schema.Name)); viewName = string.Format("SchemaName_EQ_{0}_", visitor.AsViewNameString(this._textContentQuery.Schema.Name)) + viewName; } keys = null; IEnumerable<string> categoryContents = new string[0]; if (visitor.CategoryQueries != null && visitor.CategoryQueries.Count() > 0) { CouchbaseQueryTranslator translator = new CouchbaseQueryTranslator(); //TODO foreach (var item in visitor.CategoryQueries) { var categories = ((IEnumerable<TextContent>)translator.Translate(item).Execute()).ToArray(); if (categories.Length > 0) { var categoryUUIDs = categories.SelectMany(it => QueryByCategory(this._textContentQuery.Repository, it.UUID)).ToArray(); categoryContents = categoryContents.Concat(categoryUUIDs); } } keys = categoryContents.Distinct().ToArray(); } return clause; }
protected virtual string BuildViewBody(CouchbaseVisitor visitor, out string viewName, out string[] keys) { StringBuilder viewBody = new StringBuilder(); var clause = BuildIfClause(visitor, out viewName, out keys); string keyExpression = "doc.UUID"; if (visitor.OrderClause != null && (keys == null || keys.Length == 0)) { keyExpression = "[doc." + visitor.OrderClause.FieldName + "," + keyExpression + "]"; viewName = viewName + "_ORDERBY_" + visitor.OrderClause.FieldName; } viewBody.Append(string.IsNullOrEmpty(clause) ? string.Empty : "if(") .Append(clause) .Append(string.IsNullOrEmpty(clause) ? string.Empty : ")") .AppendFormat("emit({0},{{UUID:doc.UUID}});", keyExpression); return viewBody.ToString(); }
protected virtual string BuildViewBody(CouchbaseVisitor visitor, out string viewName, out string[] keys) { StringBuilder viewBody = new StringBuilder(); var clause = BuildIfClause(visitor, out viewName, out keys); string keyExpression = "doc.UUID"; if (visitor.OrderClause != null && (keys == null || keys.Length == 0)) { keyExpression = "[doc." + visitor.OrderClause.FieldName + "," + keyExpression + "]"; viewName = viewName + "_ORDERBY_" + visitor.OrderClause.FieldName; } viewBody.Append(string.IsNullOrEmpty(clause) ? string.Empty : "if(") .Append(clause) .Append(string.IsNullOrEmpty(clause) ? string.Empty : ")") .AppendFormat("emit({0},{{UUID:doc.UUID}});", keyExpression); return(viewBody.ToString()); }
public virtual object Execute() { var visitor = new CouchbaseVisitor(); visitor.Visite(ContentQuery.Expression); if (string.IsNullOrEmpty(visitor.ViewName) && visitor.EQUUIDs.Count() > 0) { return(QueryByUUID(visitor)); } else if (string.IsNullOrEmpty(visitor.ViewName) && visitor.EQUserKeys.Count() > 0) { return(QueryByUserKey(visitor)); } else { return(QueryByView(visitor)); } }
public virtual object Execute() { var visitor = new CouchbaseVisitor(); visitor.Visite(ContentQuery.Expression); if (string.IsNullOrEmpty(visitor.ViewName) && visitor.EQUUIDs.Count() > 0) { return QueryByUUID(visitor); } else if (string.IsNullOrEmpty(visitor.ViewName) && visitor.EQUserKeys.Count() > 0) { return QueryByUserKey(visitor); } else { return QueryByView(visitor); } }
protected abstract string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys);
private object ExecuteView(CouchbaseVisitor visitor, IView<IViewRow> couchbaseCursor) { object result = null; if (couchbaseCursor == null) { return DefaultValueExecute(visitor.CallType); } if (visitor.OrderClause != null) { couchbaseCursor.Descending(visitor.OrderClause.Descending); } if (visitor.Skip != 0) { couchbaseCursor = couchbaseCursor.Skip(visitor.Skip); } if (visitor.Take != 0) { couchbaseCursor = couchbaseCursor.Limit(visitor.Take); } switch (visitor.CallType) { case Kooboo.CMS.Content.Query.Expressions.CallType.Count: result = couchbaseCursor.Count(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.First: return ViewRowToTextContent(couchbaseCursor.First()); case Kooboo.CMS.Content.Query.Expressions.CallType.Last: return ViewRowToTextContent(couchbaseCursor.Last()); case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault: return ViewRowToTextContent(couchbaseCursor.LastOrDefault()); case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault: return ViewRowToTextContent(couchbaseCursor.FirstOrDefault()); case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified: default: var uuidList = couchbaseCursor.Select(it => GetUUID(it)).ToArray(); return this.ContentQuery.Repository.GetClient().ExecuteGet(uuidList).Select(it => it.Value.ToContent()); } return result; }
private object QueryByView(CouchbaseVisitor visitor) { //create view var designName = string.Empty;//"__TempViews__"; var viewName = string.Empty; string[] keys; string viewDocument = this.BuildView(visitor, designName, out viewName, out keys); designName = viewName; if (keys != null && keys.Length == 0) { return DefaultValueExecute(visitor.CallType); } IView<IViewRow> couchbaseCursor = null; couchbaseCursor = this.ContentQuery.Repository.GetClient().GetView(designName, viewName); var cacheKey = string.Format("{0}---{1}/{2}", this.ContentQuery.Repository.Name, designName, viewName); var viewIsExists = viewNamesCache.ContainsKey(cacheKey); if (!viewIsExists) { viewIsExists = couchbaseCursor.CheckExists(); if (!viewIsExists) { viewIsExists = DatabaseHelper.CreateDesignDocument(this.ContentQuery.Repository.GetBucketName(), designName, viewDocument); if (viewIsExists) { viewNamesCache[cacheKey] = cacheKey; } } else { viewNamesCache[cacheKey] = cacheKey; } } couchbaseCursor = couchbaseCursor.Reduce(false).Stale(StaleMode.False); if (keys != null && keys.Length > 0) { couchbaseCursor.Keys(keys); } if (viewIsExists) { return ExecuteView(visitor, couchbaseCursor); } else { throw new Exception("The view creation failed."); } }
private object QueryByUserKey(CouchbaseVisitor visitor) { var view = this.ContentQuery.Repository.GetClient().GetView(this.ContentQuery.Repository.GetDefaultViewDesign(), "Sort_By_UserKey").Reduce(false).Stale(StaleMode.False); view = view.Keys(visitor.EQUserKeys); return ExecuteView(visitor, view); }
private object QueryByUUID(CouchbaseVisitor visitor) { object result = null; var getResult = this.ContentQuery.Repository.GetClient().ExecuteGet(visitor.EQUUIDs); switch (visitor.CallType) { case Kooboo.CMS.Content.Query.Expressions.CallType.Count: result = getResult.Count; break; case Kooboo.CMS.Content.Query.Expressions.CallType.First: result = getResult.Values.First().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.Last: result = getResult.Values.Last().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault: result = getResult.Count == 0 ? null : getResult.Values.Last().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault: result = getResult.Count == 0 ? null : getResult.Values.First().ToContent(); break; case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified: default: result = getResult.Values.Select(it => it.ToContent()); break; } return result; }
protected abstract string BuildIfClause(CouchbaseVisitor visitor, out string viewName, out string[] keys);
private CouchbaseVisitor VisitInner(IExpression expression) { CouchbaseVisitor visitor = new CouchbaseVisitor(); visitor.Visite(expression); //combine the order expressions. this.OrderFields.AddRange(visitor.OrderFields); this.CategoryQueries = this.CategoryQueries.Concat(visitor.CategoryQueries); return visitor; }